]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/uma.cpp
mac toplevel window added
[wxWidgets.git] / src / mac / carbon / uma.cpp
index 2c7934a89ed3f650779396c7d98b5aa1f4ec37e0..2c70ef47b762087471d27444223f1671164acb1b 100644 (file)
@@ -3,9 +3,7 @@
 #include "wx/mac/uma.h"
 #include "wx/mac/aga.h"
 
-#ifdef __UNIX__
-  #include <Carbon/Carbon.h>
-#else
+#ifndef __DARWIN__
   #include <Navigation.h>
 #endif
 
@@ -13,6 +11,8 @@
 
 #if !TARGET_CARBON
 #define        GetControlOwner( control ) (**control).contrlOwner
+// since we always call this in the right context we don't have to set and reset the port
+#define InvalWindowRgn( window , rgn ) InvalRgn( rgn )
 #endif
 
 static bool    sUMAHasAppearance = false ;
@@ -84,7 +84,7 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
 #endif // UMA_USE_WINDOWMGR
 #endif
                
-#ifndef __UNIX__
+#ifndef __DARWIN__
 #if TARGET_CARBON
 // Call currently implicitely done :           InitFloatingWindows() ;
 #else
@@ -289,7 +289,11 @@ void UMAInsertMenu( MenuRef insertMenu , SInt16 afterId )
 
 int gPrOpenCounter = 0 ;
 
-OSStatus UMAPrOpen() 
+#if TARGET_CARBON && PM_USE_SESSION_APIS
+OSStatus UMAPrOpen(PMPrintSession *macPrintSession)
+#else
+OSStatus UMAPrOpen()
+#endif
 {
 #if !TARGET_CARBON
        OSErr err = noErr ;
@@ -306,14 +310,22 @@ OSStatus UMAPrOpen()
        ++gPrOpenCounter ;
        if ( gPrOpenCounter == 1 )
        {
-               err = PMBegin() ;
+  #if PM_USE_SESSION_APIS
+           err = PMCreateSession(macPrintSession) ;
+  #else
+           err = PMBegin() ;
+  #endif
                wxASSERT( err == noErr ) ;
        }
        return err ;
 #endif
 }
 
-OSStatus UMAPrClose() 
+#if TARGET_CARBON && PM_USE_SESSION_APIS
+OSStatus UMAPrClose(PMPrintSession *macPrintSession)
+#else
+OSStatus UMAPrClose()
+#endif
 {
 #if !TARGET_CARBON
        OSErr err = noErr ;
@@ -331,7 +343,12 @@ OSStatus UMAPrClose()
        wxASSERT( gPrOpenCounter >= 1 ) ;
        if ( gPrOpenCounter == 1 )
        {
-               err = PMEnd() ;
+  #if PM_USE_SESSION_APIS
+           err = PMRelease(*macPrintSession) ;
+           *macPrintSession = kPMNoReference;
+  #else
+           err = PMEnd() ;
+  #endif
        }
        --gPrOpenCounter ;
        return err ;
@@ -423,6 +440,7 @@ void                        UMAGetWTitleC( WindowRef inWindowRef , char *title )
 void                   UMAShowWindow( WindowRef inWindowRef ) 
 {
        ShowWindow( inWindowRef ) ;
+
 }
 
 void                   UMAHideWindow( WindowRef inWindowRef ) 
@@ -457,17 +475,21 @@ void                      UMACloseWindow(WindowRef inWindowRef)
 
 void UMAActivateControl( ControlHandle inControl ) 
 {
-    WindowRef theWindow = GetControlOwner(inControl) ;
-    RgnHandle updateRgn = NewRgn() ;
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    GetWindowRegion( theWindow , kWindowUpdateRgn, updateRgn ) ;
-#else
-    GetWindowUpdateRgn( theWindow , updateRgn ) ;
-#endif
 #if UMA_USE_APPEARANCE
     if ( UMAHasAppearance() )
-    {
+    { 
+      if ( !UMAIsControlActive( inControl ) )
+      {
+        bool visible = IsControlVisible( inControl ) ;
+        if ( visible )
+          SetControlVisibility( inControl , false , false ) ;
         ::ActivateControl( inControl ) ;
+        if ( visible ) {
+          SetControlVisibility( inControl , true , false ) ;
+          Rect ctrlBounds ;
+          InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
+        }
+       }
     }
     else
 #endif
@@ -479,22 +501,20 @@ void UMAActivateControl( ControlHandle inControl )
     {
     }
 #endif
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    InvalWindowRgn( theWindow, updateRgn) ;
-#else
-    InvalRgn( updateRgn ) ;
-#endif
 }
 
 void UMADrawControl( ControlHandle inControl ) 
 {
     WindowRef theWindow = GetControlOwner(inControl) ;
     RgnHandle updateRgn = NewRgn() ;
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+#if TARGET_CARBON
     GetWindowRegion( theWindow , kWindowUpdateRgn, updateRgn ) ;
 #else
     GetWindowUpdateRgn( theWindow , updateRgn ) ;
 #endif
+       Point zero = { 0 , 0 } ;
+       LocalToGlobal( &zero ) ;
+       OffsetRgn( updateRgn , -zero.h , -zero.v ) ;
 #if UMA_USE_APPEARANCE
     if ( UMAHasAppearance() )
     {
@@ -510,104 +530,70 @@ void UMADrawControl( ControlHandle inControl )
     {
     }
 #endif
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0332)
     InvalWindowRgn( theWindow, updateRgn) ;
 #else
     InvalRgn( updateRgn ) ;
 #endif
+       DisposeRgn( updateRgn ) ;
+
 }
 
 void UMAMoveControl( ControlHandle inControl , short x , short y ) 
 {
-    WindowRef theWindow = GetControlOwner(inControl) ;
-    RgnHandle updateRgn = NewRgn() ;
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    GetWindowRegion( theWindow , kWindowUpdateRgn, updateRgn ) ;
-#else
-    GetWindowUpdateRgn( theWindow , updateRgn ) ;
-#endif
-#if UMA_USE_APPEARANCE
     if ( UMAHasAppearance() )
     {
+        bool visible = UMAIsControlVisible( inControl ) ;
+        if ( visible ) {
+          SetControlVisibility( inControl , false , false ) ;
+          Rect ctrlBounds ;
+          InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
+        }
         ::MoveControl( inControl , x , y ) ;
+        if ( visible ) {
+          SetControlVisibility( inControl , true , false ) ;
+          Rect ctrlBounds ;
+          InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
+        }
     }
-    else
-#endif
-#if !TARGET_CARBON
-    {
-        AGAMoveControl( inControl , x ,y  ) ;
-    }
-#else
-    {
-    }
-#endif
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    InvalWindowRgn( theWindow, updateRgn) ;
-#else
-    InvalRgn( updateRgn ) ;
-#endif
 }
 
 void UMASizeControl( ControlHandle inControl , short x , short y ) 
 {
-    WindowRef theWindow = GetControlOwner(inControl) ;
-    RgnHandle updateRgn = NewRgn() ;
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    GetWindowRegion( theWindow , kWindowUpdateRgn, updateRgn ) ;
-#else
-    GetWindowUpdateRgn( theWindow , updateRgn ) ;
-#endif
-#if UMA_USE_APPEARANCE
     if ( UMAHasAppearance() )
     {
+        bool visible = UMAIsControlVisible( inControl ) ;
+        if ( visible ) {
+          SetControlVisibility( inControl , false , false ) ;
+          Rect ctrlBounds ;
+          InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
+        }
         ::SizeControl( inControl , x , y ) ;
+        if ( visible ) {
+          SetControlVisibility( inControl , true , false ) ;
+          Rect ctrlBounds ;
+          InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
+        }
     }
-    else
-#endif
-#if !TARGET_CARBON
-    {
-        AGASizeControl( inControl , x ,y  ) ;
-    }
-#else
-    {
-    }
-#endif
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    InvalWindowRgn( theWindow, updateRgn) ;
-#else
-    InvalRgn( updateRgn ) ;
-#endif
 }
 
 void UMADeactivateControl( ControlHandle inControl ) 
 {
-    WindowRef theWindow = GetControlOwner(inControl) ;
-    RgnHandle updateRgn = NewRgn() ;
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    GetWindowRegion( theWindow , kWindowUpdateRgn, updateRgn ) ;
-#else
-    GetWindowUpdateRgn( theWindow , updateRgn ) ;
-#endif
-#if UMA_USE_APPEARANCE
     if ( UMAHasAppearance() )
     {
+      if ( UMAIsControlActive( inControl ) )
+      {
+        bool visible = IsControlVisible( inControl ) ;
+        if ( visible )
+          SetControlVisibility( inControl , false , false ) ;
         ::DeactivateControl( inControl ) ;
+        if ( visible ) {
+          SetControlVisibility( inControl , true , false ) ;
+          Rect ctrlBounds ;
+          InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
+        }
+       }
     }
-    else
-#endif
-#if !TARGET_CARBON
-    {
-        AGADeactivateControl( inControl ) ;
-    }
-#else
-    {
-    }
-#endif
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    InvalWindowRgn( theWindow, updateRgn) ;
-#else
-    InvalRgn( updateRgn ) ;
-#endif
 }
 
 void UMASetThemeWindowBackground              (WindowRef                               inWindow,
@@ -700,17 +686,9 @@ void UMADisposeControl (ControlHandle                      theControl)
     }
 }
 
-
 void UMAHiliteControl  (ControlHandle                  inControl,
                         ControlPartCode                hiliteState)
 {
-    WindowRef theWindow = GetControlOwner(inControl) ;
-    RgnHandle updateRgn = NewRgn() ;
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    GetWindowRegion( theWindow , kWindowUpdateRgn, updateRgn ) ;
-#else
-    GetWindowUpdateRgn( theWindow , updateRgn ) ;
-#endif
     if ( UMAHasAppearance() )
     {
         ::HiliteControl( inControl , hiliteState ) ;
@@ -719,38 +697,20 @@ void UMAHiliteControl     (ControlHandle                  inControl,
     {
         ::HiliteControl( inControl , hiliteState ) ;
     }
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    InvalWindowRgn( theWindow, updateRgn) ;
-#else
-    InvalRgn( updateRgn ) ;
-#endif
 }
 
+// shows the control and adds the region to the update region
 void UMAShowControl                                            (ControlHandle                  inControl)
 {
-    WindowRef theWindow = GetControlOwner(inControl) ;
-    RgnHandle updateRgn = NewRgn() ;
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    GetWindowRegion( theWindow , kWindowUpdateRgn, updateRgn ) ;
-#else
-    GetWindowUpdateRgn( theWindow , updateRgn ) ;
-#endif
     if ( UMAHasAppearance() )
     {
-        ::ShowControl( inControl ) ;
+        SetControlVisibility( inControl , true , false ) ;
+        Rect ctrlBounds ;
+        InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
     }
-    else
-    {
-        ::ShowControl( inControl ) ;
-    }
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    InvalWindowRgn( theWindow, updateRgn) ;
-#else
-    InvalRgn( updateRgn ) ;
-#endif
 }
 
-
+// Hides the control and adds the region to the update region
 void UMAHideControl                                            (ControlHandle                  inControl)
 {
     if ( UMAHasAppearance() )
@@ -802,7 +762,13 @@ bool UMAIsControlVisible                           (ControlHandle                  inControl)
        {
        return IsControlVisible( inControl ) ;
    }
+   else
 #endif
+  {
+#if !TARGET_CARBON
+    return (**inControl).contrlVis == 255 ;
+#endif
+  }
        return true ;
 }
 
@@ -1001,11 +967,14 @@ void UMAIdleControls                                     (WindowPtr                              inWindow)
 void UMAUpdateControls( WindowPtr inWindow , RgnHandle inRgn ) 
 {
     RgnHandle updateRgn = NewRgn() ;
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+#if TARGET_CARBON
     GetWindowRegion( inWindow , kWindowUpdateRgn, updateRgn ) ;
 #else
     GetWindowUpdateRgn( inWindow , updateRgn ) ;
 #endif
+       Point zero = { 0 , 0 } ;
+       LocalToGlobal( &zero ) ;
+       OffsetRgn( updateRgn , -zero.h , -zero.v ) ;
 #if UMA_USE_APPEARANCE
     if ( UMAHasAppearance() )
     {
@@ -1021,11 +990,13 @@ void UMAUpdateControls( WindowPtr inWindow , RgnHandle inRgn )
     {
     }
 #endif
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0332)
     InvalWindowRgn( inWindow, updateRgn) ;
 #else
     InvalRgn( updateRgn ) ;
 #endif
+       DisposeRgn( updateRgn ) ;
+
 }
 
 OSErr UMAGetRootControl( WindowPtr inWindow , ControlHandle *outControl ) 
@@ -1494,5 +1465,6 @@ OSStatus UMADrawThemePlacard( const Rect *inRect , ThemeDrawState inState )
   {
   }
 #endif
+  return noErr ;
 }