fix: clamp scrollbar hitbox at end of document
This commit is contained in:
parent
8745cd05d2
commit
8dbc5765d9
1 changed files with 9 additions and 7 deletions
|
|
@ -121,18 +121,21 @@ fn pos_scrn_to_virt(self: *const Self, pos_scrn_: u32) u32 {
|
|||
return @intFromFloat(pos_scrn * ratio);
|
||||
}
|
||||
|
||||
fn is_pos_scrn_in_bar(self: *const Self, pos_scrn: u32) bool {
|
||||
return pos_scrn > self.pos_scrn and pos_scrn <= self.pos_scrn + self.view_scrn;
|
||||
fn is_pos_scrn_in_bar(self: *const Self, pos_scrn: u32) ?u32 {
|
||||
const max_pos_scrn = self.size_scrn -| self.view_scrn;
|
||||
const curr_pos_scrn = @min(self.pos_scrn, max_pos_scrn);
|
||||
return if (pos_scrn > curr_pos_scrn and pos_scrn <= curr_pos_scrn + self.view_scrn)
|
||||
curr_pos_scrn
|
||||
else
|
||||
null;
|
||||
}
|
||||
|
||||
fn click_at(self: *Self, y: i32, ypx: i32) void {
|
||||
const pos_scrn = self.y_coord_to_pos_scrn(y, ypx);
|
||||
if (self.is_pos_scrn_in_bar(pos_scrn)) {
|
||||
self.mouse_pos_scrn_offset = pos_scrn -| self.pos_scrn;
|
||||
@import("std").log.debug("click: {d}:{d}", .{ pos_scrn, self.mouse_pos_scrn_offset });
|
||||
if (self.is_pos_scrn_in_bar(pos_scrn)) |curr_pos_scrn| {
|
||||
self.mouse_pos_scrn_offset = pos_scrn -| curr_pos_scrn;
|
||||
} else {
|
||||
self.mouse_pos_scrn_offset = self.view_scrn / 2;
|
||||
@import("std").log.debug("click off: {d}:{d}", .{ pos_scrn, self.mouse_pos_scrn_offset });
|
||||
self.move_to(self.pos_scrn_to_virt(pos_scrn -| self.mouse_pos_scrn_offset));
|
||||
}
|
||||
}
|
||||
|
|
@ -140,7 +143,6 @@ fn click_at(self: *Self, y: i32, ypx: i32) void {
|
|||
fn drag_to(self: *Self, y: i32, ypx: i32) void {
|
||||
const pos_scrn = self.y_coord_to_pos_scrn(y, ypx) -| self.mouse_pos_scrn_offset;
|
||||
const pos_virt = self.pos_scrn_to_virt(pos_scrn);
|
||||
@import("std").log.debug("drag_to: {d:}:{d}:{d}", .{ pos_scrn, pos_virt, self.mouse_pos_scrn_offset });
|
||||
self.move_to(pos_virt);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue