scrollbar: Fix position may out of container bounds when clicked scrollbar bg. (#475)

This commit is contained in:
Jason Lee 2024-12-09 17:21:48 +08:00 committed by GitHub
parent 59d9341280
commit 62ce148c19
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -496,6 +496,8 @@ impl Element for Scrollbar {
}
});
let safe_range = (-scroll_area_size + container_size)..px(0.);
cx.on_mouse_event({
let state = self.state.clone();
let view_id = self.view_id;
@ -526,11 +528,17 @@ impl Element for Scrollbar {
.min(1.);
if is_vertical {
scroll_handle
.set_offset(point(offset.x, -scroll_area_size * percentage));
scroll_handle.set_offset(point(
offset.x,
(-scroll_area_size * percentage)
.clamp(safe_range.start, safe_range.end),
));
} else {
scroll_handle
.set_offset(point(-scroll_area_size * percentage, offset.y));
scroll_handle.set_offset(point(
(-scroll_area_size * percentage)
.clamp(safe_range.start, safe_range.end),
offset.y,
));
}
}
}
@ -589,11 +597,13 @@ impl Element for Scrollbar {
let offset = if is_vertical {
point(
scroll_handle.offset().x,
-(scroll_area_size - container_size) * percentage,
(-(scroll_area_size - container_size) * percentage)
.clamp(safe_range.start, safe_range.end),
)
} else {
point(
-(scroll_area_size - container_size) * percentage,
(-(scroll_area_size - container_size) * percentage)
.clamp(safe_range.start, safe_range.end),
scroll_handle.offset().y,
)
};