X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e9576ca53db96b462ed4c0b4bdf47d64c40203e4..3ce946d47ef03fcf330b0a28c0ff815ea480da55:/src/mac/carbon/bmpbuttn.cpp diff --git a/src/mac/carbon/bmpbuttn.cpp b/src/mac/carbon/bmpbuttn.cpp index 169f0d557a..c143138609 100644 --- a/src/mac/carbon/bmpbuttn.cpp +++ b/src/mac/carbon/bmpbuttn.cpp @@ -19,6 +19,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton) #endif +#include + +PicHandle MakePict(GWorldPtr wp, GWorldPtr mask ) ; + bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos, const wxSize& size, long style, @@ -26,13 +30,7 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit const wxString& name) { m_buttonBitmap = bitmap; - SetName(name); - SetValidator(validator); - parent->AddChild(this); - - m_backgroundColour = parent->GetBackgroundColour() ; - m_foregroundColour = parent->GetForegroundColour() ; - m_windowStyle = style; + m_marginX = 0; m_marginY = 0; @@ -52,14 +50,72 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit if ( height == -1 && bitmap.Ok()) height = bitmap.GetHeight() + 2*m_marginY; - /* TODO: create bitmap button - */ + Rect bounds ; + Str255 title ; + MacPreControlCreate( parent , id , "" , pos , wxSize( width , height ) ,style, validator , name , &bounds , title ) ; + + m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , true , 0 , + kControlBehaviorOffsetContents + kControlContentPictHandle , 0, + (( style & wxBU_AUTODRAW ) ? kControlBevelButtonSmallBevelProc : kControlBevelButtonNormalBevelProc ), (long) this ) ; + wxASSERT_MSG( m_macControl != NULL , "No valid mac control" ) ; + + m_buttonBitmap = bitmap; + PicHandle icon = NULL ; + if ( m_buttonBitmap.Ok() ) + { + wxBitmapRefData * bmap = (wxBitmapRefData*) ( m_buttonBitmap.GetRefData()) ; + if ( bmap->m_bitmapType == kMacBitmapTypePict ) + icon = bmap->m_hPict ; + else if ( bmap->m_bitmapType == kMacBitmapTypeGrafWorld ) + { + if ( m_buttonBitmap.GetMask() ) + { + icon = MakePict( bmap->m_hBitmap , m_buttonBitmap.GetMask()->GetMaskBitmap() ) ; + } + else + { + icon = MakePict( bmap->m_hBitmap , NULL ) ; + } + } + } + ControlButtonContentInfo info ; + + info.contentType = kControlContentPictHandle ; + info.u.picture = icon ; + + UMASetControlData( m_macControl , kControlButtonPart , kControlBevelButtonContentTag , sizeof(info) , (char*) &info ) ; + + MacPostControlCreate() ; - return FALSE; + return TRUE; } void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap) { m_buttonBitmap = bitmap; + PicHandle icon = NULL ; + if ( m_buttonBitmap.Ok() ) + { + wxBitmapRefData * bmap = (wxBitmapRefData*) ( m_buttonBitmap.GetRefData()) ; + if ( bmap->m_bitmapType == kMacBitmapTypePict ) + icon = bmap->m_hPict ; + else if ( bmap->m_bitmapType == kMacBitmapTypeGrafWorld ) + { + if ( m_buttonBitmap.GetMask() ) + { + icon = MakePict( bmap->m_hBitmap , m_buttonBitmap.GetMask()->GetMaskBitmap() ) ; + } + else + { + icon = MakePict( bmap->m_hBitmap , NULL ) ; + } + } + } + ControlButtonContentInfo info ; + + info.contentType = kControlContentPictHandle ; + info.u.picture = icon ; + + UMASetControlData( m_macControl , kControlButtonPart , kControlBevelButtonContentTag , sizeof(info) , (char*) &info ) ; }