added patch for theme savvy checkbox metrics
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15173 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -58,6 +58,11 @@ public:
|
|||||||
void OnChar(wxKeyEvent& event) ;
|
void OnChar(wxKeyEvent& event) ;
|
||||||
void OnLeftClick(wxMouseEvent& event) ;
|
void OnLeftClick(wxMouseEvent& event) ;
|
||||||
|
|
||||||
|
// metrics
|
||||||
|
wxInt32 m_checkBoxWidth;
|
||||||
|
wxInt32 m_checkBoxHeight;
|
||||||
|
wxInt32 m_TextBaseLineOffset;
|
||||||
|
|
||||||
// the array containing the checked status of the items
|
// the array containing the checked status of the items
|
||||||
wxArrayInt m_checks;
|
wxArrayInt m_checks;
|
||||||
|
|
||||||
|
@@ -102,22 +102,30 @@ static pascal void wxMacCheckListDefinition( short message, Boolean isSelected,
|
|||||||
ClipRect( drawRect );
|
ClipRect( drawRect );
|
||||||
EraseRect( drawRect );
|
EraseRect( drawRect );
|
||||||
|
|
||||||
::TextFont( kFontIDMonaco ) ;
|
wxFontRefData * font = (wxFontRefData*) (list->GetFont().GetRefData()) ;
|
||||||
::TextSize( 9 );
|
|
||||||
::TextFace( 0 ) ;
|
if ( font )
|
||||||
|
{
|
||||||
|
::TextFont( font->m_macFontNum ) ;
|
||||||
|
::TextSize( font->m_macFontSize) ;
|
||||||
|
::TextFace( font->m_macFontStyle ) ;
|
||||||
|
}
|
||||||
|
|
||||||
ThemeButtonDrawInfo info ;
|
ThemeButtonDrawInfo info ;
|
||||||
info.state = kThemeStateActive ;
|
info.state = kThemeStateActive ;
|
||||||
info.value = checked ? kThemeButtonOn : kThemeButtonOff ;
|
info.value = checked ? kThemeButtonOn : kThemeButtonOff ;
|
||||||
info.adornment = kThemeAdornmentNone ;
|
info.adornment = kThemeAdornmentNone ;
|
||||||
Rect checkRect = *drawRect ;
|
Rect checkRect = *drawRect ;
|
||||||
|
|
||||||
|
|
||||||
checkRect.left +=0 ;
|
checkRect.left +=0 ;
|
||||||
checkRect.top +=2 ;
|
checkRect.top +=0 ;
|
||||||
checkRect.right = checkRect.left + 12 ;
|
checkRect.right = checkRect.left + list->m_checkBoxWidth ;
|
||||||
checkRect.bottom = checkRect.top + 10 ;
|
checkRect.bottom = checkRect.top + list->m_checkBoxHeight ;
|
||||||
DrawThemeButton(&checkRect,kThemeCheckBox,
|
DrawThemeButton(&checkRect,kThemeCheckBox,
|
||||||
&info,NULL,NULL, NULL,0);
|
&info,NULL,NULL, NULL,0);
|
||||||
|
|
||||||
MoveTo(drawRect->left + 4 + kwxMacListCheckboxWidth, drawRect->top + 10 );
|
MoveTo(drawRect->left + 2 + list->m_checkBoxWidth+2, drawRect->top + list->m_TextBaseLineOffset );
|
||||||
|
|
||||||
DrawText(text, 0 , text.Length());
|
DrawText(text, 0 , text.Length());
|
||||||
// If the cell is hilited, do the hilite now. Paint the cell contents with the
|
// If the cell is hilited, do the hilite now. Paint the cell contents with the
|
||||||
@@ -178,6 +186,28 @@ bool wxCheckListBox::Create(wxWindow *parent,
|
|||||||
m_noItems = 0 ; // this will be increased by our append command
|
m_noItems = 0 ; // this will be increased by our append command
|
||||||
m_selected = 0;
|
m_selected = 0;
|
||||||
|
|
||||||
|
m_checkBoxWidth = 12;
|
||||||
|
m_checkBoxHeight= 10;
|
||||||
|
|
||||||
|
long h = m_checkBoxHeight ;
|
||||||
|
#if TARGET_CARBON
|
||||||
|
GetThemeMetric(kThemeMetricCheckBoxWidth,(long *)&m_checkBoxWidth);
|
||||||
|
GetThemeMetric(kThemeMetricCheckBoxHeight,&h);
|
||||||
|
#endif
|
||||||
|
wxFontRefData * font = (wxFontRefData*) (GetFont().GetRefData()) ;
|
||||||
|
|
||||||
|
FontInfo finfo;
|
||||||
|
FetchFontInfo(font->m_macFontNum,short(font->m_macFontSize),font->m_macFontStyle,&finfo);
|
||||||
|
|
||||||
|
m_TextBaseLineOffset= finfo.leading+finfo.ascent;
|
||||||
|
m_checkBoxHeight= finfo.leading+finfo.ascent+finfo.descent;
|
||||||
|
|
||||||
|
if (m_checkBoxHeight<h)
|
||||||
|
{
|
||||||
|
m_TextBaseLineOffset+= (h-m_checkBoxHeight)/2;
|
||||||
|
m_checkBoxHeight= h;
|
||||||
|
}
|
||||||
|
|
||||||
Rect bounds ;
|
Rect bounds ;
|
||||||
Str255 title ;
|
Str255 title ;
|
||||||
|
|
||||||
@@ -196,7 +226,7 @@ bool wxCheckListBox::Create(wxWindow *parent,
|
|||||||
|
|
||||||
|
|
||||||
CreateListBoxControl( MAC_WXHWND(parent->MacGetRootWindow()), &bounds, false, 0, 1, false, true,
|
CreateListBoxControl( MAC_WXHWND(parent->MacGetRootWindow()), &bounds, false, 0, 1, false, true,
|
||||||
14, 14, false, &listDef, (ControlRef *)&m_macControl );
|
m_checkBoxHeight+2, 14, false, &listDef, (ControlRef *)&m_macControl );
|
||||||
|
|
||||||
GetControlData( (ControlHandle) m_macControl, kControlNoPart, kControlListBoxListHandleTag,
|
GetControlData( (ControlHandle) m_macControl, kControlNoPart, kControlListBoxListHandleTag,
|
||||||
sizeof(ListHandle), (Ptr) &m_macList, &asize);
|
sizeof(ListHandle), (Ptr) &m_macList, &asize);
|
||||||
@@ -299,10 +329,12 @@ void wxCheckListBox::Delete(int n)
|
|||||||
|
|
||||||
int wxCheckListBox::DoAppend(const wxString& item)
|
int wxCheckListBox::DoAppend(const wxString& item)
|
||||||
{
|
{
|
||||||
|
LSetDrawingMode( false , (ListHandle) m_macList ) ;
|
||||||
int pos = wxListBox::DoAppend(item);
|
int pos = wxListBox::DoAppend(item);
|
||||||
|
|
||||||
// the item is initially unchecked
|
// the item is initially unchecked
|
||||||
m_checks.Insert(FALSE, pos);
|
m_checks.Insert(FALSE, pos);
|
||||||
|
LSetDrawingMode( true , (ListHandle) m_macList ) ;
|
||||||
|
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
@@ -102,22 +102,30 @@ static pascal void wxMacCheckListDefinition( short message, Boolean isSelected,
|
|||||||
ClipRect( drawRect );
|
ClipRect( drawRect );
|
||||||
EraseRect( drawRect );
|
EraseRect( drawRect );
|
||||||
|
|
||||||
::TextFont( kFontIDMonaco ) ;
|
wxFontRefData * font = (wxFontRefData*) (list->GetFont().GetRefData()) ;
|
||||||
::TextSize( 9 );
|
|
||||||
::TextFace( 0 ) ;
|
if ( font )
|
||||||
|
{
|
||||||
|
::TextFont( font->m_macFontNum ) ;
|
||||||
|
::TextSize( font->m_macFontSize) ;
|
||||||
|
::TextFace( font->m_macFontStyle ) ;
|
||||||
|
}
|
||||||
|
|
||||||
ThemeButtonDrawInfo info ;
|
ThemeButtonDrawInfo info ;
|
||||||
info.state = kThemeStateActive ;
|
info.state = kThemeStateActive ;
|
||||||
info.value = checked ? kThemeButtonOn : kThemeButtonOff ;
|
info.value = checked ? kThemeButtonOn : kThemeButtonOff ;
|
||||||
info.adornment = kThemeAdornmentNone ;
|
info.adornment = kThemeAdornmentNone ;
|
||||||
Rect checkRect = *drawRect ;
|
Rect checkRect = *drawRect ;
|
||||||
|
|
||||||
|
|
||||||
checkRect.left +=0 ;
|
checkRect.left +=0 ;
|
||||||
checkRect.top +=2 ;
|
checkRect.top +=0 ;
|
||||||
checkRect.right = checkRect.left + 12 ;
|
checkRect.right = checkRect.left + list->m_checkBoxWidth ;
|
||||||
checkRect.bottom = checkRect.top + 10 ;
|
checkRect.bottom = checkRect.top + list->m_checkBoxHeight ;
|
||||||
DrawThemeButton(&checkRect,kThemeCheckBox,
|
DrawThemeButton(&checkRect,kThemeCheckBox,
|
||||||
&info,NULL,NULL, NULL,0);
|
&info,NULL,NULL, NULL,0);
|
||||||
|
|
||||||
MoveTo(drawRect->left + 4 + kwxMacListCheckboxWidth, drawRect->top + 10 );
|
MoveTo(drawRect->left + 2 + list->m_checkBoxWidth+2, drawRect->top + list->m_TextBaseLineOffset );
|
||||||
|
|
||||||
DrawText(text, 0 , text.Length());
|
DrawText(text, 0 , text.Length());
|
||||||
// If the cell is hilited, do the hilite now. Paint the cell contents with the
|
// If the cell is hilited, do the hilite now. Paint the cell contents with the
|
||||||
@@ -178,6 +186,28 @@ bool wxCheckListBox::Create(wxWindow *parent,
|
|||||||
m_noItems = 0 ; // this will be increased by our append command
|
m_noItems = 0 ; // this will be increased by our append command
|
||||||
m_selected = 0;
|
m_selected = 0;
|
||||||
|
|
||||||
|
m_checkBoxWidth = 12;
|
||||||
|
m_checkBoxHeight= 10;
|
||||||
|
|
||||||
|
long h = m_checkBoxHeight ;
|
||||||
|
#if TARGET_CARBON
|
||||||
|
GetThemeMetric(kThemeMetricCheckBoxWidth,(long *)&m_checkBoxWidth);
|
||||||
|
GetThemeMetric(kThemeMetricCheckBoxHeight,&h);
|
||||||
|
#endif
|
||||||
|
wxFontRefData * font = (wxFontRefData*) (GetFont().GetRefData()) ;
|
||||||
|
|
||||||
|
FontInfo finfo;
|
||||||
|
FetchFontInfo(font->m_macFontNum,short(font->m_macFontSize),font->m_macFontStyle,&finfo);
|
||||||
|
|
||||||
|
m_TextBaseLineOffset= finfo.leading+finfo.ascent;
|
||||||
|
m_checkBoxHeight= finfo.leading+finfo.ascent+finfo.descent;
|
||||||
|
|
||||||
|
if (m_checkBoxHeight<h)
|
||||||
|
{
|
||||||
|
m_TextBaseLineOffset+= (h-m_checkBoxHeight)/2;
|
||||||
|
m_checkBoxHeight= h;
|
||||||
|
}
|
||||||
|
|
||||||
Rect bounds ;
|
Rect bounds ;
|
||||||
Str255 title ;
|
Str255 title ;
|
||||||
|
|
||||||
@@ -196,7 +226,7 @@ bool wxCheckListBox::Create(wxWindow *parent,
|
|||||||
|
|
||||||
|
|
||||||
CreateListBoxControl( MAC_WXHWND(parent->MacGetRootWindow()), &bounds, false, 0, 1, false, true,
|
CreateListBoxControl( MAC_WXHWND(parent->MacGetRootWindow()), &bounds, false, 0, 1, false, true,
|
||||||
14, 14, false, &listDef, (ControlRef *)&m_macControl );
|
m_checkBoxHeight+2, 14, false, &listDef, (ControlRef *)&m_macControl );
|
||||||
|
|
||||||
GetControlData( (ControlHandle) m_macControl, kControlNoPart, kControlListBoxListHandleTag,
|
GetControlData( (ControlHandle) m_macControl, kControlNoPart, kControlListBoxListHandleTag,
|
||||||
sizeof(ListHandle), (Ptr) &m_macList, &asize);
|
sizeof(ListHandle), (Ptr) &m_macList, &asize);
|
||||||
@@ -299,10 +329,12 @@ void wxCheckListBox::Delete(int n)
|
|||||||
|
|
||||||
int wxCheckListBox::DoAppend(const wxString& item)
|
int wxCheckListBox::DoAppend(const wxString& item)
|
||||||
{
|
{
|
||||||
|
LSetDrawingMode( false , (ListHandle) m_macList ) ;
|
||||||
int pos = wxListBox::DoAppend(item);
|
int pos = wxListBox::DoAppend(item);
|
||||||
|
|
||||||
// the item is initially unchecked
|
// the item is initially unchecked
|
||||||
m_checks.Insert(FALSE, pos);
|
m_checks.Insert(FALSE, pos);
|
||||||
|
LSetDrawingMode( true , (ListHandle) m_macList ) ;
|
||||||
|
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user