diff options
| author | Pietro Gagliardi <[email protected]> | 2014-03-29 18:28:37 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-03-29 18:28:37 -0400 |
| commit | 17ae3546d21f5692763f6e4140dd189c4ac1a520 (patch) | |
| tree | d3c178c624be3a4f2d145e2b37f8319b2896561d | |
| parent | 8f4780f5d719099fa7530b3f08475a986db79cb6 (diff) | |
Added repaint after Area event on Windows.
| -rw-r--r-- | area_windows.go | 31 |
1 files 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 @@ -307,6 +307,24 @@ func adjustAreaScrollbars(hwnd _HWND) { } 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 } |
