+void wxMacControl::ScrollRect( wxRect *r , int dx , int dy )
+{
+ wxASSERT( r != NULL ) ;
+#if TARGET_API_MAC_OSX
+ if ( m_isCompositing )
+ {
+ HIRect scrollarea = CGRectMake( r->x , r->y , r->width , r->height) ;
+ HIViewScrollRect ( m_controlRef , &scrollarea , dx ,dy ) ;
+ }
+ else
+#endif
+ {
+ Rect bounds ;
+ GetControlBounds( m_controlRef , &bounds ) ;
+ bounds.left += r->x ;
+ bounds.top += r->y ;
+ bounds.bottom = bounds.top + r->height ;
+ bounds.right = bounds.left + r->width ;
+ wxMacWindowClipper clip( m_peer ) ;
+ RgnHandle updateRgn = NewRgn() ;
+ ::ScrollRect( &bounds , dx , dy , updateRgn ) ;
+ InvalWindowRgn( GetControlOwner( m_controlRef ) , updateRgn ) ;
+ }
+}
+
+
+// SetNeedsDisplay would not invalidate the children
+
+//
+// Databrowser
+//
+
+OSStatus wxMacControl::SetSelectionFlags( DataBrowserSelectionFlags options )
+{
+ return SetDataBrowserSelectionFlags( m_controlRef , options ) ;
+}
+
+OSStatus wxMacControl::AddListViewColumn( DataBrowserListViewColumnDesc *columnDesc,
+ DataBrowserTableViewColumnIndex position )
+{
+ return AddDataBrowserListViewColumn( m_controlRef , columnDesc, position ) ;
+}
+
+OSStatus wxMacControl::AutoSizeListViewColumns()
+{
+ return AutoSizeDataBrowserListViewColumns(m_controlRef) ;
+}
+
+OSStatus wxMacControl::SetHasScrollBars( bool horiz , bool vert )
+{
+ return SetDataBrowserHasScrollBars( m_controlRef , horiz , vert ) ;
+}
+
+OSStatus wxMacControl::SetTableViewHiliteStyle( DataBrowserTableViewHiliteStyle hiliteStyle )
+{
+ return SetDataBrowserTableViewHiliteStyle( m_controlRef , hiliteStyle ) ;
+}
+
+OSStatus wxMacControl::SetListViewHeaderBtnHeight(UInt16 height)
+{
+ return SetDataBrowserListViewHeaderBtnHeight( m_controlRef ,height ) ;
+}
+
+OSStatus wxMacControl::SetCallbacks(const DataBrowserCallbacks * callbacks)
+{
+ return SetDataBrowserCallbacks( m_controlRef , callbacks ) ;
+}
+
+OSStatus wxMacControl::UpdateItems( DataBrowserItemID container, UInt32 numItems,
+ const DataBrowserItemID* items,
+ DataBrowserPropertyID preSortProperty,
+ DataBrowserPropertyID propertyID )
+{
+ return UpdateDataBrowserItems( m_controlRef , container, numItems, items, preSortProperty, propertyID ) ;
+}
+
+bool wxMacControl::IsItemSelected( DataBrowserItemID item )
+{
+ return IsDataBrowserItemSelected( m_controlRef , item ) ;
+}
+
+OSStatus wxMacControl::AddItems( DataBrowserItemID container, UInt32 numItems,
+ const DataBrowserItemID* items,
+ DataBrowserPropertyID preSortProperty )
+{
+ return AddDataBrowserItems( m_controlRef , container, numItems, items, preSortProperty ) ;
+}
+
+OSStatus wxMacControl::RemoveItems( DataBrowserItemID container, UInt32 numItems,
+ const DataBrowserItemID* items,
+ DataBrowserPropertyID preSortProperty )
+{
+ return RemoveDataBrowserItems( m_controlRef , container, numItems, items, preSortProperty ) ;
+}
+
+OSStatus wxMacControl::RevealItem( DataBrowserItemID item,
+ DataBrowserPropertyID propertyID,
+ DataBrowserRevealOptions options )
+{
+ return RevealDataBrowserItem( m_controlRef , item , propertyID , options ) ;
+}
+
+OSStatus wxMacControl::SetSelectedItems(UInt32 numItems,
+ const DataBrowserItemID * items,
+ DataBrowserSetOption operation )
+{
+ return SetDataBrowserSelectedItems( m_controlRef , numItems , items, operation ) ;
+}
+
+OSStatus wxMacControl::GetSelectionAnchor( DataBrowserItemID * first, DataBrowserItemID * last )
+{
+ return GetDataBrowserSelectionAnchor( m_controlRef , first , last ) ;
+}
+
+//
+// Tab Control
+//
+
+OSStatus wxMacControl::SetTabEnabled( SInt16 tabNo , bool enable )
+{
+ return ::SetTabEnabled( m_controlRef , tabNo , enable ) ;
+}
+
+//
+// Quartz Support
+//
+
+#ifdef __WXMAC_OSX__
+// snippets from Sketch Sample from Apple :
+
+#define kGenericRGBProfilePathStr "/System/Library/ColorSync/Profiles/Generic RGB Profile.icc"
+/*
+ This function locates, opens, and returns the profile reference for the calibrated
+ Generic RGB color space. It is up to the caller to call CMCloseProfile when done
+ with the profile reference this function returns.
+*/
+CMProfileRef wxMacOpenGenericProfile(void)
+{
+ static CMProfileRef cachedRGBProfileRef = NULL;
+
+ // we only create the profile reference once
+ if (cachedRGBProfileRef == NULL)
+ {
+ CMProfileLocation loc;
+
+ loc.locType = cmPathBasedProfile;
+ strcpy(loc.u.pathLoc.path, kGenericRGBProfilePathStr);
+
+ verify_noerr( CMOpenProfile(&cachedRGBProfileRef, &loc) );
+ }
+
+ if (cachedRGBProfileRef)
+ {
+ // clone the profile reference so that the caller has their own reference, not our cached one
+ CMCloneProfileRef(cachedRGBProfileRef);
+ }
+
+ return cachedRGBProfileRef;
+}
+
+/*
+ Return the generic RGB color space. This is a 'get' function and the caller should
+ not release the returned value unless the caller retains it first. Usually callers
+ of this routine will immediately use the returned colorspace with CoreGraphics
+ so they typically do not need to retain it themselves.
+
+ This function creates the generic RGB color space once and hangs onto it so it can
+ return it whenever this function is called.
+*/
+
+CGColorSpaceRef wxMacGetGenericRGBColorSpace()
+{
+ static CGColorSpaceRef genericRGBColorSpace = NULL;
+
+ if (genericRGBColorSpace == NULL)
+ {
+ CMProfileRef genericRGBProfile = wxMacOpenGenericProfile();
+
+ if (genericRGBProfile)
+ {
+ genericRGBColorSpace = CGColorSpaceCreateWithPlatformColorSpace(genericRGBProfile);
+ wxASSERT_MSG( genericRGBColorSpace != NULL, wxT("couldn't create the generic RGB color space") ) ;
+
+ // we opened the profile so it is up to us to close it
+ CMCloseProfile(genericRGBProfile);
+ }
+ }
+ return genericRGBColorSpace;
+}
+#endif