From 17ae3546d21f5692763f6e4140dd189c4ac1a520 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Sat, 29 Mar 2014 18:28:37 -0400 Subject: [PATCH] Added repaint after Area event on Windows. --- area_windows.go | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/area_windows.go b/area_windows.go index 7530f71..4bfb1c9 100644 --- a/area_windows.go +++ b/area_windows.go @@ -306,6 +306,24 @@ func adjustAreaScrollbars(hwnd _HWND) { uintptr(_TRUE)) // redraw the scroll bar } +var ( + _invalidateRect = user32.NewProc("InvalidateRect") +) + +func repaintArea(s *sysData) { + r1, _, err := _invalidateRect.Call( + uintptr(s.hwnd), + uintptr(0), // the whole area + uintptr(_FALSE)) // TODO use _TRUE to mark that we should erase? or will the GetUpdateRect() call handle it? + if r1 == 0 { // failure + panic(fmt.Errorf("error flagging Area as needing repainting after event (last error: %v)", err)) + } + r1, _, err = _updateWindow.Call(uintptr(s.hwnd)) + if r1 == 0 { // failure + panic(fmt.Errorf("error repainting Area after event: %v", err)) + } +} + var ( _getKeyState = user32.NewProc("GetKeyState") ) @@ -329,7 +347,6 @@ func getModifiers() (m Modifiers) { return m } -// TODO mark repaint func areaMouseEvent(s *sysData, button uint, up bool, count uint, wparam _WPARAM, lparam _LPARAM) { var me MouseEvent @@ -355,13 +372,15 @@ func areaMouseEvent(s *sysData, button uint, up bool, count uint, wparam _WPARAM me.Held = append(me.Held, 3) } // TODO XBUTTONs? - s.handler.Mouse(me) + repaint := s.handler.Mouse(me) + if repaint { + repaintArea(s) + } } -// TODO mark repaint func areaKeyEvent(s *sysData, up bool, wparam _WPARAM, lparam _LPARAM) bool { var ke KeyEvent -println(wparam, lparam) + scancode := byte((lparam >> 16) & 0xFF) ke.Modifiers = getModifiers() if wparam == _VK_RETURN && (lparam & 0x01000000) != 0 { @@ -380,7 +399,9 @@ println(wparam, lparam) } ke.Up = up handled, repaint := s.handler.Key(ke) - _ = repaint // TODO + if repaint { + repaintArea(s) + } return handled }