X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b03e4fcd11071534f942a6c3b16bb86792c71e83..2078220ed6605d5d3bba16afe1a231b3e92fa9d8:/src/mac/carbon/uma.cpp diff --git a/src/mac/carbon/uma.cpp b/src/mac/carbon/uma.cpp index 00e22e0ffa..4fe99c0e6a 100644 --- a/src/mac/carbon/uma.cpp +++ b/src/mac/carbon/uma.cpp @@ -4,7 +4,15 @@ #include #ifndef __DARWIN__ - #include +# include +# if defined(TARGET_CARBON) +# if PM_USE_SESSION_APIS +# include +# endif +# include +# else +# include +# endif #endif // since we have decided that we only support 8.6 upwards we are @@ -15,8 +23,12 @@ #define wxUSE_MLTE 0 + static bool sUMAHasAppearance = false ; static long sUMAAppearanceVersion = 0 ; +static bool sUMAHasAquaLayout = false ; +static bool sUMASystemInitialized = false ; + extern int gAGABackgroundColor ; bool UMAHasAppearance() { return sUMAHasAppearance ; } long UMAGetAppearanceVersion() { return sUMAAppearanceVersion ; } @@ -26,6 +38,8 @@ static long sUMAWindowManagerAttr = 0 ; bool UMAHasWindowManager() { return sUMAHasWindowManager ; } long UMAGetWindowManagerAttr() { return sUMAWindowManagerAttr ; } +bool UMAHasAquaLayout() { return sUMAHasAquaLayout ; } +bool UMASystemIsInitialized() { return sUMASystemInitialized ; } void UMACleanupToolbox() { @@ -104,8 +118,22 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls ) defaults.encoding = kTXNSystemDefaultEncoding; TXNInitTextension(&defaults, 1, (kTXNAlwaysUseQuickDrawTextMask | kTXNWantMoviesMask | kTXNWantSoundMask | kTXNWantGraphicsMask)); #endif + long menuMgrAttr ; + Gestalt( gestaltMenuMgrAttr , &menuMgrAttr ) ; + if ( menuMgrAttr & gestaltMenuMgrAquaLayoutMask ) + sUMAHasAquaLayout = true ; + sUMASystemInitialized = true ; + } +/* +Boolean CanUseATSUI() + { + long result; + OSErr err = Gestalt(gestaltATSUVersion, &result); + return (err == noErr); + } +*/ // process manager long UMAGetProcessMode() { @@ -133,6 +161,7 @@ bool UMAGetProcessModeDoesActivateOnFGSwitch() void UMASetMenuTitle( MenuRef menu , StringPtr title ) { +/* #if !TARGET_CARBON long size = GetHandleSize( (Handle) menu ) ; const long headersize = 14 ; @@ -155,8 +184,9 @@ void UMASetMenuTitle( MenuRef menu , StringPtr title ) SetHandleSize( (Handle) menu , size + (newlen - oldlen ) ) ; } #else +*/ SetMenuTitle( menu , title ) ; -#endif +//#endif } UInt32 UMAMenuEvent( EventRecord *inEvent ) @@ -242,11 +272,7 @@ void UMAInsertMenuItem( MenuRef menu , StringPtr l , MenuItemIndex item , SInt16 int gPrOpenCounter = 0 ; -#if TARGET_CARBON && PM_USE_SESSION_APIS -OSStatus UMAPrOpen(PMPrintSession *macPrintSession) -#else -OSStatus UMAPrOpen() -#endif +OSStatus UMAPrOpen(void *macPrintSession) { #if !TARGET_CARBON OSErr err = noErr ; @@ -264,7 +290,7 @@ OSStatus UMAPrOpen() if ( gPrOpenCounter == 1 ) { #if PM_USE_SESSION_APIS - err = PMCreateSession(macPrintSession) ; + err = PMCreateSession((PMPrintSession *)macPrintSession) ; #else err = PMBegin() ; #endif @@ -274,11 +300,7 @@ OSStatus UMAPrOpen() #endif } -#if TARGET_CARBON && PM_USE_SESSION_APIS -OSStatus UMAPrClose(PMPrintSession *macPrintSession) -#else -OSStatus UMAPrClose() -#endif +OSStatus UMAPrClose(void *macPrintSession) { #if !TARGET_CARBON OSErr err = noErr ; @@ -297,8 +319,8 @@ OSStatus UMAPrClose() if ( gPrOpenCounter == 1 ) { #if PM_USE_SESSION_APIS - err = PMRelease(*macPrintSession) ; - *macPrintSession = kPMNoReference; + err = PMRelease(*(PMPrintSession *)macPrintSession) ; + *(PMPrintSession *)macPrintSession = kPMNoReference; #else err = PMEnd() ; #endif @@ -357,7 +379,7 @@ GrafPtr UMAGetWindowPort( WindowRef inWindowRef ) { wxASSERT( inWindowRef != NULL ) ; #if TARGET_CARBON - return GetWindowPort( inWindowRef ) ; + return (GrafPtr) GetWindowPort( inWindowRef ) ; #else return (GrafPtr) inWindowRef ; #endif @@ -396,8 +418,10 @@ void UMAGetWTitleC( WindowRef inWindowRef , char *title ) void UMAActivateControl( ControlHandle inControl ) { - if ( !IsControlActive( inControl ) ) - { + // we have to add the control after again to the update rgn + // otherwise updates get lost + if ( !IsControlActive( inControl ) ) + { bool visible = IsControlVisible( inControl ) ; if ( visible ) SetControlVisibility( inControl , false , false ) ; @@ -407,7 +431,7 @@ void UMAActivateControl( ControlHandle inControl ) Rect ctrlBounds ; InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ; } - } + } } void UMADrawControl( ControlHandle inControl ) @@ -415,13 +439,12 @@ void UMADrawControl( ControlHandle inControl ) WindowRef theWindow = GetControlOwner(inControl) ; RgnHandle updateRgn = NewRgn() ; GetWindowUpdateRgn( theWindow , updateRgn ) ; - Point zero = { 0 , 0 } ; - LocalToGlobal( &zero ) ; - OffsetRgn( updateRgn , -zero.h , -zero.v ) ; - ::DrawControlInCurrentPort( inControl ) ; - InvalWindowRgn( theWindow, updateRgn) ; - DisposeRgn( updateRgn ) ; - + Point zero = { 0 , 0 } ; + LocalToGlobal( &zero ) ; + OffsetRgn( updateRgn , -zero.h , -zero.v ) ; + ::DrawControlInCurrentPort( inControl ) ; + InvalWindowRgn( theWindow, updateRgn) ; + DisposeRgn( updateRgn ) ; } void UMAMoveControl( ControlHandle inControl , short x , short y ) @@ -458,8 +481,8 @@ void UMASizeControl( ControlHandle inControl , short x , short y ) void UMADeactivateControl( ControlHandle inControl ) { - if ( IsControlActive( inControl ) ) - { + // we have to add the control after again to the update rgn + // otherwise updates get lost bool visible = IsControlVisible( inControl ) ; if ( visible ) SetControlVisibility( inControl , false , false ) ; @@ -469,7 +492,6 @@ void UMADeactivateControl( ControlHandle inControl ) Rect ctrlBounds ; InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ; } - } } // shows the control and adds the region to the update region void UMAShowControl (ControlHandle inControl) @@ -479,6 +501,13 @@ void UMAShowControl (ControlHandle inControl) InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ; } +// shows the control and adds the region to the update region +void UMAHideControl (ControlHandle inControl) +{ + SetControlVisibility( inControl , false , false ) ; + Rect ctrlBounds ; + InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ; +} // keyboard focus OSErr UMASetKeyboardFocus (WindowPtr inWindow, ControlHandle inControl, @@ -490,7 +519,6 @@ OSErr UMASetKeyboardFocus (WindowPtr inWindow, SetPortWindowPort( inWindow ) ; - SetOrigin( 0 , 0 ) ; err = SetKeyboardFocus( inWindow , inControl , inPart ) ; SetPort( port ) ; return err ; @@ -542,7 +570,6 @@ void UMAHighlightAndActivateWindow( WindowRef inWindowRef , bool inActivate ) GrafPtr port ; GetPort( &port ) ; SetPortWindowPort( inWindowRef ) ; - SetOrigin( 0 , 0 ) ; HiliteWindow( inWindowRef , inActivate ) ; ControlHandle control = NULL ; ::GetRootControl( inWindowRef , & control ) ; @@ -588,3 +615,55 @@ OSStatus UMAGetHelpMenu( return helpMenuStatus ; #endif } + +wxMacPortStateHelper::wxMacPortStateHelper( GrafPtr newport) +{ + m_clip = NULL ; + Setup( newport ) ; +} + +wxMacPortStateHelper::wxMacPortStateHelper() +{ + m_clip = NULL ; +} + +void wxMacPortStateHelper::Setup( GrafPtr newport ) +{ + GetPort( &m_oldPort ) ; + SetPort( newport ) ; + wxASSERT_MSG( m_clip == NULL , "Cannot call setup twice" ) ; + m_clip = NewRgn() ; + GetClip( m_clip ); + m_textFont = GetPortTextFont( (CGrafPtr) newport); + m_textSize = GetPortTextSize( (CGrafPtr) newport); + m_textStyle = GetPortTextFace( (CGrafPtr) newport); + m_textMode = GetPortTextMode( (CGrafPtr) newport); + GetThemeDrawingState( &m_drawingState ) ; + m_currentPort = newport ; +} +void wxMacPortStateHelper::Clear() +{ + if ( m_clip ) + { + DisposeRgn( m_clip ) ; + DisposeThemeDrawingState( m_drawingState ) ; + m_clip = NULL ; + } +} + +wxMacPortStateHelper::~wxMacPortStateHelper() +{ + if ( m_clip ) + { + SetPort( m_currentPort ) ; + SetClip( m_clip ) ; + DisposeRgn( m_clip ) ; + TextFont( m_textFont ); + TextSize( m_textSize ); + TextFace( m_textStyle ); + TextMode( m_textMode ); + SetThemeDrawingState( m_drawingState , true ) ; + SetPort( m_oldPort ) ; + } +} +