Merge branch 'rtl-fixes'
Fix appearance of wxNotebook children background when using RTL locales.
This commit is contained in:
@@ -178,11 +178,6 @@ protected:
|
||||
|
||||
// creates the brush to be used for drawing the tab control background
|
||||
void UpdateBgBrush();
|
||||
|
||||
// common part of QueryBgBitmap() and MSWPrintChild()
|
||||
//
|
||||
// if child == NULL, draw background for the entire notebook itself
|
||||
bool DoDrawBackground(WXHDC hDC, wxWindow *child = NULL);
|
||||
#endif // wxUSE_UXTHEME
|
||||
|
||||
// these function are used for reducing flicker on notebook resize
|
||||
|
@@ -1102,27 +1102,20 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event)
|
||||
|
||||
#if wxUSE_UXTHEME
|
||||
|
||||
bool wxNotebook::DoDrawBackground(WXHDC hDC, wxWindow *child)
|
||||
WXHBRUSH wxNotebook::QueryBgBitmap()
|
||||
{
|
||||
wxUxThemeHandle theme(child ? child : this, L"TAB");
|
||||
if ( !theme )
|
||||
return false;
|
||||
|
||||
// get the notebook client rect (we're not interested in drawing tabs
|
||||
// themselves)
|
||||
wxRect r = GetPageSize();
|
||||
if ( r.IsEmpty() )
|
||||
return false;
|
||||
return 0;
|
||||
|
||||
wxUxThemeHandle theme(this, L"TAB");
|
||||
if ( !theme )
|
||||
return 0;
|
||||
|
||||
RECT rc;
|
||||
wxCopyRectToRECT(r, rc);
|
||||
|
||||
// map rect to the coords of the window we're drawing in
|
||||
if ( child )
|
||||
::MapWindowPoints(GetHwnd(), GetHwndOf(child), (POINT *)&rc, 2);
|
||||
|
||||
// we have the content area (page size), but we need to draw all of the
|
||||
// background for it to be aligned correctly
|
||||
WindowHDC hDC(GetHwnd());
|
||||
wxUxThemeEngine::Get()->GetThemeBackgroundExtent
|
||||
(
|
||||
theme,
|
||||
@@ -1132,33 +1125,22 @@ bool wxNotebook::DoDrawBackground(WXHDC hDC, wxWindow *child)
|
||||
&rc,
|
||||
&rc
|
||||
);
|
||||
|
||||
MemoryHDC hDCMem(hDC);
|
||||
CompatibleBitmap hBmp(hDC, rc.right, rc.bottom);
|
||||
|
||||
{
|
||||
SelectInHDC selectBmp(hDCMem, hBmp);
|
||||
wxUxThemeEngine::Get()->DrawThemeBackground
|
||||
(
|
||||
theme,
|
||||
(HDC) hDC,
|
||||
hDCMem,
|
||||
9 /* TABP_PANE */,
|
||||
0,
|
||||
&rc,
|
||||
NULL
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
WXHBRUSH wxNotebook::QueryBgBitmap()
|
||||
{
|
||||
wxRect r = GetPageSize();
|
||||
if ( r.IsEmpty() )
|
||||
return 0;
|
||||
|
||||
WindowHDC hDC(GetHwnd());
|
||||
MemoryHDC hDCMem(hDC);
|
||||
CompatibleBitmap hBmp(hDC, r.x + r.width, r.y + r.height);
|
||||
|
||||
SelectInHDC selectBmp(hDCMem, hBmp);
|
||||
|
||||
if ( !DoDrawBackground((WXHDC)(HDC)hDCMem) )
|
||||
return 0;
|
||||
} // deselect bitmap from the memory HDC before using it
|
||||
|
||||
return (WXHBRUSH)::CreatePatternBrush(hBmp);
|
||||
}
|
||||
@@ -1180,15 +1162,7 @@ void wxNotebook::UpdateBgBrush()
|
||||
|
||||
bool wxNotebook::MSWPrintChild(WXHDC hDC, wxWindow *child)
|
||||
{
|
||||
// solid background colour overrides themed background drawing
|
||||
if ( !UseBgCol() && DoDrawBackground(hDC, child) )
|
||||
return true;
|
||||
|
||||
// If we're using a solid colour (for example if we've switched off
|
||||
// theming for this notebook), paint it
|
||||
if (UseBgCol())
|
||||
{
|
||||
wxRect r = GetPageSize();
|
||||
const wxRect r = GetPageSize();
|
||||
if ( r.IsEmpty() )
|
||||
return false;
|
||||
|
||||
@@ -1199,6 +1173,10 @@ bool wxNotebook::MSWPrintChild(WXHDC hDC, wxWindow *child)
|
||||
if ( child )
|
||||
::MapWindowPoints(GetHwnd(), GetHwndOf(child), (POINT *)&rc, 2);
|
||||
|
||||
// If we're using a solid colour (for example if we've switched off
|
||||
// theming for this notebook), paint it
|
||||
if (UseBgCol())
|
||||
{
|
||||
wxBrush brush(GetBackgroundColour());
|
||||
HBRUSH hbr = GetHbrushOf(brush);
|
||||
|
||||
@@ -1206,6 +1184,34 @@ bool wxNotebook::MSWPrintChild(WXHDC hDC, wxWindow *child)
|
||||
|
||||
return true;
|
||||
}
|
||||
else // No solid background colour, try to use themed background.
|
||||
{
|
||||
wxUxThemeHandle theme(child, L"TAB");
|
||||
if ( theme )
|
||||
{
|
||||
// we have the content area (page size), but we need to draw all of the
|
||||
// background for it to be aligned correctly
|
||||
wxUxThemeEngine::Get()->GetThemeBackgroundExtent
|
||||
(
|
||||
theme,
|
||||
(HDC) hDC,
|
||||
9 /* TABP_PANE */,
|
||||
0,
|
||||
&rc,
|
||||
&rc
|
||||
);
|
||||
wxUxThemeEngine::Get()->DrawThemeBackground
|
||||
(
|
||||
theme,
|
||||
(HDC) hDC,
|
||||
9 /* TABP_PANE */,
|
||||
0,
|
||||
&rc,
|
||||
NULL
|
||||
);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return wxNotebookBase::MSWPrintChild(hDC, child);
|
||||
}
|
||||
|
@@ -4888,7 +4888,13 @@ wxWindowMSW::MSWGetBgBrushForChild(WXHDC hDC, wxWindowMSW *child)
|
||||
RECT rc;
|
||||
::GetWindowRect(GetHwndOf(child), &rc);
|
||||
|
||||
::MapWindowPoints(NULL, GetHwnd(), (POINT *)&rc, 1);
|
||||
// It is important to pass both points to MapWindowPoints() as in
|
||||
// addition to converting them to our coordinate system, this function
|
||||
// will also exchange the left and right coordinates if this window
|
||||
// uses RTL layout, which is exactly what we need here as the child
|
||||
// window origin is its _right_ top corner in this case and not the
|
||||
// left one.
|
||||
::MapWindowPoints(NULL, GetHwnd(), (POINT *)&rc, 2);
|
||||
|
||||
int x = rc.left,
|
||||
y = rc.top;
|
||||
|
Reference in New Issue
Block a user