From 1c74adc329212790c96235ea842f6a293fd199d2 Mon Sep 17 00:00:00 2001 From: Fingercomp Date: Thu, 14 Aug 2025 21:16:50 +0300 Subject: [PATCH] Intercept mouse press events when dragging scroll bar thumbs --- src/main/scala/ocelot/desktop/ui/UiHandler.scala | 2 -- .../scala/ocelot/desktop/ui/widget/ScrollView.scala | 13 +++++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index 00ac4a0..8f2ef55 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -7,7 +7,6 @@ import ocelot.desktop.graphics.Graphics import ocelot.desktop.ui.event.handlers.HoverHandler import ocelot.desktop.ui.event.sources.{BrainEvents, KeyEvents, MouseEvents, ScrollEvents} import ocelot.desktop.ui.event.{Capturing, CapturingEvent, Dispatchable, MouseEvent} -import ocelot.desktop.ui.widget.window.Window import ocelot.desktop.ui.widget.{RootWidget, Widget} import ocelot.desktop.util._ import ocelot.desktop.{OcelotDesktop, Settings} @@ -24,7 +23,6 @@ import java.nio.channels.Channels import java.nio.file.Paths import javax.imageio.ImageIO import javax.swing.JFileChooser -import scala.annotation.tailrec import scala.collection.mutable import scala.collection.mutable.ArrayBuffer import scala.concurrent.duration.DurationInt diff --git a/src/main/scala/ocelot/desktop/ui/widget/ScrollView.scala b/src/main/scala/ocelot/desktop/ui/widget/ScrollView.scala index 6628931..3fe45e1 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/ScrollView.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/ScrollView.scala @@ -7,7 +7,7 @@ import ocelot.desktop.graphics.Graphics import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.event.handlers.HoverHandler import ocelot.desktop.ui.event.sources.KeyEvents -import ocelot.desktop.ui.event.{MouseEvent, ScrollEvent} +import ocelot.desktop.ui.event.{Capturing, MouseEvent, ScrollEvent} import ocelot.desktop.ui.layout.Layout import ocelot.desktop.ui.widget.ScrollView.{DecayFactor, DragState, MaxScrollVelocity, MinThumbSize, ScrollVelocity} import ocelot.desktop.util.Logging @@ -49,10 +49,15 @@ class ScrollView(val inner: Widget) extends Widget with Logging with HoverHandle scrollToEnd = false } - case MouseEvent(MouseEvent.State.Pressed, MouseEvent.Button.Left) => + case Capturing(event @ MouseEvent(MouseEvent.State.Pressed, MouseEvent.Button.Left)) => val pos = UiHandler.mousePosition + if (vThumbBounds.contains(pos) || hThumbBounds.contains(pos)) { + event.consume() + } + dragState = if (vThumbBounds.contains(pos)) { + scrollToEnd = false DragState.Vertical(yOffset, pos) } else if (hThumbBounds.contains(pos)) { DragState.Horizontal(xOffset, pos) @@ -60,10 +65,6 @@ class ScrollView(val inner: Widget) extends Widget with Logging with HoverHandle DragState.None } - if (dragState.isVertical) { - scrollToEnd = false - } - case MouseEvent(MouseEvent.State.Released, MouseEvent.Button.Left) => dragState = DragState.None }