From a8bec3ed22c009b943f46d09be1a47850c5a38f8 Mon Sep 17 00:00:00 2001 From: GigabiteStudios Date: Thu, 18 Jun 2026 23:03:20 -0500 Subject: [PATCH] feat(ui): refine graph, viewer, and repository workflows --- CMakeLists.txt | 1 + src/managers/git_manager.cpp | 103 +- src/managers/git_manager.h | 7 +- src/managers/user_data.cpp | 25 +- src/managers/user_data.h | 8 + src/managers/window_manager.cpp | 254 +++- src/managers/window_manager.h | 30 + src/ui/diff_viewer.cpp | 347 ++++-- src/ui/diff_viewer.h | 6 +- src/ui/gitree_ui.cpp | 1561 +++++++++++++++++++------ src/ui/graph_renderer.cpp | 167 ++- vendor/fonts/Inter-Regular.ttf | Bin 0 -> 341920 bytes vendor/fonts/Inter-SemiBold.ttf | Bin 0 -> 343196 bytes vendor/fonts/tabler-icons-outline.ttf | Bin 2208 -> 19596 bytes vendor/icons/IconsTabler.h | 59 + 15 files changed, 2063 insertions(+), 505 deletions(-) create mode 100644 vendor/fonts/Inter-Regular.ttf create mode 100644 vendor/fonts/Inter-SemiBold.ttf create mode 100644 vendor/icons/IconsTabler.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 75afaa9..62ab751 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,6 +81,7 @@ target_link_libraries(gitree PRIVATE imgui libgit2package iZo::izo ikv::ikv Open target_compile_definitions(gitree PRIVATE GITREE_VERSION="${PROJECT_VERSION}" GITREE_ASSET_DIR="${CMAKE_CURRENT_SOURCE_DIR}/vendor/fonts" + GITREE_IMAGE_ASSET_DIR="${CMAKE_CURRENT_SOURCE_DIR}/assets" $<$:NOMINMAX;WIN32_LEAN_AND_MEAN> ) diff --git a/src/managers/git_manager.cpp b/src/managers/git_manager.cpp index 00b8a62..166b59a 100644 --- a/src/managers/git_manager.cpp +++ b/src/managers/git_manager.cpp @@ -179,7 +179,14 @@ void GitManager::readBranches(RepositoryView &repository, git_branch_t type, { const char *name = nullptr; if (git_branch_name(&name, reference) == 0 && name) + { + if (type == GIT_BRANCH_REMOTE && std::string_view(name).ends_with("/HEAD")) + { + git_reference_free(reference); + continue; + } output.emplace_back(name); + } git_reference_free(reference); } git_branch_iterator_free(iterator); @@ -297,23 +304,21 @@ void GitManager::computeGraphLanes(RepositoryView &repository) struct Lane { git_oid expected{}; - int color = 0; }; std::vector lanes; - int next_color = 0; for (auto &commit : repository.commits) { auto current = std::find_if(lanes.begin(), lanes.end(), [&commit](const Lane &lane) { return git_oid_equal(&lane.expected, &commit.oid) != 0; }); if (current == lanes.end()) { - lanes.push_back({commit.oid, next_color++}); + lanes.push_back({commit.oid}); current = std::prev(lanes.end()); } const size_t commit_lane = static_cast(std::distance(lanes.begin(), current)); size_t active_lane = commit_lane; commit.lane = static_cast(commit_lane); - commit.graph_color = current->color; + commit.graph_color = commit.lane; for (size_t duplicate = lanes.size(); duplicate-- > 0;) { if (duplicate != active_lane && @@ -347,7 +352,7 @@ void GitManager::computeGraphLanes(RepositoryView &repository) if (found == lanes.end()) lanes.insert(lanes.begin() + static_cast( std::min(active_lane + parent, lanes.size())), - {commit.parent_ids[parent], next_color++}); + {commit.parent_ids[parent]}); } } } @@ -571,10 +576,15 @@ bool GitManager::openRepository(RepositoryView &repository, const std::string &p return loadRepositoryData(repository, error); } -bool GitManager::initializeRepository(RepositoryView &repository, const std::string &path, std::string &error) +bool GitManager::initializeRepository(RepositoryView &repository, const std::string &path, + const std::string &initial_branch, std::string &error) { git_repository *created = nullptr; - if (git_repository_init(&created, path.c_str(), 0) != 0) + git_repository_init_options options{}; + git_repository_init_options_init(&options, GIT_REPOSITORY_INIT_OPTIONS_VERSION); + options.flags = GIT_REPOSITORY_INIT_MKPATH; + options.initial_head = initial_branch.empty() ? "main" : initial_branch.c_str(); + if (git_repository_init_ext(&created, path.c_str(), &options) != 0) { error = lastError("Unable to initialize repository"); return false; @@ -583,6 +593,24 @@ bool GitManager::initializeRepository(RepositoryView &repository, const std::str return openRepository(repository, path, error); } +bool GitManager::cloneRepository(RepositoryView &repository, const std::string &url, + const std::string &path, bool shallow, std::string &error) +{ + git_clone_options options{}; + git_clone_options_init(&options, GIT_CLONE_OPTIONS_VERSION); + if (shallow) + options.fetch_opts.depth = 1; + git_repository *cloned = nullptr; + if (git_clone(&cloned, url.c_str(), path.c_str(), &options) != 0) + { + error = lastError("Unable to clone repository"); + return false; + } + repository.close(); + repository.repo = cloned; + return loadRepositoryData(repository, error); +} + bool GitManager::reload(RepositoryView &repository, std::string &error) { return repository.repo && loadRepositoryData(repository, error); @@ -813,6 +841,54 @@ bool GitManager::push(RepositoryView &repository, std::string &error) "Push complete; upstream configured", error); } +bool GitManager::pushBranch(RepositoryView &repository, const std::string &branch, std::string &error) +{ + if (!prepareCredentials(repository, error)) + return false; + + git_reference *reference = nullptr; + if (git_branch_lookup(&reference, repository.repo, branch.c_str(), GIT_BRANCH_LOCAL) != 0) + { + error = lastError("Unable to find branch"); + return false; + } + + std::string remote_name; + std::string remote_branch_name; + git_reference *upstream = nullptr; + if (git_branch_upstream(&upstream, reference) == 0) + { + const char *upstream_name = nullptr; + if (git_branch_name(&upstream_name, upstream) == 0 && upstream_name) + { + remote_branch_name = upstream_name; + const size_t slash = remote_branch_name.find('/'); + remote_name = slash == std::string::npos ? remote_branch_name : remote_branch_name.substr(0, slash); + if (slash != std::string::npos) + remote_branch_name.erase(0, slash + 1); + } + git_reference_free(upstream); + } + git_reference_free(reference); + + if (!remote_name.empty() && !remote_branch_name.empty()) + return runGit(repository, {"push", remote_name, branch + ":" + remote_branch_name}, + "Push complete", error); + + if (repository.remotes.empty()) + { + error = "No remote is configured for this repository"; + return false; + } + + const std::string remote = std::find(repository.remotes.begin(), repository.remotes.end(), "origin") != + repository.remotes.end() + ? "origin" + : repository.remotes.front(); + return runGit(repository, {"push", "--set-upstream", remote, branch + ":" + branch}, + "Push complete; upstream configured", error); +} + bool GitManager::stash(RepositoryView &repository, std::string &error) { return runGit(repository, {"stash", "push", "--include-untracked", "-m", "Gitree stash"}, @@ -839,6 +915,16 @@ bool GitManager::stageAll(RepositoryView &repository, std::string &error) return runGit(repository, {"add", "--all"}, "All changes staged", error); } +bool GitManager::unstageAll(RepositoryView &repository, std::string &error) +{ + if (git_repository_head_unborn(repository.repo) == 1) + return runGit(repository, {"rm", "--cached", "-r", "--ignore-unmatch", "--", "."}, + "All changes unstaged", error); + if (runGit(repository, {"restore", "--staged", "--", "."}, "All changes unstaged", error)) + return true; + return runGit(repository, {"reset", "HEAD", "--", "."}, "All changes unstaged", error); +} + bool GitManager::stageFile(RepositoryView &repository, const std::string &path, std::string &error) { return runGit(repository, {"add", "--", path}, "File staged", error); @@ -846,6 +932,9 @@ bool GitManager::stageFile(RepositoryView &repository, const std::string &path, bool GitManager::unstageFile(RepositoryView &repository, const std::string &path, std::string &error) { + if (git_repository_head_unborn(repository.repo) == 1) + return runGit(repository, {"rm", "--cached", "--ignore-unmatch", "--", path}, + "File unstaged", error); if (runGit(repository, {"restore", "--staged", "--", path}, "File unstaged", error)) return true; return runGit(repository, {"reset", "HEAD", "--", path}, "File unstaged", error); diff --git a/src/managers/git_manager.h b/src/managers/git_manager.h index eae298d..3632897 100644 --- a/src/managers/git_manager.h +++ b/src/managers/git_manager.h @@ -11,18 +11,23 @@ public: ~GitManager(); bool openRepository(RepositoryView &repository, const std::string &path, std::string &error); - bool initializeRepository(RepositoryView &repository, const std::string &path, std::string &error); + bool initializeRepository(RepositoryView &repository, const std::string &path, + const std::string &initial_branch, std::string &error); + bool cloneRepository(RepositoryView &repository, const std::string &url, + const std::string &path, bool shallow, std::string &error); bool reload(RepositoryView &repository, std::string &error); bool loadMoreCommits(RepositoryView &repository, size_t page_size, std::string &error); bool checkoutBranch(RepositoryView &repository, const std::string &branch, std::string &error); bool fetch(RepositoryView &repository, const std::string &remote, std::string &error); bool pull(RepositoryView &repository, int mode, std::string &error); bool push(RepositoryView &repository, std::string &error); + bool pushBranch(RepositoryView &repository, const std::string &branch, std::string &error); bool stash(RepositoryView &repository, std::string &error); bool popStash(RepositoryView &repository, std::string &error); bool undoCommit(RepositoryView &repository, std::string &error); bool redoCommit(RepositoryView &repository, std::string &error); bool stageAll(RepositoryView &repository, std::string &error); + bool unstageAll(RepositoryView &repository, std::string &error); bool stageFile(RepositoryView &repository, const std::string &path, std::string &error); bool unstageFile(RepositoryView &repository, const std::string &path, std::string &error); bool discardFile(RepositoryView &repository, const std::string &path, std::string &error); diff --git a/src/managers/user_data.cpp b/src/managers/user_data.cpp index 2d9c18b..c0fd776 100644 --- a/src/managers/user_data.cpp +++ b/src/managers/user_data.cpp @@ -56,6 +56,8 @@ void UserData::load() details_width_ = static_cast(ikv_as_float(value)); if (const ikv_node_t *value = object_value(settings, "pull_mode", IKV_INT)) pull_mode_ = static_cast(ikv_as_int(value)); + if (const ikv_node_t *value = object_value(settings, "zoom_percent", IKV_INT)) + zoom_percent_ = static_cast(ikv_as_int(value)); if (const ikv_node_t *heights = object_value(settings, "sidebar_sections", IKV_ARRAY)) { const uint32_t count = std::min( @@ -66,7 +68,7 @@ void UserData::load() } if (const ikv_node_t *history = object_value(root, "recently_closed", IKV_ARRAY)) { - const uint32_t count = std::min(ikv_array_size(history), 12); + const uint32_t count = std::min(ikv_array_size(history), 100); for (uint32_t index = 0; index < count; ++index) { const char *path = ikv_as_string(ikv_array_get(history, index)); @@ -91,6 +93,7 @@ void UserData::load() sidebar_width_ = std::clamp(sidebar_width_, 180.0f, 520.0f); details_width_ = std::clamp(details_width_, 280.0f, 650.0f); pull_mode_ = std::clamp(pull_mode_, 0, 3); + zoom_percent_ = std::clamp(zoom_percent_, 80, 200); for (float &height : sidebar_section_heights_) height = std::clamp(height, 42.0f, 500.0f); if (open_repositories_.empty()) @@ -111,6 +114,8 @@ void UserData::load() settings >> details_width_; else if (key == "pull_mode") settings >> pull_mode_; + else if (key == "zoom_percent") + settings >> zoom_percent_; else if (key.rfind("sidebar_section_", 0) == 0) { const size_t index = static_cast(std::stoul(key.substr(16))); @@ -123,6 +128,7 @@ void UserData::load() sidebar_width_ = std::clamp(sidebar_width_, 180.0f, 520.0f); details_width_ = std::clamp(details_width_, 280.0f, 650.0f); pull_mode_ = std::clamp(pull_mode_, 0, 3); + zoom_percent_ = std::clamp(zoom_percent_, 80, 200); for (float &height : sidebar_section_heights_) height = std::clamp(height, 42.0f, 500.0f); @@ -132,7 +138,7 @@ void UserData::load() { if (!path.empty()) recently_closed_.push_back(path); - if (recently_closed_.size() == 12) + if (recently_closed_.size() == 100) break; } @@ -152,11 +158,21 @@ void UserData::addRecentlyClosed(const std::string &path) return; std::erase(recently_closed_, path); recently_closed_.insert(recently_closed_.begin(), path); - if (recently_closed_.size() > 12) - recently_closed_.resize(12); + if (recently_closed_.size() > 100) + recently_closed_.resize(100); save(); } +std::string UserData::takeRecentlyClosed() +{ + if (recently_closed_.empty()) + return {}; + std::string path = std::move(recently_closed_.front()); + recently_closed_.erase(recently_closed_.begin()); + save(); + return path; +} + void UserData::setRepositorySession(std::vector paths, size_t active_repository) { open_repositories_ = std::move(paths); @@ -177,6 +193,7 @@ void UserData::save() const ikv_object_set_float(settings, "sidebar_width", sidebar_width_); ikv_object_set_float(settings, "details_width", details_width_); ikv_object_set_int(settings, "pull_mode", pull_mode_); + ikv_object_set_int(settings, "zoom_percent", zoom_percent_); ikv_node_t *heights = ikv_object_add_array(settings, "sidebar_sections", IKV_FLOAT); for (const float height : sidebar_section_heights_) ikv_array_add_float(heights, height); diff --git a/src/managers/user_data.h b/src/managers/user_data.h index 04d2da9..d355e68 100644 --- a/src/managers/user_data.h +++ b/src/managers/user_data.h @@ -20,6 +20,7 @@ public: [[nodiscard]] float detailsWidth() const { return details_width_; } [[nodiscard]] float sidebarSectionHeight(size_t index) const { return sidebar_section_heights_.at(index); } [[nodiscard]] int pullMode() const { return pull_mode_; } + [[nodiscard]] int zoomPercent() const { return zoom_percent_; } void setSidebarWidth(float width) { sidebar_width_ = width; } void setDetailsWidth(float width) { details_width_ = width; } @@ -29,7 +30,13 @@ public: pull_mode_ = mode; save(); } + void setZoomPercent(int percent) + { + zoom_percent_ = percent; + save(); + } void addRecentlyClosed(const std::string &path); + std::string takeRecentlyClosed(); void setRepositorySession(std::vector paths, size_t active_repository); void save() const; @@ -45,4 +52,5 @@ private: float details_width_ = 368.0f; std::array sidebar_section_heights_ = {110.0f, 220.0f, 90.0f, 150.0f}; int pull_mode_ = 1; + int zoom_percent_ = 100; }; diff --git a/src/managers/window_manager.cpp b/src/managers/window_manager.cpp index 2bc96a5..8dab757 100644 --- a/src/managers/window_manager.cpp +++ b/src/managers/window_manager.cpp @@ -2,36 +2,155 @@ #include #include +#include #include +#include +#include #ifdef _WIN32 #define GLFW_EXPOSE_NATIVE_WIN32 #include #include #include +#include #endif -WindowManager::~WindowManager() { +#ifdef _WIN32 +namespace +{ + HICON loadPngIcon(const std::filesystem::path &path, UINT size, bool rounded) + { + const HRESULT com_result = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + const bool uninitialize_com = SUCCEEDED(com_result); + + IWICImagingFactory *factory = nullptr; + IWICBitmapDecoder *decoder = nullptr; + IWICBitmapFrameDecode *frame = nullptr; + IWICBitmapScaler *scaler = nullptr; + IWICFormatConverter *converter = nullptr; + HICON icon = nullptr; + + if (FAILED(CoCreateInstance(CLSID_WICImagingFactory, nullptr, CLSCTX_INPROC_SERVER, + IID_PPV_ARGS(&factory))) || + FAILED(factory->CreateDecoderFromFilename(path.c_str(), nullptr, GENERIC_READ, + WICDecodeMetadataCacheOnLoad, &decoder)) || + FAILED(decoder->GetFrame(0, &frame)) || + FAILED(factory->CreateBitmapScaler(&scaler)) || + FAILED(scaler->Initialize(frame, size, size, WICBitmapInterpolationModeFant)) || + FAILED(factory->CreateFormatConverter(&converter)) || + FAILED(converter->Initialize(scaler, GUID_WICPixelFormat32bppBGRA, + WICBitmapDitherTypeNone, nullptr, 0.0, + WICBitmapPaletteTypeCustom))) + { + goto cleanup; + } + + { + std::vector pixels(static_cast(size) * size * 4); + if (FAILED(converter->CopyPixels(nullptr, size * 4, + static_cast(pixels.size()), pixels.data()))) + { + goto cleanup; + } + + if (rounded) + { + const float radius = static_cast(size) * 0.22f; + const float maximum = static_cast(size) - radius - 0.5f; + const float minimum = radius - 0.5f; + for (UINT y = 0; y < size; ++y) + { + for (UINT x = 0; x < size; ++x) + { + const float nearest_x = std::clamp(static_cast(x), minimum, maximum); + const float nearest_y = std::clamp(static_cast(y), minimum, maximum); + const float dx = static_cast(x) - nearest_x; + const float dy = static_cast(y) - nearest_y; + const float coverage = std::clamp(radius + 0.5f - std::sqrt(dx * dx + dy * dy), + 0.0f, 1.0f); + pixels[(static_cast(y) * size + x) * 4 + 3] = + static_cast(coverage * 255.0f); + } + } + } + + BITMAPV5HEADER header{}; + header.bV5Size = sizeof(header); + header.bV5Width = static_cast(size); + header.bV5Height = -static_cast(size); + header.bV5Planes = 1; + header.bV5BitCount = 32; + header.bV5Compression = BI_BITFIELDS; + header.bV5RedMask = 0x00ff0000; + header.bV5GreenMask = 0x0000ff00; + header.bV5BlueMask = 0x000000ff; + header.bV5AlphaMask = 0xff000000; + + void *bitmap_bits = nullptr; + const HDC screen = GetDC(nullptr); + const HBITMAP color = CreateDIBSection(screen, reinterpret_cast(&header), + DIB_RGB_COLORS, &bitmap_bits, nullptr, 0); + ReleaseDC(nullptr, screen); + const HBITMAP mask = CreateBitmap(size, size, 1, 1, nullptr); + if (color && mask && bitmap_bits) + { + std::memcpy(bitmap_bits, pixels.data(), pixels.size()); + ICONINFO info{}; + info.fIcon = TRUE; + info.hbmColor = color; + info.hbmMask = mask; + icon = CreateIconIndirect(&info); + } + if (color) + DeleteObject(color); + if (mask) + DeleteObject(mask); + } + + cleanup: + if (converter) + converter->Release(); + if (scaler) + scaler->Release(); + if (frame) + frame->Release(); + if (decoder) + decoder->Release(); + if (factory) + factory->Release(); + if (uninitialize_com) + CoUninitialize(); + return icon; + } +} // namespace +#endif + +WindowManager::~WindowManager() +{ destroy(); } -bool WindowManager::create(const char* title, int width, int height) { +bool WindowManager::create(const char *title, int width, int height) +{ #ifdef _WIN32 - using SetDpiAwarenessContext = BOOL(WINAPI*)(HANDLE); + using SetDpiAwarenessContext = BOOL(WINAPI *)(HANDLE); const HMODULE user32 = GetModuleHandleW(L"user32.dll"); const FARPROC dpi_address = GetProcAddress(user32, "SetProcessDpiAwarenessContext"); SetDpiAwarenessContext set_dpi_awareness = nullptr; static_assert(sizeof(set_dpi_awareness) == sizeof(dpi_address)); std::memcpy(&set_dpi_awareness, &dpi_address, sizeof(set_dpi_awareness)); - if (set_dpi_awareness) set_dpi_awareness(reinterpret_cast(-4)); // Per-monitor v2 + if (set_dpi_awareness) + set_dpi_awareness(reinterpret_cast(-4)); // Per-monitor v2 #endif - if (!glfwInit()) return false; + if (!glfwInit()) + return false; glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE); window_ = glfwCreateWindow(width, height, title, nullptr, nullptr); - if (!window_) { + if (!window_) + { glfwTerminate(); return false; } @@ -45,13 +164,17 @@ bool WindowManager::create(const char* title, int width, int height) { glfwGetWindowContentScale(window_, &x_scale, &y_scale); dpi_scale_ = std::max(x_scale, y_scale); applyNativeCaption(); + applyNativeIcons(); return true; } -void WindowManager::destroy() { - if (!window_) return; +void WindowManager::destroy() +{ + if (!window_) + return; glfwDestroyWindow(window_); window_ = nullptr; + destroyNativeIcons(); glfwTerminate(); } @@ -60,39 +183,126 @@ void WindowManager::swapBuffers() { glfwSwapBuffers(window_); } void WindowManager::requestClose() { glfwSetWindowShouldClose(window_, GLFW_TRUE); } bool WindowManager::shouldClose() const { return !window_ || glfwWindowShouldClose(window_); } -bool WindowManager::consumeDpiChange() { +bool WindowManager::consumeDpiChange() +{ const bool changed = dpi_changed_; dpi_changed_ = false; return changed; } -void WindowManager::contentScaleCallback(GLFWwindow* window, float x_scale, float y_scale) { - auto* manager = static_cast(glfwGetWindowUserPointer(window)); - if (manager) manager->updateDpi(std::max(x_scale, y_scale)); +void WindowManager::contentScaleCallback(GLFWwindow *window, float x_scale, float y_scale) +{ + auto *manager = static_cast(glfwGetWindowUserPointer(window)); + if (manager) + manager->updateDpi(std::max(x_scale, y_scale)); } -void WindowManager::updateDpi(float scale) { +void WindowManager::updateDpi(float scale) +{ scale = std::clamp(scale, 1.0f, 4.0f); - if (scale == dpi_scale_) return; + if (scale == dpi_scale_) + return; dpi_scale_ = scale; dpi_changed_ = true; applyNativeCaption(); } -void WindowManager::applyNativeCaption() const { +void WindowManager::applyNativeCaption() const +{ #ifdef _WIN32 + if (!window_) + return; + const HWND hwnd = glfwGetWin32Window(window_); + if (!hwnd) + return; + const BOOL dark = TRUE; - DwmSetWindowAttribute(hwnd, 20, &dark, sizeof(dark)); // DWMWA_USE_IMMERSIVE_DARK_MODE - const DWORD square_corners = 1; // DWMWCP_DONOTROUND - DwmSetWindowAttribute(hwnd, 33, &square_corners, sizeof(square_corners)); + + // DWMWA_USE_IMMERSIVE_DARK_MODE + DwmSetWindowAttribute(hwnd, 20, &dark, sizeof(dark)); + + DWORD corner_pref = 0; + + switch (corner_mode_) + { + case WindowCornerMode::Default: + corner_pref = 0; // DWMWCP_DEFAULT + break; + + case WindowCornerMode::DoNotRound: + corner_pref = 1; // DWMWCP_DONOTROUND + break; + + case WindowCornerMode::Round: + corner_pref = 2; // DWMWCP_ROUND + break; + + case WindowCornerMode::RoundSmall: + corner_pref = 3; // DWMWCP_ROUNDSMALL + break; + } + + // DWMWA_WINDOW_CORNER_PREFERENCE + DwmSetWindowAttribute(hwnd, 33, &corner_pref, sizeof(corner_pref)); // Windows 11 caption customization. Older versions safely ignore these. - const COLORREF caption = RGB(32, 32, 32); + const COLORREF caption = static_cast(caption_color_); const COLORREF border = RGB(51, 55, 63); const COLORREF text = RGB(199, 203, 209); - DwmSetWindowAttribute(hwnd, 35, &caption, sizeof(caption)); // DWMWA_CAPTION_COLOR - DwmSetWindowAttribute(hwnd, 34, &border, sizeof(border)); // DWMWA_BORDER_COLOR - DwmSetWindowAttribute(hwnd, 36, &text, sizeof(text)); // DWMWA_TEXT_COLOR + + // DWMWA_BORDER_COLOR + DwmSetWindowAttribute(hwnd, 34, &border, sizeof(border)); + + // DWMWA_CAPTION_COLOR + DwmSetWindowAttribute(hwnd, 35, &caption, sizeof(caption)); + + // DWMWA_TEXT_COLOR + DwmSetWindowAttribute(hwnd, 36, &text, sizeof(text)); #endif } + +void WindowManager::applyNativeIcons() +{ +#ifdef _WIN32 + destroyNativeIcons(); + const HWND hwnd = glfwGetWin32Window(window_); + const auto asset_dir = std::filesystem::path(GITREE_IMAGE_ASSET_DIR); + window_icon_ = loadPngIcon(asset_dir / L"gitree_logo_no_bg.png", 32, false); + taskbar_icon_ = loadPngIcon(asset_dir / L"gitree_logo.png", 64, true); + + if (window_icon_) + { + SendMessageW(hwnd, WM_SETICON, ICON_SMALL, reinterpret_cast(window_icon_)); + SendMessageW(hwnd, WM_SETICON, ICON_SMALL2, reinterpret_cast(window_icon_)); + } + if (taskbar_icon_) + { + SendMessageW(hwnd, WM_SETICON, ICON_BIG, reinterpret_cast(taskbar_icon_)); + } +#endif +} + +void WindowManager::destroyNativeIcons() +{ +#ifdef _WIN32 + if (window_icon_) + DestroyIcon(static_cast(window_icon_)); + if (taskbar_icon_) + DestroyIcon(static_cast(taskbar_icon_)); +#endif + window_icon_ = nullptr; + taskbar_icon_ = nullptr; +} + +void WindowManager::setCornerMode(WindowCornerMode mode) +{ + corner_mode_ = mode; + applyNativeCaption(); +} + +void WindowManager::setCaptionColor(std::uint32_t color) +{ + caption_color_ = color; + applyNativeCaption(); +} diff --git a/src/managers/window_manager.h b/src/managers/window_manager.h index 8c2c10f..669af55 100644 --- a/src/managers/window_manager.h +++ b/src/managers/window_manager.h @@ -1,9 +1,20 @@ #pragma once +#include + struct GLFWwindow; class WindowManager { +public: + enum class WindowCornerMode + { + Default, + DoNotRound, + Round, + RoundSmall + }; + public: WindowManager() = default; ~WindowManager(); @@ -16,17 +27,36 @@ public: void pollEvents(); void swapBuffers(); void requestClose(); + [[nodiscard]] bool shouldClose() const; [[nodiscard]] GLFWwindow *nativeWindow() const { return window_; } [[nodiscard]] float dpiScale() const { return dpi_scale_; } + bool consumeDpiChange(); + void setCornerMode(WindowCornerMode mode); + [[nodiscard]] WindowCornerMode cornerMode() const { return corner_mode_; } + + void setCaptionColor(std::uint32_t color); + [[nodiscard]] std::uint32_t captionColor() const { return caption_color_; } + private: static void contentScaleCallback(GLFWwindow *window, float x_scale, float y_scale); + void updateDpi(float scale); void applyNativeCaption() const; + void applyNativeIcons(); + void destroyNativeIcons(); GLFWwindow *window_ = nullptr; + void *window_icon_ = nullptr; + void *taskbar_icon_ = nullptr; + float dpi_scale_ = 1.0f; bool dpi_changed_ = false; + + WindowCornerMode corner_mode_ = WindowCornerMode::Round; + + // 0x00BBGGRR, same layout Windows COLORREF uses. + std::uint32_t caption_color_ = 0x00201B19; }; diff --git a/src/ui/diff_viewer.cpp b/src/ui/diff_viewer.cpp index 9cb14f3..28a21d2 100644 --- a/src/ui/diff_viewer.cpp +++ b/src/ui/diff_viewer.cpp @@ -1,13 +1,15 @@ #include "ui/diff_viewer.h" +#include "managers/avatar_cache.h" #include "managers/git_manager.h" #include "models/repository.h" -#include +#include #include #include #include +#include #include #include #include @@ -48,7 +50,7 @@ struct SyntaxState { SyntaxContinuation continuation = SyntaxContinuation::none; }; -ImU32 blameColor(std::string_view hash, int alpha = 255) { +[[maybe_unused]] ImU32 blameColor(std::string_view hash, int alpha = 255) { static constexpr ImU32 colors[] = { IM_COL32(24, 181, 204, 255), IM_COL32(73, 123, 235, 255), IM_COL32(200, 64, 200, 255), IM_COL32(239, 79, 89, 255), IM_COL32(255, 122, 41, 255), IM_COL32(240, 186, 46, 255), @@ -59,7 +61,7 @@ ImU32 blameColor(std::string_view hash, int alpha = 255) { return (colors[value % std::size(colors)] & ~IM_COL32_A_MASK) | (static_cast(alpha) << IM_COL32_A_SHIFT); } -SyntaxLanguage languageForPath(const std::string& path) { +[[maybe_unused]] SyntaxLanguage languageForPath(const std::string& path) { std::string extension = std::filesystem::path(path).extension().string(); std::transform(extension.begin(), extension.end(), extension.begin(), [](unsigned char value) { return static_cast(std::tolower(value)); @@ -108,7 +110,49 @@ bool isTypeWord(SyntaxLanguage language, std::string_view word) { return wordIs(word, {"bool", "byte", "char", "decimal", "double", "dynamic", "float", "int", "int8_t", "int16_t", "int32_t", "int64_t", "long", "nint", "nuint", "object", "sbyte", "short", "signed", "size_t", "string", "uint", "uint8_t", "uint16_t", "uint32_t", "uint64_t", "ulong", "unsigned", "ushort", "var", "void", "wchar_t"}); } -void drawSyntaxText(ImDrawList* draw, ImVec2 position, const std::string& text, +bool isBuiltin(SyntaxLanguage language, std::string_view word) { + switch (language) { + case SyntaxLanguage::cpp: + return wordIs(word, {"std", "move", "forward", "make_shared", "make_unique", "optional", "string_view", "vector"}); + case SyntaxLanguage::csharp: + return wordIs(word, {"Console", "DateTime", "Dictionary", "Enumerable", "List", "Task", "ValueTask"}); + case SyntaxLanguage::lua: + return wordIs(word, {"assert", "error", "ipairs", "io", "math", "os", "pairs", "pcall", "print", "require", "string", "table", "tonumber", "tostring", "type"}); + case SyntaxLanguage::python: + return wordIs(word, {"abs", "all", "any", "dict", "enumerate", "filter", "float", "int", "len", "list", "map", "max", "min", "object", "open", "print", "range", "reversed", "set", "str", "sum", "super", "tuple", "zip"}); + case SyntaxLanguage::javascript: + return wordIs(word, {"Array", "Boolean", "console", "Date", "Error", "JSON", "Map", "Math", "Number", "Object", "process", "Promise", "RegExp", "require", "Set", "String", "Symbol"}); + default: + return false; + } +} + +bool isLiteral(std::string_view word) { + return wordIs(word, {"false", "False", "nil", "null", "nullptr", "None", "true", "True", "undefined"}); +} + +bool isDeclarationKeyword(std::string_view word) { + return wordIs(word, {"class", "concept", "delegate", "enum", "interface", "namespace", "record", "struct", "type"}); +} + +bool isFunctionDeclarationKeyword(std::string_view word) { + return word == "def" || word == "function"; +} + +bool isMacroName(std::string_view word) { + bool has_letter = false; + for (const unsigned char character : word) { + if (std::isalpha(character)) { + has_letter = true; + if (std::islower(character)) return false; + } else if (!std::isdigit(character) && character != '_') { + return false; + } + } + return has_letter && word.size() > 1; +} + +[[maybe_unused]] void drawSyntaxText(ImDrawList* draw, ImVec2 position, const std::string& text, SyntaxLanguage language, SyntaxState& state) { constexpr ImU32 normal = IM_COL32(218, 221, 226, 255); constexpr ImU32 keyword = IM_COL32(198, 139, 230, 255); @@ -118,6 +162,12 @@ void drawSyntaxText(ImDrawList* draw, ImVec2 position, const std::string& text, constexpr ImU32 comment = IM_COL32(112, 153, 105, 255); constexpr ImU32 function = IM_COL32(220, 199, 128, 255); constexpr ImU32 preprocessor = IM_COL32(205, 157, 222, 255); + constexpr ImU32 member = IM_COL32(122, 184, 225, 255); + constexpr ImU32 builtin = IM_COL32(103, 172, 232, 255); + constexpr ImU32 constant = IM_COL32(214, 139, 102, 255); + constexpr ImU32 operator_color = IM_COL32(105, 180, 210, 255); + constexpr ImU32 decorator = IM_COL32(226, 190, 105, 255); + constexpr ImU32 macro = IM_COL32(215, 128, 180, 255); const auto drawSpan = [&](size_t begin, size_t end, ImU32 color) { if (end <= begin) return; @@ -140,6 +190,7 @@ void drawSyntaxText(ImDrawList* draw, ImVec2 position, const std::string& text, } size_t cursor = 0; + std::string_view previous_word; while (cursor < text.size()) { if (state.continuation == SyntaxContinuation::block_comment) { const size_t end = text.find("*/", cursor); @@ -249,15 +300,49 @@ void drawSyntaxText(ImDrawList* draw, ImVec2 position, const std::string& text, cursor = end; continue; } + if (text[cursor] == '@' && cursor + 1 < text.size() && + (std::isalpha(static_cast(text[cursor + 1])) || text[cursor + 1] == '_')) { + size_t end = cursor + 2; + while (end < text.size() && (std::isalnum(static_cast(text[end])) || + text[end] == '_' || text[end] == '.')) ++end; + drawSpan(cursor, end, decorator); + cursor = end; + continue; + } if (std::isalpha(static_cast(text[cursor])) || text[cursor] == '_') { size_t end = cursor + 1; while (end < text.size() && (std::isalnum(static_cast(text[end])) || text[end] == '_')) ++end; const std::string_view word(text.data() + cursor, end - cursor); size_t next = end; while (next < text.size() && std::isspace(static_cast(text[next]))) ++next; - const ImU32 color = isKeyword(language, word) ? keyword : isTypeWord(language, word) ? type : + size_t previous = cursor; + while (previous > 0 && std::isspace(static_cast(text[previous - 1]))) --previous; + const bool member_access = previous > 0 && (text[previous - 1] == '.' || + (text[previous - 1] == '>' && previous > 1 && text[previous - 2] == '-') || + (text[previous - 1] == ':' && previous > 1 && text[previous - 2] == ':')); + const bool declared_name = isDeclarationKeyword(previous_word); + const bool declared_function = isFunctionDeclarationKeyword(previous_word); + const bool capitalized_type = + (language == SyntaxLanguage::cpp || language == SyntaxLanguage::csharp) && + std::isupper(static_cast(word.front())) && !member_access && + (next >= text.size() || text[next] != '('); + const bool likely_type = declared_name || isTypeWord(language, word) || + capitalized_type; + const ImU32 color = isLiteral(word) ? constant : isKeyword(language, word) ? keyword : + declared_function ? function : declared_name || likely_type ? type : + isMacroName(word) ? macro : isBuiltin(language, word) ? builtin : member_access ? + (next < text.size() && text[next] == '(' ? function : member) : next < text.size() && text[next] == '(' ? function : normal; drawSpan(cursor, end, color); + previous_word = word; + cursor = end; + continue; + } + if (std::string_view("+-*/%=!<>&|^~?:").find(text[cursor]) != std::string_view::npos) { + size_t end = cursor + 1; + while (end < text.size() && + std::string_view("+-*/%=!<>&|^~?:").find(text[end]) != std::string_view::npos) ++end; + drawSpan(cursor, end, operator_color); cursor = end; continue; } @@ -267,7 +352,8 @@ void drawSyntaxText(ImDrawList* draw, ImVec2 position, const std::string& text, const bool token_start = std::isalnum(value) || text[end] == '_' || text[end] == '\'' || text[end] == '"' || (language == SyntaxLanguage::javascript && text[end] == '`') || (slash_comments && text[end] == '/') || (language == SyntaxLanguage::python && text[end] == '#') || - (language == SyntaxLanguage::lua && text[end] == '-'); + (language == SyntaxLanguage::lua && text[end] == '-') || text[end] == '@' || + std::string_view("+-*/%=!<>&|^~?:").find(text[end]) != std::string_view::npos; if (token_start) break; ++end; } @@ -278,10 +364,77 @@ void drawSyntaxText(ImDrawList* draw, ImVec2 position, const std::string& text, bool compactButton(const char* label, bool active = false) { if (active) ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.13f, 0.25f, 0.43f, 1.0f)); - const bool clicked = ImGui::SmallButton(label); + const bool icon_only = label && std::strlen(label) <= 4; + const bool clicked = icon_only + ? ImGui::Button(label, {ImGui::GetFrameHeight(), ImGui::GetFrameHeight()}) + : ImGui::SmallButton(label); if (active) ImGui::PopStyleColor(); return clicked; } + +std::string joinLines(const std::vector& lines) { + std::string text; + for (size_t index = 0; index < lines.size(); ++index) { + if (index) text += '\n'; + text += lines[index]; + } + return text; +} + +bool drawSelectableTextBlock(const char* id, const std::string& text, const ImVec2& size) { + std::vector buffer(text.begin(), text.end()); + buffer.push_back('\0'); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.06f, 0.07f, 0.09f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.18f, 0.20f, 0.24f, 1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {4.0f, 4.0f}); + const bool changed = ImGui::InputTextMultiline(id, buffer.data(), buffer.size(), size, + ImGuiInputTextFlags_ReadOnly | ImGuiInputTextFlags_AllowTabInput); + ImGui::PopStyleVar(2); + ImGui::PopStyleColor(2); + return changed; +} + +struct MinimapEntry { + size_t length = 0; + ImU32 color = IM_COL32(120, 126, 136, 255); +}; + +void drawMinimap(const std::vector& entries, float scale, + float visible_ratio, float scroll_ratio) { + const ImVec2 minimum = ImGui::GetCursorScreenPos(); + const ImVec2 size = ImGui::GetContentRegionAvail(); + ImGui::InvisibleButton("##code_minimap", size); + ImDrawList* draw = ImGui::GetWindowDrawList(); + draw->AddRectFilled(minimum, {minimum.x + size.x, minimum.y + size.y}, IM_COL32(38, 40, 47, 255)); + draw->AddRectFilled({minimum.x + size.x - scaled(10.0f, scale), minimum.y}, + {minimum.x + size.x, minimum.y + size.y}, IM_COL32(64, 66, 74, 255)); + + if (entries.empty() || size.y <= 2.0f) return; + + const float content_left = minimum.x + scaled(4.0f, scale); + const float content_right = minimum.x + size.x - scaled(14.0f, scale); + const float content_width = std::max(1.0f, content_right - content_left); + const float line_step = size.y / static_cast(entries.size()); + const float line_height = std::max(1.0f, std::min(scaled(2.0f, scale), line_step)); + constexpr float max_reference_length = 160.0f; + for (size_t index = 0; index < entries.size(); ++index) { + const float normalized = std::clamp(static_cast(entries[index].length) / max_reference_length, 0.08f, 1.0f); + const float width = content_width * normalized; + const float y = minimum.y + index * line_step; + draw->AddRectFilled({content_left, y}, {content_left + width, y + line_height}, + entries[index].color, scaled(1.0f, scale)); + } + + const float viewport_height = std::clamp(size.y * visible_ratio, scaled(18.0f, scale), size.y); + const float viewport_y = minimum.y + (size.y - viewport_height) * std::clamp(scroll_ratio, 0.0f, 1.0f); + draw->AddRectFilled({minimum.x + scaled(1.0f, scale), viewport_y}, + {minimum.x + size.x - scaled(11.0f, scale), viewport_y + viewport_height}, + IM_COL32(120, 146, 198, 45), scaled(2.0f, scale)); + draw->AddRect({minimum.x + scaled(1.0f, scale), viewport_y}, + {minimum.x + size.x - scaled(11.0f, scale), viewport_y + viewport_height}, + IM_COL32(120, 146, 198, 160), scaled(2.0f, scale)); +} } void DiffViewer::open(RepositoryView& repository, GitManager& manager, const std::string& path, @@ -378,6 +531,11 @@ void DiffViewer::parseBlame(const std::string& text) { const std::string_view key(field.data(), separator == std::string::npos ? field.size() : separator); const std::string value = separator == std::string::npos ? std::string{} : field.substr(separator + 1); if (key == "author") line.author = value; + else if (key == "author-mail") { + line.email = value; + if (line.email.size() >= 2 && line.email.front() == '<' && line.email.back() == '>') + line.email = line.email.substr(1, line.email.size() - 2); + } else if (key == "author-time") { try { author_time = static_cast(std::stoll(value)); } catch (...) { author_time = 0; } @@ -474,11 +632,13 @@ void DiffViewer::loadSupplement(RepositoryView& repository, GitManager& manager, } } -void DiffViewer::draw(RepositoryView& repository, GitManager& manager, float scale, std::string& notice) { +void DiffViewer::draw(RepositoryView& repository, GitManager& manager, AvatarCache* avatars, + float scale, ImFont* code_font, std::string& notice) { + (void)avatars; ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, {scaled(8, scale), scaled(5, scale)}); ImGui::BeginChild("diff_viewer", {-1, -1}, ImGuiChildFlags_None, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); - ImGui::TextColored(ImVec4(0.94f, 0.66f, 0.25f, 1), ICON_FA_PEN); + ImGui::TextColored(ImVec4(0.94f, 0.66f, 0.25f, 1), ICON_TB_PEN); ImGui::SameLine(0, scaled(7, scale)); ImGui::TextUnformatted(path_.c_str()); @@ -512,7 +672,7 @@ void DiffViewer::draw(RepositoryView& repository, GitManager& manager, float sca ImGui::PopStyleColor(); } ImGui::SameLine(); - if (compactButton(ICON_FA_XMARK)) close(); + if (compactButton(ICON_TB_XMARK)) close(); ImGui::Separator(); if (!path_.empty()) { ImGui::SetCursorPosX(ImGui::GetWindowWidth() - scaled(116, scale)); @@ -520,45 +680,45 @@ void DiffViewer::draw(RepositoryView& repository, GitManager& manager, float sca if (!historical && !staged_) { ImGui::SameLine(); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.94f, 0.44f, 0.44f, 1)); - if (compactButton(ICON_FA_TRASH_CAN)) { + if (compactButton(ICON_TB_TRASH_CAN)) { if (manager.discardFile(repository, path_, notice)) close(); } ImGui::PopStyleColor(); } - ImGui::Separator(); + ImGui::Separator(); } - ImGui::BeginChild("diff_content", {-1, -1}, ImGuiChildFlags_None, - ImGuiWindowFlags_HorizontalScrollbar); + const bool show_minimap = mode_ == Mode::diff || mode_ == Mode::file; + const float minimap_width = scaled(56.0f, scale); + float main_scroll_y = 0.0f; + float main_scroll_max_y = 0.0f; + float main_window_height = 0.0f; + std::vector minimap_entries; + if (show_minimap) { + if (mode_ == Mode::diff) { + for (size_t hunk_index = 0; hunk_index < hunks_.size(); ++hunk_index) { + minimap_entries.push_back({hunks_[hunk_index].header.size(), IM_COL32(128, 133, 141, 255)}); + for (const Line& line : hunks_[hunk_index].lines) { + const ImU32 color = line.kind == LineKind::added ? IM_COL32(87, 190, 112, 255) : + line.kind == LineKind::removed ? IM_COL32(220, 97, 97, 255) : + IM_COL32(112, 118, 128, 255); + minimap_entries.push_back({line.text.size() + 1, color}); + } + minimap_entries.push_back({0, IM_COL32(0, 0, 0, 0)}); + } + } else { + minimap_entries.reserve(file_lines_.size()); + for (const std::string& line : file_lines_) + minimap_entries.push_back({line.size(), IM_COL32(112, 118, 128, 255)}); + } + } + + ImGui::BeginChild("diff_content_main", + show_minimap ? ImVec2{-minimap_width - scaled(6.0f, scale), -1} : ImVec2{-1, -1}, + ImGuiChildFlags_None, ImGuiWindowFlags_HorizontalScrollbar); + const bool use_code_font = code_font && mode_ != Mode::history; + if (use_code_font) ImGui::PushFont(code_font, 0.0f); const float row_height = scaled(21, scale); - const float number_width = scaled(48, scale); - const SyntaxLanguage language = languageForPath(path_); - auto draw_line = [&](const std::string& text, int old_number, int new_number, LineKind kind, - SyntaxLanguage line_language, SyntaxState& syntax_state) { - ImGui::InvisibleButton("##line", {std::max(ImGui::GetContentRegionAvail().x, scaled(900, scale)), row_height}); - const ImVec2 minimum = ImGui::GetItemRectMin(); - const ImVec2 maximum = ImGui::GetItemRectMax(); - ImDrawList* draw = ImGui::GetWindowDrawList(); - if (kind == LineKind::added) draw->AddRectFilled(minimum, maximum, IM_COL32(31, 65, 43, 225)); - else if (kind == LineKind::removed) draw->AddRectFilled(minimum, maximum, IM_COL32(70, 38, 40, 225)); - draw->AddRectFilled(minimum, {minimum.x + number_width * 2, maximum.y}, IM_COL32(31, 34, 40, 255)); - char old_buffer[16]{}; - char new_buffer[16]{}; - if (old_number) std::snprintf(old_buffer, sizeof(old_buffer), "%d", old_number); - if (new_number) std::snprintf(new_buffer, sizeof(new_buffer), "%d", new_number); - draw->AddText({minimum.x + scaled(5, scale), minimum.y + scaled(2, scale)}, - IM_COL32(158, 164, 174, 255), old_buffer); - draw->AddText({minimum.x + number_width + scaled(5, scale), minimum.y + scaled(2, scale)}, - IM_COL32(158, 164, 174, 255), new_buffer); - const char marker = kind == LineKind::added ? '+' : kind == LineKind::removed ? '-' : ' '; - char marker_text[2]{marker, 0}; - draw->AddText({minimum.x + number_width * 2 + scaled(5, scale), minimum.y + scaled(2, scale)}, - kind == LineKind::added ? IM_COL32(87, 190, 112, 255) : - kind == LineKind::removed ? IM_COL32(220, 97, 97, 255) : IM_COL32(148, 154, 164, 255), marker_text); - drawSyntaxText(draw, - {minimum.x + number_width * 2 + scaled(22, scale), minimum.y + scaled(2, scale)}, - text, line_language, syntax_state); - }; // Keep the first source row clear of the toolbar and aligned with a normal row inset. ImGui::Dummy({0.0f, row_height}); @@ -573,7 +733,12 @@ void DiffViewer::draw(RepositoryView& repository, GitManager& manager, float sca SyntaxState old_syntax; SyntaxState new_syntax; ImGui::PushID(static_cast(hunk_index)); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.56f, 0.70f, 0.90f, 1)); + if (hunk_index > 0) { + ImGui::Dummy({0.0f, scaled(11.0f, scale)}); + ImGui::Separator(); + ImGui::Dummy({0.0f, scaled(8.0f, scale)}); + } + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.62f, 0.64f, 0.68f, 1.0f)); ImGui::TextUnformatted(hunks_[hunk_index].header.c_str()); ImGui::PopStyleColor(); ImGui::SameLine(std::max(scaled(220, scale), ImGui::GetWindowWidth() - scaled(205, scale))); @@ -595,13 +760,17 @@ void DiffViewer::draw(RepositoryView& repository, GitManager& manager, float sca pending_hunk = static_cast(hunk_index); pending_action = HunkAction::unstage; } - for (const Line& line : hunks_[hunk_index].lines) { - ImGui::PushID(line_id++); - SyntaxState& syntax_state = line.kind == LineKind::removed ? old_syntax : new_syntax; - draw_line(line.text, line.old_number, line.new_number, line.kind, language, syntax_state); - if (line.kind == LineKind::context) old_syntax = new_syntax; - ImGui::PopID(); + ImGui::Separator(); + ImGui::Dummy({0.0f, scaled(4.0f, scale)}); + std::string hunk_text; + for (size_t line_index = 0; line_index < hunks_[hunk_index].lines.size(); ++line_index) { + if (line_index) hunk_text += '\n'; + hunk_text += hunks_[hunk_index].lines[line_index].raw; } + const float hunk_height = std::max(row_height * 3.0f, + row_height * static_cast(hunks_[hunk_index].lines.size()) + scaled(10.0f, scale)); + drawSelectableTextBlock(("##diff_hunk_text" + std::to_string(line_id++)).c_str(), + hunk_text, {-1, hunk_height}); ImGui::PopID(); } if (pending_hunk >= 0 && pending_hunk < static_cast(hunks_.size())) { @@ -611,71 +780,43 @@ void DiffViewer::draw(RepositoryView& repository, GitManager& manager, float sca reload(repository, manager, notice); } } else if (mode_ == Mode::blame) { - SyntaxState syntax_state; - const float blame_number_width = scaled(42.0f, scale); - const float attribution_width = scaled(285.0f, scale); + std::ostringstream blame_text; for (size_t index = 0; index < blame_lines_.size(); ++index) { const BlameLine& line = blame_lines_[index]; - ImGui::PushID(static_cast(index)); - ImGui::InvisibleButton("##blame_line", - {std::max(ImGui::GetContentRegionAvail().x, scaled(900.0f, scale)), row_height}); - const ImVec2 minimum = ImGui::GetItemRectMin(); - const ImVec2 maximum = ImGui::GetItemRectMax(); - ImDrawList* draw = ImGui::GetWindowDrawList(); - const ImU32 color = blameColor(line.hash); - draw->AddRectFilled(minimum, - {minimum.x + blame_number_width + attribution_width, maximum.y}, blameColor(line.hash, 18)); - draw->AddRectFilled( - {minimum.x + blame_number_width + attribution_width - scaled(2.0f, scale), minimum.y}, - {minimum.x + blame_number_width + attribution_width, maximum.y}, color); - - char line_number[16]{}; - std::snprintf(line_number, sizeof(line_number), "%d", line.line_number); - draw->AddText({minimum.x + scaled(6.0f, scale), minimum.y + scaled(2.0f, scale)}, - IM_COL32(151, 158, 169, 255), line_number); - + if (index) blame_text << '\n'; + blame_text << line.line_number << " "; if (line.show_attribution) { - const float attribution_left = minimum.x + blame_number_width + scaled(7.0f, scale); - const float attribution_right = minimum.x + blame_number_width + attribution_width - scaled(8.0f, scale); - draw->AddCircleFilled( - {attribution_left + scaled(4.0f, scale), minimum.y + row_height * 0.5f}, - scaled(3.5f, scale), color); - const float date_width = ImGui::CalcTextSize(line.date.c_str()).x; - draw->PushClipRect( - {attribution_left + scaled(14.0f, scale), minimum.y}, - {attribution_right - date_width - scaled(9.0f, scale), maximum.y}, true); - draw->AddText({attribution_left + scaled(14.0f, scale), minimum.y + scaled(2.0f, scale)}, - IM_COL32(205, 211, 220, 255), line.summary.c_str()); - draw->PopClipRect(); - draw->AddText({attribution_right - date_width, minimum.y + scaled(2.0f, scale)}, - IM_COL32(139, 147, 159, 255), line.date.c_str()); - if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort) && - ImGui::GetIO().MousePos.x < minimum.x + blame_number_width + attribution_width) { - ImGui::SetTooltip("%s\n%s\n%s %s", - line.summary.c_str(), line.author.c_str(), line.hash.substr(0, 10).c_str(), line.date.c_str()); - } + blame_text << line.summary; + if (!line.date.empty()) blame_text << " " << line.date; + blame_text << " "; + } else { + blame_text << "| "; } - drawSyntaxText(draw, - {minimum.x + blame_number_width + attribution_width + scaled(10.0f, scale), - minimum.y + scaled(2.0f, scale)}, - line.text, language, syntax_state); - ImGui::PopID(); + blame_text << line.text; } + drawSelectableTextBlock("##blame_text", blame_text.str(), {-1, -1}); if (blame_lines_.empty()) ImGui::TextDisabled("No blame data is available for this file."); } else { const std::vector* lines = mode_ == Mode::file ? &file_lines_ : &history_lines_; - SyntaxState syntax_state; - const SyntaxLanguage line_language = mode_ == Mode::file ? language : SyntaxLanguage::plain; - for (size_t index = 0; index < lines->size(); ++index) { - ImGui::PushID(static_cast(index)); - draw_line((*lines)[index], mode_ == Mode::file ? static_cast(index + 1) : 0, - mode_ == Mode::file ? static_cast(index + 1) : 0, LineKind::context, - line_language, syntax_state); - ImGui::PopID(); - } + drawSelectableTextBlock(mode_ == Mode::file ? "##file_text" : "##history_text", + joinLines(*lines), {-1, -1}); if (lines->empty()) ImGui::TextDisabled("No data is available for this view."); } + main_scroll_y = ImGui::GetScrollY(); + main_scroll_max_y = ImGui::GetScrollMaxY(); + main_window_height = ImGui::GetWindowHeight(); + if (use_code_font) ImGui::PopFont(); ImGui::EndChild(); + if (show_minimap) { + ImGui::SameLine(0, scaled(6.0f, scale)); + ImGui::BeginChild("diff_content_minimap", {minimap_width, -1}, ImGuiChildFlags_None, + ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); + const float visible_ratio = main_scroll_max_y <= 0.0f + ? 1.0f : std::clamp(main_window_height / (main_window_height + main_scroll_max_y), 0.0f, 1.0f); + const float scroll_ratio = main_scroll_max_y <= 0.0f ? 0.0f : main_scroll_y / main_scroll_max_y; + drawMinimap(minimap_entries, scale, visible_ratio, scroll_ratio); + ImGui::EndChild(); + } ImGui::EndChild(); ImGui::PopStyleVar(); } diff --git a/src/ui/diff_viewer.h b/src/ui/diff_viewer.h index 88b968d..c3a2b78 100644 --- a/src/ui/diff_viewer.h +++ b/src/ui/diff_viewer.h @@ -4,7 +4,9 @@ #include class GitManager; +class AvatarCache; struct RepositoryView; +struct ImFont; class DiffViewer { public: @@ -14,7 +16,8 @@ public: const std::string& commit_id, std::string& notice); void close(); bool isOpen() const { return !path_.empty(); } - void draw(RepositoryView& repository, GitManager& manager, float scale, std::string& notice); + void draw(RepositoryView& repository, GitManager& manager, AvatarCache* avatars, + float scale, ImFont* code_font, std::string& notice); private: enum class Mode { diff, file, blame, history }; @@ -34,6 +37,7 @@ private: struct BlameLine { std::string hash; std::string author; + std::string email; std::string date; std::string summary; std::string text; diff --git a/src/ui/gitree_ui.cpp b/src/ui/gitree_ui.cpp index 35309b5..57566a7 100644 --- a/src/ui/gitree_ui.cpp +++ b/src/ui/gitree_ui.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include "ui/gitree_ui.h" #include "managers/application_manager.h" #include "managers/application_icon_cache.h" @@ -24,7 +24,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -40,11 +42,11 @@ size_t g_active_tab = 0; RepositoryView* g_tab_to_select = nullptr; UserData* g_user_data = nullptr; AvatarCache* g_avatar_cache = nullptr; -std::array g_path{}; std::array g_filter{}; std::array g_branch_filter{}; std::string g_notice; bool g_init_popup = false; +bool g_clone_popup = false; bool g_about_popup = false; bool g_licenses_popup = false; bool g_tag_create_popup = false; @@ -56,11 +58,19 @@ bool g_discard_all_popup = false; std::array g_git_name{}; std::array g_git_value{}; std::array g_git_path{}; +std::array g_repository_filter{}; +std::array g_create_repository_name{}; +std::array g_create_repository_parent{}; +std::array g_create_repository_branch{}; +std::array g_clone_repository_parent{}; +std::array g_clone_repository_url{}; std::string g_git_target; std::array g_inline_branch_name{}; std::string g_inline_branch_target; std::string g_pending_branch_checkout; std::string g_pending_commit_jump; +RepositoryView* g_expanded_refs_repository = nullptr; +int g_expanded_refs_commit = -1; RepositoryView* g_inline_branch_repository = nullptr; int g_inline_branch_commit = -1; bool g_focus_inline_branch = false; @@ -69,12 +79,26 @@ FileViewMode g_file_view_mode = FileViewMode::path; bool g_view_all_files = false; bool g_file_sort_ascending = true; bool g_request_branch_selector = false; -std::array g_commit_summary{}; +std::array g_commit_summary{}; std::array g_commit_description{}; +std::array g_commit_search{}; +std::string g_previous_commit_search; +RepositoryView* g_commit_search_repository = nullptr; +int g_commit_search_match = -1; +bool g_commit_search_open = false; +bool g_focus_commit_search = false; float g_ui_scale = 1.0f; +int g_zoom_percent = 100; +bool g_zoom_reload_requested = false; +bool g_reset_repository_view = false; float g_sidebar_width = 230.0f; +bool g_sidebar_collapsed = false; +bool g_sidebar_collapsed_before_viewer = false; +bool g_sidebar_auto_collapsed = false; +bool g_previous_code_viewer_open = false; float g_details_width = 368.0f; float g_commit_message_height = 125.0f; +float g_working_composer_height = 320.0f; DiffViewer g_diff_viewer; WindowManager* g_window_manager = nullptr; GitManager* g_git_manager = nullptr; @@ -82,12 +106,11 @@ ApplicationManager* g_application_manager = nullptr; ApplicationIconCache* g_application_icon_cache = nullptr; ExternalApplicationId g_open_in_application = ExternalApplicationId::visual_studio_code; ImFont* g_outline_icon_font = nullptr; +ImFont* g_regular_font = nullptr; +ImFont* g_bold_font = nullptr; +ImFont* g_code_font = nullptr; float g_outline_icon_size = 15.0f; -constexpr const char* ICON_TB_CHECK = "\xee\xa9\x9e"; -constexpr const char* ICON_TB_CLOUD = "\xee\xa9\xb6"; -constexpr const char* ICON_TB_DEVICE_LAPTOP = "\xee\xad\xa4"; -constexpr const char* ICON_TB_TAG = "\xee\xa4\x80"; float ui(float value) { return value * g_ui_scale; } RepositoryView& repo() { return *g_tabs.at(g_active_tab); } @@ -95,6 +118,18 @@ constexpr float sidebar_child_indent = 24.0f; constexpr float sidebar_nested_indent = 18.0f; ImVec4 change_color(FileChangeKind kind); +bool text_height_checkbox(const char* label, bool* value) { + const ImVec2 padding = ImGui::GetStyle().FramePadding; + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {padding.x, 0.0f}); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, ui(1.0f)); + ImGui::PushStyleColor(ImGuiCol_Border, IM_COL32(70, 76, 87, 255)); + const bool changed = ImGui::Checkbox(label, value); + ImGui::PopStyleColor(); + ImGui::PopStyleVar(); + ImGui::PopStyleVar(); + return changed; +} + class ScopedUiScale { public: explicit ScopedUiScale(float factor) : previous_scale_(g_ui_scale) { @@ -203,27 +238,67 @@ void persist_repository_session() { g_user_data->setRepositorySession(std::move(paths), g_active_tab); } +void clear_sidebar_filter() { + g_filter.fill('\0'); +} + +void reset_repository_view() { + if (g_tabs.empty()) return; + RepositoryView& view = repo(); + view.selected_commit = 0; + view.scroll_to_commit = view.commits.empty() ? -1 : 0; + g_diff_viewer.close(); + g_commit_search_open = false; + g_commit_search_repository = nullptr; + g_commit_search.fill('\0'); + g_previous_commit_search.clear(); + g_commit_search_match = -1; + g_filter.fill('\0'); + g_branch_filter.fill('\0'); + g_view_all_files = false; + g_file_view_mode = FileViewMode::path; + g_expanded_refs_repository = nullptr; + g_expanded_refs_commit = -1; + cancel_inline_branch(); + g_pending_branch_checkout.clear(); + g_reset_repository_view = true; +} + +void activate_repository_tab(size_t index) { + if (index >= g_tabs.size() || index == g_active_tab) return; + g_active_tab = index; + g_tab_to_select = g_tabs[index].get(); + reset_repository_view(); + persist_repository_session(); +} + void create_new_tab(bool persist = true) { g_tabs.push_back(std::make_unique()); g_active_tab = g_tabs.size() - 1; g_tab_to_select = g_tabs.back().get(); + reset_repository_view(); if (persist) persist_repository_session(); } void close_tab(size_t index) { if (index >= g_tabs.size()) return; + const bool closing_active_tab = index == g_active_tab; if (g_inline_branch_repository == g_tabs[index].get()) cancel_inline_branch(); if (g_user_data && !g_tabs[index]->path.empty()) g_user_data->addRecentlyClosed(g_tabs[index]->path); g_tabs.erase(g_tabs.begin() + static_cast(index)); if (g_tabs.empty()) create_new_tab(); else if (g_active_tab >= g_tabs.size()) g_active_tab = g_tabs.size() - 1; else if (index < g_active_tab) --g_active_tab; + if (closing_active_tab && !g_tabs.empty()) reset_repository_view(); persist_repository_session(); } bool open_repository(const char* path) { const bool opened = g_git_manager->openRepository(repo(), path, g_notice); - if (opened) persist_repository_session(); + if (opened) { + reset_repository_view(); + persist_repository_session(); + } return opened; } @@ -250,12 +325,40 @@ void pick_and_open_repository() { open_repository(path.c_str()); } -bool init_repository(const char* path) { - const bool initialized = g_git_manager->initializeRepository(repo(), path, g_notice); +bool init_repository(const char* path, const char* initial_branch = "main") { + const bool initialized = g_git_manager->initializeRepository(repo(), path, initial_branch, g_notice); if (initialized) persist_repository_session(); return initialized; } +std::filesystem::path default_repository_parent() { + std::filesystem::path documents = izo::GetKnownPath(izo::KnownPath::Documents); + const std::filesystem::path github = documents / "GitHub"; + std::error_code error; + return std::filesystem::is_directory(github, error) ? github : documents; +} + +template +void set_path_buffer(std::array& buffer, const std::filesystem::path& path) { + const auto utf8 = path.u8string(); + const std::string value(reinterpret_cast(utf8.data()), utf8.size()); + std::snprintf(buffer.data(), buffer.size(), "%s", value.c_str()); +} + +bool pick_folder_into(std::array& buffer, const char* title) { + izo::DialogOptions options; + options.title = title; + options.initialPath = buffer[0] ? std::filesystem::path(buffer.data()) : default_repository_parent(); + const izo::DialogResult result = izo::PickFolder(options); + if (result.status == izo::DialogStatus::Cancelled) return false; + if (result.status == izo::DialogStatus::Error || result.paths.empty()) { + g_notice = result.errorMessage.empty() ? "Unable to select a folder" : result.errorMessage; + return false; + } + set_path_buffer(buffer, result.paths.front()); + return true; +} + void apply_style(float scale) { g_ui_scale = scale; ImGuiStyle& style = ImGui::GetStyle(); @@ -287,10 +390,10 @@ void apply_style(float scale) { }; style.Colors[ImGuiCol_Text] = color(218, 221, 226); style.Colors[ImGuiCol_TextDisabled] = color(154, 159, 168); - style.Colors[ImGuiCol_WindowBg] = color(28, 30, 35); - style.Colors[ImGuiCol_MenuBarBg] = color(31, 31, 31); - style.Colors[ImGuiCol_ChildBg] = color(28, 30, 35); - style.Colors[ImGuiCol_PopupBg] = color(39, 42, 49); + style.Colors[ImGuiCol_WindowBg] = color(22, 24, 29); + style.Colors[ImGuiCol_MenuBarBg] = color(25, 27, 32); + style.Colors[ImGuiCol_ChildBg] = color(22, 24, 29); + style.Colors[ImGuiCol_PopupBg] = color(34, 37, 44); style.Colors[ImGuiCol_Border] = color(55, 59, 67); style.Colors[ImGuiCol_BorderShadow] = color(0, 0, 0, 0); style.Colors[ImGuiCol_FrameBg] = color(31, 34, 40); @@ -302,15 +405,17 @@ void apply_style(float scale) { style.Colors[ImGuiCol_Header] = color(37, 51, 79); style.Colors[ImGuiCol_HeaderHovered] = color(45, 58, 84); style.Colors[ImGuiCol_HeaderActive] = color(49, 64, 91); - style.Colors[ImGuiCol_Tab] = color(42, 45, 52); - style.Colors[ImGuiCol_TabHovered] = color(51, 55, 63); - style.Colors[ImGuiCol_TabSelected] = color(51, 55, 63); + style.Colors[ImGuiCol_Tab] = color(43, 47, 56); + style.Colors[ImGuiCol_TabHovered] = color(51, 56, 66); + style.Colors[ImGuiCol_TabSelected] = color(58, 63, 74); + style.Colors[ImGuiCol_TabDimmed] = color(43, 47, 56); + style.Colors[ImGuiCol_TabDimmedSelected] = color(53, 58, 68); style.Colors[ImGuiCol_Separator] = color(55, 59, 67, 100); style.Colors[ImGuiCol_SeparatorHovered] = color(23, 181, 204); style.Colors[ImGuiCol_SeparatorActive] = color(23, 181, 204); - style.Colors[ImGuiCol_TableHeaderBg] = color(51, 55, 63); - style.Colors[ImGuiCol_TableRowBg] = color(28, 30, 35); - style.Colors[ImGuiCol_TableRowBgAlt] = color(28, 30, 35); + style.Colors[ImGuiCol_TableHeaderBg] = color(30, 33, 39); + style.Colors[ImGuiCol_TableRowBg] = color(22, 24, 29); + style.Colors[ImGuiCol_TableRowBgAlt] = color(22, 24, 29); style.Colors[ImGuiCol_CheckMark] = color(23, 181, 204); style.Colors[ImGuiCol_ScrollbarBg] = color(0, 0, 0, 0); style.Colors[ImGuiCol_ScrollbarGrab] = color(67, 71, 80); @@ -322,30 +427,52 @@ void apply_style(float scale) { void load_fonts(float scale) { ImGuiIO& io = ImGui::GetIO(); io.Fonts->Clear(); + g_regular_font = nullptr; + g_bold_font = nullptr; + g_code_font = nullptr; + g_outline_icon_font = nullptr; ImFontConfig config; config.OversampleH = 2; config.OversampleV = 2; config.PixelSnapH = false; config.RasterizerDensity = 1.0f; const float size = 18.0f * scale; - if (!io.Fonts->AddFontFromFileTTF(GITREE_ASSET_DIR "/OpenSans-Regular.ttf", size, &config)) - io.Fonts->AddFontDefault(); + g_regular_font = io.Fonts->AddFontFromFileTTF(GITREE_ASSET_DIR "/Inter-Regular.ttf", size, &config); + if (!g_regular_font) g_regular_font = io.Fonts->AddFontDefault(); + io.FontDefault = g_regular_font; - static constexpr ImWchar icon_ranges[] = {ICON_MIN_FA, ICON_MAX_16_FA, 0}; - ImFontConfig icon_config; - icon_config.MergeMode = true; - icon_config.PixelSnapH = true; + static constexpr ImWchar icon_ranges[] = {ICON_MIN_TB, ICON_MAX_TB, 0}; const float icon_size = 14.0f * scale; - icon_config.GlyphMinAdvanceX = icon_size; - icon_config.GlyphOffset.y = 1.0f * scale; - io.Fonts->AddFontFromFileTTF( - GITREE_ASSET_DIR "/fa-solid-900.ttf", icon_size, &icon_config, icon_ranges); + const auto merge_icons = [&] { + ImFontConfig icon_config; + icon_config.MergeMode = true; + icon_config.PixelSnapH = true; + icon_config.GlyphMinAdvanceX = icon_size; + icon_config.GlyphOffset.y = 1.0f * scale; + io.Fonts->AddFontFromFileTTF( + GITREE_ASSET_DIR "/tabler-icons-outline.ttf", icon_size, &icon_config, icon_ranges); + }; + merge_icons(); + + ImFontConfig bold_config = config; + g_bold_font = io.Fonts->AddFontFromFileTTF( + GITREE_ASSET_DIR "/Inter-SemiBold.ttf", size, &bold_config); + if (!g_bold_font) g_bold_font = g_regular_font; + else merge_icons(); + + ImFontConfig code_config = config; + g_code_font = io.Fonts->AddFontFromFileTTF( + "C:/Windows/Fonts/CascadiaMono.ttf", size, &code_config); + if (!g_code_font) + g_code_font = io.Fonts->AddFontFromFileTTF("C:/Windows/Fonts/CascadiaCode.ttf", size, &code_config); + if (!g_code_font) g_code_font = g_regular_font; + else merge_icons(); static constexpr ImWchar outline_ranges[] = { - 0xE900, 0xE900, 0xEA5E, 0xEA5E, 0xEA76, 0xEA76, 0xEB64, 0xEB64, + 0xEF86, 0xEF86, 0, }; ImFontConfig outline_config; @@ -357,7 +484,7 @@ void load_fonts(float scale) { } bool sidebar_collapse_row(const char* id, const std::string& label, bool default_open, - float reserved_width, bool show_chevron = true) { + float reserved_width, bool show_chevron = true, bool bold_text = false) { ImGui::PushID(id); const ImGuiID state_id = ImGui::GetID("collapse_state"); ImGuiStorage* storage = ImGui::GetStateStorage(); @@ -370,26 +497,34 @@ bool sidebar_collapse_row(const char* id, const std::string& label, bool default const ImVec2 minimum = ImGui::GetItemRectMin(); const ImVec2 maximum = ImGui::GetItemRectMax(); ImDrawList* draw = ImGui::GetWindowDrawList(); - if (ImGui::IsItemHovered()) draw->AddRectFilled(minimum, maximum, IM_COL32(51, 55, 63, 220)); - constexpr ImU32 icon_color = IM_COL32(144, 150, 160, 255); - constexpr ImU32 text_color = IM_COL32(207, 211, 218, 255); + const bool hovered = ImGui::IsItemHovered(); + if (hovered) draw->AddRectFilled(minimum, maximum, IM_COL32(51, 55, 63, 220)); + constexpr ImU32 icon_color = IM_COL32(112, 118, 128, 255); + const ImU32 chevron_color = hovered + ? IM_COL32(218, 223, 231, 255) : IM_COL32(126, 132, 142, 255); + const ImU32 text_color = hovered + ? IM_COL32(238, 241, 246, 255) : IM_COL32(190, 195, 204, 255); const float y = minimum.y + (size.y - ImGui::GetFontSize()) * 0.5f; + const float icon_size = ImGui::GetFontSize() * 0.90f; + const float icon_y = minimum.y + (size.y - icon_size) * 0.5f; if (show_chevron) - draw->AddText({minimum.x + ui(3.0f), y}, icon_color, - open ? ICON_FA_CHEVRON_DOWN : ICON_FA_CHEVRON_RIGHT); + draw->AddText(g_regular_font, icon_size, {minimum.x + ui(3.0f), icon_y}, chevron_color, + open ? ICON_TB_CHEVRON_DOWN : ICON_TB_CHEVRON_RIGHT); const size_t divider = label.find(" "); if (divider != std::string::npos) { const std::string icon = label.substr(0, divider); const std::string text = label.substr(divider + 2); - const char* rendered_icon = !show_chevron && open && icon == ICON_FA_FOLDER - ? ICON_FA_FOLDER_OPEN : icon.c_str(); + const char* rendered_icon = !show_chevron && open && icon == ICON_TB_FOLDER + ? ICON_TB_FOLDER_OPEN : icon.c_str(); const float icon_x = show_chevron ? 20.0f : 3.0f; const float text_x = show_chevron ? 39.0f : 23.0f; - draw->AddText({minimum.x + ui(icon_x), y}, icon_color, rendered_icon); - draw->AddText({minimum.x + ui(text_x), y}, text_color, text.c_str()); + draw->AddText(g_regular_font, icon_size, {minimum.x + ui(icon_x), icon_y}, + icon_color, rendered_icon); + draw->AddText(bold_text ? g_bold_font : g_regular_font, ImGui::GetFontSize(), + {minimum.x + ui(text_x), y}, text_color, text.c_str()); } else { - draw->AddText({minimum.x + ui(show_chevron ? 20.0f : 3.0f), y}, - text_color, label.c_str()); + draw->AddText(bold_text ? g_bold_font : g_regular_font, ImGui::GetFontSize(), + {minimum.x + ui(show_chevron ? 20.0f : 3.0f), y}, text_color, label.c_str()); } if (clicked) { open = !open; @@ -401,24 +536,32 @@ bool sidebar_collapse_row(const char* id, const std::string& label, bool default bool sidebar_item_row(const char* icon, const std::string& text, const std::string& id, const char* status_icon = nullptr, ImU32 status_color = 0, - ImU32 item_icon_color = IM_COL32(142, 148, 158, 255), - const std::string& trailing_text = {}) { + ImU32 item_icon_color = IM_COL32(112, 118, 128, 255), + const std::string& trailing_text = {}, bool active_branch = false) { ImGui::PushID(id.c_str()); const bool clicked = ImGui::InvisibleButton("##sidebar_item", {-1, ui(24.0f)}); const ImVec2 minimum = ImGui::GetItemRectMin(); const ImVec2 maximum = ImGui::GetItemRectMax(); ImDrawList* draw = ImGui::GetWindowDrawList(); - if (ImGui::IsItemHovered()) draw->AddRectFilled(minimum, maximum, IM_COL32(51, 55, 63, 210)); + const bool hovered = ImGui::IsItemHovered(); + if (active_branch) + draw->AddRectFilled(minimum, maximum, + hovered ? IM_COL32(45, 85, 59, 235) : IM_COL32(35, 68, 48, 220), ui(3.0f)); + else if (hovered) + draw->AddRectFilled(minimum, maximum, IM_COL32(51, 55, 63, 210)); const float y = minimum.y + (maximum.y - minimum.y - ImGui::GetFontSize()) * 0.5f; + const float icon_size = ImGui::GetFontSize() * 0.90f; + const float icon_y = minimum.y + (maximum.y - minimum.y - icon_size) * 0.5f; const float trailing_width = trailing_text.empty() ? 0.0f : ImGui::CalcTextSize(trailing_text.c_str()).x; const float trailing_x = maximum.x - ui(4.0f) - trailing_width; const float content_right = trailing_text.empty() ? maximum.x : trailing_x - ui(7.0f); draw->PushClipRect(minimum, {std::max(minimum.x, content_right), maximum.y}, true); const float content_offset = status_icon ? ui(20.0f) : 0.0f; if (status_icon) - draw->AddText({minimum.x + ui(3.0f), y}, status_color, status_icon); - draw->AddText({minimum.x + ui(3.0f) + content_offset, y}, - item_icon_color, icon); + draw->AddText(g_regular_font, icon_size, {minimum.x + ui(3.0f), icon_y}, + status_color, status_icon); + draw->AddText(g_regular_font, icon_size, + {minimum.x + ui(3.0f) + content_offset, icon_y}, item_icon_color, icon); draw->AddText({minimum.x + ui(23.0f) + content_offset, y}, IM_COL32(205, 209, 216, 255), text.c_str()); draw->PopClipRect(); @@ -441,7 +584,7 @@ bool sidebar_section_is_open(const char* id) { bool sidebar_section_header(const char* label, int count, const char* add_tooltip, const char* add_notice) { const ImVec2 header_min = ImGui::GetCursorScreenPos(); const float header_width = ImGui::GetContentRegionAvail().x; - const bool open = sidebar_collapse_row(label, label, true, ui(62.0f)); + const bool open = sidebar_collapse_row(label, label, true, ui(62.0f), true, true); const ImVec2 mouse = ImGui::GetIO().MousePos; const bool header_hovered = ImGui::IsWindowHovered() && mouse.x >= header_min.x && mouse.x <= header_min.x + header_width && mouse.y >= header_min.y && @@ -519,9 +662,9 @@ enum class SidebarItemKind { worktree, submodule }; void sidebar_item_context(const std::string& item, SidebarItemKind kind) { if (!ImGui::BeginPopupContextItem()) return; - if (kind == SidebarItemKind::submodule && ImGui::MenuItem(ICON_FA_DOWNLOAD " Pull / Update")) + if (kind == SidebarItemKind::submodule && ImGui::MenuItem(ICON_TB_DOWNLOAD " Pull / Update")) g_git_manager->updateSubmodule(repo(), item, g_notice); - if (ImGui::MenuItem(ICON_FA_FOLDER_OPEN " Open in file manager")) { + if (ImGui::MenuItem(ICON_TB_FOLDER_OPEN " Open in file manager")) { std::string error; const std::filesystem::path path = kind == SidebarItemKind::worktree ? g_git_manager->worktreePath(repo(), item, error) @@ -529,7 +672,7 @@ void sidebar_item_context(const std::string& item, SidebarItemKind kind) { if (path.empty() || !izo::OpenPath(path, &error)) g_notice = error; } ImGui::Separator(); - if (ImGui::MenuItem(ICON_FA_COPY " Copy name")) copy_to_clipboard(item, "name"); + if (ImGui::MenuItem(ICON_TB_COPY " Copy name")) copy_to_clipboard(item, "name"); ImGui::EndPopup(); } @@ -538,6 +681,7 @@ void section(const char* label, const std::vector& items, const cha float body_height, float maximum_height, bool resizable) { const bool open = sidebar_section_header(label, static_cast(items.size()), add_tooltip, add_notice); if (open && body_height >= ui(1.0f)) { + if (g_reset_repository_view) ImGui::SetNextWindowScroll({0.0f, 0.0f}); ImGui::BeginChild((std::string(label) + "##body").c_str(), {-1, body_height}); ImGui::Indent(ui(sidebar_child_indent)); const std::vector snapshot = items; @@ -551,7 +695,7 @@ void section(const char* label, const std::vector& items, const cha (status & GIT_SUBMODULE_STATUS_IN_WD) != 0 && GIT_SUBMODULE_STATUS_IS_UNMODIFIED(status); sidebar_item_row(item_icon, item, item, - in_sync ? ICON_FA_CHECK : ICON_FA_TRIANGLE_EXCLAMATION, + in_sync ? ICON_TB_CHECK : ICON_TB_TRIANGLE_EXCLAMATION, in_sync ? IM_COL32(70, 201, 101, 255) : IM_COL32(230, 165, 72, 255)); if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort)) { if (in_sync) @@ -600,14 +744,20 @@ void add_branch_node(BranchNode& root, const std::string& branch) { void branch_context(const std::string& branch, bool remote) { if (!ImGui::BeginPopupContextItem()) return; - if (!remote && ImGui::MenuItem(ICON_FA_CODE_BRANCH " Checkout")) + if (!remote && ImGui::MenuItem(ICON_TB_CODE_BRANCH " Checkout")) { g_git_manager->checkoutBranch(repo(), branch, g_notice); - if (remote && ImGui::MenuItem(ICON_FA_DOWNLOAD " Fetch")) { + clear_sidebar_filter(); + } + if (!remote && ImGui::MenuItem(ICON_TB_UPLOAD " Push branch")) { + g_git_manager->pushBranch(repo(), branch, g_notice); + clear_sidebar_filter(); + } + if (remote && ImGui::MenuItem(ICON_TB_DOWNLOAD " Fetch")) { const size_t slash = branch.find('/'); g_git_manager->fetch(repo(), slash == std::string::npos ? branch : branch.substr(0, slash), g_notice); } ImGui::Separator(); - if (ImGui::MenuItem(ICON_FA_COPY " Copy branch name")) copy_to_clipboard(branch, "branch name"); + if (ImGui::MenuItem(ICON_TB_COPY " Copy branch name")) copy_to_clipboard(branch, "branch name"); ImGui::EndPopup(); } @@ -620,10 +770,10 @@ std::string branch_divergence_text(const std::string& branch, bool remote) { std::string text; if (found->second.ahead > 0) - text = std::to_string(found->second.ahead) + ICON_FA_ARROW_UP; + text = std::to_string(found->second.ahead) + ICON_TB_ARROW_UP; if (found->second.behind > 0) { if (!text.empty()) text += " "; - text += std::to_string(found->second.behind) + ICON_FA_ARROW_DOWN; + text += std::to_string(found->second.behind) + ICON_TB_ARROW_DOWN; } return text; } @@ -631,12 +781,12 @@ std::string branch_divergence_text(const std::string& branch, bool remote) { void draw_branch_nodes(const BranchNode& parent, const char* branch_icon, const char* root_group_icon, bool remote, const std::string& id_path = {}, int depth = 0) { const ImU32 branch_icon_color = remote - ? IM_COL32(88, 94, 105, 255) - : IM_COL32(142, 148, 158, 255); + ? IM_COL32(82, 88, 98, 255) + : IM_COL32(112, 118, 128, 255); for (const auto& [name, node] : parent.children) { const std::string id = id_path + "/" + name; if (!node.children.empty()) { - const char* group_icon = depth == 0 ? root_group_icon : ICON_FA_FOLDER; + const char* group_icon = depth == 0 ? root_group_icon : ICON_TB_FOLDER; const bool open = sidebar_collapse_row( id.c_str(), std::string(group_icon) + " " + name, true, 0, false); if (open) { @@ -644,7 +794,8 @@ void draw_branch_nodes(const BranchNode& parent, const char* branch_icon, const if (node.branch) { const std::string divergence = branch_divergence_text(node.full_name, remote); sidebar_item_row(branch_icon, name, "branch" + id, - nullptr, 0, branch_icon_color, divergence); + nullptr, 0, branch_icon_color, divergence, + !remote && node.full_name == repo().branch); branch_context(node.full_name, remote); } draw_branch_nodes(node, branch_icon, root_group_icon, remote, id, depth + 1); @@ -652,7 +803,8 @@ void draw_branch_nodes(const BranchNode& parent, const char* branch_icon, const } } else { const std::string divergence = branch_divergence_text(node.full_name, remote); - sidebar_item_row(branch_icon, name, id, nullptr, 0, branch_icon_color, divergence); + sidebar_item_row(branch_icon, name, id, nullptr, 0, branch_icon_color, divergence, + !remote && node.full_name == repo().branch); branch_context(node.full_name, remote); } } @@ -663,6 +815,7 @@ void branch_section(const char* label, const std::vector& branches, size_t section_index, float body_height, float maximum_height, bool resizable) { const bool open = sidebar_section_header(label, static_cast(branches.size()), add_tooltip, add_notice); if (open && body_height >= ui(1.0f)) { + if (g_reset_repository_view) ImGui::SetNextWindowScroll({0.0f, 0.0f}); ImGui::BeginChild((std::string(label) + "##body").c_str(), {-1, body_height}); BranchNode root; for (const auto& branch : branches) { @@ -680,26 +833,110 @@ void branch_section(const char* label, const std::vector& branches, } void draw_sidebar(float width) { - ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(39 / 255.0f, 42 / 255.0f, 49 / 255.0f, 1.0f)); - ImGui::BeginChild("sidebar", {width, -ui(28.0f)}, ImGuiChildFlags_None, + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(33 / 255.0f, 36 / 255.0f, 43 / 255.0f, 1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, {ui(10.0f), ui(8.0f)}); + if (g_reset_repository_view) ImGui::SetNextWindowScroll({0.0f, 0.0f}); + ImGui::BeginChild("sidebar", {width, -ui(28.0f)}, ImGuiChildFlags_AlwaysUseWindowPadding, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); + ImGui::PopStyleVar(); + const auto collapse_button = [](const char* icon, const char* tooltip) { + const ImVec2 size{ui(22.0f), ui(22.0f)}; + ImGui::InvisibleButton("##sidebar_collapse", size); + const bool clicked = ImGui::IsItemClicked(); + const ImVec2 minimum = ImGui::GetItemRectMin(); + const float icon_font_size = ImGui::GetFontSize() * 0.90f; + const ImVec2 icon_size = g_regular_font->CalcTextSizeA( + icon_font_size, std::numeric_limits::max(), 0.0f, icon); + ImGui::GetWindowDrawList()->AddText(g_regular_font, icon_font_size, + {minimum.x + (size.x - icon_size.x) * 0.5f, + minimum.y + (size.y - icon_size.y) * 0.5f}, + ImGui::IsItemHovered() ? IM_COL32(224, 229, 236, 255) : IM_COL32(158, 165, 176, 255), icon); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort)) ImGui::SetTooltip("%s", tooltip); + return clicked; + }; + if (g_sidebar_collapsed) { + ImGui::SetCursorPosX((ImGui::GetWindowWidth() - ui(22.0f)) * 0.5f); + if (collapse_button(ICON_TB_CIRCLE_CHEVRON_RIGHT, "Expand sidebar")) + g_sidebar_collapsed = false; + ImGui::Dummy({0.0f, ui(7.0f)}); + struct CompactSection { + const char* icon; + const char* label; + size_t count; + }; + const CompactSection sections[] = { + {ICON_TB_DESKTOP, "Local branches", repo().local_branches.size()}, + {ICON_TB_CLOUD, "Remote branches", repo().remote_branches.size()}, + {ICON_TB_TREE, "Worktrees", repo().worktrees.size()}, + {ICON_TB_LAYERS_LINKED, "Submodules", repo().submodules.size()}, + }; + for (size_t index = 0; index < std::size(sections); ++index) { + ImGui::PushID(static_cast(index)); + const ImVec2 row_size{-1.0f, ui(42.0f)}; + ImGui::InvisibleButton("##compact_section", row_size); + const ImVec2 minimum = ImGui::GetItemRectMin(); + const ImVec2 maximum = ImGui::GetItemRectMax(); + const float icon_font_size = ui(19.0f); + const ImVec2 icon_size = g_regular_font->CalcTextSizeA(icon_font_size, + std::numeric_limits::max(), 0.0f, sections[index].icon); + if (ImGui::IsItemHovered()) + ImGui::GetWindowDrawList()->AddRectFilled(minimum, maximum, IM_COL32(51, 55, 63, 150), ui(4.0f)); + ImGui::GetWindowDrawList()->AddText(g_regular_font, icon_font_size, + {minimum.x + (maximum.x - minimum.x - icon_size.x) * 0.5f, minimum.y + ui(1.0f)}, + IM_COL32(120, 126, 136, 255), sections[index].icon); + const std::string count = std::to_string(sections[index].count); + const ImVec2 count_size = ImGui::CalcTextSize(count.c_str()); + ImGui::GetWindowDrawList()->AddText( + {minimum.x + (maximum.x - minimum.x - count_size.x) * 0.5f, minimum.y + ui(24.0f)}, + IM_COL32(82, 151, 245, 255), count.c_str()); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort)) + ImGui::SetTooltip("%s: %zu", sections[index].label, sections[index].count); + if (ImGui::IsItemClicked()) g_sidebar_collapsed = false; + ImGui::PopID(); + } + ImGui::EndChild(); + ImGui::PopStyleColor(); + return; + } const int viewing_count = static_cast(repo().local_branches.size() + repo().remote_branches.size() + repo().worktrees.size() + repo().submodules.size()); - ImGui::TextDisabled(ICON_FA_EYE " VIEWING %d", viewing_count); + if (collapse_button(ICON_TB_CIRCLE_CHEVRON_LEFT, "Collapse sidebar")) + g_sidebar_collapsed = true; + ImGui::SameLine(0, ui(5.0f)); + ImGui::TextDisabled(ICON_TB_EYE " VIEWING %d", viewing_count); + ImGui::Dummy({0.0f, ui(3.0f)}); ImGui::SetNextItemWidth(-1); - ImGui::InputTextWithHint("##filter", ICON_FA_MAGNIFYING_GLASS " Search sidebar...", + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, ui(4.0f)); + ImGui::PushStyleColor(ImGuiCol_FrameBg, IM_COL32(24, 27, 33, 255)); + ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, IM_COL32(27, 30, 36, 255)); + ImGui::PushStyleColor(ImGuiCol_FrameBgActive, IM_COL32(29, 32, 39, 255)); + ImGui::PushStyleColor(ImGuiCol_Border, IM_COL32(62, 67, 77, 255)); + ImGui::InputTextWithHint("##filter", "Filter (Ctrl + Alt + f)", g_filter.data(), g_filter.size()); - ImGui::Spacing(); + const ImVec2 filter_min = ImGui::GetItemRectMin(); + const ImVec2 filter_max = ImGui::GetItemRectMax(); + ImDrawList* filter_draw = ImGui::GetWindowDrawList(); + const ImVec2 icon_size = ImGui::CalcTextSize(ICON_TB_MAGNIFYING_GLASS); + const ImVec2 icon_position( + filter_max.x - icon_size.x - ui(8.0f), + filter_min.y + ((filter_max.y - filter_min.y) - icon_size.y) * 0.5f); + filter_draw->AddText(icon_position, IM_COL32(136, 143, 154, 255), ICON_TB_MAGNIFYING_GLASS); + ImGui::PopStyleColor(4); + ImGui::PopStyleVar(2); + ImGui::Dummy({0.0f, ui(5.0f)}); + ImGui::Separator(); + ImGui::Dummy({0.0f, ui(3.0f)}); ImGui::BeginChild("sidebar_sections", {-1, -1}, ImGuiChildFlags_None, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); const ImVec2 section_spacing = ImGui::GetStyle().ItemSpacing; ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, {section_spacing.x, 0.0f}); constexpr const char* section_ids[] = { - ICON_FA_DESKTOP " LOCAL", - ICON_FA_CLOUD " REMOTE", - ICON_FA_TREE " WORKTREES", - ICON_FA_CUBES " SUBMODULES", + ICON_TB_DESKTOP " LOCAL", + ICON_TB_CLOUD " REMOTE", + ICON_TB_TREE " WORKTREES", + ICON_TB_LAYERS_LINKED " SUBMODULES", }; std::array section_open{}; std::vector open_indices; @@ -738,16 +975,16 @@ void draw_sidebar(float width) { } } - branch_section(ICON_FA_DESKTOP " LOCAL", repo().local_branches, ICON_FA_CODE_BRANCH, ICON_FA_FOLDER, + branch_section(ICON_TB_DESKTOP " LOCAL", repo().local_branches, ICON_TB_CODE_BRANCH, ICON_TB_FOLDER, "Create local branch", "Create local branch", false, 0, section_heights[0], maximum_heights[0], section_open[0] && last_open != 0); - branch_section(ICON_FA_CLOUD " REMOTE", repo().remote_branches, ICON_FA_CODE_BRANCH, ICON_FA_GLOBE, + branch_section(ICON_TB_CLOUD " REMOTE", repo().remote_branches, ICON_TB_CODE_BRANCH, ICON_TB_GLOBE, "Add remote", "Add remote", true, 1, section_heights[1], maximum_heights[1], section_open[1] && last_open != 1); - section(ICON_FA_TREE " WORKTREES", repo().worktrees, ICON_FA_COMPUTER, + section(ICON_TB_TREE " WORKTREES", repo().worktrees, ICON_TB_COMPUTER, "Add worktree", "Add worktree", SidebarItemKind::worktree, 2, section_heights[2], maximum_heights[2], section_open[2] && last_open != 2); - section(ICON_FA_CUBES " SUBMODULES", repo().submodules, ICON_FA_CUBES, + section(ICON_TB_LAYERS_LINKED " SUBMODULES", repo().submodules, ICON_TB_LAYERS_LINKED, "Add submodule", "Add submodule", SidebarItemKind::submodule, 3, section_heights[3], maximum_heights[3], false); ImGui::PopStyleVar(); @@ -773,62 +1010,116 @@ float outline_icon_width(const char* icon) { float ref_badge_width(const RefBadge& badge) { const std::string display_name = ref_display_name(badge); - float width = ImGui::CalcTextSize(display_name.c_str()).x + ui(14.0f); - if (badge.kind == RefKind::local) - width += outline_icon_width(ICON_TB_CHECK) + outline_icon_width(ICON_TB_DEVICE_LAPTOP) + ui(10.0f); + float width = ImGui::CalcTextSize(display_name.c_str()).x + ui(12.0f); + if (badge.kind == RefKind::local) { + width += outline_icon_width(ICON_TB_DEVICE_LAPTOP) + ui(6.0f); + if (badge.current) width += outline_icon_width(ICON_TB_CHECK) + ui(5.0f); + } if (badge.kind == RefKind::remote || badge.upstream) width += ui(5.0f) + outline_icon_width(ICON_TB_CLOUD); if (badge.kind == RefKind::tag) width += ui(5.0f) + outline_icon_width(ICON_TB_TAG); return width; } -void draw_ref_badge(const RefBadge& badge, int widget_index, int commit_index, int lane) { +size_t primary_ref_index(const CommitInfo& commit) { + const auto current = std::find_if(commit.refs.begin(), commit.refs.end(), [](const RefBadge& badge) { + return badge.kind == RefKind::local && badge.current; + }); + if (current != commit.refs.end()) + return static_cast(std::distance(commit.refs.begin(), current)); + const auto local = std::find_if(commit.refs.begin(), commit.refs.end(), [](const RefBadge& badge) { + return badge.kind == RefKind::local; + }); + return local == commit.refs.end() ? 0 : static_cast(std::distance(commit.refs.begin(), local)); +} + +float overflow_ref_badge_width(size_t count) { + const std::string label = "+" + std::to_string(count); + return ImGui::CalcTextSize(label.c_str()).x + ui(12.0f); +} + +bool draw_overflow_ref_badge(size_t count, int widget_index, int lane, bool row_hovered, + bool force_hover = false, ImDrawList* target_draw = nullptr, + ImDrawFlags corners = ImDrawFlags_RoundCornersAll, int background_alpha = -1) { + const std::string label = "+" + std::to_string(count); + const ImVec2 chip_size{overflow_ref_badge_width(count), ui(20.0f)}; + ImGui::PushID(widget_index); + ImGui::InvisibleButton("##more_refs", chip_size); + const bool hovered = ImGui::IsItemHovered() || force_hover; + const ImVec2 minimum = ImGui::GetItemRectMin(); + const ImVec2 maximum = ImGui::GetItemRectMax(); + ImDrawList* draw = target_draw ? target_draw : ImGui::GetWindowDrawList(); + const int alpha = background_alpha >= 0 ? background_alpha : hovered ? 155 : row_hovered ? 110 : 95; + draw->AddRectFilled(minimum, maximum, + GraphRenderer::laneColor(lane, alpha), ui(3.0f), corners); + const ImVec2 text_size = ImGui::CalcTextSize(label.c_str()); + draw->AddText({minimum.x + (chip_size.x - text_size.x) * 0.5f, + minimum.y + (chip_size.y - text_size.y) * 0.5f}, IM_COL32(197, 203, 212, 255), label.c_str()); + if (hovered) ImGui::SetMouseCursor(ImGuiMouseCursor_Hand); + ImGui::PopID(); + return hovered; +} + +void draw_ref_badge(const RefBadge& badge, int widget_index, int commit_index, int lane, + bool row_hovered = false, bool force_hover = false, ImDrawList* target_draw = nullptr, + ImDrawFlags corners = ImDrawFlags_RoundCornersAll, int background_alpha = -1, + bool interactive = true, const ImVec2* explicit_position = nullptr) { const std::string display_name = ref_display_name(badge); const bool show_cloud = badge.kind == RefKind::remote || badge.upstream; const bool show_tag = badge.kind == RefKind::tag; const ImVec2 chip_size{ref_badge_width(badge), ui(20.0f)}; ImGui::PushID(widget_index); - ImGui::InvisibleButton("##ref_badge", chip_size); + if (interactive) ImGui::InvisibleButton("##ref_badge", chip_size); + const bool item_hovered = (interactive && ImGui::IsItemHovered()) || force_hover; const bool switchable_branch = badge.kind == RefKind::local && !badge.current; - if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) + if (interactive && ImGui::IsItemClicked(ImGuiMouseButton_Left)) { repo().selected_commit = commit_index; - if (switchable_branch && ImGui::IsItemHovered() && - ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) + clear_sidebar_filter(); + } + if (interactive && switchable_branch && ImGui::IsItemHovered() && + ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) { g_pending_branch_checkout = badge.name; - const ImVec2 minimum = ImGui::GetItemRectMin(); - const ImVec2 maximum = ImGui::GetItemRectMax(); - ImDrawList* draw = ImGui::GetWindowDrawList(); - ImU32 background = GraphRenderer::laneColor(lane, badge.current ? 230 : 205); - if (ImGui::IsItemHovered()) background = GraphRenderer::laneColor(lane, 245); - const float rounding = ui(4.0f); - draw->AddRectFilled(minimum, maximum, background, rounding); + clear_sidebar_filter(); + } + const ImVec2 minimum = interactive ? ImGui::GetItemRectMin() : + (explicit_position ? *explicit_position : ImGui::GetCursorScreenPos()); + const ImVec2 maximum = interactive ? ImGui::GetItemRectMax() : + ImVec2{minimum.x + chip_size.x, minimum.y + chip_size.y}; + ImDrawList* draw = target_draw ? target_draw : ImGui::GetWindowDrawList(); + ImU32 background = GraphRenderer::laneColor(lane, background_alpha >= 0 + ? background_alpha : badge.current ? 205 : row_hovered ? 110 : 95); + if (item_hovered && background_alpha < 0) + background = GraphRenderer::laneColor(lane, badge.current ? 235 : 155); + const float rounding = ui(3.0f); + draw->AddRectFilled(minimum, maximum, background, rounding, corners); - float x = minimum.x + ui(6.0f); + float x = minimum.x + ui(5.0f); const float text_y = minimum.y + (chip_size.y - ImGui::GetFontSize()) * 0.5f; const float icon_y = minimum.y + (chip_size.y - g_outline_icon_size) * 0.5f; - const ImU32 color = badge.current ? IM_COL32(248, 250, 252, 255) : IM_COL32(224, 229, 234, 255); + const ImU32 color = badge.current ? IM_COL32(248, 250, 252, 255) : IM_COL32(197, 203, 212, 255); const auto draw_icon = [&](const char* icon) { if (!g_outline_icon_font) return; draw->AddText(g_outline_icon_font, g_outline_icon_size, {x, icon_y}, color, icon); x += outline_icon_width(icon) + ui(5.0f); }; + if (badge.current) draw_icon(ICON_TB_CHECK); draw->AddText({x, text_y}, color, display_name.c_str()); x += ImGui::CalcTextSize(display_name.c_str()).x + ui(5.0f); - if (show_cloud) draw_icon(ICON_TB_CLOUD); if (badge.kind == RefKind::local) draw_icon(ICON_TB_DEVICE_LAPTOP); + if (show_cloud) draw_icon(ICON_TB_CLOUD); if (show_tag) draw_icon(ICON_TB_TAG); - if (badge.current) draw_icon(ICON_TB_CHECK); - if (ImGui::BeginPopupContextItem()) { - if (switchable_branch && ImGui::MenuItem(ICON_FA_CODE_BRANCH " Checkout")) { + if (interactive && ImGui::BeginPopupContextItem()) { + if (switchable_branch && ImGui::MenuItem(ICON_TB_CODE_BRANCH " Checkout")) { g_pending_branch_checkout = badge.name; + clear_sidebar_filter(); ImGui::CloseCurrentPopup(); } - if (ImGui::MenuItem(ICON_FA_COPY " Copy ref name")) copy_to_clipboard(badge.name, "ref name"); + if (ImGui::MenuItem(ICON_TB_COPY " Copy ref name")) copy_to_clipboard(badge.name, "ref name"); ImGui::EndPopup(); } - if (ImGui::IsItemHovered()) { + if (interactive && ImGui::IsItemHovered()) { if (switchable_branch) ImGui::SetMouseCursor(ImGuiMouseCursor_Hand); if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort)) { if (switchable_branch) ImGui::SetTooltip("Double-click to checkout %s", badge.name.c_str()); @@ -841,6 +1132,24 @@ void draw_ref_badge(const RefBadge& badge, int widget_index, int commit_index, i void draw_commit_table() { const ScopedUiScale table_scale(1.10f); + const bool find_shortcut = ImGui::GetIO().KeyCtrl && ImGui::IsKeyPressed(ImGuiKey_F, false); + if (find_shortcut) { + if (g_commit_search_repository != &repo()) { + g_commit_search.fill('\0'); + g_previous_commit_search.clear(); + g_commit_search_match = -1; + } + g_commit_search_repository = &repo(); + g_commit_search_open = true; + g_focus_commit_search = true; + } + if (g_commit_search_open && g_commit_search_repository != &repo()) { + g_commit_search_open = false; + g_commit_search.fill('\0'); + g_previous_commit_search.clear(); + g_commit_search_match = -1; + } + if (!g_pending_commit_jump.empty()) { git_oid target{}; const bool valid_target = git_oid_fromstr(&target, g_pending_commit_jump.c_str()) == 0; @@ -863,19 +1172,102 @@ void draw_commit_table() { } } - const auto commit_visible = [](const CommitInfo& commit) { - if (!g_filter[0]) return true; - if (commit.summary.find(g_filter.data()) != std::string::npos) return true; - return std::any_of(commit.refs.begin(), commit.refs.end(), [](const RefBadge& ref) { - return ref.name.find(g_filter.data()) != std::string::npos; - }); + const auto commit_visible = [](const CommitInfo&) { + return true; }; + const auto search_matches = [](const CommitInfo& commit, const char* query) { + if (!query || !query[0]) return false; + const auto contains = [query](const std::string& text) { + return std::search(text.begin(), text.end(), query, query + std::strlen(query), + [](unsigned char left, unsigned char right) { + return std::tolower(left) == std::tolower(right); + }) != text.end(); + }; + return contains(commit.summary) || contains(commit.description); + }; + + std::vector commit_search_matches; + bool search_submitted = false; + int search_direction = 0; + if (g_commit_search_open) { + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(0.16f, 0.28f, 0.50f, 0.95f)); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.13f, 0.23f, 0.42f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(1, 1, 1, 0.10f)); + ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, ui(3.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, ui(3.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, {ui(5.0f), ui(4.0f)}); + ImGui::BeginChild("commit_search_bar", {-1, ui(34.0f)}, ImGuiChildFlags_None, + ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); + ImGui::SetCursorPos({ui(9.0f), ui(5.0f)}); + ImGui::TextUnformatted(ICON_TB_MAGNIFYING_GLASS); + ImGui::SameLine(); + const float search_controls_width = ui(170.0f); + ImGui::SetNextItemWidth(std::max(ui(90.0f), ImGui::GetContentRegionAvail().x - search_controls_width)); + if (g_focus_commit_search) { + ImGui::SetKeyboardFocusHere(); + g_focus_commit_search = false; + } + search_submitted = ImGui::InputTextWithHint("##commit_search", "find commit", + g_commit_search.data(), g_commit_search.size(), ImGuiInputTextFlags_EnterReturnsTrue); + const bool search_input_active = ImGui::IsItemActive(); + + for (int index = 0; index < static_cast(repo().commits.size()); ++index) { + if (commit_visible(repo().commits[static_cast(index)]) && + search_matches(repo().commits[static_cast(index)], g_commit_search.data())) + commit_search_matches.push_back(index); + } + ImGui::SameLine(); + ImGui::Text("%d results", static_cast(commit_search_matches.size())); + ImGui::SameLine(); + if (ImGui::Button(ICON_TB_ARROW_UP "##previous_commit_match")) search_direction = -1; + ImGui::SameLine(); + if (ImGui::Button(ICON_TB_ARROW_DOWN "##next_commit_match")) search_direction = 1; + ImGui::SameLine(); + if (ImGui::Button(ICON_TB_XMARK "##close_commit_search") || + (search_input_active && ImGui::IsKeyPressed(ImGuiKey_Escape))) { + g_commit_search_open = false; + g_commit_search.fill('\0'); + g_previous_commit_search.clear(); + g_commit_search_match = -1; + } + ImGui::EndChild(); + ImGui::PopStyleVar(3); + ImGui::PopStyleColor(4); + } + + const std::string current_search = g_commit_search.data(); + const bool search_changed = current_search != g_previous_commit_search; + if (search_changed) { + g_previous_commit_search = current_search; + g_commit_search_match = commit_search_matches.empty() ? -1 : 0; + if (!commit_search_matches.empty()) { + repo().selected_commit = commit_search_matches.front(); + repo().scroll_to_commit = commit_search_matches.front(); + } + } else if (search_submitted && !commit_search_matches.empty()) { + search_direction = 1; + } + if (search_direction != 0 && !commit_search_matches.empty()) { + const int count = static_cast(commit_search_matches.size()); + g_commit_search_match = (std::max(0, g_commit_search_match) + search_direction + count) % count; + } + if ((search_changed || search_direction != 0) && g_commit_search_match >= 0 && + g_commit_search_match < static_cast(commit_search_matches.size())) { + const int commit_index = commit_search_matches[static_cast(g_commit_search_match)]; + repo().selected_commit = commit_index; + repo().scroll_to_commit = commit_index; + } + float widest_reference_row = 0.0f; for (const CommitInfo& commit : repo().commits) { - float width = 0.0f; - for (const RefBadge& badge : commit.refs) - width += ref_badge_width(badge) + (width > 0.0f ? ui(4.0f) : 0.0f); + if (commit.refs.empty()) continue; + const size_t primary = primary_ref_index(commit); + float width = ref_badge_width(commit.refs[primary]); + if (commit.refs.size() > 1) + width += overflow_ref_badge_width(commit.refs.size() - 1); + for (const RefBadge& badge : commit.refs) width = std::max(width, ref_badge_width(badge)); widest_reference_row = std::max(widest_reference_row, width); } const float available_table_width = ImGui::GetContentRegionAvail().x; @@ -909,18 +1301,7 @@ void draw_commit_table() { for (size_t index = 0; index < repo().commits.size(); ++index) { const CommitInfo& commit = repo().commits[index]; if (!commit_visible(commit)) continue; - int lines = commit.refs.empty() ? 0 : 1; - float line_width = 0.0f; - for (const RefBadge& badge : commit.refs) { - const float badge_width = ref_badge_width(badge); - const float spacing = line_width > 0.0f ? ui(4.0f) : 0.0f; - if (line_width > 0.0f && line_width + spacing + badge_width > chip_line_width) { - ++lines; - line_width = badge_width; - } else { - line_width += spacing + badge_width; - } - } + const int lines = commit.refs.empty() ? 0 : 1; row_heights[index] = std::max(ui(24.0f), lines * ui(23.0f) + ui(1.0f)); if (g_inline_branch_repository == &repo() && g_inline_branch_commit == static_cast(index)) row_heights[index] = std::max(row_heights[index], ui(30.0f)); @@ -928,6 +1309,7 @@ void draw_commit_table() { ImGuiTableFlags flags = ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY | ImGuiTableFlags_Resizable | + ImGuiTableFlags_NoBordersInBody | ImGuiTableFlags_NoBordersInBodyUntilResize | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoSavedSettings; ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, {ImGui::GetStyle().CellPadding.x, ui(1.0f)}); if (!ImGui::BeginTable("commits", 4, flags, {-1, -1})) { @@ -940,19 +1322,28 @@ void draw_commit_table() { ImGui::TableSetupColumn("GRAPH", ImGuiTableColumnFlags_WidthFixed, graph_width); ImGui::TableSetupColumn("COMMIT MESSAGE", ImGuiTableColumnFlags_WidthFixed, message_width); ImGui::TableSetupColumn("COMMIT DATE / TIME", ImGuiTableColumnFlags_WidthFixed, date_width); + ImGui::PushFont(g_regular_font, ImGui::GetStyle().FontSizeBase * 0.5f); + ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(134, 140, 151, 255)); ImGui::TableHeadersRow(); - const auto graph_row_interaction = [&](const char* id, bool selected, float row_height) { + ImGui::PopStyleColor(); + ImGui::PopFont(); + const float table_body_clip_top = ImGui::GetItemRectMax().y; + const float table_body_clip_bottom = ImGui::GetWindowPos().y + ImGui::GetWindowHeight(); + const auto graph_row_interaction = [&](const char* id, bool selected, float row_height, + bool& hovered) { const ImVec2 cursor = ImGui::GetCursorScreenPos(); const float row_left = cursor.x - ImGui::GetStyle().CellPadding.x; const float row_top = cursor.y - ImGui::GetStyle().CellPadding.y; - const float graph_right = row_left + reference_width + graph_width; + const float message_left = cursor.x; + const float row_right = message_left + message_width + date_width; const ImVec2 mouse = ImGui::GetIO().MousePos; - const bool hovered = ImGui::IsWindowHovered() && mouse.x >= row_left && mouse.x < graph_right && + hovered = ImGui::IsWindowHovered() && mouse.x >= row_left && mouse.x < row_right && mouse.y >= row_top && mouse.y < row_top + row_height; if (selected || hovered) { ImDrawList* draw = ImGui::GetWindowDrawList(); - draw->PushClipRectFullScreen(); - draw->AddRectFilled({row_left, row_top}, {graph_right, row_top + row_height}, + draw->PushClipRect({message_left, table_body_clip_top}, + {row_right, table_body_clip_bottom}, false); + draw->AddRectFilled({message_left, row_top}, {row_right, row_top + row_height}, selected ? IM_COL32(45, 58, 84, 155) : IM_COL32(70, 77, 90, 55)); draw->PopClipRect(); } @@ -963,7 +1354,9 @@ void draw_commit_table() { if (!repo().working_files.empty()) { ImGui::TableNextRow(0, ui(24.0f)); ImGui::TableSetColumnIndex(0); - if (graph_row_interaction("##working_tree", repo().selected_commit == -1, ui(24.0f))) + bool pending_hovered = false; + if (graph_row_interaction("##working_tree", repo().selected_commit == -1, + ui(24.0f), pending_hovered)) repo().selected_commit = -1; ImGui::TableSetColumnIndex(1); const ImVec2 position = ImGui::GetCursorScreenPos(); @@ -976,7 +1369,8 @@ void draw_commit_table() { std::max(ui(1.0f), row_heights.front() - ImGui::GetStyle().CellPadding.y * 2.0f) * 0.5f; const ImVec2 end{lane_x, next_center_y}; const float turn_y = center.y + (end.y - center.y) * 0.55f; - draw->PushClipRectFullScreen(); + draw->PushClipRect({position.x, table_body_clip_top}, + {position.x + graph_width, table_body_clip_bottom}, false); draw_dotted_bezier(draw, center, {center.x, turn_y}, {end.x, turn_y}, end, IM_COL32(23, 181, 204, 235), ui(1.15f), ui(4.2f)); draw->PopClipRect(); @@ -992,9 +1386,9 @@ void draw_commit_table() { else if (file.kind == FileChangeKind::deleted) ++deleted_count; else ++modified_count; } - const std::string modified_text = std::string(ICON_FA_PEN " ") + std::to_string(modified_count); - const std::string added_text = std::string(ICON_FA_PLUS " ") + std::to_string(added_count); - const std::string deleted_text = std::string(ICON_FA_MINUS " ") + std::to_string(deleted_count); + const std::string modified_text = std::string(ICON_TB_PEN " ") + std::to_string(modified_count); + const std::string added_text = std::string(ICON_TB_PLUS " ") + std::to_string(added_count); + const std::string deleted_text = std::string(ICON_TB_MINUS " ") + std::to_string(deleted_count); float count_width = 0.0f; int visible_counts = 0; const auto measure_count = [&](int count, const std::string& text) { @@ -1042,29 +1436,31 @@ void draw_commit_table() { if (!ImGui::IsRectVisible({ui(1.0f), row_height})) continue; const ImVec2 reference_origin = ImGui::GetCursorScreenPos(); std::string row_id = "##commit" + std::to_string(i); - if (graph_row_interaction(row_id.c_str(), repo().selected_commit == i, row_height)) + bool row_hovered = false; + if (graph_row_interaction(row_id.c_str(), repo().selected_commit == i, row_height, row_hovered)) { repo().selected_commit = i; + clear_sidebar_filter(); + } if (ImGui::BeginPopupContextItem()) { - if (ImGui::MenuItem(ICON_FA_COPY " Copy commit hash")) { + if (ImGui::MenuItem(ICON_TB_COPY " Copy commit hash")) { copy_to_clipboard(oid_string(commit.oid), "commit hash"); } - if (ImGui::MenuItem(ICON_FA_COPY " Copy commit message")) + if (ImGui::MenuItem(ICON_TB_COPY " Copy commit message")) copy_to_clipboard(commit.summary, "commit message"); ImGui::Separator(); - if (ImGui::MenuItem(ICON_FA_TAG " Create tag here")) { + if (ImGui::MenuItem(ICON_TB_TAG " Create tag here")) { char target[GIT_OID_SHA1_HEXSIZE + 1]{}; git_oid_tostr(target, sizeof(target), &commit.oid); g_git_target = target; g_tag_create_popup = true; } - if (ImGui::MenuItem(ICON_FA_CODE_BRANCH " Create branch here")) { + if (ImGui::MenuItem(ICON_TB_CODE_BRANCH " Create branch here")) { begin_inline_branch(i); } ImGui::EndPopup(); } float chip_x = reference_origin.x + ui(3.0f); float chip_y = reference_origin.y + ui(0.5f); - const float chip_right = reference_origin.x + chip_line_width; const bool editing_branch = g_inline_branch_repository == &repo() && g_inline_branch_commit == i; if (editing_branch) { ImGui::SetCursorScreenPos({reference_origin.x + ui(3.0f), reference_origin.y + ui(1.0f)}); @@ -1083,15 +1479,67 @@ void draw_commit_table() { ImGui::PopStyleColor(2); if (ImGui::IsKeyPressed(ImGuiKey_Escape)) cancel_inline_branch(); } - for (int ref_index = 0; !editing_branch && ref_index < static_cast(commit.refs.size()); ++ref_index) { - const float badge_width = ref_badge_width(commit.refs[ref_index]); - if (chip_x > reference_origin.x + ui(3.0f) && chip_x + badge_width > chip_right) { - chip_x = reference_origin.x + ui(3.0f); - chip_y += ui(23.0f); + if (!editing_branch && !commit.refs.empty()) { + const size_t primary = primary_ref_index(commit); + const bool refs_expanded = g_expanded_refs_repository == &repo() && g_expanded_refs_commit == i; + const auto draw_badge = [&](size_t ref_index, ImDrawList* target = nullptr, + ImDrawFlags corners = ImDrawFlags_RoundCornersAll, bool force_hover = false, + int background_alpha = -1, bool interactive = true) { + const ImVec2 badge_position{chip_x, chip_y}; + if (interactive) ImGui::SetCursorScreenPos(badge_position); + draw_ref_badge(commit.refs[ref_index], i * 1000 + static_cast(ref_index), + i, commit.graph_color, row_hovered, force_hover, target, corners, + background_alpha, interactive, interactive ? nullptr : &badge_position); + }; + if (refs_expanded) { + float stack_width = ref_badge_width(commit.refs[primary]) + + overflow_ref_badge_width(commit.refs.size() - 1); + for (const RefBadge& badge : commit.refs) + stack_width = std::max(stack_width, ref_badge_width(badge)); + const float stack_height = ui(20.0f) + ui(23.0f) * (commit.refs.size() - 1); + const ImVec2 mouse = ImGui::GetIO().MousePos; + const bool stack_hovered = mouse.x >= reference_origin.x + ui(3.0f) && + mouse.x < reference_origin.x + ui(3.0f) + stack_width && + mouse.y >= reference_origin.y + ui(0.5f) && + mouse.y < reference_origin.y + ui(0.5f) + stack_height; + ImDrawList* overlay = ImGui::GetForegroundDrawList(); + overlay->PushClipRect({reference_origin.x, table_body_clip_top}, + {reference_origin.x + reference_width, table_body_clip_bottom}, false); + draw_badge(primary, overlay, ImDrawFlags_RoundCornersAll, stack_hovered, -1, false); + for (size_t ref_index = 0; ref_index < commit.refs.size(); ++ref_index) { + if (ref_index == primary) continue; + chip_y += ui(23.0f); + chip_x = reference_origin.x + ui(3.0f); + draw_badge(ref_index, overlay, ImDrawFlags_RoundCornersAll, + stack_hovered, -1, false); + } + overlay->PopClipRect(); + if (!stack_hovered) { + g_expanded_refs_repository = nullptr; + g_expanded_refs_commit = -1; + } + } else if (commit.refs.size() == 1) { + draw_badge(primary); + } else { + const float primary_width = ref_badge_width(commit.refs[primary]); + const float more_width = overflow_ref_badge_width(commit.refs.size() - 1); + const float chip_gap = ui(4.0f); + const ImVec2 mouse = ImGui::GetIO().MousePos; + const bool group_hovered = mouse.x >= chip_x && mouse.x < chip_x + primary_width + chip_gap + more_width && + mouse.y >= chip_y && mouse.y < chip_y + ui(20.0f); + const int group_alpha = group_hovered ? + (commit.refs[primary].current ? 235 : 155) : + (commit.refs[primary].current ? 205 : row_hovered ? 110 : 95); + draw_badge(primary, nullptr, ImDrawFlags_RoundCornersAll, group_hovered, group_alpha); + chip_x += primary_width + chip_gap; + ImGui::SetCursorScreenPos({chip_x, chip_y}); + if (draw_overflow_ref_badge(commit.refs.size() - 1, i * 1000 + 999, + commit.graph_color, row_hovered, group_hovered, nullptr, + ImDrawFlags_RoundCornersAll, group_alpha) || group_hovered) { + g_expanded_refs_repository = &repo(); + g_expanded_refs_commit = i; + } } - ImGui::SetCursorScreenPos({chip_x, chip_y}); - draw_ref_badge(commit.refs[ref_index], i * 1000 + ref_index, i, commit.graph_color); - chip_x += badge_width + ui(4.0f); } ImGui::TableSetColumnIndex(1); graph.drawRow(i, commit, repo().commits, row_heights, parent_rows, g_avatar_cache, @@ -1100,19 +1548,35 @@ void draw_commit_table() { ImGui::PushID(i); const ImVec2 message_position = ImGui::GetCursorScreenPos(); ImGui::InvisibleButton("##commit_message", {-1, std::max(ImGui::GetTextLineHeight(), row_height - ui(2.0f))}); - if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) repo().selected_commit = i; + if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) { + repo().selected_commit = i; + clear_sidebar_filter(); + } ImDrawList* message_draw = ImGui::GetWindowDrawList(); message_draw->PushClipRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), true); - message_draw->AddText(message_position, ImGui::GetColorU32(ImGuiCol_Text), commit.summary.c_str()); + const bool searching_commits = g_commit_search_open && g_commit_search[0] != '\0'; + const bool focused_search_match = searching_commits && g_commit_search_match >= 0 && + g_commit_search_match < static_cast(commit_search_matches.size()) && + commit_search_matches[static_cast(g_commit_search_match)] == i; + const bool other_search_match = searching_commits && search_matches(commit, g_commit_search.data()); + const ImU32 summary_color = !searching_commits || focused_search_match + ? ImGui::GetColorU32(ImGuiCol_Text) + : other_search_match ? IM_COL32(170, 175, 184, 180) : IM_COL32(112, 117, 126, 90); + const ImU32 description_color = !searching_commits || focused_search_match + ? IM_COL32(143, 149, 160, 255) + : other_search_match ? IM_COL32(130, 136, 147, 155) : IM_COL32(100, 105, 114, 70); + message_draw->AddText(message_position, summary_color, commit.summary.c_str()); if (!commit.description.empty()) { const float summary_width = ImGui::CalcTextSize(commit.summary.c_str()).x; message_draw->AddText({message_position.x + summary_width + ui(12.0f), message_position.y}, - IM_COL32(143, 149, 160, 255), commit.description.c_str()); + description_color, commit.description.c_str()); } message_draw->PopClipRect(); ImGui::PopID(); ImGui::TableSetColumnIndex(3); + ImGui::PushFont(nullptr, ImGui::GetStyle().FontSizeBase * 0.75f); ImGui::TextDisabled("%s", commit.date.c_str()); + ImGui::PopFont(); } const bool load_more_history = !repo().history_exhausted && repo().commit_walk && ImGui::GetScrollMaxY() - ImGui::GetScrollY() < ImGui::GetWindowHeight() * 1.5f; @@ -1134,11 +1598,11 @@ void draw_commit_table() { } const char* change_icon(FileChangeKind kind) { - if (kind == FileChangeKind::added) return ICON_FA_PLUS; - if (kind == FileChangeKind::deleted) return ICON_FA_MINUS; - if (kind == FileChangeKind::renamed) return ICON_FA_ARROW_RIGHT_ARROW_LEFT; - if (kind == FileChangeKind::modified) return ICON_FA_PEN; - return ICON_FA_FILE; + if (kind == FileChangeKind::added) return ICON_TB_PLUS; + if (kind == FileChangeKind::deleted) return ICON_TB_MINUS; + if (kind == FileChangeKind::renamed) return ICON_TB_ARROW_RIGHT_ARROW_LEFT; + if (kind == FileChangeKind::modified) return ICON_TB_PEN; + return ICON_TB_FILE; } ImVec4 change_color(FileChangeKind kind) { @@ -1149,60 +1613,118 @@ ImVec4 change_color(FileChangeKind kind) { return {0.58f, 0.61f, 0.67f, 1}; } +float file_action_button_width(const char* label) { + return ImGui::CalcTextSize(label).x + ui(16.0f); +} + +bool file_action_button(const char* label, bool positive) { + if (positive) { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.13f, 0.23f, 0.17f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.16f, 0.29f, 0.21f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.18f, 0.33f, 0.24f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.20f, 0.34f, 0.25f, 1.0f)); + } else { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.24f, 0.11f, 0.12f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.30f, 0.14f, 0.15f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.35f, 0.16f, 0.17f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.34f, 0.18f, 0.19f, 1.0f)); + } + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, ui(1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {ui(7.0f), ui(2.0f)}); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, ui(3.0f)); + const bool clicked = ImGui::Button(label, {file_action_button_width(label), ui(21.0f)}); + ImGui::PopStyleVar(3); + ImGui::PopStyleColor(4); + return clicked; +} + +float file_section_toggle_width(const std::string& label) { + return ImGui::CalcTextSize(label.c_str()).x + ui(12.0f); +} + +bool file_section_toggle(const char* id, const std::string& label) { + const float width = file_section_toggle_width(label); + return ImGui::InvisibleButton(id, {width, ui(24.0f)}); +} + void draw_file_row(const std::string& path, FileChangeKind kind, int id, bool working_file = false, bool staged = false, const std::string& action_path = {}, const std::string& commit_id = {}) { ImGui::PushID(id); + ImGui::SetNextItemAllowOverlap(); ImGui::InvisibleButton("##file", {-1, ui(25.0f)}); const std::string& git_path = action_path.empty() ? path : action_path; - if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) { - if (commit_id.empty()) g_diff_viewer.open(repo(), *g_git_manager, git_path, staged, g_notice); - else g_diff_viewer.openCommit(repo(), *g_git_manager, git_path, commit_id, g_notice); - } + const bool row_clicked = ImGui::IsItemClicked(ImGuiMouseButton_Left); + const bool row_hovered = ImGui::IsItemHovered(); const ImVec2 minimum = ImGui::GetItemRectMin(); const ImVec2 maximum = ImGui::GetItemRectMax(); ImDrawList* draw = ImGui::GetWindowDrawList(); - if (ImGui::IsItemHovered()) draw->AddRectFilled(minimum, maximum, IM_COL32(48, 52, 60, 255)); + if (row_hovered) draw->AddRectFilled(minimum, maximum, IM_COL32(48, 52, 60, 255)); const float y = minimum.y + (maximum.y - minimum.y - ImGui::GetFontSize()) * 0.5f; draw->AddText({minimum.x + ui(4.0f), y}, ImGui::ColorConvertFloat4ToU32(change_color(kind)), change_icon(kind)); draw->AddText({minimum.x + ui(20.0f), y}, IM_COL32(205, 209, 216, 255), path.c_str()); if (ImGui::BeginPopupContextItem()) { - if (working_file && !staged && ImGui::MenuItem(ICON_FA_PLUS " Stage file")) + if (working_file && !staged && ImGui::MenuItem(ICON_TB_PLUS " Stage file")) g_git_manager->stageFile(repo(), git_path, g_notice); - if (working_file && staged && ImGui::MenuItem(ICON_FA_MINUS " Unstage file")) + if (working_file && staged && ImGui::MenuItem(ICON_TB_MINUS " Unstage file")) g_git_manager->unstageFile(repo(), git_path, g_notice); - if (working_file && !staged && ImGui::MenuItem(ICON_FA_TRASH_CAN " Discard changes")) + if (working_file && !staged && ImGui::MenuItem(ICON_TB_TRASH_CAN " Discard changes")) g_git_manager->discardFile(repo(), git_path, g_notice); if (working_file) ImGui::Separator(); - if (ImGui::MenuItem(ICON_FA_COPY " Copy path")) copy_to_clipboard(path, "path"); + if (ImGui::MenuItem(ICON_TB_COPY " Copy path")) copy_to_clipboard(path, "path"); ImGui::EndPopup(); } + bool row_action_clicked = false; + if (working_file && row_hovered) { + const char* label = staged ? "Unstage File" : "Stage File"; + const float button_width = file_action_button_width(label); + ImGui::SetCursorScreenPos({maximum.x - button_width - ui(4.0f), minimum.y + ui(2.5f)}); + row_action_clicked = file_action_button(label, !staged); + } + if (row_action_clicked) { + if (staged) g_git_manager->unstageFile(repo(), git_path, g_notice); + else g_git_manager->stageFile(repo(), git_path, g_notice); + } else if (row_clicked) { + if (commit_id.empty()) g_diff_viewer.open(repo(), *g_git_manager, git_path, staged, g_notice); + else g_diff_viewer.openCommit(repo(), *g_git_manager, git_path, commit_id, g_notice); + } ImGui::PopID(); } void draw_file_toolbar(bool show_view_all) { if (show_view_all && g_view_all_files) g_file_view_mode = FileViewMode::tree; - if (ImGui::SmallButton(g_file_sort_ascending ? ICON_FA_ARROW_DOWN_A_Z : ICON_FA_ARROW_DOWN_Z_A)) + if (ImGui::SmallButton(g_file_sort_ascending ? ICON_TB_ARROW_DOWN_A_Z : ICON_TB_ARROW_DOWN_Z_A)) g_file_sort_ascending = !g_file_sort_ascending; if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort)) ImGui::SetTooltip("Sort %s", g_file_sort_ascending ? "Z to A" : "A to Z"); const bool show_path = !show_view_all || !g_view_all_files; - const float controls_width = ui(show_view_all ? (show_path ? 225.0f : 190.0f) : 227.0f); - ImGui::SameLine(std::max(ImGui::GetCursorPosX() + ui(8), ImGui::GetWindowWidth() - controls_width)); + const auto button_width = [](const char* label) { + return ImGui::CalcTextSize(label).x + ImGui::GetStyle().FramePadding.x * 2.0f; + }; + const char* path_label = ICON_TB_BARS " Path"; + const char* tree_label = ICON_TB_FOLDER_TREE " Tree"; + float controls_width = button_width(tree_label); + if (show_path) controls_width += button_width(path_label); + if (show_view_all) { + controls_width += ImGui::GetStyle().ItemSpacing.x + ImGui::GetFontSize() + + ImGui::GetStyle().ItemInnerSpacing.x + ImGui::CalcTextSize("View all files").x; + } + const float controls_right = ImGui::GetContentRegionMax().x - ui(5.0f); + ImGui::SameLine(std::max(ImGui::GetCursorPosX() + ui(8), controls_right - controls_width)); if (show_path) { const bool path_selected = g_file_view_mode == FileViewMode::path; if (path_selected) ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.15f, 0.28f, 0.46f, 1)); - if (ImGui::Button(ICON_FA_BARS " Path")) g_file_view_mode = FileViewMode::path; + if (ImGui::Button(path_label)) g_file_view_mode = FileViewMode::path; if (path_selected) ImGui::PopStyleColor(); ImGui::SameLine(0, 0); } const bool tree_selected = g_file_view_mode == FileViewMode::tree; if (tree_selected) ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.15f, 0.28f, 0.46f, 1)); - if (ImGui::Button(ICON_FA_FOLDER_TREE " Tree")) g_file_view_mode = FileViewMode::tree; + if (ImGui::Button(tree_label)) g_file_view_mode = FileViewMode::tree; if (tree_selected) ImGui::PopStyleColor(); if (show_view_all) { ImGui::SameLine(); - if (ImGui::Checkbox("View all files", &g_view_all_files) && g_view_all_files) + if (text_height_checkbox("View all files", &g_view_all_files) && g_view_all_files) g_file_view_mode = FileViewMode::tree; } } @@ -1244,7 +1766,7 @@ void draw_files(const std::vector& files, bool staged_filter = false, } int id = 0; for (const auto& [group, entries] : groups) { - if (ImGui::TreeNodeEx((std::string(ICON_FA_FOLDER) + " " + group).c_str(), ImGuiTreeNodeFlags_DefaultOpen)) { + if (ImGui::TreeNodeEx((std::string(ICON_TB_FOLDER) + " " + group).c_str(), ImGuiTreeNodeFlags_DefaultOpen)) { ImGui::Indent(ui(12.0f)); for (const File* file : entries) { const size_t slash = file->path.find('/'); @@ -1267,12 +1789,19 @@ void draw_working_details() { ImGui::BeginChild("working_header", {-1, ui(34.0f)}, ImGuiChildFlags_None, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); ImGui::SetCursorPos({0.0f, ui(5.0f)}); - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.27f, 0.10f, 0.11f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.38f, 0.13f, 0.14f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.88f, 0.36f, 0.36f, 1.0f)); - if (ImGui::Button(ICON_FA_TRASH_CAN "##discard_all", {ui(23.0f), ui(23.0f)})) - g_discard_all_popup = true; - ImGui::PopStyleColor(3); + const bool discard_clicked = ImGui::InvisibleButton("##discard_all", {ui(23.0f), ui(23.0f)}); + const ImVec2 discard_minimum = ImGui::GetItemRectMin(); + const ImVec2 discard_maximum = ImGui::GetItemRectMax(); + ImDrawList* header_draw = ImGui::GetWindowDrawList(); + header_draw->AddRectFilled(discard_minimum, discard_maximum, + ImGui::IsItemHovered() ? IM_COL32(97, 33, 36, 255) : IM_COL32(69, 26, 28, 255), ui(3.0f)); + const ImVec2 trash_size = ImGui::CalcTextSize(ICON_TB_TRASH_CAN); + header_draw->AddText({ + discard_minimum.x + (discard_maximum.x - discard_minimum.x - trash_size.x) * 0.5f, + discard_minimum.y + (discard_maximum.y - discard_minimum.y - trash_size.y) * 0.5f - ui(1.0f), + }, IM_COL32(224, 92, 92, 255), ICON_TB_TRASH_CAN); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort)) ImGui::SetTooltip("Discard all changes"); + if (discard_clicked) g_discard_all_popup = true; const std::string changes_label = std::to_string(repo().working_files.size()) + " file changes on"; const float branch_width = ImGui::CalcTextSize(repo().branch.c_str()).x + ui(10.0f); @@ -1299,8 +1828,13 @@ void draw_working_details() { draw_file_toolbar(false); ImGui::EndChild(); - const float composer_height = ui(320.0f); - const float files_height = std::max(ui(140.0f), ImGui::GetContentRegionAvail().y - composer_height); + const float split_height = ImGui::GetContentRegionAvail().y; + const float minimum_files_height = ui(140.0f); + const float minimum_composer_height = ui(180.0f); + const float maximum_composer_height = std::max(minimum_composer_height, split_height - minimum_files_height); + g_working_composer_height = std::clamp(g_working_composer_height, minimum_composer_height, maximum_composer_height); + const float composer_height = g_working_composer_height; + const float files_height = std::max(minimum_files_height, split_height - composer_height); ImGui::BeginChild("working_files", {-1, files_height}, ImGuiChildFlags_None, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); static bool unstaged_open = true; @@ -1318,19 +1852,24 @@ void draw_working_details() { ImGui::BeginChild("unstaged_files", {-1, unstaged_height}, ImGuiChildFlags_None); const ImVec2 unstaged_header = ImGui::GetCursorScreenPos(); - ImGui::InvisibleButton("##unstaged_toggle", {-1, ui(24.0f)}); - if (ImGui::IsItemClicked()) unstaged_open = !unstaged_open; + const std::string unstaged_label = + std::string(unstaged_open ? ICON_TB_CHEVRON_DOWN " " : ICON_TB_CHEVRON_RIGHT " ") + + "Unstaged Files (" + std::to_string(unstaged) + ")"; + file_section_toggle("##unstaged_toggle", unstaged_label); + const bool unstaged_header_clicked = ImGui::IsItemClicked(); ImGui::GetWindowDrawList()->AddText( {unstaged_header.x + ui(4.0f), unstaged_header.y + ui(4.0f)}, ImGui::GetColorU32(ImGuiCol_Text), - (std::string(unstaged_open ? ICON_FA_CHEVRON_DOWN " " : ICON_FA_CHEVRON_RIGHT " ") + - "Unstaged Files (" + std::to_string(unstaged) + ")").c_str()); - ImGui::SetCursorScreenPos({ImGui::GetWindowPos().x + ImGui::GetWindowWidth() - ui(119.0f), + unstaged_label.c_str()); + const float stage_all_width = file_action_button_width("Stage All Changes"); + ImGui::SetCursorScreenPos({ImGui::GetWindowPos().x + ImGui::GetContentRegionMax().x - + stage_all_width - ui(5.0f), unstaged_header.y + ui(2.0f)}); - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.12f, 0.27f, 0.18f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.24f, 0.72f, 0.35f, 1.0f)); - if (ImGui::SmallButton("Stage All Changes")) g_git_manager->stageAll(repo(), g_notice); - ImGui::PopStyleColor(2); + ImGui::BeginDisabled(unstaged == 0); + const bool stage_all_clicked = file_action_button("Stage All Changes", true); + ImGui::EndDisabled(); + if (stage_all_clicked) g_git_manager->stageAll(repo(), g_notice); + else if (unstaged_header_clicked) unstaged_open = !unstaged_open; ImGui::SetCursorScreenPos({unstaged_header.x, unstaged_header.y + ui(24.0f)}); ImGui::Separator(); if (unstaged_open) draw_files(repo().working_files, false, true); @@ -1338,13 +1877,24 @@ void draw_working_details() { ImGui::BeginChild("staged_files", {-1, staged_height}, ImGuiChildFlags_None); const ImVec2 staged_header = ImGui::GetCursorScreenPos(); - ImGui::InvisibleButton("##staged_toggle", {-1, ui(24.0f)}); - if (ImGui::IsItemClicked()) staged_open = !staged_open; + const std::string staged_label = + std::string(staged_open ? ICON_TB_CHEVRON_DOWN " " : ICON_TB_CHEVRON_RIGHT " ") + + "Staged Files (" + std::to_string(staged) + ")"; + file_section_toggle("##staged_toggle", staged_label); + const bool staged_header_clicked = ImGui::IsItemClicked(); ImGui::GetWindowDrawList()->AddText( {staged_header.x + ui(4.0f), staged_header.y + ui(4.0f)}, ImGui::GetColorU32(ImGuiCol_Text), - (std::string(staged_open ? ICON_FA_CHEVRON_DOWN " " : ICON_FA_CHEVRON_RIGHT " ") + - "Staged Files (" + std::to_string(staged) + ")").c_str()); + staged_label.c_str()); + const float unstage_all_width = file_action_button_width("Unstage All Changes"); + ImGui::SetCursorScreenPos({ImGui::GetWindowPos().x + ImGui::GetContentRegionMax().x - + unstage_all_width - ui(5.0f), staged_header.y + ui(2.0f)}); + ImGui::BeginDisabled(staged == 0); + const bool unstage_all_clicked = file_action_button("Unstage All Changes", false); + ImGui::EndDisabled(); + if (unstage_all_clicked) g_git_manager->unstageAll(repo(), g_notice); + else if (staged_header_clicked) staged_open = !staged_open; + ImGui::SetCursorScreenPos({staged_header.x, staged_header.y + ui(24.0f)}); ImGui::Separator(); if (staged_open) draw_files(repo().working_files, true, true); ImGui::EndChild(); @@ -1354,28 +1904,55 @@ void draw_working_details() { ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); const float handle_x = (ImGui::GetWindowWidth() - ui(90.0f)) * 0.5f; const ImVec2 handle = ImGui::GetCursorScreenPos(); + ImGui::SetCursorPosX(handle_x); + ImGui::InvisibleButton("##working_composer_resize", {ui(90.0f), ui(10.0f)}); + const bool composer_resize_active = ImGui::IsItemActive(); + const bool composer_resize_hovered = ImGui::IsItemHovered(); + if (composer_resize_active || composer_resize_hovered) ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeNS); + if (composer_resize_active) { + g_working_composer_height = std::clamp( + g_working_composer_height + ImGui::GetIO().MouseDelta.y, + minimum_composer_height, maximum_composer_height); + } ImGui::GetWindowDrawList()->AddLine( {handle.x + handle_x, handle.y + ui(3.0f)}, {handle.x + handle_x + ui(90.0f), handle.y + ui(3.0f)}, - IM_COL32(56, 59, 65, 255), ui(3.0f)); + composer_resize_active || composer_resize_hovered + ? IM_COL32(23, 181, 204, 255) : IM_COL32(56, 59, 65, 255), + ui(3.0f)); ImGui::Dummy({0.0f, ui(10.0f)}); - ImGui::TextUnformatted(ICON_FA_CIRCLE_DOT " Commit"); - ImGui::SameLine(0, ui(14.0f)); - ImGui::TextDisabled(ICON_FA_DOWNLOAD); - ImGui::SameLine(0, ui(14.0f)); - ImGui::TextDisabled(ICON_FA_CLOUD); + ImGui::TextUnformatted(ICON_TB_CIRCLE_DOT " Commit"); ImGui::Separator(); + ImGui::Indent(ui(8.0f)); static bool amend = false; - ImGui::Checkbox("Amend previous commit", &amend); + text_height_checkbox("Amend previous commit", &amend); - ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(31 / 255.0f, 34 / 255.0f, 39 / 255.0f, 1.0f)); - ImGui::BeginChild("commit_message_card", {-1, ui(165.0f)}, ImGuiChildFlags_Borders); + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(22 / 255.0f, 25 / 255.0f, 30 / 255.0f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(70 / 255.0f, 77 / 255.0f, 89 / 255.0f, 1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ChildBorderSize, ui(1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, ui(4.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, {ui(8.0f), ui(7.0f)}); + ImGui::BeginChild("commit_message_card", {-1, ui(165.0f)}, + ImGuiChildFlags_Borders | ImGuiChildFlags_AlwaysUseWindowPadding); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(15 / 255.0f, 18 / 255.0f, 22 / 255.0f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(15 / 255.0f, 18 / 255.0f, 22 / 255.0f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(15 / 255.0f, 18 / 255.0f, 22 / 255.0f, 1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, ui(3.0f)); const float summary_controls_width = ui(30.0f); + const int commit_summary_recommendation = 72; + const int commit_summary_length = static_cast(std::strlen(g_commit_summary.data())); + const int commit_summary_remaining = commit_summary_recommendation - commit_summary_length; ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x - summary_controls_width); ImGui::InputTextWithHint("##commit_summary", "Commit summary", g_commit_summary.data(), g_commit_summary.size()); ImGui::SameLine(); - ImGui::TextDisabled("72"); + const ImVec4 summary_counter_color = commit_summary_remaining >= 0 + ? ImVec4(0.60f, 0.62f, 0.66f, 1.0f) + : commit_summary_remaining > -10 + ? ImVec4(0.92f, 0.76f, 0.31f, 1.0f) + : ImVec4(0.92f, 0.42f, 0.42f, 1.0f); + ImGui::TextColored(summary_counter_color, "%d", commit_summary_remaining); ImGui::SetNextItemWidth(-1); ImGui::InputTextMultiline("##commit_description", g_commit_description.data(), g_commit_description.size(), {-1, -1}); @@ -1385,15 +1962,18 @@ void draw_working_details() { {description_minimum.x + ui(6.0f), description_minimum.y + ui(5.0f)}, IM_COL32(154, 159, 168, 255), "Description"); } + ImGui::PopStyleVar(2); + ImGui::PopStyleColor(3); ImGui::EndChild(); - ImGui::PopStyleColor(); + ImGui::PopStyleVar(3); + ImGui::PopStyleColor(2); - ImGui::TextDisabled(ICON_FA_CHEVRON_RIGHT " Commit options"); + ImGui::TextDisabled(ICON_TB_CHEVRON_RIGHT " Commit options"); ImGui::BeginDisabled(staged == 0 || g_commit_summary[0] == '\0'); ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.12f, 0.24f, 0.18f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.24f, 0.54f, 0.32f, 1.0f)); - if (ImGui::Button(ICON_FA_CIRCLE_DOT " Stage Changes to Commit", {-1, ui(40.0f)})) { + if (ImGui::Button(ICON_TB_CIRCLE_DOT " Stage Changes to Commit", {-1, ui(40.0f)})) { if (g_git_manager->commit(repo(), g_commit_summary.data(), g_commit_description.data(), amend, g_notice)) { g_commit_summary.fill('\0'); g_commit_description.fill('\0'); @@ -1402,6 +1982,7 @@ void draw_working_details() { } ImGui::PopStyleColor(2); ImGui::EndDisabled(); + ImGui::Unindent(ui(8.0f)); ImGui::EndChild(); } @@ -1409,6 +1990,31 @@ void draw_commit_details() { const int selected = std::clamp(repo().selected_commit, 0, static_cast(repo().commits.size() - 1)); g_git_manager->loadCommitChanges(repo(), selected, g_notice); auto& commit = repo().commits[selected]; + if (!repo().working_files.empty()) { + const std::string changes = std::to_string(repo().working_files.size()) + + (repo().working_files.size() == 1 + ? " file change in working directory" + : " file changes in working directory"); + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(43 / 255.0f, 72 / 255.0f, 139 / 255.0f, 1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, {ui(9.0f), ui(5.0f)}); + ImGui::BeginChild("working_changes_banner", {-1, ui(34.0f)}, + ImGuiChildFlags_AlwaysUseWindowPadding, + ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); + ImGui::PopStyleVar(); + ImGui::AlignTextToFramePadding(); + ImGui::TextUnformatted(changes.c_str()); + const char* view_label = "View Changes"; + const float button_width = ImGui::CalcTextSize(view_label).x + ImGui::GetStyle().FramePadding.x * 2.0f; + ImGui::SameLine(std::max(ImGui::GetCursorPosX() + ui(8.0f), + ImGui::GetContentRegionMax().x - button_width)); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.16f, 0.24f, 0.45f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.20f, 0.31f, 0.58f, 1.0f)); + if (ImGui::Button(view_label)) repo().selected_commit = -1; + ImGui::PopStyleColor(2); + ImGui::EndChild(); + ImGui::PopStyleColor(); + ImGui::Dummy({0.0f, ui(5.0f)}); + } ImGui::TextDisabled("commit:"); ImGui::SameLine(); const std::string commit_hash = oid_string(commit.oid); @@ -1417,11 +2023,19 @@ void draw_commit_details() { const float maximum_message_height = std::clamp( ImGui::GetContentRegionAvail().y / g_ui_scale - 190.0f, 72.0f, 320.0f); g_commit_message_height = std::min(g_commit_message_height, maximum_message_height); - ImGui::BeginChild("message_card", {-1, ui(g_commit_message_height)}, ImGuiChildFlags_Borders); + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(22 / 255.0f, 25 / 255.0f, 30 / 255.0f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(70 / 255.0f, 77 / 255.0f, 89 / 255.0f, 1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ChildBorderSize, ui(1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, ui(4.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, {ui(8.0f), ui(7.0f)}); + ImGui::BeginChild("message_card", {-1, ui(g_commit_message_height)}, + ImGuiChildFlags_Borders | ImGuiChildFlags_AlwaysUseWindowPadding); ImGui::PushTextWrapPos(); ImGui::Text("%s", commit.summary.c_str()); ImGui::PopTextWrapPos(); ImGui::EndChild(); + ImGui::PopStyleVar(3); + ImGui::PopStyleColor(2); ImGui::SetCursorPosX((ImGui::GetWindowWidth() - ui(90.0f)) * 0.5f); ImGui::InvisibleButton("##commit_message_resize", {ui(90.0f), ui(10.0f)}); const bool resize_active = ImGui::IsItemActive(); @@ -1442,7 +2056,13 @@ void draw_commit_details() { const unsigned int author_texture = g_avatar_cache ? g_avatar_cache->textureFor(commit.email) : 0; if (author_texture) { - ImGui::Image(ImTextureRef(static_cast(author_texture)), {ui(40), ui(40)}); + const ImVec2 avatar_size{ui(40.0f), ui(40.0f)}; + ImGui::InvisibleButton("##author_avatar", avatar_size); + const ImVec2 avatar_minimum = ImGui::GetItemRectMin(); + ImGui::GetWindowDrawList()->AddImageRounded( + ImTextureRef(static_cast(author_texture)), + avatar_minimum, {avatar_minimum.x + avatar_size.x, avatar_minimum.y + avatar_size.y}, + {0, 0}, {1, 1}, IM_COL32_WHITE, ui(6.0f)); ImGui::SameLine(); } ImGui::BeginGroup(); @@ -1451,7 +2071,10 @@ void draw_commit_details() { ImGui::EndGroup(); if (!commit.parent_ids.empty()) { const std::string parent_hash = oid_string(commit.parent_ids.front()); - ImGui::SameLine(std::max(ui(180), ImGui::GetWindowWidth() - ui(95))); + const float parent_width = ImGui::CalcTextSize("parent:").x + ui(4.0f) + + ImGui::CalcTextSize(parent_hash.substr(0, 7).c_str()).x; + ImGui::SameLine(std::max(ImGui::GetCursorPosX() + ui(8.0f), + ImGui::GetContentRegionMax().x - parent_width - ui(5.0f))); ImGui::TextDisabled("parent:"); ImGui::SameLine(0, ui(4.0f)); draw_jumpable_hash(std::string_view(parent_hash).substr(0, 7), parent_hash); @@ -1463,9 +2086,9 @@ void draw_commit_details() { else if (file.kind == FileChangeKind::deleted) ++deleted; else ++modified; } - if (modified) ImGui::TextColored(change_color(FileChangeKind::modified), ICON_FA_PEN " %d modified", modified); - if (added) { if (modified) ImGui::SameLine(); ImGui::TextColored(change_color(FileChangeKind::added), ICON_FA_PLUS " %d added", added); } - if (deleted) { if (modified || added) ImGui::SameLine(); ImGui::TextColored(change_color(FileChangeKind::deleted), ICON_FA_MINUS " %d deleted", deleted); } + if (modified) ImGui::TextColored(change_color(FileChangeKind::modified), ICON_TB_PEN " %d modified", modified); + if (added) { if (modified) ImGui::SameLine(); ImGui::TextColored(change_color(FileChangeKind::added), ICON_TB_PLUS " %d added", added); } + if (deleted) { if (modified || added) ImGui::SameLine(); ImGui::TextColored(change_color(FileChangeKind::deleted), ICON_TB_MINUS " %d deleted", deleted); } draw_file_toolbar(true); ImGui::Separator(); if (g_file_view_mode == FileViewMode::tree) ImGui::TextUnformatted("Collapse All"); @@ -1478,8 +2101,9 @@ void draw_commit_details() { } void draw_details(float width) { - ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(39 / 255.0f, 42 / 255.0f, 49 / 255.0f, 1.0f)); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, {ui(10.0f), ui(8.0f)}); + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(33 / 255.0f, 36 / 255.0f, 43 / 255.0f, 1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, {ui(15.0f), ui(8.0f)}); + if (g_reset_repository_view) ImGui::SetNextWindowScroll({0.0f, 0.0f}); ImGui::BeginChild("details", {width, -ui(28.0f)}, ImGuiChildFlags_None); ImGui::PopStyleVar(); if (repo().selected_commit == -1) draw_working_details(); @@ -1512,7 +2136,7 @@ bool toolbar_action(const char* id, const char* label, const char* icon, const c const float icon_x = minimum.x + (maximum.x - minimum.x - icon_size.x) * 0.5f - (dropdown ? ui(4.0f) : 0.0f); draw->AddText({icon_x, minimum.y + ui(25.0f)}, text_color, icon); if (dropdown) - draw->AddText({icon_x + icon_size.x + ui(7.0f), minimum.y + ui(23.0f)}, text_color, ICON_FA_CARET_DOWN); + draw->AddText({icon_x + icon_size.x + ui(7.0f), minimum.y + ui(23.0f)}, text_color, ICON_TB_CARET_DOWN); if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort)) { ImGui::BeginTooltip(); ImGui::TextUnformatted(tooltip); @@ -1563,7 +2187,9 @@ bool toolbar_selector(const char* id, const char* label, const std::string& valu const ImVec2 maximum = ImGui::GetItemRectMax(); ImDrawList* draw = ImGui::GetWindowDrawList(); if (ImGui::IsItemHovered()) draw->AddRectFilled(minimum, maximum, IM_COL32(62, 66, 75, 200)); - draw->AddText({minimum.x + ui(8), minimum.y + ui(3.0f)}, IM_COL32(177, 182, 190, 255), label); + const float label_font_size = ImGui::GetFontSize() * 0.78f; + draw->AddText(g_regular_font, label_font_size, + {minimum.x + ui(8), minimum.y + ui(4.0f)}, IM_COL32(166, 172, 182, 255), label); const float value_width = maximum.x - minimum.x - ui(34.0f); std::string displayed = value; if (ImGui::CalcTextSize(displayed.c_str()).x > value_width) { @@ -1580,7 +2206,7 @@ bool toolbar_selector(const char* id, const char* label, const std::string& valu } draw->AddText({minimum.x + ui(8), minimum.y + ui(25.0f)}, IM_COL32(226, 229, 233, 255), displayed.c_str()); draw->AddText({maximum.x - ui(18), minimum.y + ui(25.0f)}, IM_COL32(160, 165, 174, 255), - trailing_arrow ? ICON_FA_ANGLE_RIGHT : ICON_FA_CARET_DOWN); + trailing_arrow ? ICON_TB_ANGLE_RIGHT : ICON_TB_CARET_DOWN); if (displayed != value && ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort)) ImGui::SetTooltip("%s", value.c_str()); ImGui::PopID(); @@ -1589,18 +2215,18 @@ bool toolbar_selector(const char* id, const char* label, const std::string& valu const char* application_icon(ExternalApplicationId application) { switch (application) { - case ExternalApplicationId::visual_studio_code: return ICON_FA_CODE; - case ExternalApplicationId::visual_studio: return ICON_FA_CUBES; - case ExternalApplicationId::antigravity: return ICON_FA_WINDOW_MAXIMIZE; - case ExternalApplicationId::github_desktop: return ICON_FA_CIRCLE_NODES; - case ExternalApplicationId::file_explorer: return ICON_FA_FOLDER; - case ExternalApplicationId::terminal: return ICON_FA_TERMINAL; - case ExternalApplicationId::git_bash: return ICON_FA_CODE_BRANCH; - case ExternalApplicationId::wsl: return ICON_FA_SERVER; - case ExternalApplicationId::android_studio: return ICON_FA_ROBOT; - case ExternalApplicationId::intellij_idea: return ICON_FA_JET_FIGHTER_UP; + case ExternalApplicationId::visual_studio_code: return ICON_TB_CODE; + case ExternalApplicationId::visual_studio: return ICON_TB_CUBES; + case ExternalApplicationId::antigravity: return ICON_TB_WINDOW_MAXIMIZE; + case ExternalApplicationId::github_desktop: return ICON_TB_CIRCLE_NODES; + case ExternalApplicationId::file_explorer: return ICON_TB_FOLDER; + case ExternalApplicationId::terminal: return ICON_TB_TERMINAL; + case ExternalApplicationId::git_bash: return ICON_TB_CODE_BRANCH; + case ExternalApplicationId::wsl: return ICON_TB_SERVER; + case ExternalApplicationId::android_studio: return ICON_TB_ROBOT; + case ExternalApplicationId::intellij_idea: return ICON_TB_JET_FIGHTER_UP; } - return ICON_FA_ARROW_UP_RIGHT_FROM_SQUARE; + return ICON_TB_ARROW_UP_RIGHT_FROM_SQUARE; } unsigned int application_icon_texture(ExternalApplicationId application) { @@ -1657,10 +2283,10 @@ void draw_open_in_button() { open_minimum.y + (open_button_size.y - icon_size.y) * 0.5f}, IM_COL32(51, 173, 242, 255), fallback); } - const ImVec2 chevron_size = ImGui::CalcTextSize(ICON_FA_CHEVRON_DOWN); + const ImVec2 chevron_size = ImGui::CalcTextSize(ICON_TB_CHEVRON_DOWN); open_draw->AddText({divider_x + (ui(menu_width) - chevron_size.x) * 0.5f, - open_minimum.y + (open_button_size.y - chevron_size.y) * 0.5f}, - IM_COL32(177, 184, 194, 255), ICON_FA_CHEVRON_DOWN); + open_minimum.y + (open_button_size.y - chevron_size.y) * 0.5f - ui(1.5f)}, + IM_COL32(177, 184, 194, 255), ICON_TB_CHEVRON_DOWN); if (open_clicked) { if (menu_segment) ImGui::OpenPopup("open_repository_in"); else open_repository_in(g_open_in_application); @@ -1751,9 +2377,11 @@ void draw_about_popup() { if (!ImGui::BeginPopupModal("About Gitree", nullptr, ImGuiWindowFlags_AlwaysAutoResize)) return; ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.38f, 0.88f, 0.94f, 1.0f)); + ImGui::PushFont(g_bold_font, 0.0f); ImGui::SetWindowFontScale(1.35f); ImGui::TextUnformatted("Gitree"); ImGui::SetWindowFontScale(1.0f); + ImGui::PopFont(); ImGui::PopStyleColor(); ImGui::TextDisabled("Version %s", GITREE_VERSION); ImGui::Dummy({ui(460), ui(8)}); @@ -1789,8 +2417,6 @@ void draw_licenses_popup() { {"iZo", "MIT License", "https://dock-it.dev/Idea-Studios/iZo"}, {"iKv", "CC BY-SA 4.0", "https://dock-it.dev/Idea-Studios/iKv"}, {"Inter", "SIL Open Font License 1.1", "https://github.com/rsms/inter"}, - {"Open Sans", "Apache License 2.0", "https://github.com/googlefonts/opensans"}, - {"Font Awesome Free", "SIL Open Font License 1.1", "https://github.com/FortAwesome/Font-Awesome"}, {"Tabler Icons", "MIT License", "https://github.com/tabler/tabler-icons"}, }; for (const auto& dependency : dependencies) { @@ -1821,7 +2447,7 @@ void draw_git_action_popups() { if (ImGui::IsWindowAppearing()) ImGui::SetKeyboardFocusHere(); const bool submit_with_enter = ImGui::InputText("##local_branch_name", g_git_name.data(), g_git_name.size(), ImGuiInputTextFlags_EnterReturnsTrue); - ImGui::Checkbox("Check out after creating", &checkout_new_branch); + text_height_checkbox("Check out after creating", &checkout_new_branch); ImGui::TextDisabled("Start point: %.12s", g_git_target.empty() ? "HEAD" : g_git_target.c_str()); const bool can_submit = g_git_name[0] != '\0'; ImGui::BeginDisabled(!can_submit); @@ -1963,17 +2589,162 @@ void draw_git_action_popups() { } void draw_popups() { - if (g_init_popup) { ImGui::OpenPopup("Create repository"); g_init_popup = false; } - if (ImGui::BeginPopupModal("Create repository", nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { - ImGui::TextUnformatted("Repository folder"); - ImGui::SetNextItemWidth(ui(520.0f)); - const bool enter = ImGui::InputText("##path", g_path.data(), g_path.size(), ImGuiInputTextFlags_EnterReturnsTrue); - if (enter || ImGui::Button("Create", {ui(90), 0})) { - if (init_repository(g_path.data())) ImGui::CloseCurrentPopup(); - } + static int gitignore_template = 0; + static int license_template = 0; + static bool initialize_lfs = false; + if (g_init_popup) { + g_create_repository_name.fill('\0'); + set_path_buffer(g_create_repository_parent, default_repository_parent()); + std::snprintf(g_create_repository_branch.data(), g_create_repository_branch.size(), "main"); + gitignore_template = 0; + license_template = 0; + initialize_lfs = false; + g_init_popup = false; + ImGui::OpenPopup("Initialize a Repo"); + } + ImGui::SetNextWindowSize({ui(720.0f), ui(405.0f)}, ImGuiCond_Appearing); + if (ImGui::BeginPopupModal("Initialize a Repo", nullptr, ImGuiWindowFlags_NoResize)) { + const float label_width = ui(145.0f); + const float field_width = ui(555.0f); + const auto field_label = [&](const char* label) { + ImGui::AlignTextToFramePadding(); + ImGui::TextUnformatted(label); + ImGui::SameLine(label_width); + }; + field_label("Name"); + ImGui::SetNextItemWidth(field_width); + if (ImGui::IsWindowAppearing()) ImGui::SetKeyboardFocusHere(); + ImGui::InputText("##create_repository_name", g_create_repository_name.data(), + g_create_repository_name.size()); + field_label("Initialize in"); + ImGui::SetNextItemWidth(field_width - ui(82.0f)); + ImGui::InputText("##create_repository_parent", g_create_repository_parent.data(), + g_create_repository_parent.size()); ImGui::SameLine(); - if (ImGui::Button("Cancel", {ui(90), 0})) ImGui::CloseCurrentPopup(); - if (!g_notice.empty()) ImGui::TextColored(ImVec4(0.96f, 0.55f, 0.35f, 1), "%s", g_notice.c_str()); + if (ImGui::Button("Browse", {ui(72.0f), 0})) + pick_folder_into(g_create_repository_parent, "Choose repository parent folder"); + + const std::filesystem::path full_path = std::filesystem::path(g_create_repository_parent.data()) / + g_create_repository_name.data(); + field_label("Full path"); + ImGui::TextDisabled("%s", full_path.string().c_str()); + field_label("Default branch name"); + ImGui::SetNextItemWidth(field_width); + ImGui::InputTextWithHint("##create_repository_branch", "main", + g_create_repository_branch.data(), g_create_repository_branch.size()); + + constexpr const char* gitignore_options[] = {"None", "C / C++", "C#", "Python", "Node"}; + field_label(".gitignore template"); + ImGui::SetNextItemWidth(field_width); + ImGui::Combo("##gitignore_template", &gitignore_template, gitignore_options, + static_cast(std::size(gitignore_options))); + constexpr const char* license_options[] = {"None", "MIT", "Apache 2.0", "GPL-3.0"}; + field_label("License"); + ImGui::SetNextItemWidth(field_width); + ImGui::Combo("##license_template", &license_template, license_options, + static_cast(std::size(license_options))); + ImGui::SetCursorPosX(label_width); + text_height_checkbox("Initialize with Git LFS", &initialize_lfs); + + ImGui::SetCursorPosY(ImGui::GetWindowHeight() - ui(48.0f)); + const float button_width = ui(125.0f); + ImGui::SetCursorPosX(ImGui::GetWindowWidth() - button_width * 2.0f - ui(22.0f)); + if (ImGui::Button("Cancel", {button_width, ui(30.0f)})) ImGui::CloseCurrentPopup(); + ImGui::SameLine(); + const bool can_create = g_create_repository_name[0] && g_create_repository_parent[0] && + g_create_repository_branch[0]; + ImGui::BeginDisabled(!can_create); + if (ImGui::Button("Create Repository", {button_width, ui(30.0f)}) && can_create) { + if (repo().repo) create_new_tab(); + if (init_repository(full_path.string().c_str(), g_create_repository_branch.data())) { + static constexpr const char* gitignores[] = { + "", "build/\n*.obj\n*.o\n*.exe\n.vs/\n.idea/\n", + "bin/\nobj/\n.vs/\n*.user\n", "__pycache__/\n*.py[cod]\n.venv/\n", + "node_modules/\ndist/\n.env\n", + }; + static constexpr const char* licenses[] = { + "", "MIT License\n\nCopyright (c) 2026\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files to deal in the Software without restriction.\n", + "Apache License\nVersion 2.0, January 2004\nhttps://www.apache.org/licenses/LICENSE-2.0\n", + "GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\nhttps://www.gnu.org/licenses/gpl-3.0.txt\n", + }; + if (gitignore_template > 0) + std::ofstream(full_path / ".gitignore") << gitignores[gitignore_template]; + if (license_template > 0) + std::ofstream(full_path / "LICENSE") << licenses[license_template]; + if (initialize_lfs) { + std::string output; + g_git_manager->captureGit(repo(), {"lfs", "install", "--local"}, output, g_notice); + } + g_git_manager->reload(repo(), g_notice); + ImGui::CloseCurrentPopup(); + } + } + ImGui::EndDisabled(); + ImGui::EndPopup(); + } + + static bool shallow_clone = false; + static bool sparse_checkout = false; + if (g_clone_popup) { + set_path_buffer(g_clone_repository_parent, default_repository_parent()); + g_clone_repository_url.fill('\0'); + shallow_clone = false; + sparse_checkout = false; + g_clone_popup = false; + ImGui::OpenPopup("Clone a Repo"); + } + ImGui::SetNextWindowSize({ui(730.0f), ui(330.0f)}, ImGuiCond_Appearing); + if (ImGui::BeginPopupModal("Clone a Repo", nullptr, ImGuiWindowFlags_NoResize)) { + const float label_width = ui(165.0f); + const float field_width = ui(540.0f); + const auto field_label = [&](const char* label) { + ImGui::AlignTextToFramePadding(); + ImGui::TextUnformatted(label); + ImGui::SameLine(label_width); + }; + field_label("Where to clone to"); + ImGui::SetNextItemWidth(field_width - ui(82.0f)); + ImGui::InputText("##clone_parent", g_clone_repository_parent.data(), g_clone_repository_parent.size()); + ImGui::SameLine(); + if (ImGui::Button("Browse", {ui(72.0f), 0})) + pick_folder_into(g_clone_repository_parent, "Choose clone destination"); + field_label("URL"); + ImGui::SetNextItemWidth(field_width); + if (ImGui::IsWindowAppearing()) ImGui::SetKeyboardFocusHere(); + ImGui::InputText("##clone_url", g_clone_repository_url.data(), g_clone_repository_url.size()); + ImGui::SetCursorPosX(label_width); + text_height_checkbox("Shallow clone", &shallow_clone); + ImGui::SetCursorPosX(label_width); + text_height_checkbox("Sparse checkout", &sparse_checkout); + + ImGui::SetCursorPosY(ImGui::GetWindowHeight() - ui(48.0f)); + const float button_width = ui(120.0f); + ImGui::SetCursorPosX(ImGui::GetWindowWidth() - button_width * 2.0f - ui(22.0f)); + if (ImGui::Button("Cancel", {button_width, ui(30.0f)})) ImGui::CloseCurrentPopup(); + ImGui::SameLine(); + const bool can_clone = g_clone_repository_parent[0] && g_clone_repository_url[0]; + ImGui::BeginDisabled(!can_clone); + if (ImGui::Button("Clone Repository", {button_width, ui(30.0f)}) && can_clone) { + std::string repository_name = g_clone_repository_url.data(); + while (!repository_name.empty() && (repository_name.back() == '/' || repository_name.back() == '\\')) + repository_name.pop_back(); + const size_t separator = repository_name.find_last_of("/\\:"); + if (separator != std::string::npos) repository_name.erase(0, separator + 1); + if (repository_name.ends_with(".git")) repository_name.resize(repository_name.size() - 4); + const std::filesystem::path destination = + std::filesystem::path(g_clone_repository_parent.data()) / repository_name; + if (repo().repo) create_new_tab(); + if (g_git_manager->cloneRepository(repo(), g_clone_repository_url.data(), + destination.string(), shallow_clone, g_notice)) { + if (sparse_checkout) { + std::string output; + g_git_manager->captureGit(repo(), {"sparse-checkout", "init", "--cone"}, output, g_notice); + } + persist_repository_session(); + ImGui::CloseCurrentPopup(); + } + } + ImGui::EndDisabled(); ImGui::EndPopup(); } draw_about_popup(); @@ -1985,57 +2756,133 @@ void draw_footer() { ImGui::Separator(); ImGui::TextDisabled("%s", g_notice.empty() ? "Ready" : g_notice.c_str()); const char* version = "Gitree " GITREE_VERSION; - ImGui::SameLine(ImGui::GetWindowWidth() - ImGui::CalcTextSize(version).x - ui(18.0f)); + const std::string zoom_label = std::string(ICON_TB_MAGNIFYING_GLASS " ") + + std::to_string(g_zoom_percent) + "%"; + const float zoom_width = ImGui::CalcTextSize(zoom_label.c_str()).x + ui(12.0f); + const float version_width = ImGui::CalcTextSize(version).x; + ImGui::SameLine(ImGui::GetWindowWidth() - zoom_width - version_width - ui(34.0f)); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.18f, 0.21f, 0.27f, 1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {ui(6.0f), 0.0f}); + if (ImGui::Button(zoom_label.c_str(), {zoom_width, 0})) ImGui::OpenPopup("zoom_selector"); + ImGui::PopStyleVar(); + ImGui::PopStyleColor(2); + if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort)) + ImGui::SetTooltip("UI zoom (Ctrl+mouse wheel is not required)"); + if (ImGui::BeginPopup("zoom_selector")) { + constexpr int zoom_levels[] = {200, 175, 150, 140, 130, 120, 110, 100, 90, 80}; + for (const int zoom : zoom_levels) { + const std::string label = std::to_string(zoom) + "%"; + if (ImGui::Selectable(label.c_str(), zoom == g_zoom_percent)) { + g_zoom_percent = zoom; + g_zoom_reload_requested = true; + if (g_user_data) g_user_data->setZoomPercent(zoom); + ImGui::CloseCurrentPopup(); + } + } + ImGui::EndPopup(); + } + ImGui::SameLine(0, ui(12.0f)); ImGui::TextDisabled("%s", version); } void draw_new_tab() { - ImGui::BeginChild("new_tab", {-1, -ui(28.0f)}, ImGuiChildFlags_Borders); - ImGui::Dummy({0, ui(36)}); - ImGui::SetCursorPosX(ui(42)); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.38f, 0.88f, 0.94f, 1.0f)); - ImGui::SetWindowFontScale(1.45f); - ImGui::TextUnformatted(ICON_FA_CODE_BRANCH " New Tab"); + ImGui::BeginChild("new_tab", {-1, -ui(28.0f)}, ImGuiChildFlags_None); + const float margin = ui(84.0f); + ImGui::SetCursorPos({margin, ui(28.0f)}); + ImGui::PushFont(g_bold_font, 0.0f); + ImGui::SetWindowFontScale(1.25f); + ImGui::TextUnformatted("Repositories"); ImGui::SetWindowFontScale(1.0f); - ImGui::PopStyleColor(); - ImGui::SetCursorPosX(ui(42)); - ImGui::TextDisabled("Open a repository or return to a recently closed tab."); - ImGui::SetCursorPosX(ui(42)); - if (ImGui::Button(ICON_FA_FOLDER_OPEN " Open repository", {ui(190), ui(38)})) + ImGui::PopFont(); + ImGui::SetCursorPosX(margin); + if (ImGui::Button(ICON_TB_FOLDER_OPEN " Open", {ui(92.0f), ui(36.0f)})) pick_and_open_repository(); + ImGui::SameLine(); + if (ImGui::Button(ICON_TB_DOWNLOAD " Clone", {ui(96.0f), ui(36.0f)})) + g_clone_popup = true; + ImGui::SameLine(); + if (ImGui::Button(ICON_TB_PLUS " Create", {ui(100.0f), ui(36.0f)})) + g_init_popup = true; - ImGui::Dummy({0, ui(24)}); - ImGui::SetCursorPosX(ui(42)); - ImGui::TextUnformatted("RECENTLY CLOSED"); - ImGui::SetCursorPosX(ui(42)); - ImGui::BeginChild("recently_closed", {-ui(42), ui(300)}, ImGuiChildFlags_Borders); - const auto& recent = g_user_data->recentlyClosed(); - if (recent.empty()) { - ImGui::TextDisabled("No recently closed repositories yet."); - } else { - for (int i = 0; i < static_cast(recent.size()); ++i) { - const std::filesystem::path path(recent[i]); - std::string name = path.filename().string(); - if (name.empty()) name = path.parent_path().filename().string(); - ImGui::PushID(i); - if (ImGui::Selectable((std::string(ICON_FA_CLOCK_ROTATE_LEFT) + " " + name).c_str(), false, - ImGuiSelectableFlags_AllowDoubleClick, {0, ui(42)})) { - open_repository(recent[i].c_str()); - } - if (ImGui::BeginPopupContextItem()) { - if (ImGui::MenuItem(ICON_FA_FOLDER_OPEN " Open repository")) open_repository(recent[i].c_str()); - if (ImGui::MenuItem(ICON_FA_FOLDER_OPEN " Reveal in file manager")) { - std::string error; - if (!izo::RevealInFileManager(recent[i], &error)) g_notice = error; - } - if (ImGui::MenuItem(ICON_FA_COPY " Copy path")) copy_to_clipboard(recent[i], "path"); - ImGui::EndPopup(); - } - ImGui::SameLine(ui(260)); - ImGui::TextDisabled("%s", recent[i].c_str()); - ImGui::PopID(); + ImGui::SetCursorPosX(margin); + ImGui::SetNextItemWidth(std::max(ui(280.0f), ImGui::GetContentRegionAvail().x - margin)); + ImGui::InputTextWithHint("##repository_filter", ICON_TB_MAGNIFYING_GLASS " Search repositories", + g_repository_filter.data(), g_repository_filter.size()); + ImGui::Dummy({0, ui(7.0f)}); + ImGui::SetCursorPosX(margin); + ImGui::PushFont(g_bold_font, 0.0f); + ImGui::TextUnformatted("Recent"); + ImGui::PopFont(); + + static std::filesystem::path discovered_root; + static std::vector discovered_repositories; + const std::filesystem::path root = default_repository_parent(); + if (discovered_root != root) { + discovered_root = root; + discovered_repositories.clear(); + std::error_code error; + for (std::filesystem::directory_iterator entry(root, + std::filesystem::directory_options::skip_permission_denied, error), end; + !error && entry != end; entry.increment(error)) { + if (!entry->is_directory(error)) continue; + if (std::filesystem::is_directory(entry->path() / ".git", error)) + discovered_repositories.push_back(entry->path().string()); + error.clear(); } + std::ranges::sort(discovered_repositories, {}, [](const std::string& path) { + return std::filesystem::path(path).filename().string(); + }); } + + std::vector repositories; + std::set unique_paths; + const auto add_repository = [&](const std::string& path) { + if (!path.empty() && unique_paths.insert(path).second) repositories.push_back(path); + }; + if (g_user_data) + for (const std::string& path : g_user_data->recentlyClosed()) add_repository(path); + for (const std::string& path : discovered_repositories) add_repository(path); + + ImGui::SetCursorPosX(margin); + ImGui::BeginChild("repository_list", {-margin, -ui(8.0f)}, ImGuiChildFlags_None); + int visible_index = 0; + for (const std::string& repository_path : repositories) { + const std::filesystem::path path(repository_path); + std::string name = path.filename().string(); + if (name.empty()) name = path.parent_path().filename().string(); + if (g_repository_filter[0] && + !contains_case_insensitive(name, g_repository_filter.data()) && + !contains_case_insensitive(repository_path, g_repository_filter.data())) + continue; + ImGui::PushID(visible_index++); + const bool clicked = ImGui::Selectable("##repository", false, + ImGuiSelectableFlags_None, {0, ui(22.0f)}); + const ImVec2 minimum = ImGui::GetItemRectMin(); + ImDrawList* draw = ImGui::GetWindowDrawList(); + const float row_font_size = ImGui::GetFontSize(); + draw->AddText(g_bold_font, row_font_size, + {minimum.x + ui(3.0f), minimum.y + ui(2.0f)}, + IM_COL32(45, 192, 238, 255), name.c_str()); + const float name_width = g_bold_font->CalcTextSizeA( + row_font_size, std::numeric_limits::max(), 0.0f, name.c_str()).x; + draw->AddText({minimum.x + name_width + ui(14.0f), minimum.y + ui(2.0f)}, + IM_COL32(137, 143, 154, 255), repository_path.c_str()); + if (clicked) open_repository(repository_path.c_str()); + if (ImGui::BeginPopupContextItem()) { + if (ImGui::MenuItem(ICON_TB_FOLDER_OPEN " Open repository")) + open_repository(repository_path.c_str()); + if (ImGui::MenuItem(ICON_TB_FOLDER_OPEN " Reveal in file manager")) { + std::string error; + if (!izo::RevealInFileManager(repository_path, &error)) g_notice = error; + } + if (ImGui::MenuItem(ICON_TB_COPY " Copy path")) + copy_to_clipboard(repository_path, "path"); + ImGui::EndPopup(); + } + ImGui::PopID(); + } + if (visible_index == 0) ImGui::TextDisabled("No repositories found."); ImGui::EndChild(); ImGui::EndChild(); } @@ -2047,8 +2894,20 @@ void draw_app() { ImGui::Begin("Gitree", nullptr, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_MenuBar); + const bool control_down = ImGui::GetIO().KeyCtrl && !ImGui::GetIO().KeyAlt; + bool create_tab_requested = control_down && !ImGui::GetIO().KeyShift && + ImGui::IsKeyPressed(ImGuiKey_T, false); + bool reopen_tab_requested = control_down && ImGui::GetIO().KeyShift && + ImGui::IsKeyPressed(ImGuiKey_T, false); + bool close_tab_requested = control_down && ImGui::IsKeyPressed(ImGuiKey_W, false); if (ImGui::BeginMenuBar()) { if (ImGui::BeginMenu("File")) { + if (ImGui::MenuItem("New tab", "Ctrl+T")) create_tab_requested = true; + if (ImGui::MenuItem("Close tab", "Ctrl+W")) close_tab_requested = true; + ImGui::BeginDisabled(!g_user_data || g_user_data->recentlyClosed().empty()); + if (ImGui::MenuItem("Reopen closed tab", "Ctrl+Shift+T")) reopen_tab_requested = true; + ImGui::EndDisabled(); + ImGui::Separator(); if (ImGui::MenuItem("Open repository...", "Ctrl+O")) pick_and_open_repository(); if (ImGui::MenuItem("Create repository...", "Ctrl+N")) g_init_popup = true; ImGui::Separator(); @@ -2067,31 +2926,48 @@ void draw_app() { ImGui::EndMenuBar(); } + if (close_tab_requested && !g_tabs.empty()) close_tab(g_active_tab); + if (reopen_tab_requested && g_user_data) { + const std::string path = g_user_data->takeRecentlyClosed(); + if (!path.empty()) { + const bool created_tab = repo().repo != nullptr || !repo().path.empty(); + if (created_tab) create_new_tab(); + if (!open_repository(path.c_str())) { + g_user_data->addRecentlyClosed(path); + if (created_tab) close_tab(g_active_tab); + } + } + } + if (create_tab_requested) create_new_tab(); + size_t tab_to_close = g_tabs.size(); size_t tab_move_from = g_tabs.size(); size_t tab_move_to = g_tabs.size(); bool add_tab = false; - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {ImGui::GetStyle().FramePadding.x, ui(5.0f)}); + const float current_tab_height = ImGui::GetFontSize() + ui(10.0f); + const float taller_tab_padding = (current_tab_height * 1.10f - ImGui::GetFontSize()) * 0.5f; + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, + {ImGui::GetStyle().FramePadding.x, taller_tab_padding}); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, {ImGui::GetStyle().ItemSpacing.x, 0.0f}); const ImVec2 tab_strip_minimum = ImGui::GetCursorScreenPos(); ImGui::GetWindowDrawList()->AddRectFilled(tab_strip_minimum, {tab_strip_minimum.x + ImGui::GetContentRegionAvail().x, tab_strip_minimum.y + ImGui::GetFrameHeight()}, - IM_COL32(31, 31, 31, 255)); + IM_COL32(43, 47, 56, 255)); if (ImGui::BeginTabBar("repositories", ImGuiTabBarFlags_AutoSelectNewTabs)) { for (size_t i = 0; i < g_tabs.size(); ++i) { ImGui::PushID(g_tabs[i].get()); bool open = true; - const std::string label = g_tabs[i]->name + "###repo_tab"; + const std::string label = (g_tabs[i]->repo ? std::string(ICON_TB_CODE_BRANCH " ") : "") + + g_tabs[i]->name + "###repo_tab"; const ImGuiTabItemFlags flags = (g_tabs[i].get() == g_tab_to_select ? ImGuiTabItemFlags_SetSelected : ImGuiTabItemFlags_None) | ImGuiTabItemFlags_NoReorder; + ImGui::PushFont(g_bold_font, 0.0f); if (ImGui::BeginTabItem(label.c_str(), &open, flags)) { - if (g_active_tab != i) { - g_active_tab = i; - persist_repository_session(); - } + if (g_active_tab != i) activate_repository_tab(i); ImGui::EndTabItem(); } + ImGui::PopFont(); if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceAllowNullID)) { ImGui::SetDragDropPayload("GITREE_REPOSITORY_TAB", &i, sizeof(i)); ImGui::TextUnformatted(g_tabs[i]->name.c_str()); @@ -2105,14 +2981,14 @@ void draw_app() { ImGui::EndDragDropTarget(); } if (ImGui::BeginPopupContextItem()) { - if (!g_tabs[i]->path.empty() && ImGui::MenuItem(ICON_FA_FOLDER_OPEN " Reveal in file manager")) { + if (!g_tabs[i]->path.empty() && ImGui::MenuItem(ICON_TB_FOLDER_OPEN " Reveal in file manager")) { std::string error; if (!izo::RevealInFileManager(g_tabs[i]->path, &error)) g_notice = error; } - if (!g_tabs[i]->path.empty() && ImGui::MenuItem(ICON_FA_COPY " Copy repository path")) + if (!g_tabs[i]->path.empty() && ImGui::MenuItem(ICON_TB_COPY " Copy repository path")) copy_to_clipboard(g_tabs[i]->path, "repository path"); ImGui::Separator(); - if (ImGui::MenuItem(ICON_FA_XMARK " Close tab")) tab_to_close = i; + if (ImGui::MenuItem(ICON_TB_XMARK " Close tab")) tab_to_close = i; ImGui::EndPopup(); } if (!open) tab_to_close = i; @@ -2128,11 +3004,11 @@ void draw_app() { ImDrawList* tab_draw = ImGui::GetWindowDrawList(); if (add_hovered) tab_draw->AddRectFilled(add_minimum, add_maximum, IM_COL32(51, 55, 63, 255), ui(5.0f)); - const ImVec2 add_icon_size = ImGui::CalcTextSize(ICON_FA_PLUS); + const ImVec2 add_icon_size = ImGui::CalcTextSize(ICON_TB_PLUS); tab_draw->AddText({ add_minimum.x + (add_maximum.x - add_minimum.x - add_icon_size.x) * 0.5f, add_minimum.y + (add_maximum.y - add_minimum.y - add_icon_size.y) * 0.5f, - }, IM_COL32(214, 221, 231, 255), ICON_FA_PLUS); + }, IM_COL32(214, 221, 231, 255), ICON_TB_PLUS); if (add_hovered) ImGui::SetTooltip("New tab"); ImGui::EndTabBar(); g_tab_to_select = nullptr; @@ -2156,32 +3032,53 @@ void draw_app() { draw_new_tab(); draw_footer(); draw_popups(); + g_reset_repository_view = false; ImGui::End(); return; } + const bool code_viewer_open = g_diff_viewer.isOpen(); + if (code_viewer_open && ImGui::IsKeyPressed(ImGuiKey_Escape, false)) { + g_diff_viewer.close(); + } + if (code_viewer_open && !g_previous_code_viewer_open) { + g_sidebar_collapsed_before_viewer = g_sidebar_collapsed; + if (!g_sidebar_collapsed) { + g_sidebar_collapsed = true; + g_sidebar_auto_collapsed = true; + } else { + g_sidebar_auto_collapsed = false; + } + } else if (!code_viewer_open && g_previous_code_viewer_open) { + if (g_sidebar_auto_collapsed) g_sidebar_collapsed = g_sidebar_collapsed_before_viewer; + g_sidebar_auto_collapsed = false; + } + g_previous_code_viewer_open = code_viewer_open; + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, {ImGui::GetStyle().ItemSpacing.x, 0.0f}); - ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(51 / 255.0f, 55 / 255.0f, 63 / 255.0f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(46 / 255.0f, 50 / 255.0f, 59 / 255.0f, 1.0f)); ImGui::BeginChild("repo_toolbar", {-1, ui(50)}, ImGuiChildFlags_None, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); ImGui::SetCursorPos({ui(5), ui(2)}); + ImGui::PushFont(g_bold_font, 0.0f); const float repository_width = std::clamp( ImGui::CalcTextSize(repo().name.c_str()).x / g_ui_scale + 42.0f, 120.0f, 220.0f); - if (toolbar_selector("repository", "repository", repo().name, repository_width)) + const bool repository_selector_clicked = + toolbar_selector("repository", "repository", repo().name, repository_width); + ImGui::PopFont(); + if (repository_selector_clicked) ImGui::OpenPopup("repository_selector"); if (ImGui::BeginPopup("repository_selector")) { for (size_t index = 0; index < g_tabs.size(); ++index) { if (ImGui::MenuItem(g_tabs[index]->name.c_str(), nullptr, index == g_active_tab)) { - g_active_tab = index; - g_tab_to_select = g_tabs[index].get(); - persist_repository_session(); + activate_repository_tab(index); } } ImGui::EndPopup(); } ImGui::SameLine(0, ui(3)); ImGui::SetCursorPosY(ui(23)); - ImGui::TextDisabled(ICON_FA_ANGLE_RIGHT); + ImGui::TextDisabled(ICON_TB_ANGLE_RIGHT); ImGui::SameLine(0, ui(3)); ImGui::SetCursorPosY(ui(2)); if (g_request_branch_selector) { @@ -2196,16 +3093,17 @@ void draw_app() { if (ImGui::BeginPopup("branch_selector", ImGuiWindowFlags_NoResize)) { if (ImGui::IsWindowAppearing()) ImGui::SetKeyboardFocusHere(); ImGui::SetNextItemWidth(-1); - ImGui::InputTextWithHint("##branch_search", ICON_FA_MAGNIFYING_GLASS " Search branches...", + ImGui::InputTextWithHint("##branch_search", ICON_TB_MAGNIFYING_GLASS " Search branches...", g_branch_filter.data(), g_branch_filter.size()); ImGui::Separator(); ImGui::TextDisabled("LOCAL BRANCHES"); ImGui::BeginChild("branch_results", {-1, -1}, ImGuiChildFlags_None); for (const auto& branch : repo().local_branches) { if (!contains_case_insensitive(branch, g_branch_filter.data())) continue; - const std::string item = (branch == repo().branch ? std::string(ICON_FA_CHECK " ") : " ") + branch; + const std::string item = (branch == repo().branch ? std::string(ICON_TB_CHECK " ") : " ") + branch; if (ImGui::Selectable(item.c_str(), branch == repo().branch) && branch != repo().branch) { g_git_manager->checkoutBranch(repo(), branch, g_notice); + clear_sidebar_filter(); ImGui::CloseCurrentPopup(); } } @@ -2219,58 +3117,63 @@ void draw_app() { const float centered_x = (ImGui::GetWindowWidth() - action_group_width) * 0.5f; ImGui::SetCursorPos({std::max(selectors_right + ui(10.0f), centered_x), ui(2.0f)}); - if (toolbar_action("undo", "Undo", ICON_FA_ROTATE_LEFT, "Undo last Git action", true, false, 54)) + if (toolbar_action("undo", "Undo", ICON_TB_ROTATE_LEFT, "Undo last Git action", true, false, 54)) g_git_manager->undoCommit(repo(), g_notice); ImGui::SameLine(0, action_spacing); - if (toolbar_action("redo", "Redo", ICON_FA_ROTATE_RIGHT, "Redo last Git action", true, false, 54)) + if (toolbar_action("redo", "Redo", ICON_TB_ROTATE_RIGHT, "Redo last Git action", true, false, 54)) g_git_manager->redoCommit(repo(), g_notice); ImGui::SameLine(0, action_spacing); bool pull_dropdown_clicked = false; - if (toolbar_action("pull", "Pull", ICON_FA_DOWNLOAD, pull_mode_name(g_user_data->pullMode()), + if (toolbar_action("pull", "Pull", ICON_TB_DOWNLOAD, pull_mode_name(g_user_data->pullMode()), true, true, 58, &pull_dropdown_clicked)) g_git_manager->pull(repo(), g_user_data->pullMode(), g_notice); if (pull_dropdown_clicked) ImGui::OpenPopup("pull_options"); draw_pull_options(); ImGui::SameLine(0, action_spacing); - if (toolbar_action("push", "Push", ICON_FA_UPLOAD, "Push to remote", true, false, 58)) + if (toolbar_action("push", "Push", ICON_TB_UPLOAD, "Push to remote", true, false, 58)) g_git_manager->push(repo(), g_notice); ImGui::SameLine(0, action_spacing); - if (toolbar_action("branch_action", "Branch", ICON_FA_CODE_BRANCH, "Create branch", true, false, 64)) { + if (toolbar_action("branch_action", "Branch", ICON_TB_CODE_BRANCH, "Create branch", true, false, 64)) { begin_inline_branch(repo().selected_commit >= 0 ? repo().selected_commit : 0); } ImGui::SameLine(0, action_spacing); - if (toolbar_action("stash", "Stash", ICON_FA_BOX_ARCHIVE, "Stash changes", true, false, 58)) + if (toolbar_action("stash", "Stash", ICON_TB_BOX_ARCHIVE, "Stash changes", true, false, 58)) g_git_manager->stash(repo(), g_notice); ImGui::SameLine(0, action_spacing); - if (toolbar_action("pop", "Pop", ICON_FA_BOX_OPEN, "Pop latest stash", true, false, 54)) + if (toolbar_action("pop", "Pop", ICON_TB_BOX_OPEN, "Pop latest stash", true, false, 54)) g_git_manager->popStash(repo(), g_notice); draw_open_in_button(); ImGui::EndChild(); ImGui::PopStyleColor(); ImGui::PopStyleVar(); - draw_sidebar(ui(g_sidebar_width)); + draw_sidebar(ui(g_sidebar_collapsed ? 44.0f : g_sidebar_width)); ImGui::SameLine(0, 0); - ImGui::InvisibleButton("##sidebar_splitter", {ui(6.0f), -ui(28.0f)}); - if (ImGui::IsItemHovered() || ImGui::IsItemActive()) ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW); - if (ImGui::IsItemActive()) { - g_sidebar_width = std::clamp(g_sidebar_width + ImGui::GetIO().MouseDelta.x / g_ui_scale, 180.0f, 520.0f); + if (!g_sidebar_collapsed) { + ImGui::InvisibleButton("##sidebar_splitter", {ui(6.0f), -ui(28.0f)}); + if (ImGui::IsItemHovered() || ImGui::IsItemActive()) ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW); + if (ImGui::IsItemActive()) { + g_sidebar_width = std::clamp( + g_sidebar_width + ImGui::GetIO().MouseDelta.x / g_ui_scale, 180.0f, 520.0f); + } + const ImVec2 splitter_min = ImGui::GetItemRectMin(); + const ImVec2 splitter_max = ImGui::GetItemRectMax(); + ImGui::GetWindowDrawList()->AddLine( + {(splitter_min.x + splitter_max.x) * 0.5f, splitter_min.y}, + {(splitter_min.x + splitter_max.x) * 0.5f, splitter_max.y}, + ImGui::IsItemHovered() || ImGui::IsItemActive() + ? IM_COL32(23, 181, 204, 255) : IM_COL32(0, 0, 0, 0), ui(1.0f)); + ImGui::SameLine(0, 0); } - const ImVec2 splitter_min = ImGui::GetItemRectMin(); - const ImVec2 splitter_max = ImGui::GetItemRectMax(); - ImGui::GetWindowDrawList()->AddLine( - {(splitter_min.x + splitter_max.x) * 0.5f, splitter_min.y}, - {(splitter_min.x + splitter_max.x) * 0.5f, splitter_max.y}, - ImGui::IsItemHovered() || ImGui::IsItemActive() ? IM_COL32(23, 181, 204, 255) : IM_COL32(0, 0, 0, 0), - ui(1.0f)); - ImGui::SameLine(0, 0); const float content_width = ImGui::GetContentRegionAvail().x; const float details_maximum = std::max(180.0f, std::min(650.0f, (content_width - ui(306.0f)) / g_ui_scale)); g_details_width = std::clamp(g_details_width, std::min(280.0f, details_maximum), details_maximum); const float detail_width = ui(g_details_width); + if (g_reset_repository_view) ImGui::SetNextWindowScroll({0.0f, 0.0f}); ImGui::BeginChild("center", {content_width - detail_width - ui(6.0f), -ui(28.0f)}, false); - if (g_diff_viewer.isOpen()) g_diff_viewer.draw(repo(), *g_git_manager, g_ui_scale, g_notice); + if (g_diff_viewer.isOpen()) + g_diff_viewer.draw(repo(), *g_git_manager, g_avatar_cache, g_ui_scale, g_code_font, g_notice); else draw_commit_table(); ImGui::EndChild(); ImGui::SameLine(0, 0); @@ -2293,6 +3196,7 @@ void draw_app() { ? IM_COL32(23, 181, 204, 255) : IM_COL32(0, 0, 0, 0), ui(1.0f)); ImGui::SameLine(0, 0); draw_details(detail_width); + g_reset_repository_view = false; draw_footer(); draw_popups(); @@ -2311,6 +3215,7 @@ int runGitree(int argc, char** argv) { g_user_data = &user_data; g_sidebar_width = user_data.sidebarWidth(); g_details_width = user_data.detailsWidth(); + g_zoom_percent = user_data.zoomPercent(); if (argc > 1) { create_new_tab(false); @@ -2338,13 +3243,17 @@ int runGitree(int argc, char** argv) { ImGui::CreateContext(); ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; ImGui::GetIO().IniFilename = user_data.imguiIniPath().c_str(); - load_fonts(window_manager.dpiScale()); + load_fonts(window_manager.dpiScale() * static_cast(g_zoom_percent) / 100.0f); ImGui_ImplGlfw_InitForOpenGL(window_manager.nativeWindow(), true); ImGui_ImplOpenGL3_Init("#version 330"); while (!window_manager.shouldClose()) { window_manager.pollEvents(); - if (window_manager.consumeDpiChange()) load_fonts(window_manager.dpiScale()); + const bool dpi_changed = window_manager.consumeDpiChange(); + if (dpi_changed || g_zoom_reload_requested) { + load_fonts(window_manager.dpiScale() * static_cast(g_zoom_percent) / 100.0f); + g_zoom_reload_requested = false; + } ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); diff --git a/src/ui/graph_renderer.cpp b/src/ui/graph_renderer.cpp index caa18d2..c0c65a5 100644 --- a/src/ui/graph_renderer.cpp +++ b/src/ui/graph_renderer.cpp @@ -2,42 +2,95 @@ #include "managers/avatar_cache.h" #include "models/repository.h" -#include +#include #include +#include #include +#include namespace { +template +void drawRoundedPolyline(ImDrawList* draw, const std::array& points, + float radius, ImU32 color, float thickness) { + static_assert(Count >= 2); + draw->PathClear(); + draw->PathLineTo(points.front()); + for (size_t index = 1; index + 1 < Count; ++index) { + const ImVec2 previous = points[index - 1]; + const ImVec2 corner = points[index]; + const ImVec2 next = points[index + 1]; + const float incoming_length = std::hypot(corner.x - previous.x, corner.y - previous.y); + const float outgoing_length = std::hypot(next.x - corner.x, next.y - corner.y); + if (incoming_length < 0.01f || outgoing_length < 0.01f) continue; + const float turn_radius = std::min({radius, incoming_length * 0.5f, outgoing_length * 0.5f}); + const ImVec2 incoming{ + (corner.x - previous.x) / incoming_length, + (corner.y - previous.y) / incoming_length, + }; + const ImVec2 outgoing{ + (next.x - corner.x) / outgoing_length, + (next.y - corner.y) / outgoing_length, + }; + const ImVec2 before{ + corner.x - incoming.x * turn_radius, + corner.y - incoming.y * turn_radius, + }; + const ImVec2 after{ + corner.x + outgoing.x * turn_radius, + corner.y + outgoing.y * turn_radius, + }; + constexpr float control = 0.55228475f; + draw->PathLineTo(before); + draw->PathBezierCubicCurveTo( + {before.x + incoming.x * turn_radius * control, + before.y + incoming.y * turn_radius * control}, + {after.x - outgoing.x * turn_radius * control, + after.y - outgoing.y * turn_radius * control}, + after); + } + draw->PathLineTo(points.back()); + draw->PathStroke(color, ImDrawFlags_None, thickness); +} + void drawOrthogonalEdge(ImDrawList* draw, const ImVec2& child, const ImVec2& parent, - ImU32 color, float scale, int route_slot) { + ImU32 color, float scale, int route_slot, float detour_x) { const float thickness = 2.0f * scale; - const auto stroke = [&](ImU32 stroke_color, float stroke_thickness) { - draw->PathClear(); - draw->PathLineTo(child); - const float horizontal = parent.x - child.x; - const float vertical = parent.y - child.y; - if (std::abs(horizontal) < 0.5f * scale || vertical <= 0.0f) { - draw->PathLineTo(parent); - draw->PathStroke(stroke_color, stroke_thickness); - return; - } + const float horizontal = parent.x - child.x; + const float vertical = parent.y - child.y; + if (vertical <= 0.0f) { + draw->AddLine(child, parent, color, thickness); + return; + } - // First-parent lane changes turn on the parent commit row. Additional merge - // parents leave horizontally on the child row. Both routes terminate as - // square T-junctions instead of bending through the front or back of a node. - if (route_slot == 0) { - draw->PathLineTo({child.x, parent.y}); - draw->PathLineTo(parent); + if (std::isfinite(detour_x)) { + if (std::abs(detour_x - child.x) < 0.5f * scale) { + drawRoundedPolyline(draw, std::array{child, ImVec2{detour_x, parent.y}, parent}, + 7.0f * scale, color, thickness); + } else if (std::abs(detour_x - parent.x) < 0.5f * scale) { + drawRoundedPolyline(draw, std::array{child, ImVec2{detour_x, child.y}, parent}, + 7.0f * scale, color, thickness); } else { - draw->PathLineTo({parent.x, child.y}); - draw->PathLineTo(parent); + drawRoundedPolyline(draw, + std::array{child, ImVec2{detour_x, child.y}, ImVec2{detour_x, parent.y}, parent}, + 7.0f * scale, color, thickness); } - draw->PathStroke(stroke_color, stroke_thickness); - }; + return; + } - stroke(IM_COL32(17, 21, 27, 255), thickness + 2.4f * scale); - stroke(color, thickness); + if (std::abs(horizontal) < 0.5f * scale) { + draw->AddLine(child, parent, color, thickness); + return; + } + + // Bends remain anchored to commit rows, but use a compact quarter-round turn. + if (route_slot == 0) + drawRoundedPolyline(draw, std::array{child, ImVec2{child.x, parent.y}, parent}, + 7.0f * scale, color, thickness); + else + drawRoundedPolyline(draw, std::array{child, ImVec2{parent.x, child.y}, parent}, + 7.0f * scale, color, thickness); } } // namespace @@ -60,7 +113,8 @@ ImU32 GraphRenderer::laneColor(int lane, int alpha) { float GraphRenderer::requiredWidth(const std::vector& commits, float scale) { int maximum_lane = 0; for (const auto& commit : commits) maximum_lane = std::max(maximum_lane, commit.lane); - return std::max((46.0f + maximum_lane * 22.0f) * scale, 60.0f * scale); + // Keep one spare lane available for edges that must route around occupied commit lanes. + return std::max((68.0f + maximum_lane * 22.0f) * scale, 82.0f * scale); } void GraphRenderer::drawRow(int row, const CommitInfo& commit, @@ -86,20 +140,18 @@ void GraphRenderer::drawRow(int row, const CommitInfo& commit, {ribbon_left, ribbon_top}, {cell_right, ribbon_bottom}, laneColor(commit.graph_color, 38)); + draw->AddLine( + {cell_right - px(1.0f), ribbon_top}, + {cell_right - px(1.0f), ribbon_bottom}, + laneColor(commit.graph_color, 215), px(2.0f)); if (ref_connector_start) { const ImVec2 end{x, y}; const float turn_x = end.x - px(8.0f); - const auto stroke_connector = [&](ImU32 color, float thickness) { - draw->PathClear(); - draw->PathLineTo(*ref_connector_start); - draw->PathLineTo({turn_x, ref_connector_start->y}); - draw->PathLineTo({turn_x, end.y}); - draw->PathLineTo(end); - draw->PathStroke(color, thickness); - }; draw->PushClipRectFullScreen(); - stroke_connector(IM_COL32(17, 21, 27, 255), px(3.8f)); - stroke_connector(laneColor(commit.graph_color, 175), px(1.6f)); + drawRoundedPolyline(draw, + std::array{*ref_connector_start, ImVec2{turn_x, ref_connector_start->y}, + ImVec2{turn_x, end.y}, end}, + px(5.0f), laneColor(commit.graph_color, 190), px(1.8f)); draw->PopClipRect(); } @@ -131,11 +183,44 @@ void GraphRenderer::drawRow(int row, const CommitInfo& commit, const float parent_x = origin.x + px(17.0f) + lane_spacing * parent.lane; const float child_y = center_y(child_row); const float parent_y = center_y(parent_row); - // An edge belongs to the branch it leaves, including its square lane transition, - // so its color stays consistent with the child node/ref chip. - const int edge_color = parent_index == 0 ? child.graph_color : parent.graph_color; + const int preferred_lane = parent_index == 0 ? child.lane : parent.lane; + const auto lane_is_blocked = [&](int candidate_lane) { + for (int intermediate = child_row + 1; intermediate < parent_row; ++intermediate) { + if (row_heights[static_cast(intermediate)] > 0.0f && + commits[static_cast(intermediate)].lane == candidate_lane) + return true; + } + return false; + }; + float detour_x = std::numeric_limits::quiet_NaN(); + if (lane_is_blocked(preferred_lane)) { + int maximum_lane = 0; + for (int intermediate = child_row; intermediate <= parent_row; ++intermediate) { + if (row_heights[static_cast(intermediate)] > 0.0f) + maximum_lane = std::max(maximum_lane, + commits[static_cast(intermediate)].lane); + } + int detour_lane = maximum_lane + 1; + for (int distance = 1; distance <= maximum_lane + 1; ++distance) { + const int left = preferred_lane - distance; + const int right = preferred_lane + distance; + if (left >= 0 && !lane_is_blocked(left)) { + detour_lane = left; + break; + } + if (right <= maximum_lane && !lane_is_blocked(right)) { + detour_lane = right; + break; + } + } + detour_x = origin.x + px(17.0f) + lane_spacing * detour_lane; + } + // Colors are lane-position based, so edges use the visible lane slot they route through. + const int edge_color = std::isfinite(detour_x) + ? static_cast(std::lround((detour_x - (origin.x + px(17.0f))) / lane_spacing)) + : preferred_lane; drawOrthogonalEdge(draw, {child_x, child_y}, {parent_x, parent_y}, - laneColor(edge_color, 235), scale_, static_cast(parent_index)); + laneColor(edge_color, 235), scale_, static_cast(parent_index), detour_x); } } draw->PopClipRect(); @@ -171,8 +256,8 @@ void GraphRenderer::drawRow(int row, const CommitInfo& commit, {x + radius - px(1.5f), y + radius - px(1.5f)}, {0, 0}, {1, 1}, IM_COL32_WHITE, radius); } else { - const ImVec2 icon_size = ImGui::CalcTextSize(ICON_FA_USER); - draw->AddText({x - icon_size.x * 0.5f, y - icon_size.y * 0.5f}, lane_color, ICON_FA_USER); + const ImVec2 icon_size = ImGui::CalcTextSize(ICON_TB_USER); + draw->AddText({x - icon_size.x * 0.5f, y - icon_size.y * 0.5f}, lane_color, ICON_TB_USER); } show_identity_tooltip(radius + px(2.0f)); ImGui::Dummy({0.0f, content_height}); diff --git a/vendor/fonts/Inter-Regular.ttf b/vendor/fonts/Inter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..438c701fc465d88d1597a6acdb934c27fc368309 GIT binary patch literal 341920 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 literal 0 HcmV?d00001 diff --git a/vendor/fonts/Inter-SemiBold.ttf b/vendor/fonts/Inter-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ab21c996259a73ab976a753880d9a75e02ef5752 GIT binary patch literal 343196 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 z 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
    rxZ-l4w6d7*7WyBimTib65t>d^4eNMlau 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 ebu=LKEoAY`3X63t7NUqne-okoY>m6?} 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

    FDNdrp;SF_-*jR*H&orQ%-JI4I;{{dBF Bp2YwF delta 1072 zcmZ8gJxmi}7=FJVJ*u9NyO#DY1vI^KLcRc zs4=Mnq5}ho#yCmhWWwNL;^c&jZW3CIiHQ!H*z`+2Yopw99S38Z};V)@onFDciQ^q_5I6 zsE<6EBZ;a#T;-L%5x*2>!*=2j*-VKtnJ&1DsxykiG8#Di*lEsqyfdzL`8j1Ku9N+GEr)d_DjgxZy zt~t#nfnmJB`k-sh5=6g5r6=rJ=3aJAnwMf!OyyLCm+z$0G(Zz{lOE6$dP(FD1nV0c z;#Nd1X?1*);~kY=S-RqouqqJ>go1%W z8C6Yg)Xfw%!bB`s?-a$YD#5Hp@Q@-=!b2M3jR&~@msn@ai0DSdc(#f1-&F&G(c;$> zQ|DNPqKFP)CBLkgqMcW11m@`$C6~(F0o$CC1twz^$ z-Nb3p)sGmWu4sDRuI{eJj5-s7r^}4RB1lqIUDrg!B^re5PO`48s75}Y)@wAh$I)vs z99v-)Hq1}`KR(O5z^-cmx5$%