// local data
//-----------------------------------------------------------------------------
+/*
extern wxFontNameDirectory *wxTheFontNameDirectory;
+*/
//-----------------------------------------------------------------------------
// wxFont
int m_pointSize;
int m_family, m_style, m_weight;
bool m_underlined;
- int m_fontId;
wxString m_faceName;
bool m_byXFontName;
m_style = wxNORMAL;
m_weight = wxNORMAL;
m_underlined = FALSE;
- m_fontId = 0;
m_font = (GdkFont *) NULL;
}
m_style = data.m_style;
m_weight = data.m_weight;
m_underlined = data.m_underlined;
- m_fontId = data.m_fontId;
m_faceName = data.m_faceName;
m_font = (GdkFont *) NULL;
if (data.m_font) m_font = gdk_font_ref( data.m_font );
M_FONTDATA->m_font = gdk_font_load( xFontName );
}
-wxFont::wxFont( int pointSize, int family, int style, int weight, bool underlined = FALSE,
- const wxString& face = wxEmptyString )
+wxFont::wxFont( int pointSize, int family, int style, int weight, bool underlined, const wxString& face )
{
m_refData = new wxFontRefData();
- if (family == wxDEFAULT) family = wxSWISS;
- M_FONTDATA->m_family = family;
-
- if (!face.IsEmpty())
- {
- M_FONTDATA->m_faceName = face;
- M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( face, family );
- M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( family );
- }
+ if (family == wxDEFAULT)
+ M_FONTDATA->m_family = wxSWISS;
else
- {
- M_FONTDATA->m_fontId = family;
- M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( family );
- }
+ M_FONTDATA->m_family = family;
+
+ if (!face.IsEmpty()) M_FONTDATA->m_faceName = face;
- if (style == wxDEFAULT) style = wxNORMAL;
- M_FONTDATA->m_style = style;
- if (weight == wxDEFAULT) weight = wxNORMAL;
- M_FONTDATA->m_weight = weight;
- if (pointSize == wxDEFAULT) pointSize = 12;
- M_FONTDATA->m_pointSize = pointSize;
+ if (style == wxDEFAULT)
+ M_FONTDATA->m_style = wxNORMAL;
+ else
+ M_FONTDATA->m_style = style;
+
+ if (weight == wxDEFAULT)
+ M_FONTDATA->m_weight = wxNORMAL;
+ else
+ M_FONTDATA->m_weight = weight;
+
+ if (pointSize == wxDEFAULT)
+ M_FONTDATA->m_pointSize = 12;
+ else
+ M_FONTDATA->m_pointSize = pointSize;
+
M_FONTDATA->m_underlined = underlined;
if (wxTheFontList) wxTheFontList->Append( this );
return *this;
}
-bool wxFont::operator == ( const wxFont& font )
+bool wxFont::operator == ( const wxFont& font ) const
{
return m_refData == font.m_refData;
}
-bool wxFont::operator != ( const wxFont& font )
+bool wxFont::operator != ( const wxFont& font ) const
{
return m_refData != font.m_refData;
}
int wxFont::GetPointSize() const
{
- wxCHECK_MSG( Ok(), 0, "invalid font" );
+ wxCHECK_MSG( Ok(), 0, _T("invalid font") );
return M_FONTDATA->m_pointSize;
}
wxString wxFont::GetFaceName() const
{
- wxCHECK_MSG( Ok(), "", "invalid font" );
+ wxCHECK_MSG( Ok(), _T(""), _T("invalid font") );
- wxString s = wxTheFontNameDirectory->GetFontName( M_FONTDATA->m_fontId );
- return s;
+ return M_FONTDATA->m_faceName;
}
int wxFont::GetFamily() const
{
- wxCHECK_MSG( Ok(), 0, "invalid font" );
+ wxCHECK_MSG( Ok(), 0, _T("invalid font") );
return M_FONTDATA->m_family;
}
wxString wxFont::GetFamilyString() const
{
- wxCHECK_MSG( Ok(), "wxDEFAULT", "invalid font" );
+ wxCHECK_MSG( Ok(), _T("wxDEFAULT"), _T("invalid font") );
switch (M_FONTDATA->m_family)
{
- case wxDECORATIVE: return wxString("wxDECORATIVE");
- case wxROMAN: return wxString("wxROMAN");
- case wxSCRIPT: return wxString("wxSCRIPT");
- case wxSWISS: return wxString("wxSWISS");
- case wxMODERN: return wxString("wxMODERN");
- case wxTELETYPE: return wxString("wxTELETYPE");
- default: return "wxDEFAULT";
+ case wxDECORATIVE: return wxString(_T("wxDECORATIVE"));
+ case wxROMAN: return wxString(_T("wxROMAN"));
+ case wxSCRIPT: return wxString(_T("wxSCRIPT"));
+ case wxSWISS: return wxString(_T("wxSWISS"));
+ case wxMODERN: return wxString(_T("wxMODERN"));
+ case wxTELETYPE: return wxString(_T("wxTELETYPE"));
+ default: return _T("wxDEFAULT");
}
return "wxDEFAULT";
}
-int wxFont::GetFontId() const
-{
- wxCHECK_MSG( Ok(), 0, "invalid font" );
-
- return M_FONTDATA->m_fontId; // stub
-}
-
int wxFont::GetStyle() const
{
- wxCHECK_MSG( Ok(), 0, "invalid font" );
+ wxCHECK_MSG( Ok(), 0, _T("invalid font") );
return M_FONTDATA->m_style;
}
wxString wxFont::GetStyleString() const
{
- wxCHECK_MSG( Ok(), "wxDEFAULT", "invalid font" );
+ wxCHECK_MSG( Ok(), _T("wxDEFAULT"), _T("invalid font") );
switch (M_FONTDATA->m_style)
{
- case wxNORMAL: return wxString("wxNORMAL");
- case wxSLANT: return wxString("wxSLANT");
- case wxITALIC: return wxString("wxITALIC");
- default: return wxString("wxDEFAULT");
+ case wxNORMAL: return wxString(_T("wxNORMAL"));
+ case wxSLANT: return wxString(_T("wxSLANT"));
+ case wxITALIC: return wxString(_T("wxITALIC"));
+ default: return wxString(_T("wxDEFAULT"));
}
- return wxString("wxDEFAULT");
+ return wxString(_T("wxDEFAULT"));
}
int wxFont::GetWeight() const
{
- wxCHECK_MSG( Ok(), 0, "invalid font" );
+ wxCHECK_MSG( Ok(), 0, _T("invalid font") );
return M_FONTDATA->m_weight;
}
wxString wxFont::GetWeightString() const
{
- wxCHECK_MSG( Ok(), "wxDEFAULT", "invalid font" );
+ wxCHECK_MSG( Ok(), _T("wxDEFAULT"), _T("invalid font") );
switch (M_FONTDATA->m_weight)
{
- case wxNORMAL: return wxString("wxNORMAL");
- case wxBOLD: return wxString("wxBOLD");
- case wxLIGHT: return wxString("wxLIGHT");
- default: return wxString("wxDEFAULT");
+ case wxNORMAL: return wxString(_T("wxNORMAL"));
+ case wxBOLD: return wxString(_T("wxBOLD"));
+ case wxLIGHT: return wxString(_T("wxLIGHT"));
+ default: return wxString(_T("wxDEFAULT"));
}
- return wxString("wxDEFAULT");
+ return wxString(_T("wxDEFAULT"));
}
bool wxFont::GetUnderlined() const
{
- wxCHECK_MSG( Ok(), FALSE, "invalid font" );
+ wxCHECK_MSG( Ok(), FALSE, _T("invalid font") );
return M_FONTDATA->m_underlined;
}
// get internal representation of font
//-----------------------------------------------------------------------------
-// local help function
-static GdkFont *wxLoadQueryNearestFont(int point_size, int fontid,
- int style, int weight,
- bool underlined);
+static GdkFont *wxLoadQueryNearestFont( int point_size, int family, int style, int weight,
+ bool underlined, const wxString &facename );
-GdkFont *wxFont::GetInternalFont(float scale) const
+GdkFont *wxFont::GetInternalFont( float scale ) const
{
if (!Ok())
{
- wxFAIL_MSG( "invalid font" );
+ wxFAIL_MSG( _T("invalid font") );
return (GdkFont*) NULL;
}
+ /* short cut if the special X font constructor has been used */
if (M_FONTDATA->m_byXFontName) return M_FONTDATA->m_font;
- long int_scale = long(scale * 100.0 + 0.5); // key for fontlist
+ long int_scale = long(scale * 100.0 + 0.5); /* key for fontlist */
int point_scale = (M_FONTDATA->m_pointSize * 10 * int_scale) / 100;
GdkFont *font = (GdkFont *) NULL;
}
else
{
+/*
if ((int_scale == 100) &&
(M_FONTDATA->m_family == wxSWISS) &&
(M_FONTDATA->m_style == wxNORMAL) &&
font = gdk_font_load( "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*" );
}
else
+*/
{
- font = wxLoadQueryNearestFont( point_scale, M_FONTDATA->m_fontId, M_FONTDATA->m_style,
- M_FONTDATA->m_weight, M_FONTDATA->m_underlined );
+ font = wxLoadQueryNearestFont( point_scale, M_FONTDATA->m_family, M_FONTDATA->m_style,
+ M_FONTDATA->m_weight, M_FONTDATA->m_underlined, M_FONTDATA->m_faceName );
}
M_FONTDATA->m_scaled_xfonts.Append( int_scale, (wxObject*)font );
}
+
if (!font)
- wxLogError("could not load any font");
+ {
+ wxLogError(_T("could not load any font"));
+ }
return font;
}
// local utilities to find a X font
//-----------------------------------------------------------------------------
-static GdkFont *wxLoadQueryFont(int point_size, int fontid, int style,
- int weight, bool WXUNUSED(underlined))
+static GdkFont*wxLoadQueryFont( int pointSize, int family, int style, int weight,
+ bool underlined, const wxString &facename )
{
- char buffer[512];
- char *name = wxTheFontNameDirectory->GetScreenName( fontid, weight, style );
-
- if (!name)
- name = "-*-*-*-*-*-*-*-%d-*-*-*-*-*-*";
- sprintf(buffer, name, point_size);
-
- return gdk_font_load( buffer );
+ wxChar *xfamily = (wxChar*) NULL;
+ wxChar *xstyle = (wxChar*) NULL;
+ wxChar *xweight = (wxChar*) NULL;
+
+ switch (family)
+ {
+ case wxDECORATIVE: xfamily = _T("lucida"); break;
+ case wxROMAN: xfamily = _T("times"); break;
+ case wxMODERN: xfamily = _T("courier"); break;
+ case wxSWISS: xfamily = _T("helvetica"); break;
+ case wxTELETYPE: xfamily = _T("lucidatypewriter"); break;
+ case wxSCRIPT: xfamily = _T("utopia"); break;
+ default: xfamily = _T("*");
+ }
+
+ if (!facename.IsEmpty())
+ {
+ wxSprintf( wxBuffer, _T("-*-%s-*-*-normal-*-*-*-*-*-*-*-*-*"), facename.c_str() );
+ GdkFont *test = gdk_font_load( wxConvCurrent->cWX2MB(wxBuffer) );
+ if (test)
+ {
+ gdk_font_unref( test );
+ xfamily = WXSTRINGCAST facename;
+ }
+ }
+
+ switch (style)
+ {
+ case wxITALIC: xstyle = _T("i"); break;
+ case wxSLANT: xstyle = _T("o"); break;
+ case wxNORMAL: xstyle = _T("r"); break;
+ default: xstyle = _T("*"); break;
+ }
+ switch (weight)
+ {
+ case wxBOLD: xweight = _T("bold"); break;
+ case wxLIGHT:
+ case wxNORMAL: xweight = _T("medium"); break;
+ default: xweight = _T("*"); break;
+ }
+
+ wxSprintf( wxBuffer, _T("-*-%s-%s-%s-normal-*-*-%d-*-*-*-*-*-*"),
+ xfamily, xweight, xstyle, pointSize);
+
+ return gdk_font_load( wxConvCurrent->cWX2MB(wxBuffer) );
}
-static GdkFont *wxLoadQueryNearestFont(int point_size, int fontid,
- int style, int weight,
- bool underlined)
+static GdkFont *wxLoadQueryNearestFont( int point_size, int family, int style, int weight,
+ bool underlined, const wxString &facename )
{
- GdkFont *font;
-
- font = wxLoadQueryFont( point_size, fontid, style, weight, underlined );
+ GdkFont *font = wxLoadQueryFont( point_size, family, style, weight, underlined, facename );
- if (!font) {
- // search up and down by stepsize 10
+ if (!font)
+ {
+ /* search up and down by stepsize 10 */
int max_size = point_size + 20 * (1 + (point_size/180));
int min_size = point_size - 20 * (1 + (point_size/180));
+
int i;
- // Search for smaller size (approx.)
+ /* Search for smaller size (approx.) */
for (i=point_size-10; !font && i >= 10 && i >= min_size; i -= 10)
- font = wxLoadQueryFont(i, fontid, style, weight, underlined);
- // Search for larger size (approx.)
+ font = wxLoadQueryFont(i, family, style, weight, underlined, facename );
+
+ /* Search for larger size (approx.) */
for (i=point_size+10; !font && i <= max_size; i += 10)
- font = wxLoadQueryFont(i, fontid, style, weight, underlined);
- // Try default family
- if (!font && fontid != wxDEFAULT)
- font = wxLoadQueryFont(point_size, wxDEFAULT, style,
- weight, underlined);
- // Bogus font
+ font = wxLoadQueryFont( i, family, style, weight, underlined, facename );
+
+ /* Try default family */
+ if (!font && family != wxDEFAULT)
+ font = wxLoadQueryFont( point_size, wxDEFAULT, style, weight, underlined, facename );
+
+ /* Bogus font */
if (!font)
- font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
- underlined);
+ font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL, underlined, facename );
}
+
return font;
}
+/*
+
//-----------------------------------------------------------------------------
// face names and index functions
//-----------------------------------------------------------------------------
"ScreenItalic", "i",
"ScreenSlant", "o",
-/*
- "ScreenDefaultBase", "misc-fixed",
-*/
"ScreenDefaultBase", "*-times",
"ScreenRomanBase", "*-times",
strcpy(resource, prefix);
for (j = 0; j < count; j++)
{
- /* upon failure to find a matching fontname
- in the default fonts above, we substitute more
- and more values by _ so that at last ScreenMyFontBoldNormal
- would turn into Screen___ and this will then get
- converted to -${ScreenDefaultBase}${ScreenStdSuffix}
- */
+ // upon failure to find a matching fontname
+ // in the default fonts above, we substitute more
+ // and more values by _ so that at last ScreenMyFontBoldNormal
+ // would turn into Screen___ and this will then get
+ // converted to -${ScreenDefaultBase}${ScreenStdSuffix}
if (!(i & (1 << j)))
strcat(resource, names[j]);
strcat(resource, "_");
}
- /* we previously search the Xt-resources here */
+ // we previously search the Xt-resources here
if (!internal)
{
if ((strcmp(internal,"-${ScreenDefaultBase}${ScreenStdSuffix}") == 0) &&
(strcmp(names[0], "Default") != 0))
{
- /* we did not find any font name in the standard list.
- this can (hopefully does) mean that someone supplied
- the facename in the wxFont constructor so we insert
- it here */
+ // we did not find any font name in the standard list.
+ // this can (hopefully does) mean that someone supplied
+ // the facename in the wxFont constructor so we insert
+ // it here
- strcpy( resource,"-*-" ); /* any producer */
- strcat( resource, names[0] ); /* facename */
- strcat( resource, "${ScreenStdSuffix}" ); /* add size params later on */
+ strcpy( resource,"-*-" ); // any producer
+ strcat( resource, names[0] ); // facename
+ strcat( resource, "${ScreenStdSuffix}" ); // add size params later on
*v = copystring(resource);
}
else
SearchResource(devresname, names, 3, &v);
- /* Expand macros in the found string: */
+ // Expand macros in the found string:
found:
int len, closer = 0, startpos = 0;
goto found;
}
}
- /* We have a final value: */
+ // We have a final value:
map[k][j] = v;
}
}
// font does not exist
return wxDEFAULT;
}
+
+*/