diff --git a/src/main.rs b/src/main.rs index 49b221bd..49679c18 100644 --- a/src/main.rs +++ b/src/main.rs @@ -387,9 +387,7 @@ impl Inlyne { .contains(position.into()) && mouse_down) { - let scrollbar_height = (screen_size.1 - / self.renderer.positioner.reserved_height) - * screen_size.1; + let scrollbar_height = self.renderer.scrollbar_height(); if scrollbar_held.is_none() { if Rect::new( ( @@ -438,6 +436,21 @@ impl Inlyne { ElementState::Pressed => { // Try to click a link let screen_size = self.renderer.screen_size(); + + let y = mouse_position.1 - self.renderer.scroll_y; + if Rect::new( + (screen_size.0 - DEFAULT_MARGIN / 4., 0.), + (DEFAULT_MARGIN / 4., screen_size.1), + ).contains((mouse_position.0, y)) { + let scrollbar_height = self.renderer.scrollbar_height(); + + let target_scroll = ((y - scrollbar_height / 2.) / screen_size.1) + * self.renderer.positioner.reserved_height; + + self.renderer.set_scroll_y(target_scroll); + self.window.request_redraw(); + } + if let Some(hoverable) = Self::find_hoverable( &mut self.renderer.text_system, &mut self.renderer.positioner.taffy, diff --git a/src/renderer.rs b/src/renderer.rs index 7c1ca854..b646ad3e 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -208,6 +208,10 @@ impl Renderer { Ok(()) } + pub fn scrollbar_height(&self) -> f32 { + (self.screen_height() / self.positioner.reserved_height) * self.screen_height() + } + fn render_elements( &mut self, elements: &[Positioned],