// Created: 05.11.99
// RCS-ID: $Id$
// Copyright: (c) Vadim Zeitlin
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "fontutil.h"
#endif
wxString wxNativeFontInfo::ToString() const
{
- wxString tmp = wxGTK_CONV_BACK( pango_font_description_to_string( description ) );
+ char *str = pango_font_description_to_string( description );
+ wxString tmp = wxGTK_CONV_BACK( str );
+ g_free( str );
return tmp;
}
#elif defined(__WXGTK__)
wxNativeFont wxLoadFont(const wxString& fontSpec)
{
- return gdk_font_load( wxConvertWX2MB(fontSpec) );
+ // VZ: we should use gdk_fontset_load() instead of gdk_font_load()
+ // here to be able to display Japanese fonts correctly (at least
+ // this is what people report) but unfortunately doing it results
+ // in tons of warnings when using GTK with "normal" European
+ // languages and so we can't always do it and I don't know enough
+ // to determine when should this be done... (FIXME)
+ return gdk_font_load( wxConvertWX2MB(fontSpec) );
}
inline void wxFreeFont(wxNativeFont font)
return FALSE;
}
- fontElements[n] = tokenizer.GetNextToken();
+ wxString field = tokenizer.GetNextToken();
+ if ( !field.empty() && field != _T('*') )
+ {
+ // we're really initialized now
+ m_isDefault = FALSE;
+ }
+
+ fontElements[n] = field;
}
// this should be all
if ( tokenizer.HasMoreTokens() )
return FALSE;
- // we're initialized now
- m_isDefault = FALSE;
-
return TRUE;
}
*xFontName = newFontName;
}
- // try to load exactly the font requested first
- if( !font )
- {
- font = wxLoadQueryFont( pointSize, family, style, weight,
- underlined, facename,
- info.xregistry, info.xencoding,
- xFontName );
- }
-
if ( !font )
{
// search up and down by stepsize 10
int max_size = pointSize + 20 * (1 + (pointSize/180));
int min_size = pointSize - 20 * (1 + (pointSize/180));
- int i;
+ int i, round; // counters
+
+ // first round: search for equal, then for smaller and for larger size with the given weight and style
+ int testweight = weight;
+ int teststyle = style;
- // Search for smaller size (approx.)
- for ( i = pointSize - 10; !font && i >= 10 && i >= min_size; i -= 10 )
+ for ( round = 0; round < 3; round++ )
+ {
+ // second round: use normal weight
+ if ( round == 1 )
{
- font = wxLoadQueryFont(i, family, style, weight, underlined,
+ if ( testweight != wxNORMAL )
+ {
+ testweight = wxNORMAL;
+ }
+ else
+ {
+ ++round; // fall through to third round
+ }
+ }
+
+ // third round: ... and use normal style
+ if ( round == 2 )
+ {
+ if ( teststyle != wxNORMAL )
+ {
+ teststyle = wxNORMAL;
+ }
+ else
+ {
+ break;
+ }
+ }
+ // Search for equal or smaller size (approx.)
+ for ( i = pointSize; !font && i >= 10 && i >= min_size; i -= 10 )
+ {
+ font = wxLoadQueryFont(i, family, teststyle, testweight, underlined,
facename, info.xregistry, info.xencoding,
xFontName);
}
// Search for larger size (approx.)
for ( i = pointSize + 10; !font && i <= max_size; i += 10 )
{
- font = wxLoadQueryFont(i, family, style, weight, underlined,
+ font = wxLoadQueryFont(i, family, teststyle, testweight, underlined,
facename, info.xregistry, info.xencoding,
xFontName);
+ }
}
// Try default family