fix(ui): improve text size and contrast

This commit is contained in:
2026-06-18 19:46:51 -05:00
parent 41b0850386
commit 59eabc503d
2 changed files with 27 additions and 27 deletions

View File

@@ -40,19 +40,19 @@ void parseRange(const std::string& header, char marker, int& line) {
ImU32 syntaxColor(const std::string& text) {
const size_t first = text.find_first_not_of(" \t");
if (first == std::string::npos) return IM_COL32(188, 192, 199, 255);
if (first == std::string::npos) return IM_COL32(210, 214, 220, 255);
const std::string_view value(text.c_str() + first, text.size() - first);
if (value.starts_with("//") || value.starts_with("# ")) return IM_COL32(105, 158, 102, 255);
if (value.starts_with('#')) return IM_COL32(187, 134, 204, 255);
if (value.starts_with("//") || value.starts_with("# ")) return IM_COL32(129, 184, 125, 255);
if (value.starts_with('#')) return IM_COL32(205, 157, 222, 255);
static constexpr const char* keywords[] = {
"class ", "struct ", "enum ", "if ", "else", "for ", "while ", "return ",
"const ", "static ", "void ", "bool ", "int ", "float ", "auto ", "namespace "
};
for (const char* keyword : keywords)
if (value.starts_with(keyword)) return IM_COL32(102, 153, 204, 255);
if (value.starts_with(keyword)) return IM_COL32(124, 177, 228, 255);
if (value.find('"') != std::string_view::npos || value.find('\'') != std::string_view::npos)
return IM_COL32(206, 145, 120, 255);
return IM_COL32(198, 201, 207, 255);
return IM_COL32(226, 166, 140, 255);
return IM_COL32(218, 221, 226, 255);
}
bool compactButton(const char* label, bool active = false) {
@@ -248,14 +248,14 @@ void DiffViewer::draw(RepositoryView& repository, GitManager& manager, float sca
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(123, 128, 138, 255), old_buffer);
IM_COL32(158, 164, 174, 255), old_buffer);
draw->AddText({minimum.x + number_width + scaled(5, scale), minimum.y + scaled(2, scale)},
IM_COL32(123, 128, 138, 255), new_buffer);
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(110, 115, 125, 255), marker_text);
kind == LineKind::removed ? IM_COL32(220, 97, 97, 255) : IM_COL32(148, 154, 164, 255), marker_text);
draw->AddText({minimum.x + number_width * 2 + scaled(22, scale), minimum.y + scaled(2, scale)},
syntaxColor(text), text.c_str());
};

View File

@@ -158,8 +158,8 @@ void apply_style(float scale) {
const auto color = [](int red, int green, int blue, int alpha = 255) {
return ImVec4(red / 255.0f, green / 255.0f, blue / 255.0f, alpha / 255.0f);
};
style.Colors[ImGuiCol_Text] = color(199, 203, 209);
style.Colors[ImGuiCol_TextDisabled] = color(116, 121, 130);
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);
@@ -200,7 +200,7 @@ void load_fonts(float scale) {
config.OversampleV = 2;
config.PixelSnapH = false;
config.RasterizerDensity = 1.0f;
const float size = 16.0f * scale;
const float size = 18.0f * scale;
if (!io.Fonts->AddFontFromFileTTF(GITREE_ASSET_DIR "/OpenSans-Regular.ttf", size, &config))
io.Fonts->AddFontDefault();
@@ -234,15 +234,15 @@ bool sidebar_collapse_row(const char* id, const std::string& label, bool default
bool open = storage->GetBool(state_id, default_open);
const ImVec2 size{
std::max(ui(24.0f), ImGui::GetContentRegionAvail().x - reserved_width),
ui(22.0f),
ui(24.0f),
};
const bool clicked = ImGui::InvisibleButton("##collapse", size);
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(112, 118, 128, 255);
constexpr ImU32 text_color = IM_COL32(176, 181, 189, 255);
constexpr ImU32 icon_color = IM_COL32(144, 150, 160, 255);
constexpr ImU32 text_color = IM_COL32(207, 211, 218, 255);
const float y = minimum.y + (size.y - ImGui::GetFontSize()) * 0.5f;
draw->AddText({minimum.x + ui(3.0f), y}, icon_color,
open ? ICON_FA_CHEVRON_DOWN : ICON_FA_CHEVRON_RIGHT);
@@ -265,15 +265,15 @@ 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) {
ImGui::PushID(id.c_str());
const bool clicked = ImGui::InvisibleButton("##sidebar_item", {-1, ui(22.0f)});
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 float y = minimum.y + (maximum.y - minimum.y - ImGui::GetFontSize()) * 0.5f;
draw->PushClipRect(minimum, maximum, true);
draw->AddText({minimum.x + ui(3.0f), y}, IM_COL32(108, 114, 124, 255), icon);
draw->AddText({minimum.x + ui(23.0f), y}, IM_COL32(174, 179, 187, 255), text.c_str());
draw->AddText({minimum.x + ui(3.0f), y}, IM_COL32(142, 148, 158, 255), icon);
draw->AddText({minimum.x + ui(23.0f), y}, IM_COL32(205, 209, 216, 255), text.c_str());
draw->PopClipRect();
ImGui::PopID();
return clicked;
@@ -505,7 +505,7 @@ void draw_sidebar(float width) {
if (!section_open[index]) continue;
++open_count;
}
const float header_space = (ui(22.0f) + 1.0f) * 2.0f;
const float header_space = (ui(24.0f) + 1.0f) * 2.0f;
const float splitter_space = ui(5.0f) * open_count;
const float body_space = std::max(0.0f, ImGui::GetContentRegionAvail().y - header_space - splitter_space);
std::array<float, 4> section_heights{};
@@ -663,7 +663,7 @@ void draw_commit_table() {
line_width += spacing + badge_width;
}
}
row_heights[index] = std::max(ui(22.0f), lines * ui(21.0f) + ui(1.0f));
row_heights[index] = std::max(ui(24.0f), lines * ui(23.0f) + ui(1.0f));
}
ImGuiTableFlags flags = ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersInnerV |
@@ -682,7 +682,7 @@ void draw_commit_table() {
ImGui::TableSetupColumn("COMMIT DATE / TIME", ImGuiTableColumnFlags_WidthFixed, ui(180.0f));
ImGui::TableHeadersRow();
if (!repo().working_files.empty()) {
ImGui::TableNextRow(0, ui(22.0f));
ImGui::TableNextRow(0, ui(24.0f));
ImGui::TableSetColumnIndex(0);
if (ImGui::Selectable("##working_tree", repo().selected_commit == -1,
ImGuiSelectableFlags_SpanAllColumns | ImGuiSelectableFlags_AllowOverlap))
@@ -746,7 +746,7 @@ void draw_commit_table() {
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(21.0f);
chip_y += ui(23.0f);
}
ImGui::SetCursorScreenPos({chip_x, chip_y});
draw_ref_badge(commit.refs[ref_index], i * 1000 + ref_index, commit.lane);
@@ -790,7 +790,7 @@ void draw_file_row(const std::string& path, FileChangeKind kind, int id,
if (ImGui::IsItemHovered()) 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(174, 179, 187, 255), path.c_str());
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_CIRCLE_PLUS " Stage file"))
g_git_manager->stageFile(repo(), git_path, g_notice);
@@ -1114,7 +1114,7 @@ bool toolbar_action(const char* id, const char* label, const char* icon, const c
ImDrawList* draw = ImGui::GetWindowDrawList();
if (enabled && ImGui::IsItemHovered())
draw->AddRectFilled(minimum, maximum, IM_COL32(62, 66, 75, 210));
const ImU32 text_color = enabled ? IM_COL32(199, 203, 209, 255) : IM_COL32(105, 109, 117, 255);
const ImU32 text_color = enabled ? IM_COL32(218, 221, 226, 255) : IM_COL32(139, 144, 153, 255);
const ImVec2 label_size = ImGui::CalcTextSize(label);
const ImVec2 icon_size = ImGui::CalcTextSize(icon);
draw->AddText({minimum.x + (maximum.x - minimum.x - label_size.x) * 0.5f, minimum.y},
@@ -1173,7 +1173,7 @@ 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}, IM_COL32(151, 156, 165, 255), label);
draw->AddText({minimum.x + ui(8), minimum.y}, IM_COL32(177, 182, 190, 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) {
@@ -1188,8 +1188,8 @@ bool toolbar_selector(const char* id, const char* label, const std::string& valu
}
displayed += ellipsis;
}
draw->AddText({minimum.x + ui(8), minimum.y + ui(18)}, IM_COL32(210, 213, 218, 255), displayed.c_str());
draw->AddText({maximum.x - ui(18), minimum.y + ui(18)}, IM_COL32(130, 135, 144, 255),
draw->AddText({minimum.x + ui(8), minimum.y + ui(18)}, IM_COL32(226, 229, 233, 255), displayed.c_str());
draw->AddText({maximum.x - ui(18), minimum.y + ui(18)}, IM_COL32(160, 165, 174, 255),
trailing_arrow ? ICON_FA_ANGLE_RIGHT : ICON_FA_CARET_DOWN);
if (displayed != value && ImGui::IsItemHovered(ImGuiHoveredFlags_DelayShort))
ImGui::SetTooltip("%s", value.c_str());