#include "wx/defs.h"
+#include "wx/dc.h"
#include "wx/mac/uma.h"
#include "wx/mac/aga.h"
#ifdef __UNIX__
- #include <NavigationServices/Navigation.h>
+ #include <Carbon/Carbon.h>
#else
#include <Navigation.h>
#endif
// init
+#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 ;
static long sUMAAppearanceVersion = 0 ;
extern int gAGABackgroundColor ;
#endif
#ifndef __UNIX__
+#if TARGET_CARBON
+// Call currently implicitely done : InitFloatingWindows() ;
+#else
if ( sUMAHasWindowManager )
InitFloatingWindows() ;
else
InitWindows();
+#endif
#endif
if ( NavServicesAvailable() )
void UMAShowWindow( WindowRef inWindowRef )
{
ShowWindow( inWindowRef ) ;
+
}
void UMAHideWindow( WindowRef inWindowRef )
void UMAActivateControl( ControlHandle inControl )
{
#if UMA_USE_APPEARANCE
- if ( UMAHasAppearance() )
- {
- ::ActivateControl( inControl ) ;
- }
- else
+ 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
#if !TARGET_CARBON
- {
- AGAActivateControl( inControl ) ;
- }
+ {
+ AGAActivateControl( inControl ) ;
+ }
#else
- {
- }
+ {
+ }
#endif
}
void UMADrawControl( ControlHandle inControl )
{
+ WindowRef theWindow = GetControlOwner(inControl) ;
+ RgnHandle updateRgn = NewRgn() ;
+#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() )
- {
- ::DrawControlInCurrentPort( inControl ) ;
- }
- else
+ if ( UMAHasAppearance() )
+ {
+ ::DrawControlInCurrentPort( inControl ) ;
+ }
+ else
#endif
#if !TARGET_CARBON
- {
- AGADrawControl( inControl ) ;
- }
+ {
+ AGADrawControl( inControl ) ;
+ }
#else
- {
- }
+ {
+ }
#endif
+#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 )
{
-#if UMA_USE_APPEARANCE
- if ( UMAHasAppearance() )
- {
- ::MoveControl( inControl , x , y ) ;
- }
- else
-#endif
-#if !TARGET_CARBON
- {
- AGAMoveControl( inControl , x ,y ) ;
- }
-#else
- {
- }
-#endif
+ 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) ) ;
+ }
+ }
}
void UMASizeControl( ControlHandle inControl , short x , short y )
{
-#if UMA_USE_APPEARANCE
- if ( UMAHasAppearance() )
- {
- ::SizeControl( inControl , x , y ) ;
- }
- else
-#endif
-#if !TARGET_CARBON
- {
- AGASizeControl( inControl , x ,y ) ;
- }
-#else
- {
- }
-#endif
+ 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) ) ;
+ }
+ }
}
void UMADeactivateControl( ControlHandle inControl )
{
-#if UMA_USE_APPEARANCE
- if ( UMAHasAppearance() )
- {
- ::DeactivateControl( inControl ) ;
- }
- else
-#endif
-#if !TARGET_CARBON
- {
- AGADeactivateControl( inControl ) ;
- }
-#else
- {
- }
-#endif
-}
-
-void UMASetThemeWindowBackground (WindowRef inWindow,
- ThemeBrush inBrush,
- Boolean inUpdate)
+ 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) ) ;
+ }
+ }
+ }
+}
+
+void UMASetThemeWindowBackground (WindowRef inWindow,
+ ThemeBrush inBrush,
+ Boolean inUpdate)
{
#if UMA_USE_APPEARANCE
- if ( UMAHasAppearance() )
- {
- ::SetThemeWindowBackground( inWindow ,inBrush , inUpdate ) ;
- }
- else
+ if ( UMAHasAppearance() )
+ {
+ ::SetThemeWindowBackground( inWindow ,inBrush , inUpdate ) ;
+ }
+ else
#endif
#if !TARGET_CARBON
- {
- AGASetThemeWindowBackground( inWindow , inBrush , inUpdate ) ;
- }
+ {
+ AGASetThemeWindowBackground( inWindow , inBrush , inUpdate ) ;
+ }
#else
- {
- }
+ {
+ }
#endif
}
#endif
}
-ControlHandle UMANewControl(WindowPtr owningWindow,
- const Rect * boundsRect,
- ConstStr255Param controlTitle,
- Boolean initiallyVisible,
- SInt16 initialValue,
- SInt16 minimumValue,
- SInt16 maximumValue,
- SInt16 procID,
- SInt32 controlReference)
+ControlHandle UMANewControl(WindowPtr owningWindow,
+ const Rect * boundsRect,
+ ConstStr255Param controlTitle,
+ Boolean initiallyVisible,
+ SInt16 initialValue,
+ SInt16 minimumValue,
+ SInt16 maximumValue,
+ SInt16 procID,
+ SInt32 controlReference)
{
ControlHandle theControl = NULL ;
#if UMA_USE_APPEARANCE
void UMADisposeControl (ControlHandle theControl)
{
- if ( UMAHasAppearance() )
- {
- ::DisposeControl( theControl ) ;
- }
- else
- {
- ::DisposeControl( theControl ) ;
- }
+ if ( UMAHasAppearance() )
+ {
+ ::DisposeControl( theControl ) ;
+ }
+ else
+ {
+ ::DisposeControl( theControl ) ;
+ }
}
-
-void UMAHiliteControl (ControlHandle theControl,
- ControlPartCode hiliteState)
- {
- if ( UMAHasAppearance() )
- {
- ::HiliteControl( theControl , hiliteState ) ;
- }
- else
- {
- ::HiliteControl( theControl , hiliteState ) ;
- }
+void UMAHiliteControl (ControlHandle inControl,
+ ControlPartCode hiliteState)
+{
+ if ( UMAHasAppearance() )
+ {
+ ::HiliteControl( inControl , hiliteState ) ;
+ }
+ else
+ {
+ ::HiliteControl( inControl , hiliteState ) ;
+ }
}
-
-void UMAShowControl (ControlHandle theControl)
+// shows the control and adds the region to the update region
+void UMAShowControl (ControlHandle inControl)
{
- if ( UMAHasAppearance() )
- {
- ::ShowControl( theControl ) ;
- }
- else
- {
- ::ShowControl( theControl ) ;
- }
+ if ( UMAHasAppearance() )
+ {
+ SetControlVisibility( inControl , true , false ) ;
+ Rect ctrlBounds ;
+ InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
+ }
}
-
-void UMAHideControl (ControlHandle theControl)
+// Hides the control and adds the region to the update region
+void UMAHideControl (ControlHandle inControl)
{
- if ( UMAHasAppearance() )
- {
- ::HideControl( theControl ) ;
- }
- else
- {
- ::HideControl( theControl ) ;
- }
+ if ( UMAHasAppearance() )
+ {
+ ::HideControl( inControl ) ;
+ }
+ else
+ {
+ ::HideControl( inControl ) ;
+ }
}
void UMASetControlVisibility (ControlHandle inControl,
Boolean inIsVisible,
Boolean inDoDraw)
- {
- if ( UMAHasAppearance() )
- {
+{
+ if ( UMAHasAppearance() )
+ {
#if UMA_USE_APPEARANCE
- ::SetControlVisibility( inControl , inIsVisible, inDoDraw ) ;
+ ::SetControlVisibility( inControl , inIsVisible, inDoDraw ) ;
#endif
- }
+ }
}
{
return IsControlVisible( inControl ) ;
}
+ else
+#endif
+ {
+#if !TARGET_CARBON
+ return (**inControl).contrlVis == 255 ;
#endif
+ }
return true ;
}
void UMAUpdateControls( WindowPtr inWindow , RgnHandle inRgn )
{
+ RgnHandle updateRgn = NewRgn() ;
+#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() )
- {
- UpdateControls( inWindow , inRgn ) ;
- }
- else
+ if ( UMAHasAppearance() )
+ {
+ UpdateControls( inWindow , inRgn ) ;
+ }
+ else
#endif
#if !TARGET_CARBON
- {
- AGAUpdateControls( inWindow , inRgn ) ;
- }
+ {
+ AGAUpdateControls( inWindow , inRgn ) ;
+ }
#else
- {
- }
+ {
+ }
#endif
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0332)
+ InvalWindowRgn( inWindow, updateRgn) ;
+#else
+ InvalRgn( updateRgn ) ;
+#endif
+ DisposeRgn( updateRgn ) ;
+
}
OSErr UMAGetRootControl( WindowPtr inWindow , ControlHandle *outControl )
{
// bool isHighlighted = IsWindowHighlited( inWindowRef ) ;
// if ( inActivate != isHightlited )
- HiliteWindow( inWindowRef , inActivate ) ;
- ControlHandle control = NULL ;
- UMAGetRootControl( inWindowRef , & control ) ;
- if ( control )
- {
- if ( inActivate )
- UMAActivateControl( control ) ;
- else
- UMADeactivateControl( control ) ;
- }
+ GrafPtr port ;
+ GetPort( &port ) ;
+#if TARGET_CARBON
+ SetPort( GetWindowPort( inWindowRef ) ) ;
+#else
+ SetPort( inWindowRef ) ;
+#endif
+ SetOrigin( 0 , 0 ) ;
+ HiliteWindow( inWindowRef , inActivate ) ;
+ ControlHandle control = NULL ;
+ UMAGetRootControl( inWindowRef , & control ) ;
+ if ( control )
+ {
+ if ( inActivate )
+ UMAActivateControl( control ) ;
+ else
+ UMADeactivateControl( control ) ;
+ }
+ SetPort( port ) ;
}
}
OSStatus UMADrawThemePlacard( const Rect *inRect , ThemeDrawState inState )
{
}
#endif
+ return noErr ;
}