diff --git a/include/wx/generic/panelg.h b/include/wx/generic/panelg.h index 31a326736e..cb4a5f7769 100644 --- a/include/wx/generic/panelg.h +++ b/include/wx/generic/panelg.h @@ -83,7 +83,7 @@ public: #ifdef __WXUNIVERSAL__ virtual bool IsCanvasWindow() const { return TRUE; } - virtual bool ProvidesBackground() { return TRUE; } + virtual bool ProvidesBackground() const { return TRUE; } #endif WX_DECLARE_CONTROL_CONTAINER(); diff --git a/include/wx/univ/toplevel.h b/include/wx/univ/toplevel.h index caa5688c03..e9265722ee 100644 --- a/include/wx/univ/toplevel.h +++ b/include/wx/univ/toplevel.h @@ -143,7 +143,7 @@ public: virtual int GetMinWidth() const; virtual int GetMinHeight() const; - virtual bool ProvidesBackground() { return TRUE; } + virtual bool ProvidesBackground() const { return TRUE; } protected: // handle titlebar button click event diff --git a/include/wx/univ/window.h b/include/wx/univ/window.h index 673dddf1e3..2c0d484df6 100644 --- a/include/wx/univ/window.h +++ b/include/wx/univ/window.h @@ -179,7 +179,7 @@ public: // to be used with function above: transparent windows get // their background from parents that return TRUE here, // so this is mostly for wxPanel, wxTopLevelWindow etc. - virtual bool ProvidesBackground() { return FALSE; } + virtual bool ProvidesBackground() const { return FALSE; } // return TRUE if this control can be highlighted when the mouse is over // it (the theme decides itself whether it is really highlighted or not) diff --git a/src/univ/winuniv.cpp b/src/univ/winuniv.cpp index 3b0a025004..afc1a6efbd 100644 --- a/src/univ/winuniv.cpp +++ b/src/univ/winuniv.cpp @@ -109,7 +109,7 @@ void wxWindow::Init() m_isCurrent = FALSE; m_renderer = wxTheme::Get()->GetRenderer(); - + m_oldSize.x = -1; m_oldSize.y = -1; } @@ -240,7 +240,7 @@ void wxWindow::OnErase(wxEraseEvent& event) return; } - + DoDrawBackground(*event.GetDC()); // if we have both scrollbars, we also have a square in the corner between @@ -267,41 +267,42 @@ void wxWindow::OnErase(wxEraseEvent& event) bool wxWindow::DoDrawBackground(wxDC& dc) { wxRect rect; - + wxSize size = GetSize(); // Why not GetClientSize() ? rect.x = 0; rect.y = 0; rect.width = size.x; rect.height = size.y; - - if (HasTransparentBackground() && GetParent() && GetParent()->ProvidesBackground()) + + wxWindow * const parent = GetParent(); + if ( HasTransparentBackground() && parent && parent->ProvidesBackground() ) { wxASSERT( !IsTopLevel() ); - + wxPoint pos = GetPosition(); - + AdjustForParentClientOrigin( pos.x, pos.y, 0 ); - + // Adjust DC logical origin wxCoord x,y; dc.GetLogicalOrigin( &x, &y ); x += pos.x; y += pos.y; dc.SetLogicalOrigin( x, y ); - + // Adjust draw rect rect.x = pos.x; rect.y = pos.y; - + // Let parent draw the background - GetParent()->EraseBackground( dc, rect ); + parent->EraseBackground( dc, rect ); } else { // Draw background ouselves - EraseBackground( dc, rect ); + EraseBackground( dc, rect ); } - + return TRUE; } @@ -315,10 +316,10 @@ void wxWindow::EraseBackground(wxDC& dc, const wxRect& rect) wxBitmap bmp = GetBackgroundBitmap(&alignment, &stretch); wxControlRenderer::DrawBitmap(dc, bmp, rect, alignment, stretch); } - else + else { // Just fill it with bg colour if no bitmap - + m_renderer->DrawBackground(dc, wxTHEME_BG_COLOUR(this), rect, GetStateFlags()); } @@ -478,28 +479,28 @@ int wxWindow::GetStateFlags() const void wxWindow::OnSize(wxSizeEvent& event) { event.Skip(); - + if ( m_scrollbarVert || m_scrollbarHorz ) { PositionScrollbars(); } - + #if 0 // ndef __WXMSW__ // Refresh the area (strip) previously occupied by the border - + if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ) && IsShown()) { // This code assumes that wxSizeEvent.GetSize() returns // the area of the entire window, not just the client // area. wxSize newSize = event.GetSize(); - + if (m_oldSize.x == -1 && m_oldSize.y == -1) { m_oldSize = newSize; return; } - + if (HasFlag( wxSIMPLE_BORDER )) { if (newSize.y > m_oldSize.y) @@ -520,7 +521,7 @@ void wxWindow::OnSize(wxSizeEvent& event) rect.width = newSize.x; wxWindowNative::Refresh( TRUE, &rect ); } - + if (newSize.x > m_oldSize.x) { wxRect rect; @@ -561,7 +562,7 @@ void wxWindow::OnSize(wxSizeEvent& event) rect.width = newSize.x; wxWindowNative::Refresh( TRUE, &rect ); } - + if (newSize.x > m_oldSize.x) { wxRect rect; @@ -581,7 +582,7 @@ void wxWindow::OnSize(wxSizeEvent& event) wxWindowNative::Refresh( TRUE, &rect ); } } - + m_oldSize = newSize; } #endif @@ -915,7 +916,7 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) wxWindowNative::ScrollWindow(dx, dy, rect); -#else +#else // !wxX11 // before scrolling it, ensure that we don't have any unpainted areas Update(); @@ -933,11 +934,11 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) r = ScrollNoRefresh(0, dy, rect); Refresh(TRUE /* erase bkgnd */, &r); } - - // scroll children accordingly: + + // scroll children accordingly: wxPoint offset(dx, dy); - - for (wxWindowList::Node *node = GetChildren().GetFirst(); + + for (wxWindowList::Node *node = GetChildren().GetFirst(); node; node = node->GetNext()) { wxWindow *child = node->GetData(); @@ -945,13 +946,13 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) continue; // VS: Scrolling children has non-trivial semantics. If rect=NULL then - // it is easy: we scroll all children. Otherwise it gets + // it is easy: we scroll all children. Otherwise it gets // complicated: // 1. if scrolling in one direction only, scroll only // those children that intersect shaft defined by the rectangle // and scrolling direction // 2. if scrolling in both axes, scroll all children - + if ( rect && (dx * dy == 0 /* moving in only one of x, y axis */) ) { wxRect childRect = child->GetRect(); @@ -970,8 +971,8 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) { child->Move(child->GetPosition() + offset); } - } -#endif + } +#endif // wxX11/!wxX11 } wxRect wxWindow::ScrollNoRefresh(int dx, int dy, const wxRect *rectTotal)