void drawlabeledwindoidicon (Rect r, bigstring bslabel, boolean flhastext, boolean flpressed) { /* draw the labeled windoid icon in the appropriate state */ #if TARGET_API_MAC_CARBON == 1 ThemeButtonDrawInfo drawinfo; ThemeButtonDrawUPP drawupp; Rect rbutton; drawupp = NewThemeButtonDrawUPP (MyThemeButtonDrawCallback); drawinfo.state = kThemeButtonOn; drawinfo.value = kThemeStateActive; if (flpressed) drawinfo.value = kThemeStatePressed; drawinfo.adornment = 0; rbutton = r; rbutton.bottom = rbutton.bottom - 12; /*leave room for label*/ DrawThemeButton (&rbutton, kThemeLargeBevelButton, &drawinfo, nil, nil, drawupp, (unsigned long) bslabel); //DisposeThemeButtonDrawUPP (MyThemeButtonDrawCallback); DisposeThemeButtonDrawUPP (drawupp); if (flhastext) { Rect rlabel; pushstyle (geneva, 9, 0); rlabel = r; rlabel.top = r.bottom - globalfontinfo.ascent - globalfontinfo.descent; centerstring (rlabel, bslabel); popstyle (); } /*if*/ #else register short resnum; if (flpressed) resnum = depressedshrunkenwindoidicon; else { if (flhastext) resnum = windoidwithtexticon; else resnum = windoidwithnotexticon; } drawlabeledicon (&r, resnum, bslabel, false); #endif } /*drawlabeledwindoidicon*/
static pascal void wxMacCheckListDefinition( short message, Boolean isSelected, Rect *drawRect, Cell cell, short dataOffset, short dataLength, ListHandle listHandle ) { wxCheckListBox* list; list = (wxCheckListBox*) GetControlReference( (ControlHandle) GetListRefCon(listHandle) ); if ( list == NULL ) return ; GrafPtr savePort; GrafPtr grafPtr; RgnHandle savedClipRegion; SInt32 savedPenMode; GetPort(&savePort); SetPort((**listHandle).port); grafPtr = (**listHandle).port ; // typecast our refCon // Calculate the cell rect. switch( message ) { case lInitMsg: break; case lCloseMsg: break; case lDrawMsg: { const wxString text = list->m_stringArray[cell.v] ; int checked = list->m_checks[cell.v] ; // Save the current clip region, and set the clip region to the area we are about // to draw. savedClipRegion = NewRgn(); GetClip( savedClipRegion ); ClipRect( drawRect ); EraseRect( drawRect ); const wxFont& font = list->GetFont(); if ( font.Ok() ) { ::TextFont( font.GetMacFontNum() ) ; ::TextSize( font.GetMacFontSize()) ; ::TextFace( font.GetMacFontStyle() ) ; } ThemeButtonDrawInfo info ; info.state = kThemeStateActive ; info.value = checked ? kThemeButtonOn : kThemeButtonOff ; info.adornment = kThemeAdornmentNone ; Rect checkRect = *drawRect ; checkRect.left +=0 ; checkRect.top +=0 ; checkRect.right = checkRect.left + list->m_checkBoxWidth ; checkRect.bottom = checkRect.top + list->m_checkBoxHeight ; DrawThemeButton(&checkRect,kThemeCheckBox, &info,NULL,NULL, NULL,0); MoveTo(drawRect->left + 2 + list->m_checkBoxWidth+2, drawRect->top + list->m_TextBaseLineOffset ); DrawText(text, 0 , text.Length()); // If the cell is hilited, do the hilite now. Paint the cell contents with the // appropriate QuickDraw transform mode. if( isSelected ) { savedPenMode = GetPortPenMode( (CGrafPtr) grafPtr ); SetPortPenMode( (CGrafPtr) grafPtr, hilitetransfermode ); PaintRect( drawRect ); SetPortPenMode( (CGrafPtr) grafPtr, savedPenMode ); } // Restore the saved clip region. SetClip( savedClipRegion ); DisposeRgn( savedClipRegion ); } break; case lHiliteMsg: // Hilite or unhilite the cell. Paint the cell contents with the // appropriate QuickDraw transform mode. GetPort( &grafPtr ); savedPenMode = GetPortPenMode( (CGrafPtr) grafPtr ); SetPortPenMode( (CGrafPtr) grafPtr, hilitetransfermode ); PaintRect( drawRect ); SetPortPenMode( (CGrafPtr) grafPtr, savedPenMode ); break; default : break ; } SetPort(savePort); }