X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ec47a147749e6465992dd1d3fb2c214a54868eaf..0dbfd66d0b35352a0f60e7190b72815052b3d2d4:/src/univ/winuniv.cpp?ds=sidebyside diff --git a/src/univ/winuniv.cpp b/src/univ/winuniv.cpp index ba8e127164..f3ab3b3f23 100644 --- a/src/univ/winuniv.cpp +++ b/src/univ/winuniv.cpp @@ -108,6 +108,11 @@ void wxWindow::Init() m_isCurrent = FALSE; m_renderer = wxTheme::Get()->GetRenderer(); + + m_oldSize.x = -1; + m_oldSize.y = -1; + + m_hasDialogBackground = FALSE; } bool wxWindow::Create(wxWindow *parent, @@ -129,9 +134,15 @@ bool wxWindow::Create(wxWindow *parent, // if we should always have the scrollbar, do show it if ( GetWindowStyle() & wxALWAYS_SHOW_SB ) { +#if wxUSE_TWO_WINDOWS + SetInsertIntoMain( TRUE ); +#endif m_scrollbarVert = new wxScrollBar(this, -1, wxDefaultPosition, wxDefaultSize, wxSB_VERTICAL); +#if wxUSE_TWO_WINDOWS + SetInsertIntoMain( FALSE ); +#endif // and position it PositionScrollbars(); @@ -256,10 +267,14 @@ void wxWindow::OnPaint(wxPaintEvent& event) bool wxWindow::DoDrawBackground(wxDC& dc) { - // FIXME: leaving this code in leads to partial bg redraws sometimes under - // MSW + // FIXME: Leaving this code in leads to partial bg redraws + // sometimes under MSW. + // The same happens under X11 because it has a clear + // region and an update region and these are sometimes + // different. RR. wxRect rect; -#ifndef __WXMSW__ +// #ifndef __WXMSW__ +#if 0 rect = GetUpdateRegion().GetBox(); if ( !rect.width && !rect.height ) #endif @@ -446,18 +461,29 @@ int wxWindow::GetStateFlags() const void wxWindow::OnSize(wxSizeEvent& event) { + event.Skip(); + if ( m_scrollbarVert || m_scrollbarHorz ) { PositionScrollbars(); } -#if 0 +#if 0 // ndef __WXMSW__ // Refresh the area (strip) previously occupied by the border - if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE )) + 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) @@ -465,19 +491,38 @@ void wxWindow::OnSize(wxSizeEvent& event) wxRect rect; rect.x = 0; rect.width = m_oldSize.x; - rect.y = m_oldSize.y; + rect.y = m_oldSize.y-2; rect.height = 1; Refresh( TRUE, &rect ); } + else if (newSize.y < m_oldSize.y) + { + wxRect rect; + rect.y = newSize.y; + rect.x = 0; + rect.height = 1; + rect.width = newSize.x; + wxWindowNative::Refresh( TRUE, &rect ); + } + if (newSize.x > m_oldSize.x) { wxRect rect; rect.y = 0; rect.height = m_oldSize.y; - rect.x = m_oldSize.x; + rect.x = m_oldSize.x-2; rect.width = 1; Refresh( TRUE, &rect ); } + else if (newSize.x < m_oldSize.x) + { + wxRect rect; + rect.x = newSize.x; + rect.y = 0; + rect.width = 1; + rect.height = newSize.y; + wxWindowNative::Refresh( TRUE, &rect ); + } } else if (HasFlag( wxSUNKEN_BORDER ) || HasFlag( wxRAISED_BORDER )) @@ -487,26 +532,43 @@ void wxWindow::OnSize(wxSizeEvent& event) wxRect rect; rect.x = 0; rect.width = m_oldSize.x; - rect.y = m_oldSize.y-1; + rect.y = m_oldSize.y-4; rect.height = 2; Refresh( TRUE, &rect ); } + else if (newSize.y < m_oldSize.y) + { + wxRect rect; + rect.y = newSize.y; + rect.x = 0; + rect.height = 2; + rect.width = newSize.x; + wxWindowNative::Refresh( TRUE, &rect ); + } + if (newSize.x > m_oldSize.x) { wxRect rect; rect.y = 0; rect.height = m_oldSize.y; - rect.x = m_oldSize.x-1; + rect.x = m_oldSize.x-4; rect.width = 2; Refresh( TRUE, &rect ); } + else if (newSize.x < m_oldSize.x) + { + wxRect rect; + rect.x = newSize.x; + rect.y = 0; + rect.width = 2; + rect.height = newSize.y; + wxWindowNative::Refresh( TRUE, &rect ); + } } m_oldSize = newSize; } #endif - - event.Skip(); } wxSize wxWindow::DoGetBestSize() const @@ -531,8 +593,11 @@ wxPoint wxWindow::GetClientAreaOrigin() const { wxPoint pt = wxWindowBase::GetClientAreaOrigin(); +#if wxUSE_TWO_WINDOWS +#else if ( m_renderer ) pt += m_renderer->GetBorderDimensions(GetBorder()).GetPosition(); +#endif return pt; } @@ -721,10 +786,16 @@ void wxWindow::SetScrollbar(int orient, if ( !scrollbar ) { // create it +#if wxUSE_TWO_WINDOWS + SetInsertIntoMain( TRUE ); +#endif scrollbar = new wxScrollBar(this, -1, wxDefaultPosition, wxDefaultSize, orient & wxVERTICAL ? wxSB_VERTICAL : wxSB_HORIZONTAL); +#if wxUSE_TWO_WINDOWS + SetInsertIntoMain( FALSE ); +#endif if ( orient & wxVERTICAL ) m_scrollbarVert = scrollbar; else @@ -778,8 +849,12 @@ void wxWindow::SetScrollbar(int orient, // give the window a chance to relayout if ( hasClientSizeChanged ) { +#if wxUSE_TWO_WINDOWS + wxWindowNative::SetSize( GetSize() ); +#else wxSizeEvent event(GetSize()); (void)GetEventHandler()->ProcessEvent(event); +#endif } }