]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/window_osx.cpp
wxSplitterWindow mouse capture improvements and cleanup.
[wxWidgets.git] / src / osx / window_osx.cpp
index 5ba3fcaf50a1e7a8bb056f1e41126709a6859c07..42c94ae66048d011bb973f4c18d3271dd01b30cf 100644 (file)
 #include "wx/osx/uma.h"
 #else
 #include "wx/osx/private.h"
 #include "wx/osx/uma.h"
 #else
 #include "wx/osx/private.h"
+#if wxOSX_USE_COCOA
 // bring in themeing
 #include <Carbon/Carbon.h>
 #endif
 // bring in themeing
 #include <Carbon/Carbon.h>
 #endif
+#endif
 
 #define MAC_SCROLLBAR_SIZE 15
 #define MAC_SMALL_SCROLLBAR_SIZE 11
 
 #define MAC_SCROLLBAR_SIZE 15
 #define MAC_SMALL_SCROLLBAR_SIZE 11
@@ -242,7 +244,11 @@ bool wxWindowMac::Create(wxWindowMac *parent,
 
 #ifndef __WXUNIVERSAL__
     // Don't give scrollbars to wxControls unless they ask for them
 
 #ifndef __WXUNIVERSAL__
     // Don't give scrollbars to wxControls unless they ask for them
-    if ( (! IsKindOf(CLASSINFO(wxControl)) && ! IsKindOf(CLASSINFO(wxStatusBar)))
+    if ( (! IsKindOf(CLASSINFO(wxControl)) 
+#if wxUSE_STATUSBAR
+        && ! IsKindOf(CLASSINFO(wxStatusBar))
+#endif
+        )
          || (IsKindOf(CLASSINFO(wxControl)) && ((style & wxHSCROLL) || (style & wxVSCROLL))))
     {
         MacCreateScrollBars( style ) ;
          || (IsKindOf(CLASSINFO(wxControl)) && ((style & wxHSCROLL) || (style & wxVSCROLL))))
     {
         MacCreateScrollBars( style ) ;
@@ -257,10 +263,12 @@ bool wxWindowMac::Create(wxWindowMac *parent,
 
 void wxWindowMac::MacChildAdded()
 {
 
 void wxWindowMac::MacChildAdded()
 {
+#if wxUSE_SCROLLBAR
     if ( m_vScrollBar )
         m_vScrollBar->Raise() ;
     if ( m_hScrollBar )
         m_hScrollBar->Raise() ;
     if ( m_vScrollBar )
         m_vScrollBar->Raise() ;
     if ( m_hScrollBar )
         m_hScrollBar->Raise() ;
+#endif
 }
 
 void wxWindowMac::MacPostControlCreate(const wxPoint& WXUNUSED(pos), const wxSize& size)
 }
 
 void wxWindowMac::MacPostControlCreate(const wxPoint& WXUNUSED(pos), const wxSize& size)
@@ -325,7 +333,7 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant )
             break ;
 
         default:
             break ;
 
         default:
-            wxFAIL_MSG(_T("unexpected window variant"));
+            wxFAIL_MSG(wxT("unexpected window variant"));
             break ;
     }
     m_peer->SetData<ControlSize>(kControlEntireControl, kControlSizeTag, &size ) ;
             break ;
     }
     m_peer->SetData<ControlSize>(kControlEntireControl, kControlSizeTag, &size ) ;
@@ -354,7 +362,7 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant )
             break ;
 
         default:
             break ;
 
         default:
-            wxFAIL_MSG(_T("unexpected window variant"));
+            wxFAIL_MSG(wxT("unexpected window variant"));
             break ;
     }
 
             break ;
     }
 
@@ -667,13 +675,14 @@ void wxWindowMac::DoGetClientSize( int *x, int *y ) const
     int left, top;
 
     m_peer->GetContentArea( left, top, ww, hh );
     int left, top;
 
     m_peer->GetContentArea( left, top, ww, hh );
-
+#if wxUSE_SCROLLBAR
     if (m_hScrollBar  && m_hScrollBar->IsShown() )
         hh -= m_hScrollBar->GetSize().y ;
 
     if (m_vScrollBar  && m_vScrollBar->IsShown() )
         ww -= m_vScrollBar->GetSize().x ;
 
     if (m_hScrollBar  && m_hScrollBar->IsShown() )
         hh -= m_hScrollBar->GetSize().y ;
 
     if (m_vScrollBar  && m_vScrollBar->IsShown() )
         ww -= m_vScrollBar->GetSize().x ;
 
+#endif
     if (x)
        *x = ww;
     if (y)
     if (x)
        *x = ww;
     if (y)
@@ -889,16 +898,21 @@ wxSize wxWindowMac::DoGetBestSize() const
             r.width =
             r.height = 16 ;
 
             r.width =
             r.height = 16 ;
 
-            if ( IsKindOf( CLASSINFO( wxScrollBar ) ) )
+            if ( 0 ) 
+            {
+            }
+#if wxUSE_SCROLLBAR
+            else if ( IsKindOf( CLASSINFO( wxScrollBar ) ) )
             {
                 r.height = 16 ;
             }
             {
                 r.height = 16 ;
             }
-    #if wxUSE_SPINBTN
+#endif
+#if wxUSE_SPINBTN
             else if ( IsKindOf( CLASSINFO( wxSpinButton ) ) )
             {
                 r.height = 24 ;
             }
             else if ( IsKindOf( CLASSINFO( wxSpinButton ) ) )
             {
                 r.height = 24 ;
             }
-    #endif
+#endif
             else
             {
                 // return wxWindowBase::DoGetBestSize() ;
             else
             {
                 // return wxWindowBase::DoGetBestSize() ;
@@ -1019,9 +1033,14 @@ void wxWindowMac::DoSetClientSize(int clientwidth, int clientheight)
 
 void wxWindowMac::SetLabel(const wxString& title)
 {
 
 void wxWindowMac::SetLabel(const wxString& title)
 {
+    if ( title == m_label )
+        return;
+
     m_label = title ;
 
     m_label = title ;
 
-    if ( m_peer && m_peer->IsOk() && !(IsKindOf( CLASSINFO(wxButton) ) && GetId() == wxID_HELP) )
+    InvalidateBestSize();
+
+    if ( m_peer && m_peer->IsOk() )
         m_peer->SetLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics), GetFont().GetEncoding() ) ;
 
     // do not trigger refreshes upon invisible and possible partly created objects
         m_peer->SetLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics), GetFont().GetEncoding() ) ;
 
     // do not trigger refreshes upon invisible and possible partly created objects
@@ -1182,6 +1201,7 @@ void wxWindowMac::WarpPointer(int WXUNUSED(x_pos), int WXUNUSED(y_pos))
 
 int wxWindowMac::GetScrollPos(int orient) const
 {
 
 int wxWindowMac::GetScrollPos(int orient) const
 {
+#if wxUSE_SCROLLBAR
     if ( orient == wxHORIZONTAL )
     {
        if ( m_hScrollBar )
     if ( orient == wxHORIZONTAL )
     {
        if ( m_hScrollBar )
@@ -1192,7 +1212,7 @@ int wxWindowMac::GetScrollPos(int orient) const
        if ( m_vScrollBar )
            return m_vScrollBar->GetThumbPosition() ;
     }
        if ( m_vScrollBar )
            return m_vScrollBar->GetThumbPosition() ;
     }
-
+#endif
     return 0;
 }
 
     return 0;
 }
 
@@ -1200,6 +1220,7 @@ int wxWindowMac::GetScrollPos(int orient) const
 // of positions that we can scroll.
 int wxWindowMac::GetScrollRange(int orient) const
 {
 // of positions that we can scroll.
 int wxWindowMac::GetScrollRange(int orient) const
 {
+#if wxUSE_SCROLLBAR
     if ( orient == wxHORIZONTAL )
     {
        if ( m_hScrollBar )
     if ( orient == wxHORIZONTAL )
     {
        if ( m_hScrollBar )
@@ -1210,12 +1231,13 @@ int wxWindowMac::GetScrollRange(int orient) const
        if ( m_vScrollBar )
            return m_vScrollBar->GetRange() ;
     }
        if ( m_vScrollBar )
            return m_vScrollBar->GetRange() ;
     }
-
+#endif
     return 0;
 }
 
 int wxWindowMac::GetScrollThumb(int orient) const
 {
     return 0;
 }
 
 int wxWindowMac::GetScrollThumb(int orient) const
 {
+#if wxUSE_SCROLLBAR
     if ( orient == wxHORIZONTAL )
     {
        if ( m_hScrollBar )
     if ( orient == wxHORIZONTAL )
     {
        if ( m_hScrollBar )
@@ -1226,12 +1248,13 @@ int wxWindowMac::GetScrollThumb(int orient) const
        if ( m_vScrollBar )
            return m_vScrollBar->GetThumbSize() ;
     }
        if ( m_vScrollBar )
            return m_vScrollBar->GetThumbSize() ;
     }
-
+#endif
     return 0;
 }
 
 void wxWindowMac::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh))
 {
     return 0;
 }
 
 void wxWindowMac::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh))
 {
+#if wxUSE_SCROLLBAR
     if ( orient == wxHORIZONTAL )
     {
        if ( m_hScrollBar )
     if ( orient == wxHORIZONTAL )
     {
        if ( m_hScrollBar )
@@ -1242,6 +1265,7 @@ void wxWindowMac::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh))
        if ( m_vScrollBar )
            m_vScrollBar->SetThumbPosition( pos ) ;
     }
        if ( m_vScrollBar )
            m_vScrollBar->SetThumbPosition( pos ) ;
     }
+#endif
 }
 
 void
 }
 
 void
@@ -1275,6 +1299,7 @@ void  wxWindowMac::MacPaintGrowBox()
     if ( IsTopLevel() )
         return ;
 
     if ( IsTopLevel() )
         return ;
 
+#if wxUSE_SCROLLBAR
     if ( MacHasScrollBarCorner() )
     {
         CGContextRef cgContext = (CGContextRef) MacGetCGContextRef() ;
     if ( MacHasScrollBarCorner() )
     {
         CGContextRef cgContext = (CGContextRef) MacGetCGContextRef() ;
@@ -1303,6 +1328,7 @@ void  wxWindowMac::MacPaintGrowBox()
         CGContextFillRect( cgContext, cgrect );
         CGContextRestoreGState( cgContext );
     }
         CGContextFillRect( cgContext, cgrect );
         CGContextRestoreGState( cgContext );
     }
+#endif
 }
 
 void wxWindowMac::MacPaintBorders( int WXUNUSED(leftOrigin) , int WXUNUSED(rightOrigin) )
 }
 
 void wxWindowMac::MacPaintBorders( int WXUNUSED(leftOrigin) , int WXUNUSED(rightOrigin) )
@@ -1363,16 +1389,18 @@ void wxWindowMac::MacPaintBorders( int WXUNUSED(leftOrigin) , int WXUNUSED(right
 
 void wxWindowMac::RemoveChild( wxWindowBase *child )
 {
 
 void wxWindowMac::RemoveChild( wxWindowBase *child )
 {
+#if wxUSE_SCROLLBAR
     if ( child == m_hScrollBar )
         m_hScrollBar = NULL ;
     if ( child == m_vScrollBar )
         m_vScrollBar = NULL ;
     if ( child == m_hScrollBar )
         m_hScrollBar = NULL ;
     if ( child == m_vScrollBar )
         m_vScrollBar = NULL ;
-
+#endif
     wxWindowBase::RemoveChild( child ) ;
 }
 
 void wxWindowMac::DoUpdateScrollbarVisibility()
 {
     wxWindowBase::RemoveChild( child ) ;
 }
 
 void wxWindowMac::DoUpdateScrollbarVisibility()
 {
+#if wxUSE_SCROLLBAR
     bool triggerSizeEvent = false;
 
     if ( m_hScrollBar )
     bool triggerSizeEvent = false;
 
     if ( m_hScrollBar )
@@ -1404,18 +1432,21 @@ void wxWindowMac::DoUpdateScrollbarVisibility()
         event.SetEventObject(this);
         HandleWindowEvent(event);
     }
         event.SetEventObject(this);
         HandleWindowEvent(event);
     }
+#endif
 }
 
 // New function that will replace some of the above.
 void wxWindowMac::SetScrollbar(int orient, int pos, int thumb,
                                int range, bool refresh)
 {
 }
 
 // New function that will replace some of the above.
 void wxWindowMac::SetScrollbar(int orient, int pos, int thumb,
                                int range, bool refresh)
 {
+#if wxUSE_SCROLLBAR
     if ( orient == wxHORIZONTAL && m_hScrollBar )
         m_hScrollBar->SetScrollbar(pos, thumb, range, thumb, refresh);
     else if ( orient == wxVERTICAL && m_vScrollBar )
         m_vScrollBar->SetScrollbar(pos, thumb, range, thumb, refresh);
 
     DoUpdateScrollbarVisibility();
     if ( orient == wxHORIZONTAL && m_hScrollBar )
         m_hScrollBar->SetScrollbar(pos, thumb, range, thumb, refresh);
     else if ( orient == wxVERTICAL && m_vScrollBar )
         m_vScrollBar->SetScrollbar(pos, thumb, range, thumb, refresh);
 
     DoUpdateScrollbarVisibility();
+#endif
 }
 
 // Does a physical scroll
 }
 
 // Does a physical scroll
@@ -1444,10 +1475,12 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
         child = node->GetData();
         if (child == NULL)
             continue;
         child = node->GetData();
         if (child == NULL)
             continue;
+#if wxUSE_SCROLLBAR
         if (child == m_vScrollBar)
             continue;
         if (child == m_hScrollBar)
             continue;
         if (child == m_vScrollBar)
             continue;
         if (child == m_hScrollBar)
             continue;
+#endif
         if (child->IsTopLevel())
             continue;
 
         if (child->IsTopLevel())
             continue;
 
@@ -1468,6 +1501,7 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
 
 void wxWindowMac::MacOnScroll( wxScrollEvent &event )
 {
 
 void wxWindowMac::MacOnScroll( wxScrollEvent &event )
 {
+#if wxUSE_SCROLLBAR
     if ( event.GetEventObject() == m_vScrollBar || event.GetEventObject() == m_hScrollBar )
     {
         wxScrollWinEvent wevent;
     if ( event.GetEventObject() == m_vScrollBar || event.GetEventObject() == m_hScrollBar )
     {
         wxScrollWinEvent wevent;
@@ -1494,6 +1528,7 @@ void wxWindowMac::MacOnScroll( wxScrollEvent &event )
 
         HandleWindowEvent(wevent);
     }
 
         HandleWindowEvent(wevent);
     }
+#endif
 }
 
 wxWindow *wxWindowBase::DoFindFocus()
 }
 
 wxWindow *wxWindowBase::DoFindFocus()
@@ -1778,7 +1813,7 @@ bool wxWindowMac::MacDoRedraw( long time )
                         break;
                 }
 
                         break;
                 }
 
-                if ( UseBgCol() && MacGetTopLevelWindow() )
+                if ( UseBgCol() )
                 {
                     dc.SetBackground(GetBackgroundColour());
                     dc.Clear();
                 {
                     dc.SetBackground(GetBackgroundColour());
                     dc.Clear();
@@ -1831,10 +1866,12 @@ void wxWindowMac::MacPaintChildrenBorders()
         child = node->GetData();
         if (child == NULL)
             continue;
         child = node->GetData();
         if (child == NULL)
             continue;
+#if wxUSE_SCROLLBAR
         if (child == m_vScrollBar)
             continue;
         if (child == m_hScrollBar)
             continue;
         if (child == m_vScrollBar)
             continue;
         if (child == m_hScrollBar)
             continue;
+#endif
         if (child->IsTopLevel())
             continue;
         if (!child->IsShown())
         if (child->IsTopLevel())
             continue;
         if (!child->IsShown())
@@ -1867,6 +1904,7 @@ WXWindow wxWindowMac::MacGetTopLevelWindowRef() const
 
 bool wxWindowMac::MacHasScrollBarCorner() const
 {
 
 bool wxWindowMac::MacHasScrollBarCorner() const
 {
+#if wxUSE_SCROLLBAR
     /* Returns whether the scroll bars in a wxScrolledWindow should be
      * shortened. Scroll bars should be shortened if either:
      *
     /* Returns whether the scroll bars in a wxScrolledWindow should be
      * shortened. Scroll bars should be shortened if either:
      *
@@ -1927,10 +1965,14 @@ bool wxWindowMac::MacHasScrollBarCorner() const
         // No parent frame found
         return false ;
     }
         // No parent frame found
         return false ;
     }
+#else
+    return false;
+#endif
 }
 
 void wxWindowMac::MacCreateScrollBars( long style )
 {
 }
 
 void wxWindowMac::MacCreateScrollBars( long style )
 {
+#if wxUSE_SCROLLBAR
     wxASSERT_MSG( m_vScrollBar == NULL && m_hScrollBar == NULL , wxT("attempt to create window twice") ) ;
 
     if ( style & ( wxVSCROLL | wxHSCROLL ) )
     wxASSERT_MSG( m_vScrollBar == NULL && m_hScrollBar == NULL , wxT("attempt to create window twice") ) ;
 
     if ( style & ( wxVSCROLL | wxHSCROLL ) )
@@ -1967,17 +2009,23 @@ void wxWindowMac::MacCreateScrollBars( long style )
     // because the create does not take into account the client area origin
     // we might have a real position shift
     MacRepositionScrollBars() ;
     // because the create does not take into account the client area origin
     // we might have a real position shift
     MacRepositionScrollBars() ;
+#endif
 }
 
 bool wxWindowMac::MacIsChildOfClientArea( const wxWindow* child ) const
 {
 }
 
 bool wxWindowMac::MacIsChildOfClientArea( const wxWindow* child ) const
 {
-    bool result = ((child == NULL) || ((child != m_hScrollBar) && (child != m_vScrollBar)));
+    bool result = ((child == NULL)
+#if wxUSE_SCROLLBAR
+     || ((child != m_hScrollBar) && (child != m_vScrollBar))
+#endif
+     );
 
     return result ;
 }
 
 void wxWindowMac::MacRepositionScrollBars()
 {
 
     return result ;
 }
 
 void wxWindowMac::MacRepositionScrollBars()
 {
+#if wxUSE_SCROLLBAR
     if ( !m_hScrollBar && !m_vScrollBar )
         return ;
 
     if ( !m_hScrollBar && !m_vScrollBar )
         return ;
 
@@ -2000,6 +2048,7 @@ 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 );
         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 );
+#endif
 }
 
 bool wxWindowMac::AcceptsFocus() const
 }
 
 bool wxWindowMac::AcceptsFocus() const