aboutsummaryrefslogtreecommitdiff
path: root/go/ui/hoverDetector.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/ui/hoverDetector.go')
-rw-r--r--go/ui/hoverDetector.go45
1 files changed, 19 insertions, 26 deletions
diff --git a/go/ui/hoverDetector.go b/go/ui/hoverDetector.go
index 49161f4f..385b2ffd 100644
--- a/go/ui/hoverDetector.go
+++ b/go/ui/hoverDetector.go
@@ -3,39 +3,32 @@ package ui
// A simple structure to detect if the cursor has not moved or started moving again.
// hoverDetector.update must be called during each Update invocation to track the
// frame and the current cursor position.
-type hoverDetector struct {
+type _hoverDetector struct {
last_x, last_y int
ticks int
- hovering Hoverable
}
-func (h *hoverDetector) update(collection *Collection, x, y int, w Widget) {
+const HOVER_THRESHOLD = 60
+
+var (
+ hoverDetector _hoverDetector
+ longtapHoverDetector _hoverDetector
+)
+
+func (h *_hoverDetector) update(x, y int) (ev InputEvent, ch bool) {
if x == h.last_x && y == h.last_y {
- h.hover(collection, x, y, w)
+ h.ticks = h.ticks + 1
+ if h.ticks == HOVER_THRESHOLD {
+ return InputEvent{HoverStart, x, y, nil}, true
+ }
} else {
- h.reset(x, y)
+ if h.ticks > HOVER_THRESHOLD {
+ ev = InputEvent{HoverEnd, h.last_x, h.last_y, nil}
+ ch = true
+ }
+ h.ticks = 0
h.last_x, h.last_y = x, y
}
-}
-
-func (h *hoverDetector) hover(collection *Collection, x, y int, w Widget) {
- h.ticks++
- if w == nil || h.hovering != nil {
- return
- }
-
- if hoverable, ok := w.(Hoverable); ok && hoverable.onHover(h.ticks, x, y, collection) {
- h.hovering = hoverable
- }
-}
-
-func (h *hoverDetector) reset(x, y int) {
- if h.hovering != nil {
- if !h.hovering.stopHover(h.ticks, x, y) {
- return
- }
- h.hovering = nil
- }
- h.ticks = 0
+ return
}