Refactor: remove wxNotebook::DoDrawBackground() in wxMSW
The code in QueryBgBitmap() and MSWPrintChild() is sufficiently different that we can't easily reuse the drawing calls between them, so don't tie ourselves in knots trying to do it, just duplicating these 2 calls in the 2 functions is not that bad and the code is more clear. No real changes.
This commit is contained in:
parent
0487a3d3f1
commit
eed5700a07
@ -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,49 +1102,6 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event)
|
||||
|
||||
#if wxUSE_UXTHEME
|
||||
|
||||
bool wxNotebook::DoDrawBackground(WXHDC hDC, wxWindow *child)
|
||||
{
|
||||
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;
|
||||
|
||||
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
|
||||
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;
|
||||
}
|
||||
|
||||
WXHBRUSH wxNotebook::QueryBgBitmap()
|
||||
{
|
||||
wxRect r = GetPageSize();
|
||||
@ -1172,10 +1129,18 @@ WXHBRUSH wxNotebook::QueryBgBitmap()
|
||||
MemoryHDC hDCMem(hDC);
|
||||
CompatibleBitmap hBmp(hDC, rc.right, rc.bottom);
|
||||
|
||||
SelectInHDC selectBmp(hDCMem, hBmp);
|
||||
|
||||
if ( !DoDrawBackground((WXHDC)(HDC)hDCMem) )
|
||||
return 0;
|
||||
{
|
||||
SelectInHDC selectBmp(hDCMem, hBmp);
|
||||
wxUxThemeEngine::Get()->DrawThemeBackground
|
||||
(
|
||||
theme,
|
||||
hDCMem,
|
||||
9 /* TABP_PANE */,
|
||||
0,
|
||||
&rc,
|
||||
NULL
|
||||
);
|
||||
} // deselect bitmap from the memory HDC before using it
|
||||
|
||||
return (WXHBRUSH)::CreatePatternBrush(hBmp);
|
||||
}
|
||||
@ -1197,25 +1162,21 @@ void wxNotebook::UpdateBgBrush()
|
||||
|
||||
bool wxNotebook::MSWPrintChild(WXHDC hDC, wxWindow *child)
|
||||
{
|
||||
// solid background colour overrides themed background drawing
|
||||
if ( !UseBgCol() && DoDrawBackground(hDC, child) )
|
||||
return true;
|
||||
const wxRect r = GetPageSize();
|
||||
if ( r.IsEmpty() )
|
||||
return false;
|
||||
|
||||
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);
|
||||
|
||||
// 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();
|
||||
if ( r.IsEmpty() )
|
||||
return false;
|
||||
|
||||
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);
|
||||
|
||||
wxBrush brush(GetBackgroundColour());
|
||||
HBRUSH hbr = GetHbrushOf(brush);
|
||||
|
||||
@ -1223,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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user