Simplify and correct MSW selection of background brush for children painting.
Check for the transparency of the window background in MSWGetBgBrush() itself and let MSWGetBgBrushForChild() just return the brush to be used. This required adding a MSW-specific hack to wxPanel to allow inheriting background of wxNotebook by its children which is slightly ugly but is exactly what we need to do in this case and makes the rest of the code much simpler. Also add a possibility to set the background of the page containing the control being tested to the widgets sample to test for background inheritance. This shows problems with wxSlider and wxRadioBox backgrounds but they're not new with this patch. Closes #12057. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64372 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -818,6 +818,14 @@ bool wxNotebook::InsertPage(size_t nPage,
|
||||
// succeeded: save the pointer to the page
|
||||
m_pages.Insert(pPage, nPage);
|
||||
|
||||
// also ensure that the notebook background is used for its pages by making
|
||||
// them transparent: this ensures that MSWGetBgBrush() queries the notebook
|
||||
// for the background brush to be used for erasing them
|
||||
if ( wxPanel *panel = wxDynamicCast(pPage, wxPanel) )
|
||||
{
|
||||
panel->MSWSetTransparentBackground();
|
||||
}
|
||||
|
||||
// we may need to adjust the size again if the notebook size changed:
|
||||
// normally this only happens for the first page we add (the tabs which
|
||||
// hadn't been there before are now shown) but for a multiline notebook it
|
||||
@@ -1252,23 +1260,7 @@ void wxNotebook::UpdateBgBrush()
|
||||
|
||||
WXHBRUSH wxNotebook::MSWGetBgBrushForChild(WXHDC hDC, wxWindow *child)
|
||||
{
|
||||
// Only apply to notebook pages and transparent children, see
|
||||
// wxWindow::MSWGetBgBrushForChild() for explanation
|
||||
bool shouldApply;
|
||||
if ( child->GetParent() == this )
|
||||
{
|
||||
// notebook page -- apply background
|
||||
shouldApply = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// controls in a notebook page with transparent background should
|
||||
// be handled too
|
||||
shouldApply = child->HasTransparentBackground() &&
|
||||
child->GetParent()->GetParent() == this;
|
||||
}
|
||||
|
||||
if ( m_hbrBackground && shouldApply )
|
||||
if ( m_hbrBackground )
|
||||
{
|
||||
// before drawing with the background brush, we need to position it
|
||||
// correctly
|
||||
|
Reference in New Issue
Block a user