Windows: More fine-grained paint event handling.
Pass expose events to GL widgets, handle invalid update rectangles, ignore WM_ERASEBKND (using code from 4.8). Change-Id: Ide062efb392292fff556d37b0ef0e880676748a2 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
This commit is contained in:
parent
abf25d3f64
commit
19b029cd9d
@ -680,8 +680,7 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
|
||||
}
|
||||
break;
|
||||
case QtWindows::ExposeEvent:
|
||||
platformWindow->handleWmPaint(hwnd, message, wParam, lParam);
|
||||
return true;
|
||||
return platformWindow->handleWmPaint(hwnd, message, wParam, lParam);
|
||||
case QtWindows::MouseWheelEvent:
|
||||
case QtWindows::MouseEvent:
|
||||
case QtWindows::NonClientMouseEvent:
|
||||
|
@ -942,12 +942,22 @@ void QWindowsWindow::releaseDC()
|
||||
}
|
||||
}
|
||||
|
||||
void QWindowsWindow::handleWmPaint(HWND hwnd, UINT,
|
||||
bool QWindowsWindow::handleWmPaint(HWND hwnd, UINT message,
|
||||
WPARAM, LPARAM)
|
||||
{
|
||||
// Ignore invalid update bounding rectangles
|
||||
if (!GetUpdateRect(m_data.hwnd, 0, FALSE))
|
||||
return false;
|
||||
if (message == WM_ERASEBKGND) // Backing store - ignored.
|
||||
return true;
|
||||
PAINTSTRUCT ps;
|
||||
if (testFlag(OpenGLSurface)) {
|
||||
BeginPaint(hwnd, &ps); // WM_ERASEBKGND needs to be handled.
|
||||
// Observed painting problems with Aero style disabled (QTBUG-7865).
|
||||
if (testFlag(OpenGLDoubleBuffered))
|
||||
InvalidateRect(hwnd, 0, false);
|
||||
BeginPaint(hwnd, &ps);
|
||||
QWindowSystemInterface::handleSynchronousExposeEvent(window(),
|
||||
QRegion(qrectFromRECT(ps.rcPaint)));
|
||||
EndPaint(hwnd, &ps);
|
||||
} else {
|
||||
releaseDC();
|
||||
@ -963,6 +973,7 @@ void QWindowsWindow::handleWmPaint(HWND hwnd, UINT,
|
||||
m_hdc = 0;
|
||||
EndPaint(hwnd, &ps);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void QWindowsWindow::setWindowTitle(const QString &title)
|
||||
|
@ -156,7 +156,7 @@ public:
|
||||
{ return GetWindowLongPtr(m_data.hwnd, GWL_EXSTYLE); }
|
||||
void setExStyle(unsigned s) const;
|
||||
|
||||
void handleWmPaint(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
bool handleWmPaint(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
void handleMoved();
|
||||
void handleResized(int wParam);
|
||||
|
Loading…
Reference in New Issue
Block a user