// Created: 05.11.99
// RCS-ID: $Id$
// Copyright: (c) Vadim Zeitlin
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
#include "wx/hash.h"
#include "wx/module.h"
-#ifdef __WXGTK20__
+#if wxUSE_PANGO
+
+#include "pango/pango.h"
+#ifdef __WXGTK20__
#include "wx/gtk/private.h"
+#else
+#include "wx/x11/private.h"
+#endif
// ----------------------------------------------------------------------------
// wxNativeFontInfo
m_style = wxFONTSTYLE_SLANT;
break;
}
-
+
return m_style;
}
m_weight = wxFONTWEIGHT_BOLD;
break;
}
-
+
return m_weight;
}
wxString wxNativeFontInfo::GetFaceName() const
{
wxString tmp = wxGTK_CONV_BACK( pango_font_description_get_family( description ) );
-
+
return tmp;
}
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;
}
return FALSE;
}
-#else
- // __WXGTK20__
+#else // GTK+ 1.x
#ifdef __X__
#ifdef __VMS__
#elif defined(__WXGTK__)
wxNativeFont wxLoadFont(const wxString& fontSpec)
{
- return gdk_font_load( wxConvertWX2MB(fontSpec) );
+ // use gdk_fontset_load() instead of gdk_font_load() because otherwise
+ // we have problems with Japanese (not terribly precise, I know, but
+ // this is all the patch said)
+ return gdk_fontset_load( wxConvertWX2MB(fontSpec) );
}
inline void wxFreeFont(wxNativeFont font)
}
// this should be all
- return !tokenizer.HasMoreTokens();
+ if ( tokenizer.HasMoreTokens() )
+ return FALSE;
+
+ // we're initialized now
+ m_isDefault = FALSE;
+
+ return TRUE;
}
wxString wxNativeFontInfo::GetXFontName() const
m_isDefault = FALSE;
}
+int wxNativeFontInfo::GetPointSize() const
+{
+ const wxString s = GetXFontComponent(wxXLFD_POINTSIZE);
+
+ // return -1 to indicate that the size is unknown
+ long l;
+ return s.ToLong(&l) ? l : -1;
+}
+
+wxFontStyle wxNativeFontInfo::GetStyle() const
+{
+ const wxString s = GetXFontComponent(wxXLFD_SLANT);
+
+ if ( s.length() != 1 )
+ {
+ // it is really unknown but we don't have any way to return it from
+ // here
+ return wxFONTSTYLE_NORMAL;
+ }
+
+ switch ( s[0] )
+ {
+ default:
+ // again, unknown but consider normal by default
+
+ case _T('r'):
+ return wxFONTSTYLE_NORMAL;
+
+ case _T('i'):
+ return wxFONTSTYLE_ITALIC;
+
+ case _T('o'):
+ return wxFONTSTYLE_SLANT;
+ }
+}
+
+wxFontWeight wxNativeFontInfo::GetWeight() const
+{
+ const wxString s = GetXFontComponent(wxXLFD_WEIGHT).MakeLower();
+ if ( s.find(_T("bold")) != wxString::npos || s == _T("black") )
+ return wxFONTWEIGHT_BOLD;
+ else if ( s == _T("light") )
+ return wxFONTWEIGHT_LIGHT;
+
+ return wxFONTWEIGHT_NORMAL;
+}
+
+bool wxNativeFontInfo::GetUnderlined() const
+{
+ // X fonts are never underlined
+ return FALSE;
+}
+
+wxString wxNativeFontInfo::GetFaceName() const
+{
+ // wxWindows facename probably more accurately corresponds to X family
+ return GetXFontComponent(wxXLFD_FAMILY);
+}
+
+wxFontFamily wxNativeFontInfo::GetFamily() const
+{
+ // and wxWindows family -- to X foundry, but we have to translate it to
+ // wxFontFamily somehow...
+ wxFAIL_MSG(_T("not implemented")); // GetXFontComponent(wxXLFD_FOUNDRY);
+
+ return wxFONTFAMILY_DEFAULT;
+}
+
+wxFontEncoding wxNativeFontInfo::GetEncoding() const
+{
+ // we already have the code for this but need to refactor it first
+ wxFAIL_MSG( _T("not implemented") );
+
+ return wxFONTENCODING_MAX;
+}
+
+void wxNativeFontInfo::SetPointSize(int pointsize)
+{
+ SetXFontComponent(wxXLFD_POINTSIZE, wxString::Format(_T("%d"), pointsize));
+}
+
+void wxNativeFontInfo::SetStyle(wxFontStyle style)
+{
+ wxString s;
+ switch ( style )
+ {
+ case wxFONTSTYLE_ITALIC:
+ s = _T('i');
+ break;
+
+ case wxFONTSTYLE_SLANT:
+ s = _T('o');
+ break;
+
+ case wxFONTSTYLE_NORMAL:
+ s = _T('r');
+
+ default:
+ wxFAIL_MSG( _T("unknown wxFontStyle in wxNativeFontInfo::SetStyle") );
+ return;
+ }
+
+ SetXFontComponent(wxXLFD_SLANT, s);
+}
+
+void wxNativeFontInfo::SetWeight(wxFontWeight weight)
+{
+ wxString s;
+ switch ( weight )
+ {
+ case wxFONTWEIGHT_BOLD:
+ s = _T("bold");
+ break;
+
+ case wxFONTWEIGHT_LIGHT:
+ s = _T("light");
+ break;
+
+ case wxFONTWEIGHT_NORMAL:
+ s = _T("medium");
+ break;
+
+ default:
+ wxFAIL_MSG( _T("unknown wxFontWeight in wxNativeFontInfo::SetWeight") );
+ return;
+ }
+
+ SetXFontComponent(wxXLFD_WEIGHT, s);
+}
+
+void wxNativeFontInfo::SetUnderlined(bool WXUNUSED(underlined))
+{
+ // can't do this under X
+}
+
+void wxNativeFontInfo::SetFaceName(wxString facename)
+{
+ SetXFontComponent(wxXLFD_FAMILY, facename);
+}
+
+void wxNativeFontInfo::SetFamily(wxFontFamily family)
+{
+ // wxFontFamily -> X foundry, anyone?
+ wxFAIL_MSG( _T("not implemented") );
+
+ // SetXFontComponent(wxXLFD_FOUNDRY, ...);
+}
+
+void wxNativeFontInfo::SetEncoding(wxFontEncoding encoding)
+{
+ wxNativeEncodingInfo info;
+ if ( wxGetNativeFontEncoding(encoding, &info) )
+ {
+ SetXFontComponent(wxXLFD_ENCODING, info.xencoding);
+ SetXFontComponent(wxXLFD_REGISTRY, info.xregistry);
+ }
+}
+
// ----------------------------------------------------------------------------
// common functions
// ----------------------------------------------------------------------------
info->xencoding = wxT("*");
break;
+ case wxFONTENCODING_GB2312:
+ info->xregistry = wxT("GB2312"); // or the otherway round?
+ info->xencoding = wxT("*");
+ break;
+
case wxFONTENCODING_KOI8:
info->xregistry = wxT("koi8");
// An alternative: assume that the screen is 72 dpi.
//int pixelHeight = (int) (((float)pointSize / 720.0) * 72.0) ;
//int pixelHeight = (int) ((float)pointSize / 10.0) ;
-
+
GR_LOGFONT logFont;
logFont.lfHeight = pixelHeight;
logFont.lfWidth = 0;
fontInfo->fid = GrCreateFont((GR_CHAR*) facename.c_str(), pixelHeight, & logFont);
GrGetFontInfo(fontInfo->fid, & fontInfo->info);
return (wxNativeFont) fontInfo;
-
+
#else
wxString fontSpec;
if (!facename.IsEmpty())
g_fontHash = (wxHashTable *)NULL;
}
-#endif
- // not GTK 2.0
+#endif // GTK 2.0/1.x
+