]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/control.cpp
Review, Carbon Events support
[wxWidgets.git] / src / mac / control.cpp
index 417aba00c8685369abc4806fd550d04ee0079f1a..9b86af18d14043aee4f4c95a31563230f71ded70 100644 (file)
@@ -87,7 +87,7 @@ pascal void wxMacLiveScrollbarActionProc( ControlHandle control , ControlPartCod
 ControlColorUPP wxMacSetupControlBackgroundUPP = NULL ;
 ControlDefUPP wxMacControlActionUPP = NULL ;
 
-pascal SInt32  wxMacControlDefintion(SInt16 varCode, ControlRef theControl, ControlDefProcMessage message, SInt32 param)
+pascal SInt32  wxMacControlDefinition(SInt16 varCode, ControlRef theControl, ControlDefProcMessage message, SInt32 param)
 {
     
        wxControl*  wx = (wxControl*) wxFindControlFromMacControl( theControl ) ;
@@ -115,7 +115,17 @@ pascal OSStatus wxMacSetupControlBackground( ControlRef iControl , SInt16 iMessa
                        if ( wx != NULL && wx->IsKindOf( CLASSINFO( wxControl ) ) )
                        {
                                wxDC::MacSetupBackgroundForCurrentPort( wx->MacGetBackgroundBrush() ) ;
-       //                              SetThemeBackground( iDepth , iIsColor ) ;
+#if TARGET_CARBON
+                                       // under classic this would lead to partial redraws
+                                       RgnHandle clip = NewRgn() ;
+                               int x = 0 , y = 0;
+
+                               wx->MacWindowToRootWindow( &x,&y ) ;
+                               CopyRgn( (RgnHandle) wx->MacGetVisibleRegion(false).GetWXHRGN() , clip ) ;
+                               OffsetRgn( clip , x , y ) ;
+                               SetClip( clip ) ;
+                               DisposeRgn( clip ) ;
+#endif
                                }
                                else
                                {
@@ -295,7 +305,7 @@ wxControl *wxFindControlFromMacControl(ControlHandle inControl )
     wxNode *node = wxWinMacControlList->Find((long)inControl);
     if (!node)
         return NULL;
-    return (wxControl *)node->Data();
+    return (wxControl *)node->GetData();
 }
 
 void wxAssociateControlWithMacControl(ControlHandle inControl, wxControl *control)
@@ -398,11 +408,18 @@ void wxControl::MacPostControlCreate()
        }
        if ( wxMacControlActionUPP == NULL )
        {
-           wxMacControlActionUPP = NewControlDefUPP( wxMacControlDefintion ) ;
+           wxMacControlActionUPP = NewControlDefUPP( wxMacControlDefinition ) ;
        }
+    // The following block of code is responsible for crashes when switching
+    // back to windows, which can be seen in the dialogs sample.
+    // It is disabled until a proper solution can be found.
+#if 0
 #if TARGET_CARBON
+/*
+    only working under classic carbon
     m_macControlAction = *(**(ControlHandle)m_macControl).contrlDefProc ;
     (**(ControlHandle)m_macControl).contrlDefProc = (Handle) &wxMacControlActionUPP ;
+*/
 #else
     m_macControlAction = *(**(ControlHandle)m_macControl).contrlDefProc ;
 
@@ -414,6 +431,7 @@ void wxControl::MacPostControlCreate()
       (**cdef).function = (void(*)()) wxMacControlActionUPP;
       (**(ControlHandle)m_macControl).contrlDefProc = (Handle) cdef ;
     }
+#endif
 #endif
        SetControlColorProc( (ControlHandle) m_macControl , wxMacSetupControlBackgroundUPP ) ;
  
@@ -434,6 +452,9 @@ void wxControl::MacPostControlCreate()
      SetSize(pos.x, pos.y, new_size.x, new_size.y);
  
      UMAShowControl( (ControlHandle) m_macControl ) ;
+     
+     SetCursor( *wxSTANDARD_CURSOR ) ;
+     
      Refresh() ;
 }
 
@@ -583,6 +604,23 @@ void  wxControl::DoSetSize(int x, int y,
             int sizeFlags )
 {
     wxWindow::DoSetSize( x , y ,width , height ,sizeFlags ) ;
+#if 0
+    {
+       Rect meta , control ;
+       GetControlBounds( (ControlHandle) m_macControl , &control ) ;
+       RgnHandle rgn = NewRgn() ;
+       GetControlRegion( (ControlHandle) m_macControl , kControlStructureMetaPart , rgn ) ;
+       GetRegionBounds( rgn , &meta ) ;
+       if ( !EmptyRect( &meta ) )
+       {
+                       wxASSERT( meta.left >= control.left - m_macHorizontalBorder ) ;
+                       wxASSERT( meta.right <= control.right + m_macHorizontalBorder ) ;
+                       wxASSERT( meta.top >= control.top - m_macVerticalBorder ) ;
+                       wxASSERT( meta.bottom <= control.bottom + m_macVerticalBorder ) ;
+               }
+       DisposeRgn( rgn ) ;
+    }
+#endif
     return ;
 /*
 
@@ -752,7 +790,7 @@ void wxControl::Refresh(bool eraseBack, const wxRect *rect)
 
 void wxControl::MacRedrawControl()
 {
-    if ( (ControlHandle) m_macControl && MacGetRootWindow() )
+    if ( (ControlHandle) m_macControl && MacGetRootWindow() && m_macControlIsShown )
     {
         wxClientDC dc(this) ;
         wxMacPortSetter helper(&dc) ;
@@ -764,11 +802,6 @@ void wxControl::MacRedrawControl()
 
 void wxControl::OnPaint(wxPaintEvent& event)
 {
-    if ( IsKindOf( CLASSINFO( wxBitmapButton ) ) )
-    {
-        int i ;
-        i = 0 ;
-    }
     if ( (ControlHandle) m_macControl )
     {
         wxPaintDC dc(this) ;
@@ -821,7 +854,6 @@ void  wxControl::OnMouseEvent( wxMouseEvent &event )
         ControlHandle   control ;
         Point       localwhere ;
         SInt16      controlpart ;
-        WindowRef   window = (WindowRef) MacGetRootWindow() ;
         
         localwhere.h = x ;
         localwhere.v = y ;
@@ -842,20 +874,7 @@ void  wxControl::OnMouseEvent( wxMouseEvent &event )
     
         if ( event.m_metaDown )
             modifiers |= cmdKey ;
-/*
-#if TARGET_CARBON
-        control = FindControlUnderMouse( localwhere , window , &controlpart ) ;
-#else
-        controlpart = FindControl( localwhere , window , &control ) ;
-#endif
-*/
         {
-        /*
-            if ( AcceptsFocus() && FindFocus() != this )
-            {
-                SetFocus() ;
-            }
-        */
             control = (ControlHandle) m_macControl ;
             if ( control && ::IsControlActive( control ) )
             {