Skip to content

Commit

Permalink
Add missing position info in ScrollEvent
Browse files Browse the repository at this point in the history
Fixes #2199
  • Loading branch information
andydotxyz committed Apr 27, 2021
1 parent ba981f0 commit 79572d2
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
4 changes: 3 additions & 1 deletion internal/driver/glfw/window.go
Expand Up @@ -825,7 +825,7 @@ func (w *window) waitForDoubleTap(co fyne.CanvasObject, ev *fyne.PointEvent) {
}

func (w *window) mouseScrolled(viewport *glfw.Window, xoff float64, yoff float64) {
co, _, _ := w.findObjectAtPositionMatching(w.canvas, w.mousePos, func(object fyne.CanvasObject) bool {
co, pos, _ := w.findObjectAtPositionMatching(w.canvas, w.mousePos, func(object fyne.CanvasObject) bool {
_, ok := object.(fyne.Scrollable)
return ok
})
Expand All @@ -838,6 +838,8 @@ func (w *window) mouseScrolled(viewport *glfw.Window, xoff float64, yoff float64
}
ev := &fyne.ScrollEvent{}
ev.Scrolled = fyne.NewDelta(float32(xoff)*scrollSpeed, float32(yoff)*scrollSpeed)
ev.Position = pos
ev.AbsolutePosition = w.mousePos
wid.Scrolled(ev)
}
}
Expand Down
32 changes: 32 additions & 0 deletions internal/driver/glfw/window_test.go
Expand Up @@ -534,6 +534,22 @@ func TestWindow_HoverableOnDragging(t *testing.T) {
assert.NotNil(t, dh.popMouseOutEvent())
}

func TestWindow_Scrolled(t *testing.T) {
w := createWindow("Test").(*window)
o := &scrollable{Rectangle: canvas.NewRectangle(color.White)}
o.SetMinSize(fyne.NewSize(100, 100))
w.SetContent(o)

w.mousePos = fyne.NewPos(50, 60)
w.mouseScrolled(w.viewport, 10, 10)
w.waitForEvents()

if e, _ := o.popScrollEvent().(*fyne.PointEvent); assert.NotNil(t, e, "scroll event") {
assert.Equal(t, fyne.NewPos(50, 60), e.AbsolutePosition)
assert.Equal(t, fyne.NewPos(46, 56), e.Position)
}
}

func TestWindow_Tapped(t *testing.T) {
w := createWindow("Test").(*window)
rect := canvas.NewRectangle(color.White)
Expand Down Expand Up @@ -1305,6 +1321,22 @@ func (ts *typedShortcutable) TypedShortcut(s fyne.Shortcut) {
ts.capturedShortcuts = append(ts.capturedShortcuts, s)
}

var _ fyne.Draggable = (*draggable)(nil)

type scrollable struct {
*canvas.Rectangle
events []interface{}
}

func (s *scrollable) Scrolled(e *fyne.ScrollEvent) {
s.events = append(s.events, e)
}

func (s *scrollable) popScrollEvent() (e interface{}) {
e, s.events = pop(s.events)
return
}

//
// Test helper
//
Expand Down

0 comments on commit 79572d2

Please sign in to comment.