switched drawing algorithm, since apparently DrawThemeTextBox has some problems not squeezing the text under certain OS versions. also added the OS Truncating algorithm which does add ellipsis (...) when the text does not fit
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17962 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -105,16 +105,34 @@ static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect
|
||||
ClipRect( drawRect );
|
||||
EraseRect( drawRect );
|
||||
|
||||
wxFontRefData * font = (wxFontRefData*) list->GetFont().GetRefData() ;
|
||||
|
||||
if ( font )
|
||||
{
|
||||
::TextFont( font->m_macFontNum ) ;
|
||||
::TextSize( short(font->m_macFontSize) ) ;
|
||||
::TextFace( font->m_macFontStyle ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
::TextFont( kFontIDMonaco ) ;
|
||||
::TextSize( 9 );
|
||||
::TextFace( 0 ) ;
|
||||
}
|
||||
|
||||
#if TARGET_CARBON
|
||||
bool useDrawThemeText = ( DrawThemeTextBox != (void*) kUnresolvedCFragSymbolAddress ) ;
|
||||
|
||||
if ( useDrawThemeText )
|
||||
{
|
||||
Rect frame = { drawRect->top, drawRect->left + 4,
|
||||
drawRect->top + kwxMacListItemHeight, drawRect->right} ;
|
||||
CFStringRef mString = CFStringCreateWithBytes( NULL , (UInt8*) text.c_str(), text.Length(), CFStringGetSystemEncoding(), false ) ;
|
||||
drawRect->top + kwxMacListItemHeight, drawRect->right + 10000 } ;
|
||||
CFStringRef sString = CFStringCreateWithBytes( NULL , (UInt8*) text.c_str(), text.Length(), CFStringGetSystemEncoding(), false ) ;
|
||||
CFMutableStringRef mString = CFStringCreateMutableCopy( NULL , 0 , sString ) ;
|
||||
CFRelease( sString ) ;
|
||||
::TruncateThemeText( mString , kThemeCurrentPortFont, kThemeStateActive, drawRect->right - drawRect->left , truncEnd , NULL ) ;
|
||||
::DrawThemeTextBox( mString,
|
||||
kThemeViewsFont,
|
||||
kThemeCurrentPortFont,
|
||||
kThemeStateActive,
|
||||
false,
|
||||
&frame,
|
||||
@@ -126,9 +144,6 @@ static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect
|
||||
#endif
|
||||
{
|
||||
MoveTo(drawRect->left + 4 , drawRect->top + 10 );
|
||||
::TextFont( kFontIDMonaco ) ;
|
||||
::TextSize( 9 );
|
||||
::TextFace( 0 ) ;
|
||||
DrawText(text, 0 , text.Length());
|
||||
}
|
||||
|
||||
@@ -206,6 +221,19 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
|
||||
}
|
||||
listDef.u.userProc = macListDefUPP ;
|
||||
|
||||
Str255 fontName ;
|
||||
SInt16 fontSize ;
|
||||
Style fontStyle ;
|
||||
SInt16 fontNum ;
|
||||
#if TARGET_CARBON
|
||||
GetThemeFont(kThemeViewsFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;
|
||||
#else
|
||||
GetFontName( kFontIDMonaco , fontName ) ;
|
||||
fontSize = 9 ;
|
||||
fontStyle = normal ;
|
||||
#endif
|
||||
CopyPascalStringToC( fontName , (char*) fontName ) ;
|
||||
SetFont( wxFont (fontSize, wxSWISS, wxNORMAL, wxNORMAL , false , fontName ) ) ;
|
||||
#if TARGET_CARBON
|
||||
Size asize;
|
||||
|
||||
@@ -623,47 +651,40 @@ wxSize wxListBox::DoGetBestSize() const
|
||||
{
|
||||
wxMacPortStateHelper st( UMAGetWindowPort( (WindowRef) MacGetRootWindow() ) ) ;
|
||||
Rect drawRect ;
|
||||
#if TARGET_CARBON
|
||||
int sizeFont = 12;
|
||||
|
||||
Str255 fontName ;
|
||||
SInt16 fontSize ;
|
||||
Style fontStyle ;
|
||||
SInt16 fontNum ;
|
||||
wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ;
|
||||
|
||||
GetThemeFont(kThemeViewsFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;
|
||||
GetFNum(fontName , &fontNum ) ;
|
||||
if ( 1 )
|
||||
{
|
||||
::TextFont( fontNum ) ;
|
||||
::TextSize( fontSize );
|
||||
::TextFace( fontStyle ) ;
|
||||
}
|
||||
else
|
||||
|
||||
#endif
|
||||
{
|
||||
if ( font )
|
||||
{
|
||||
::TextFont( font->m_macFontNum ) ;
|
||||
::TextSize( short(font->m_macFontSize) ) ;
|
||||
::TextFace( font->m_macFontStyle ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
::TextFont( kFontIDMonaco ) ;
|
||||
::TextSize( 9 );
|
||||
::TextFace( 0 ) ;
|
||||
}
|
||||
|
||||
// Find the widest line
|
||||
for(int i = 0; i < GetCount(); i++) {
|
||||
wxString str(GetString(i));
|
||||
wLine = ::TextWidth( str.c_str() , 0 , str.Length() ) ;
|
||||
lbWidth = wxMax(lbWidth, wLine);
|
||||
}
|
||||
|
||||
// Find the widest line
|
||||
for(int i = 0; i < GetCount(); i++) {
|
||||
wxString str(GetString(i));
|
||||
wLine = ::TextWidth( str.c_str() , 0 , str.Length() ) ;
|
||||
lbWidth = wxMax(lbWidth, wLine);
|
||||
}
|
||||
// Add room for the scrollbar
|
||||
lbWidth += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
|
||||
|
||||
// Add room for the scrollbar
|
||||
lbWidth += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
|
||||
|
||||
// And just a bit more
|
||||
int cy = 12 ;
|
||||
|
||||
// don't make the listbox too tall (limit height to around 10 items) but don't
|
||||
// make it too small neither
|
||||
lbHeight = (cy+4) * wxMin(wxMax(GetCount(), 3), 10);
|
||||
// And just a bit more
|
||||
int cy = 12 ;
|
||||
int cx = ::TextWidth( "X" , 0 , 1 ) ;
|
||||
lbWidth += cx ;
|
||||
|
||||
// don't make the listbox too tall (limit height to around 10 items) but don't
|
||||
// make it too small neither
|
||||
lbHeight = (cy+4) * wxMin(wxMax(GetCount(), 3), 10);
|
||||
}
|
||||
return wxSize(lbWidth, lbHeight);
|
||||
}
|
||||
@@ -710,6 +731,7 @@ wxOwnerDrawn *wxListBox::CreateItem(size_t n)
|
||||
// list box control implementation
|
||||
// ============================================================================
|
||||
|
||||
/*
|
||||
void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refCon)
|
||||
{
|
||||
wxListBox* list;
|
||||
@@ -724,7 +746,7 @@ void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refC
|
||||
DrawText(text, 0 , text.Length());
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
void wxListBox::MacDelete( int N )
|
||||
{
|
||||
LDelRow( 1 , N , (ListHandle)m_macList) ;
|
||||
|
@@ -105,16 +105,34 @@ static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect
|
||||
ClipRect( drawRect );
|
||||
EraseRect( drawRect );
|
||||
|
||||
wxFontRefData * font = (wxFontRefData*) list->GetFont().GetRefData() ;
|
||||
|
||||
if ( font )
|
||||
{
|
||||
::TextFont( font->m_macFontNum ) ;
|
||||
::TextSize( short(font->m_macFontSize) ) ;
|
||||
::TextFace( font->m_macFontStyle ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
::TextFont( kFontIDMonaco ) ;
|
||||
::TextSize( 9 );
|
||||
::TextFace( 0 ) ;
|
||||
}
|
||||
|
||||
#if TARGET_CARBON
|
||||
bool useDrawThemeText = ( DrawThemeTextBox != (void*) kUnresolvedCFragSymbolAddress ) ;
|
||||
|
||||
if ( useDrawThemeText )
|
||||
{
|
||||
Rect frame = { drawRect->top, drawRect->left + 4,
|
||||
drawRect->top + kwxMacListItemHeight, drawRect->right} ;
|
||||
CFStringRef mString = CFStringCreateWithBytes( NULL , (UInt8*) text.c_str(), text.Length(), CFStringGetSystemEncoding(), false ) ;
|
||||
drawRect->top + kwxMacListItemHeight, drawRect->right + 10000 } ;
|
||||
CFStringRef sString = CFStringCreateWithBytes( NULL , (UInt8*) text.c_str(), text.Length(), CFStringGetSystemEncoding(), false ) ;
|
||||
CFMutableStringRef mString = CFStringCreateMutableCopy( NULL , 0 , sString ) ;
|
||||
CFRelease( sString ) ;
|
||||
::TruncateThemeText( mString , kThemeCurrentPortFont, kThemeStateActive, drawRect->right - drawRect->left , truncEnd , NULL ) ;
|
||||
::DrawThemeTextBox( mString,
|
||||
kThemeViewsFont,
|
||||
kThemeCurrentPortFont,
|
||||
kThemeStateActive,
|
||||
false,
|
||||
&frame,
|
||||
@@ -126,9 +144,6 @@ static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect
|
||||
#endif
|
||||
{
|
||||
MoveTo(drawRect->left + 4 , drawRect->top + 10 );
|
||||
::TextFont( kFontIDMonaco ) ;
|
||||
::TextSize( 9 );
|
||||
::TextFace( 0 ) ;
|
||||
DrawText(text, 0 , text.Length());
|
||||
}
|
||||
|
||||
@@ -206,6 +221,19 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
|
||||
}
|
||||
listDef.u.userProc = macListDefUPP ;
|
||||
|
||||
Str255 fontName ;
|
||||
SInt16 fontSize ;
|
||||
Style fontStyle ;
|
||||
SInt16 fontNum ;
|
||||
#if TARGET_CARBON
|
||||
GetThemeFont(kThemeViewsFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;
|
||||
#else
|
||||
GetFontName( kFontIDMonaco , fontName ) ;
|
||||
fontSize = 9 ;
|
||||
fontStyle = normal ;
|
||||
#endif
|
||||
CopyPascalStringToC( fontName , (char*) fontName ) ;
|
||||
SetFont( wxFont (fontSize, wxSWISS, wxNORMAL, wxNORMAL , false , fontName ) ) ;
|
||||
#if TARGET_CARBON
|
||||
Size asize;
|
||||
|
||||
@@ -623,47 +651,40 @@ wxSize wxListBox::DoGetBestSize() const
|
||||
{
|
||||
wxMacPortStateHelper st( UMAGetWindowPort( (WindowRef) MacGetRootWindow() ) ) ;
|
||||
Rect drawRect ;
|
||||
#if TARGET_CARBON
|
||||
int sizeFont = 12;
|
||||
|
||||
Str255 fontName ;
|
||||
SInt16 fontSize ;
|
||||
Style fontStyle ;
|
||||
SInt16 fontNum ;
|
||||
wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ;
|
||||
|
||||
GetThemeFont(kThemeViewsFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;
|
||||
GetFNum(fontName , &fontNum ) ;
|
||||
if ( 1 )
|
||||
{
|
||||
::TextFont( fontNum ) ;
|
||||
::TextSize( fontSize );
|
||||
::TextFace( fontStyle ) ;
|
||||
}
|
||||
else
|
||||
|
||||
#endif
|
||||
{
|
||||
if ( font )
|
||||
{
|
||||
::TextFont( font->m_macFontNum ) ;
|
||||
::TextSize( short(font->m_macFontSize) ) ;
|
||||
::TextFace( font->m_macFontStyle ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
::TextFont( kFontIDMonaco ) ;
|
||||
::TextSize( 9 );
|
||||
::TextFace( 0 ) ;
|
||||
}
|
||||
|
||||
// Find the widest line
|
||||
for(int i = 0; i < GetCount(); i++) {
|
||||
wxString str(GetString(i));
|
||||
wLine = ::TextWidth( str.c_str() , 0 , str.Length() ) ;
|
||||
lbWidth = wxMax(lbWidth, wLine);
|
||||
}
|
||||
|
||||
// Find the widest line
|
||||
for(int i = 0; i < GetCount(); i++) {
|
||||
wxString str(GetString(i));
|
||||
wLine = ::TextWidth( str.c_str() , 0 , str.Length() ) ;
|
||||
lbWidth = wxMax(lbWidth, wLine);
|
||||
}
|
||||
// Add room for the scrollbar
|
||||
lbWidth += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
|
||||
|
||||
// Add room for the scrollbar
|
||||
lbWidth += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
|
||||
|
||||
// And just a bit more
|
||||
int cy = 12 ;
|
||||
|
||||
// don't make the listbox too tall (limit height to around 10 items) but don't
|
||||
// make it too small neither
|
||||
lbHeight = (cy+4) * wxMin(wxMax(GetCount(), 3), 10);
|
||||
// And just a bit more
|
||||
int cy = 12 ;
|
||||
int cx = ::TextWidth( "X" , 0 , 1 ) ;
|
||||
lbWidth += cx ;
|
||||
|
||||
// don't make the listbox too tall (limit height to around 10 items) but don't
|
||||
// make it too small neither
|
||||
lbHeight = (cy+4) * wxMin(wxMax(GetCount(), 3), 10);
|
||||
}
|
||||
return wxSize(lbWidth, lbHeight);
|
||||
}
|
||||
@@ -710,6 +731,7 @@ wxOwnerDrawn *wxListBox::CreateItem(size_t n)
|
||||
// list box control implementation
|
||||
// ============================================================================
|
||||
|
||||
/*
|
||||
void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refCon)
|
||||
{
|
||||
wxListBox* list;
|
||||
@@ -724,7 +746,7 @@ void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refC
|
||||
DrawText(text, 0 , text.Length());
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
void wxListBox::MacDelete( int N )
|
||||
{
|
||||
LDelRow( 1 , N , (ListHandle)m_macList) ;
|
||||
|
Reference in New Issue
Block a user