fix: standardize scrollbars, fix scrollbar in TextEditor

This commit is contained in:
2026-05-26 07:59:40 +02:00
parent dc03f610fc
commit dfd618da89
2 changed files with 70 additions and 29 deletions
+9 -28
View File
@@ -775,10 +775,10 @@ inline void draw_separator(Canvas& c, int x, int y, int w, const Theme& theme) {
}
static constexpr int SCROLLBAR_W = 12;
static constexpr int SCROLLBAR_OUTER_PAD = 4;
static constexpr int SCROLLBAR_TRACK_PAD = 8;
static constexpr int SCROLLBAR_THUMB_INSET = 2;
static constexpr int SCROLLBAR_MIN_THUMB = 24;
static constexpr int SCROLLBAR_OUTER_PAD = 0;
static constexpr int SCROLLBAR_TRACK_PAD = 0;
static constexpr int SCROLLBAR_THUMB_INSET = 1;
static constexpr int SCROLLBAR_MIN_THUMB = 20;
inline bool scrollbar_needed(int content_extent, int view_extent) {
return content_extent > view_extent && view_extent > 0;
@@ -851,13 +851,11 @@ inline int scrollbar_offset_from_thumb_top(const Rect& track,
return (int)(((int64_t)rel * max_offset + travel / 2) / travel);
}
inline Color scrollbar_thumb_color(const Theme& theme,
inline Color scrollbar_thumb_color(const Theme& /*theme*/,
bool hovered,
bool dragging) {
Color base = mix(theme.border, theme.text_muted, 54);
if (dragging) return mix(base, theme.accent, 118);
if (hovered) return mix(base, theme.accent, 42);
return base;
if (hovered || dragging) return Color::from_rgb(0xA0, 0xA0, 0xA0);
return colors::SCROLLBAR_FG;
}
inline void draw_scrollbar(Canvas& c,
@@ -868,26 +866,9 @@ inline void draw_scrollbar(Canvas& c,
const Theme& theme) {
if (track.empty() || thumb.empty()) return;
if (hovered || dragging) {
int rail_w = track.w > 6 ? track.w - 6 : track.w;
if (rail_w < 1) rail_w = 1;
Rect rail = {
track.x + (track.w - rail_w) / 2,
track.y,
rail_w,
track.h
};
Color rail_fill = dragging
? mix(theme.window_bg, theme.accent, 34)
: mix(theme.window_bg, theme.text_muted, 24);
c.fill_rounded_rect(rail.x, rail.y, rail.w, rail.h,
gui_max(theme.radius_sm, rail.w / 2),
rail_fill);
}
c.fill_rect(track.x, track.y, track.w, track.h, colors::SCROLLBAR_BG);
Color thumb_fill = scrollbar_thumb_color(theme, hovered, dragging);
int radius = gui_max(theme.radius_sm, thumb.w / 2);
c.fill_rounded_rect(thumb.x, thumb.y, thumb.w, thumb.h, radius, thumb_fill);
c.fill_rect(thumb.x, thumb.y, thumb.w, thumb.h, thumb_fill);
}
inline Rect tab_rect(const Rect& bar, int count, int index) {