X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/03647350fc7cd141953c72e0284e928847d30f44..107defe36a68091303be9a11c8abb83432acee8c:/src/osx/window_osx.cpp diff --git a/src/osx/window_osx.cpp b/src/osx/window_osx.cpp index 4a4c1278a9..041c9d952e 100644 --- a/src/osx/window_osx.cpp +++ b/src/osx/window_osx.cpp @@ -67,10 +67,6 @@ #include "wx/osx/uma.h" #else #include "wx/osx/private.h" -#if wxOSX_USE_COCOA -// bring in themeing -#include -#endif #endif #define MAC_SCROLLBAR_SIZE 15 @@ -130,6 +126,7 @@ void wxWindowMac::Init() m_vScrollBar = NULL ; m_hScrollBarAlwaysShown = false; m_vScrollBarAlwaysShown = false; + m_growBox = NULL ; m_macIsUserPane = true; m_clipChildren = false ; @@ -268,6 +265,8 @@ void wxWindowMac::MacChildAdded() m_vScrollBar->Raise() ; if ( m_hScrollBar ) m_hScrollBar->Raise() ; + if ( m_growBox ) + m_growBox->Raise() ; #endif } @@ -898,22 +897,20 @@ wxSize wxWindowMac::DoGetBestSize() const r.width = r.height = 16 ; - if ( 0 ) - { - } #if wxUSE_SCROLLBAR - else if ( IsKindOf( CLASSINFO( wxScrollBar ) ) ) + if ( IsKindOf( CLASSINFO( wxScrollBar ) ) ) { r.height = 16 ; } + else #endif #if wxUSE_SPINBTN - else if ( IsKindOf( CLASSINFO( wxSpinButton ) ) ) + if ( IsKindOf( CLASSINFO( wxSpinButton ) ) ) { r.height = 24 ; } -#endif else +#endif { // return wxWindowBase::DoGetBestSize() ; } @@ -1061,6 +1058,22 @@ bool wxWindowMac::Show(bool show) if ( m_peer ) m_peer->SetVisibility( show ) ; + wxShowEvent eventShow(GetId(), show); + eventShow.SetEventObject(this); + + HandleWindowEvent(eventShow); + + return true; +} + +bool wxWindowMac::OSXShowWithEffect(bool show, + wxShowEffect effect, + unsigned timeout) +{ + if ( effect == wxSHOW_EFFECT_NONE || + !m_peer || !m_peer->ShowWithEffect(show, effect, timeout) ) + return Show(show); + return true; } @@ -1194,9 +1207,32 @@ wxWindow *wxGetActiveWindow() } // Coordinates relative to the window -void wxWindowMac::WarpPointer(int WXUNUSED(x_pos), int WXUNUSED(y_pos)) +void wxWindowMac::WarpPointer(int x_pos, int y_pos) { - // We really don't move the mouse programmatically under Mac. +#if wxOSX_USE_COCOA_OR_CARBON + int x = x_pos; + int y = y_pos; + DoClientToScreen(&x, &y); + CGPoint cgpoint = CGPointMake( x, y ); + CGWarpMouseCursorPosition( cgpoint ); + + // At least GTK sends a mouse moved event after WarpMouse + wxMouseEvent event(wxEVT_MOTION); + event.m_x = x_pos; + event.m_y = y_pos; + wxMouseState mState = ::wxGetMouseState(); + + event.m_altDown = mState.AltDown(); + event.m_controlDown = mState.ControlDown(); + event.m_leftDown = mState.LeftIsDown(); + event.m_middleDown = mState.MiddleIsDown(); + event.m_rightDown = mState.RightIsDown(); + event.m_metaDown = mState.MetaDown(); + event.m_shiftDown = mState.ShiftDown(); + event.SetId(GetId()); + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); +#endif } int wxWindowMac::GetScrollPos(int orient) const @@ -1302,6 +1338,7 @@ void wxWindowMac::MacPaintGrowBox() #if wxUSE_SCROLLBAR if ( MacHasScrollBarCorner() ) { +#if 0 CGContextRef cgContext = (CGContextRef) MacGetCGContextRef() ; wxASSERT( cgContext ) ; @@ -1327,7 +1364,17 @@ void wxWindowMac::MacPaintGrowBox() } CGContextFillRect( cgContext, cgrect ); CGContextRestoreGState( cgContext ); +#else + if (m_growBox) + { + if ( m_backgroundColour.Ok() ) + m_growBox->SetBackgroundColour(m_backgroundColour); + else + m_growBox->SetBackgroundColour(*wxWHITE); + } +#endif } + #endif } @@ -1394,6 +1441,8 @@ void wxWindowMac::RemoveChild( wxWindowBase *child ) m_hScrollBar = NULL ; if ( child == m_vScrollBar ) m_vScrollBar = NULL ; + if ( child == m_growBox ) + m_growBox = NULL ; #endif wxWindowBase::RemoveChild( child ) ; } @@ -1480,6 +1529,8 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect) continue; if (child == m_hScrollBar) continue; + if (child == m_growBox) + continue; #endif if (child->IsTopLevel()) continue; @@ -1794,6 +1845,7 @@ bool wxWindowMac::MacDoRedraw( long time ) { case wxBG_STYLE_ERASE: case wxBG_STYLE_SYSTEM: + case wxBG_STYLE_COLOUR: { // for the toplevel window this really is the entire area for // all the others only their client area, otherwise they might @@ -1822,6 +1874,7 @@ bool wxWindowMac::MacDoRedraw( long time ) break; case wxBG_STYLE_PAINT: + case wxBG_STYLE_TRANSPARENT: // nothing to do, user-defined EVT_PAINT handler will overwrite the // entire window client area break; @@ -1871,6 +1924,8 @@ void wxWindowMac::MacPaintChildrenBorders() continue; if (child == m_hScrollBar) continue; + if (child == m_growBox) + continue; #endif if (child->IsTopLevel()) continue; @@ -2004,6 +2059,10 @@ void wxWindowMac::MacCreateScrollBars( long style ) m_hScrollBar = new wxScrollBar((wxWindow*)this, wxID_ANY, hPoint, hSize , wxHORIZONTAL); m_hScrollBar->SetMinSize( wxDefaultSize ); } + + wxPoint gPoint(width - scrlsize, height - scrlsize); + wxSize gSize(scrlsize, scrlsize); + m_growBox = new wxPanel((wxWindow *)this, wxID_ANY, gPoint, gSize, 0); } // because the create does not take into account the client area origin @@ -2016,7 +2075,7 @@ bool wxWindowMac::MacIsChildOfClientArea( const wxWindow* child ) const { bool result = ((child == NULL) #if wxUSE_SCROLLBAR - || ((child != m_hScrollBar) && (child != m_vScrollBar)) + || ((child != m_hScrollBar) && (child != m_vScrollBar) && (child != m_growBox)) #endif ); @@ -2048,6 +2107,20 @@ void wxWindowMac::MacRepositionScrollBars() m_vScrollBar->SetSize( vPoint.x , vPoint.y, vSize.x, vSize.y , wxSIZE_ALLOW_MINUS_ONE ); if ( m_hScrollBar ) m_hScrollBar->SetSize( hPoint.x , hPoint.y, hSize.x, hSize.y, wxSIZE_ALLOW_MINUS_ONE ); + if ( m_growBox ) + { + if ( MacHasScrollBarCorner() ) + { + m_growBox->SetSize( width - scrlsize, height - scrlsize, wxDefaultCoord, wxDefaultCoord, wxSIZE_USE_EXISTING ); + if ( !m_growBox->IsShown() ) + m_growBox->Show(); + } + else + { + if ( m_growBox->IsShown() ) + m_growBox->Hide(); + } + } #endif } @@ -2233,6 +2306,8 @@ bool wxWindowMac::Reparent(wxWindowBase *newParentBase) m_peer->RemoveFromParent(); m_peer->Embed( GetParent()->GetPeer() ); + + MacChildAdded(); return true; }