X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/574c939ef1c1b835a8bc65c0fe724548fa04ec49..dfe8399aa013a1fa6487d008bf1176078f218c6d:/src/common/wincmn.cpp?ds=sidebyside diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index 83253625ef..2641125c24 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -47,9 +47,10 @@ #if wxUSE_CONSTRAINTS #include "wx/layout.h" - #include "wx/sizer.h" #endif // wxUSE_CONSTRAINTS +#include "wx/sizer.h" + #if wxUSE_DRAG_AND_DROP #include "wx/dnd.h" #endif // wxUSE_DRAG_AND_DROP @@ -151,9 +152,11 @@ void wxWindowBase::InitBase() // no constraints whatsoever m_constraints = (wxLayoutConstraints *) NULL; m_constraintsInvolvedIn = (wxWindowList *) NULL; +#endif // wxUSE_CONSTRAINTS + m_windowSizer = (wxSizer *) NULL; + m_containingSizer = (wxSizer *) NULL; m_autoLayout = FALSE; -#endif // wxUSE_CONSTRAINTS #if wxUSE_DRAG_AND_DROP m_dropTarget = (wxDropTarget *)NULL; @@ -168,7 +171,7 @@ void wxWindowBase::InitBase() #endif // wxUSE_CARET #if wxUSE_PALETTE - m_custompalette = false; + m_hasCustomPalette = FALSE; #endif // wxUSE_PALETTE // Whether we're using the current theme for this window (wxGTK only for now) @@ -257,11 +260,14 @@ wxWindowBase::~wxWindowBase() m_constraints = NULL; } +#endif // wxUSE_CONSTRAINTS + + if ( m_containingSizer ) + m_containingSizer->Remove((wxWindow*)this); + if ( m_windowSizer ) delete m_windowSizer; -#endif // wxUSE_CONSTRAINTS - #if wxUSE_DRAG_AND_DROP if ( m_dropTarget ) delete m_dropTarget; @@ -401,14 +407,18 @@ void wxWindowBase::Centre(int direction) wxRect rect = wxGetClientDisplayRect(); wxSize size (rect.width,rect.height); - if (posParent.x >= 0) // if parent is on the main display + // NB: in wxMSW, negative position may not neccessary mean "out of screen", + // but it may mean that the window is placed on other than the main + // display. Therefore we only make sure centered window is on the main display + // if the parent is at least partially present here. + if (posParent.x + widthParent >= 0) // if parent is (partially) on the main display { if (xNew < 0) xNew = 0; else if (xNew+width > size.x) xNew = size.x-width-1; } - if (posParent.y >= 0) // if parent is on the main display + if (posParent.y + heightParent >= 0) // if parent is (partially) on the main display { if (yNew+height > size.y) yNew = size.y-height-1; @@ -733,6 +743,31 @@ bool wxWindowBase::SetFont(const wxFont& font) return TRUE; } +#if wxUSE_PALETTE + +void wxWindowBase::SetPalette(const wxPalette& pal) +{ + m_hasCustomPalette = TRUE; + m_palette = pal; + + // VZ: can anyone explain me what do we do here? + wxWindowDC d((wxWindow *) this); + d.SetPalette(pal); +} + +wxWindow *wxWindowBase::GetAncestorWithCustomPalette() const +{ + wxWindow *win = (wxWindow *)this; + while ( win && !win->HasCustomPalette() ) + { + win = win->GetParent(); + } + + return win; +} + +#endif // wxUSE_PALETTE + #if wxUSE_CARET void wxWindowBase::SetCaret(wxCaret *caret) { @@ -1148,10 +1183,11 @@ void wxWindowBase::DeleteRelatedConstraints() m_constraintsInvolvedIn = (wxWindowList *) NULL; } } +#endif -void wxWindowBase::SetSizer(wxSizer *sizer) +void wxWindowBase::SetSizer(wxSizer *sizer, bool deleteOld) { - if (m_windowSizer) delete m_windowSizer; + if (m_windowSizer && deleteOld) delete m_windowSizer; m_windowSizer = sizer; } @@ -1165,10 +1201,8 @@ bool wxWindowBase::Layout() GetClientSize(&w, &h); GetSizer()->SetDimension( 0, 0, w, h ); -#if defined __WXPM__ - OS2Layout(w, h); -#endif } +#if wxUSE_CONSTRAINTS else { wxLayoutConstraints *constr = GetConstraints(); @@ -1192,11 +1226,12 @@ bool wxWindowBase::Layout() DoPhase(2); // Layout grand children SetConstraintSizes(); // Recursively set the real window sizes } +#endif return TRUE; } - +#if wxUSE_CONSTRAINTS // Do a phase of evaluating constraints: the default behaviour. wxSizers may // do a similar thing, but also impose their own 'constraints' and order the // evaluation differently. @@ -1402,7 +1437,21 @@ void wxWindowBase::GetClientSizeConstraint(int *w, int *h) const GetClientSize(w, h); } -void wxWindowBase::AdjustForParentClientOrigin(int& x, int& y, int sizeFlags) +void wxWindowBase::GetPositionConstraint(int *x, int *y) const +{ + wxLayoutConstraints *constr = GetConstraints(); + if ( constr ) + { + *x = constr->left.GetValue(); + *y = constr->top.GetValue(); + } + else + GetPosition(x, y); +} + +#endif // wxUSE_CONSTRAINTS + +void wxWindowBase::AdjustForParentClientOrigin(int& x, int& y, int sizeFlags) const { // don't do it for the dialogs/frames - they float independently of their // parent @@ -1418,21 +1467,6 @@ void wxWindowBase::AdjustForParentClientOrigin(int& x, int& y, int sizeFlags) } } - -void wxWindowBase::GetPositionConstraint(int *x, int *y) const -{ - wxLayoutConstraints *constr = GetConstraints(); - if ( constr ) - { - *x = constr->left.GetValue(); - *y = constr->top.GetValue(); - } - else - GetPosition(x, y); -} - -#endif // wxUSE_CONSTRAINTS - // ---------------------------------------------------------------------------- // do Update UI processing for child controls // ---------------------------------------------------------------------------- @@ -1678,6 +1712,8 @@ void wxWindowBase::CaptureMouse() wxWindow *winOld = GetCapture(); if ( winOld ) { + ((wxWindowBase*) winOld)->DoReleaseMouse(); + // save it on stack wxWindowNext *item = new wxWindowNext; item->win = winOld; @@ -1699,8 +1735,8 @@ void wxWindowBase::ReleaseMouse() if ( ms_winCaptureNext ) { - ms_winCaptureNext->win->CaptureMouse(); - + ((wxWindowBase*)ms_winCaptureNext->win)->DoCaptureMouse(); + wxWindowNext *item = ms_winCaptureNext; ms_winCaptureNext = item->next; delete item; @@ -1712,3 +1748,4 @@ void wxWindowBase::ReleaseMouse() GetCapture()); } +// vi:sts=4:sw=4:et