X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6239ee05567eac71754f56c2a154222d10b57ff1..0c1cc9483ecba053bc9a0983a4a8d48898e334f2:/src/mac/carbon/toolbar.cpp diff --git a/src/mac/carbon/toolbar.cpp b/src/mac/carbon/toolbar.cpp index 0c35f4809a..02778a1791 100644 --- a/src/mac/carbon/toolbar.cpp +++ b/src/mac/carbon/toolbar.cpp @@ -25,21 +25,12 @@ #include "wx/sysopt.h" -#ifdef __WXMAC_OSX__ const short kwxMacToolBarToolDefaultWidth = 16; const short kwxMacToolBarToolDefaultHeight = 16; const short kwxMacToolBarTopMargin = 4; const short kwxMacToolBarLeftMargin = 4; const short kwxMacToolBorder = 0; const short kwxMacToolSpacing = 6; -#else -const short kwxMacToolBarToolDefaultWidth = 24; -const short kwxMacToolBarToolDefaultHeight = 22; -const short kwxMacToolBarTopMargin = 2; -const short kwxMacToolBarLeftMargin = 2; -const short kwxMacToolBorder = 4; -const short kwxMacToolSpacing = 0; -#endif IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl) @@ -61,7 +52,7 @@ END_EVENT_TABLE() // when embedding native controls in the native toolbar we must make sure the // control does not get deleted behind our backs, so the retain count gets increased -// (after creation it is 1), first be the creation of the custom HIToolbarItem wrapper +// (after creation it is 1), first be the creation of the custom HIToolbarItem wrapper // object, and second by the code 'creating' the custom HIView (which is the same as the // already existing native control, therefore we just increase the ref count) // when this view is removed from the native toolbar its count gets decremented again @@ -117,9 +108,8 @@ public: DisposeControl( m_controlHandle ); else { - // the embedded control is not under the responsibility of the tool, it will be disposed of in the + // the embedded control is not under the responsibility of the tool, it gets disposed of in the // proper wxControl destructor - wxASSERT( IsValidControlHandle(GetControl()->GetPeer()->GetControlRef() )) ; } m_controlHandle = NULL ; } @@ -129,16 +119,19 @@ public: if ( m_toolbarItemRef ) { CFIndex count = CFGetRetainCount( m_toolbarItemRef ) ; - // different behaviour under Leopard - if ( UMAGetSystemVersion() < 0x1050 ) - { - wxASSERT_MSG( count == 1 , wxT("Reference Count of native tool was not 1 in wxToolBarTool destructor") ); - } + // different behaviour under Leopard + if ( UMAGetSystemVersion() < 0x1050 ) + { + if ( count != 1 ) + { + wxFAIL_MSG("Reference count of native tool was not 1 in wxToolBarTool destructor"); + } + } wxTheApp->MacAddToAutorelease(m_toolbarItemRef); CFRelease(m_toolbarItemRef); m_toolbarItemRef = NULL; } -#endif +#endif // wxMAC_USE_NATIVE_TOOLBAR } wxSize GetSize() const @@ -197,8 +190,8 @@ public: HIToolbarItemSetHelpText( m_toolbarItemRef, - wxMacCFStringHolder( GetShortHelp(), enc ), - wxMacCFStringHolder( GetLongHelp(), enc ) ); + wxCFStringRef( GetShortHelp(), enc ), + wxCFStringRef( GetLongHelp(), enc ) ); } } @@ -243,9 +236,7 @@ private: static const EventTypeSpec eventList[] = { { kEventClassControl, kEventControlHit }, -#ifdef __WXMAC_OSX__ { kEventClassControl, kEventControlHitTest }, -#endif }; static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef WXUNUSED(handler), EventRef event, void *data ) @@ -266,11 +257,7 @@ static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef { bool shouldToggle; -#ifdef __WXMAC_OSX__ shouldToggle = !tbartool->IsToggled(); -#else - shouldToggle = (GetControl32BitValue( (ControlRef)(tbartool->GetControlHandle()) ) != 0); -#endif tbar->ToggleTool( tbartool->GetId(), shouldToggle ); } @@ -281,7 +268,6 @@ static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef } break; -#ifdef __WXMAC_OSX__ case kEventControlHitTest: { HIPoint pt = cEvent.GetParameter(kEventParamMouseLocation); @@ -295,7 +281,6 @@ static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef result = noErr; } break; -#endif default: break; @@ -400,17 +385,10 @@ bool wxToolBarTool::DoEnable( bool enable ) if ( m_controlHandle != NULL ) { -#if TARGET_API_MAC_OSX if ( enable ) EnableControl( m_controlHandle ); else DisableControl( m_controlHandle ); -#else - if ( enable ) - ActivateControl( m_controlHandle ); - else - DeactivateControl( m_controlHandle ); -#endif } } @@ -435,7 +413,7 @@ void wxToolBarTool::SetPosition( const wxPoint& position ) if ( mac_x != former_mac_x || mac_y != former_mac_y ) { - UMAMoveControl( m_controlHandle, mac_x, mac_y ); + ::MoveControl( m_controlHandle, mac_x, mac_y ); } } else if ( IsControl() ) @@ -451,21 +429,18 @@ void wxToolBarTool::SetPosition( const wxPoint& position ) else { // separator -#ifdef __WXMAC_OSX__ Rect contrlRect; GetControlBounds( m_controlHandle, &contrlRect ); int former_mac_x = contrlRect.left; int former_mac_y = contrlRect.top; if ( mac_x != former_mac_x || mac_y != former_mac_y ) - UMAMoveControl( m_controlHandle, mac_x, mac_y ); -#endif + ::MoveControl( m_controlHandle, mac_x, mac_y ); } } void wxToolBarTool::UpdateToggleImage( bool toggle ) { -#ifdef __WXMAC_OSX__ if ( toggle ) { int w = m_bmpNormal.GetWidth(); @@ -516,9 +491,6 @@ void wxToolBarTool::UpdateToggleImage( bool toggle ) sizeof(transform), (Ptr)&transform ); HIViewSetNeedsDisplay( m_controlHandle, true ); -#else - ::SetControl32BitValue( m_controlHandle, toggle ); -#endif } wxToolBarTool::wxToolBarTool( @@ -659,12 +631,15 @@ static pascal OSStatus ControlToolbarItemHandler( EventHandlerCallRef inCallRef, // depending whether the wxControl corresponding to this HIView has already been destroyed or // not, ref counts differ, so we cannot assert a special value CFIndex count = CFGetRetainCount( viewRef ) ; - wxASSERT_MSG( count >=1 , wxT("Reference Count of native tool was illegal before removal") ); if ( count >= 1 ) + { + wxFAIL_MSG("Reference count of native tool was illegal before removal"); + CFRelease( viewRef ) ; + } } - free( object ) ; - result = noErr; + free( object ) ; + result = noErr; } break; } @@ -711,7 +686,7 @@ static pascal OSStatus ControlToolbarItemHandler( EventHandlerCallRef inCallRef, // Extra width to avoid edge of combobox being cut off sz.x += 3; - + HISize min, max; min.width = max.width = sz.x ; min.height = max.height = sz.y ; @@ -862,7 +837,7 @@ bool wxToolBar::Create( { wxString labelStr = wxString::Format( wxT("%p"), this ); err = HIToolbarCreate( - wxMacCFStringHolder( labelStr, wxFont::GetDefaultEncoding() ), 0, + wxCFStringRef( labelStr, wxFont::GetDefaultEncoding() ), 0, (HIToolbarRef*) &m_macHIToolbarRef ); if (m_macHIToolbarRef != NULL) @@ -899,11 +874,14 @@ wxToolBar::~wxToolBar() MacInstallNativeToolbar( false ); CFIndex count = CFGetRetainCount( m_macHIToolbarRef ) ; - // Leopard seems to have one refcount more, so we cannot check reliably at the moment - if ( UMAGetSystemVersion() < 0x1050 ) - { - wxASSERT_MSG( count == 1 , wxT("Reference Count of native control was not 1 in wxToolBar destructor") ); - } + // Leopard seems to have one refcount more, so we cannot check reliably at the moment + if ( UMAGetSystemVersion() < 0x1050 ) + { + if ( count != 1 ) + { + wxFAIL_MSG("Reference count of native control was not 1 in wxToolBar destructor"); + } + } CFRelease( (HIToolbarRef)m_macHIToolbarRef ); m_macHIToolbarRef = NULL; } @@ -1214,7 +1192,11 @@ bool wxToolBar::Realize() if ( tool2->IsControl() ) { CFIndex count = CFGetRetainCount( tool2->GetControl()->GetPeer()->GetControlRef() ) ; - wxASSERT_MSG( count == 3 || count == 2 , wxT("Reference Count of native tool was illegal before removal") ); + if ( count != 3 && count != 2 ) + { + wxFAIL_MSG("Reference count of native tool was illegal before removal"); + } + wxASSERT( IsValidControlHandle(tool2->GetControl()->GetPeer()->GetControlRef() )) ; } err = HIToolbarRemoveItemAtIndex(refTB, idx); @@ -1226,7 +1208,11 @@ bool wxToolBar::Realize() if ( tool2->IsControl() ) { CFIndex count = CFGetRetainCount( tool2->GetControl()->GetPeer()->GetControlRef() ) ; - wxASSERT_MSG( count == 2 , wxT("Reference Count of native tool was not 2 after removal") ); + if ( count != 2 ) + { + wxFAIL_MSG("Reference count of native tool was not 2 after removal"); + } + wxASSERT( IsValidControlHandle(tool2->GetControl()->GetPeer()->GetControlRef() )) ; } @@ -1245,7 +1231,10 @@ bool wxToolBar::Realize() if ( tool->IsControl() ) { CFIndex count = CFGetRetainCount( tool->GetControl()->GetPeer()->GetControlRef() ) ; - wxASSERT_MSG( count == 3 || count == 2, wxT("Reference Count of native tool was illegal after insertion") ); + if ( count != 3 && count != 2 ) + { + wxFAIL_MSG("Reference count of native tool was illegal before removal"); + } wxASSERT( IsValidControlHandle(tool->GetControl()->GetPeer()->GetControlRef() )) ; } } @@ -1500,6 +1489,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) #if wxMAC_USE_NATIVE_TOOLBAR if (m_macHIToolbarRef != NULL) { + HIToolbarItemRef item; err = HIToolbarItemCreate( kHIToolbarSeparatorIdentifier, kHIToolbarItemCantBeRemoved | kHIToolbarItemIsSeparator | kHIToolbarItemAllowDuplicates, @@ -1546,7 +1536,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) HIToolbarItemRef item; wxString labelStr = wxString::Format(wxT("%p"), tool); err = HIToolbarItemCreate( - wxMacCFStringHolder(labelStr, wxFont::GetDefaultEncoding()), + wxCFStringRef(labelStr, wxFont::GetDefaultEncoding()), kHIToolbarItemCantBeRemoved | kHIToolbarItemAnchoredLeft | kHIToolbarItemAllowDuplicates, &item ); if (err == noErr) { @@ -1556,7 +1546,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) InstallEventHandler( HIObjectGetEventTarget(item), GetwxMacToolBarEventHandlerUPP(), GetEventTypeCount(toolBarEventList), toolBarEventList, tool, NULL ); - HIToolbarItemSetLabel( item, wxMacCFStringHolder(label, m_font.GetEncoding()) ); + HIToolbarItemSetLabel( item, wxCFStringRef(label, GetFont().GetEncoding()) ); HIToolbarItemSetImage( item, info2.u.imageRef ); HIToolbarItemSetCommandID( item, kHIToolbarCommandPressAction ); tool->SetToolbarItemRef( item ); @@ -1572,7 +1562,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) #if 0 SetBevelButtonTextPlacement( m_controlHandle, kControlBevelButtonPlaceBelowGraphic ); - UMASetControlTitle( m_controlHandle, label, wxFont::GetDefaultEncoding() ); + SetControlTitleWithCFString( m_controlHandle , wxCFStringRef( label, wxFont::GetDefaultEncoding() ); #endif InstallControlEventHandler( @@ -1622,7 +1612,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) ControlRef container = (ControlRef) GetHandle(); wxASSERT_MSG( container != NULL, wxT("No valid Mac container control") ); - UMAShowControl( controlHandle ); + SetControlVisibility( controlHandle, true, true ); ::EmbedControl( controlHandle, container ); } @@ -1740,10 +1730,8 @@ void wxToolBar::OnPaint(wxPaintEvent& event) GetSize( &w, &h ); bool drawMetalTheme = MacGetTopLevelWindow()->MacGetMetalAppearance(); - bool minimumUmaAvailable = (UMAGetSystemVersion() >= 0x1030); -#if wxMAC_USE_CORE_GRAPHICS && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 - if ( !drawMetalTheme && minimumUmaAvailable ) + if ( !drawMetalTheme ) { HIThemePlacardDrawInfo info; memset( &info, 0, sizeof(info) ); @@ -1759,57 +1747,6 @@ void wxToolBar::OnPaint(wxPaintEvent& event) // leave the background as it is (striped or metal) } -#else - - const bool drawBorder = true; - - if (drawBorder) - { - wxMacPortSetter helper( &dc ); - - if ( !drawMetalTheme || !minimumUmaAvailable ) - { - Rect toolbarrect = { dc.YLOG2DEVMAC(0), dc.XLOG2DEVMAC(0), - dc.YLOG2DEVMAC(h), dc.XLOG2DEVMAC(w) }; - -#if 0 - if ( toolbarrect.left < 0 ) - toolbarrect.left = 0; - if ( toolbarrect.top < 0 ) - toolbarrect.top = 0; -#endif - - UMADrawThemePlacard( &toolbarrect, IsEnabled() ? kThemeStateActive : kThemeStateInactive ); - } - else - { -#if TARGET_API_MAC_OSX - HIRect hiToolbarrect = CGRectMake( - dc.YLOG2DEVMAC(0), dc.XLOG2DEVMAC(0), - dc.YLOG2DEVREL(h), dc.XLOG2DEVREL(w) ); - CGContextRef cgContext; - Rect bounds; - - GetPortBounds( (CGrafPtr) dc.m_macPort, &bounds ); - QDBeginCGContext( (CGrafPtr) dc.m_macPort, &cgContext ); - - CGContextTranslateCTM( cgContext, 0, bounds.bottom - bounds.top ); - CGContextScaleCTM( cgContext, 1, -1 ); - - HIThemeBackgroundDrawInfo drawInfo; - drawInfo.version = 0; - drawInfo.state = kThemeStateActive; - drawInfo.kind = kThemeBackgroundMetal; - HIThemeApplyBackground( &hiToolbarrect, &drawInfo, cgContext, kHIThemeOrientationNormal ); - -#ifndef __LP64__ - QDEndCGContext( (CGrafPtr) dc.m_macPort, &cgContext ); -#endif -#endif - } - } -#endif - event.Skip(); }