Made Areas on Windows flicker-free.
This commit is contained in:
parent
97b2542573
commit
0a1dcfa67f
|
@ -103,6 +103,8 @@ func paintArea(s *sysData) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO don't do the above, but always draw the background color?
|
||||||
|
|
||||||
r1, _, err := _beginPaint.Call(
|
r1, _, err := _beginPaint.Call(
|
||||||
uintptr(s.hwnd),
|
uintptr(s.hwnd),
|
||||||
uintptr(unsafe.Pointer(&ps)))
|
uintptr(unsafe.Pointer(&ps)))
|
||||||
|
@ -595,6 +597,10 @@ func areaWndProc(s *sysData) func(hwnd _HWND, uMsg uint32, wParam _WPARAM, lPara
|
||||||
case _WM_PAINT:
|
case _WM_PAINT:
|
||||||
paintArea(s)
|
paintArea(s)
|
||||||
return 0
|
return 0
|
||||||
|
case _WM_ERASEBKGND:
|
||||||
|
// don't draw a background; we'll do so when painting
|
||||||
|
// this is to make things flicker-free; see http://msdn.microsoft.com/en-us/library/ms969905.aspx
|
||||||
|
return 1
|
||||||
case _WM_HSCROLL:
|
case _WM_HSCROLL:
|
||||||
// TODO make this unnecessary
|
// TODO make this unnecessary
|
||||||
if s != nil && s.hwnd != 0 { // this message can be sent before s is assigned properly
|
if s != nil && s.hwnd != 0 { // this message can be sent before s is assigned properly
|
||||||
|
@ -708,7 +714,7 @@ func registerAreaWndClass(s *sysData) (newClassName string, err error) {
|
||||||
hInstance: hInstance,
|
hInstance: hInstance,
|
||||||
hIcon: icon,
|
hIcon: icon,
|
||||||
hCursor: cursor,
|
hCursor: cursor,
|
||||||
hbrBackground: areaBackgroundBrush,
|
hbrBackground: _HBRUSH(_NULL), // no brush; we handle WM_ERASEBKGND
|
||||||
}
|
}
|
||||||
|
|
||||||
ret := make(chan uiret)
|
ret := make(chan uiret)
|
||||||
|
|
Loading…
Reference in New Issue