Account for scrolling when setting the background brush origin in wxMSW.
We must use physical coordinates for the brush origin to account for the coordinates offset in scrolled windows, so add MSWAdjustBrushOrg() and call it from MSWGetBgBrushForChild(). Closes #14917. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73495 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
2aee45f63a
commit
208717f64e
@ -410,6 +410,17 @@ public:
|
||||
// weird wxToolBar case and MSWGetBgBrushForChild() itself is used by
|
||||
// MSWGetBgBrush() to actually find the right brush to use.
|
||||
|
||||
// Adjust the origin for the brush returned by MSWGetBgBrushForChild().
|
||||
//
|
||||
// This needs to be overridden for scrolled windows to ensure that the
|
||||
// scrolling of their associated DC is taken into account.
|
||||
//
|
||||
// Both parameters must be non-NULL.
|
||||
virtual void MSWAdjustBrushOrg(int* WXUNUSED(xOrg),
|
||||
int* WXUNUSED(yOrg)) const
|
||||
{
|
||||
}
|
||||
|
||||
// The brush returned from here must remain valid at least until the next
|
||||
// event loop iteration. Returning 0, as is done by default, indicates
|
||||
// there is no custom background brush.
|
||||
|
@ -399,13 +399,19 @@ public:
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __WXMSW__
|
||||
// we need to return a special WM_GETDLGCODE value to process just the
|
||||
// arrows but let the other navigation characters through
|
||||
#ifdef __WXMSW__
|
||||
virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
|
||||
{
|
||||
return FilterMSWWindowProc(nMsg, T::MSWWindowProc(nMsg, wParam, lParam));
|
||||
}
|
||||
|
||||
// Take into account the scroll origin.
|
||||
virtual void MSWAdjustBrushOrg(int* xOrg, int* yOrg) const
|
||||
{
|
||||
CalcUnscrolledPosition(*xOrg, *yOrg, xOrg, yOrg);
|
||||
}
|
||||
#endif // __WXMSW__
|
||||
|
||||
WX_FORWARD_TO_SCROLL_HELPER()
|
||||
|
@ -4959,7 +4959,11 @@ wxWindowMSW::MSWGetBgBrushForChild(WXHDC hDC, wxWindowMSW *child)
|
||||
|
||||
::MapWindowPoints(NULL, GetHwnd(), (POINT *)&rc, 1);
|
||||
|
||||
if ( !::SetBrushOrgEx((HDC)hDC, -rc.left, -rc.top, NULL) )
|
||||
int x = rc.left,
|
||||
y = rc.top;
|
||||
MSWAdjustBrushOrg(&x, &y);
|
||||
|
||||
if ( !::SetBrushOrgEx((HDC)hDC, -x, -y, NULL) )
|
||||
{
|
||||
wxLogLastError(wxT("SetBrushOrgEx(bg brush)"));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user