From 4f06ff0aef7159e9fc59e0af1d33f9a4665e59d2 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Thu, 16 May 2024 15:47:52 -0400 Subject: [PATCH] fix(input): multiple window-size-events --- input/driver.go | 4 ++++ input/driver_windows.go | 13 ++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/input/driver.go b/input/driver.go index 8339f1fb..7043c31e 100644 --- a/input/driver.go +++ b/input/driver.go @@ -28,6 +28,10 @@ type Driver struct { // up button events. prevMouseState coninput.ButtonState // nolint: unused + // lastWinsizeEvent keeps track of the last window size event to prevent + // multiple size events from firing. + lastWinsizeEvent coninput.WindowBufferSizeEventRecord // nolint: unused + flags int // control the behavior of the driver. } diff --git a/input/driver_windows.go b/input/driver_windows.go index 0b3f40ea..05e18f24 100644 --- a/input/driver_windows.go +++ b/input/driver_windows.go @@ -45,7 +45,7 @@ func (d *Driver) handleConInput( var evs []Event for _, event := range events { - if e := parseConInputEvent(event, &d.prevMouseState); e != nil { + if e := parseConInputEvent(event, &d.prevMouseState, &d.lastWinsizeEvent); e != nil { evs = append(evs, e) } } @@ -107,7 +107,7 @@ loop: return events } -func parseConInputEvent(event coninput.InputRecord, ps *coninput.ButtonState) Event { +func parseConInputEvent(event coninput.InputRecord, ps *coninput.ButtonState, ws *coninput.WindowBufferSizeEventRecord) Event { switch e := event.Unwrap().(type) { case coninput.KeyEventRecord: event := parseWin32InputKeyEvent(e.VirtualKeyCode, e.VirtualScanCode, @@ -177,9 +177,12 @@ func parseConInputEvent(event coninput.InputRecord, ps *coninput.ButtonState) Ev return KeyUpEvent(key) case coninput.WindowBufferSizeEventRecord: - return WindowSizeEvent{ - Width: int(e.Size.X), - Height: int(e.Size.Y), + if e != *ws { + *ws = e + return WindowSizeEvent{ + Width: int(e.Size.X), + Height: int(e.Size.Y), + } } case coninput.MouseEventRecord: mevent := mouseEvent(*ps, e)