X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ec47a147749e6465992dd1d3fb2c214a54868eaf..836915e177aa750ca5c3bc19b4dbdedd36603e8d:/src/univ/winuniv.cpp diff --git a/src/univ/winuniv.cpp b/src/univ/winuniv.cpp index ba8e127164..d8ff488e5a 100644 --- a/src/univ/winuniv.cpp +++ b/src/univ/winuniv.cpp @@ -108,6 +108,9 @@ void wxWindow::Init() m_isCurrent = FALSE; m_renderer = wxTheme::Get()->GetRenderer(); + + m_oldSize.x = -1; + m_oldSize.y = -1; } bool wxWindow::Create(wxWindow *parent, @@ -129,9 +132,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(); @@ -446,18 +455,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 +485,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 +526,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 +587,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 +780,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 +843,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 } }