summaryrefslogtreecommitdiff
path: root/src/pdf_view.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/pdf_view.zig')
-rw-r--r--src/pdf_view.zig26
1 files changed, 10 insertions, 16 deletions
diff --git a/src/pdf_view.zig b/src/pdf_view.zig
index b2fd5866..13c02231 100644
--- a/src/pdf_view.zig
+++ b/src/pdf_view.zig
@@ -2542,11 +2542,13 @@ pub fn horizontalWheel(core: *pardes.Pardes, pane: *pardes.Pane, direction: i8)
pub fn draw(
core: *pardes.Pardes,
+ s: *pardes.Surface,
pane: *pardes.Pane,
rect: pardes.Rect,
pane_id: usize,
text_x: u16,
text_width: u16,
+ rail: *pardes.Region,
) bool {
if (comptime !enabled) return false;
if (!core.native_images or rect.h <= pane.tag_rows) return false;
@@ -2616,16 +2618,12 @@ pub fn draw(
// This frame has spent the motion used to choose its raster band.
state.scroll_travel = 0;
- const body_y = core.bodyTop(pane, rect);
- const body_h = rect.h -| pane.tag_rows;
const chrome = core.chromeTheme();
const theme = core.theme();
const pane_bg: pardes.Color = if (theme.bg) |color| .{ .rgb = color } else .default;
- // The rail runs past the notice bands; only the thumb tracks the text.
- core.surface.fill(rect.x, body_y, 1, body_h, .{ .bg = .{ .rgb = chrome.scroll_track } });
- core.surface.fill(rect.x + 1, body_y, 1, body_h, .{ .bg = pane_bg });
-
- const track_h: usize = body_h;
+ // The rail runs past the notice bands; only the thumb tracks the text,
+ // and it is measured here, in document pixels, for `place`'s region.
+ const track_h: usize = rail.rect.h;
const total = @max(@as(u64, 1), state.document_height);
const len = @max(
@as(usize, 1),
@@ -2639,15 +2637,11 @@ pub fn draw(
@as(u64, track_h -| 1),
@as(u64, track_h) * offset / total,
));
- var y = pos;
- while (y < track_h and y < pos + len) : (y += 1)
- core.surface.fill(
- rect.x,
- body_y + @as(u16, @intCast(y)),
- 1,
- 1,
- .{ .bg = .{ .rgb = chrome.scroll_thumb } },
- );
+ rail.thumb_y = @intCast(pos);
+ rail.thumb_h = @intCast(@min(len, track_h -| pos));
+ s.fill(rail.rect.x, rail.rect.y, 1, rail.rect.h, .{ .bg = .{ .rgb = chrome.scroll_track } });
+ s.fill(rail.rect.x + 1, rail.rect.y, 1, rail.rect.h, .{ .bg = pane_bg });
+ s.fill(rail.rect.x, rail.rect.y + rail.thumb_y, 1, rail.thumb_h, .{ .bg = .{ .rgb = chrome.scroll_thumb } });
return true;
}