X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ce5d92e15071d65b430f11efa548076beeb9673c..bcf324bebe65cd7ee49c139533ceea52dceb4b91:/src/gtk1/font.cpp diff --git a/src/gtk1/font.cpp b/src/gtk1/font.cpp index a926b22363..8257f5bf64 100644 --- a/src/gtk1/font.cpp +++ b/src/gtk1/font.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/gtk/font.cpp +// Name: src/gtk1/font.cpp // Purpose: // Author: Robert Roebling // Id: $Id$ @@ -24,11 +24,11 @@ #include "wx/log.h" #include "wx/settings.h" #include "wx/cmndata.h" + #include "wx/gdicmn.h" #endif #include "wx/fontutil.h" #include "wx/utils.h" -#include "wx/gdicmn.h" #include "wx/tokenzr.h" #include @@ -54,14 +54,14 @@ WX_DECLARE_HASH_MAP(int, GdkFont *, wxIntegerHash, wxIntegerEqual, // wxFontRefData // ---------------------------------------------------------------------------- -class wxFontRefData : public wxObjectRefData +class wxFontRefData : public wxGDIRefData { public: // from broken down font parameters, also default ctor wxFontRefData(int size = -1, - int family = wxFONTFAMILY_DEFAULT, - int style = wxFONTSTYLE_NORMAL, - int weight = wxFONTWEIGHT_NORMAL, + wxFontFamily family = wxFONTFAMILY_DEFAULT, + wxFontStyle style = wxFONTSTYLE_NORMAL, + wxFontWeight weight = wxFONTWEIGHT_NORMAL, bool underlined = false, const wxString& faceName = wxEmptyString, wxFontEncoding encoding = wxFONTENCODING_DEFAULT); @@ -84,11 +84,11 @@ public: // setters: all of them also take care to modify m_nativeFontInfo if we // have it so as to not lose the information not carried by our fields void SetPointSize(int pointSize); - void SetFamily(int family); - void SetStyle(int style); - void SetWeight(int weight); + void SetFamily(wxFontFamily family); + void SetStyle(wxFontStyle style); + void SetWeight(wxFontWeight weight); void SetUnderlined(bool underlined); - void SetFaceName(const wxString& facename); + bool SetFaceName(const wxString& facename); void SetEncoding(wxFontEncoding encoding); void SetNoAntiAliasing( bool no = true ) { m_noAA = no; } @@ -120,9 +120,9 @@ public: protected: // common part of all ctors void Init(int pointSize, - int family, - int style, - int weight, + wxFontFamily family, + wxFontStyle style, + wxFontWeight weight, bool underlined, const wxString& faceName, wxFontEncoding encoding); @@ -138,9 +138,9 @@ private: wxScaledFontList m_scaled_xfonts; int m_pointSize; - int m_family, - m_style, - m_weight; + wxFontFamily m_family; + wxFontStyle m_style; + wxFontWeight m_weight; bool m_underlined; wxString m_faceName; wxFontEncoding m_encoding; // Unused under GTK 2.0 @@ -153,14 +153,16 @@ private: friend class wxFont; }; +#define M_FONTDATA ((wxFontRefData*)m_refData) + // ---------------------------------------------------------------------------- // wxFontRefData // ---------------------------------------------------------------------------- void wxFontRefData::Init(int pointSize, - int family, - int style, - int weight, + wxFontFamily family, + wxFontStyle style, + wxFontWeight weight, bool underlined, const wxString& faceName, wxFontEncoding encoding) @@ -213,8 +215,8 @@ void wxFontRefData::InitFromNative() } } - switch ( wxToupper(*m_nativeFontInfo. - GetXFontComponent(wxXLFD_SLANT).c_str()) ) + switch ( wxToupper(m_nativeFontInfo. + GetXFontComponent(wxXLFD_SLANT)[0u]).GetValue() ) { case _T('I'): // italique m_style = wxFONTSTYLE_ITALIC; @@ -289,7 +291,7 @@ void wxFontRefData::InitFromNative() } wxFontRefData::wxFontRefData( const wxFontRefData& data ) - : wxObjectRefData() + : wxGDIRefData() { m_pointSize = data.m_pointSize; m_family = data.m_family; @@ -309,8 +311,8 @@ wxFontRefData::wxFontRefData( const wxFontRefData& data ) m_nativeFontInfo.FromString(data.m_nativeFontInfo.ToString()); } -wxFontRefData::wxFontRefData(int size, int family, int style, - int weight, bool underlined, +wxFontRefData::wxFontRefData(int size, wxFontFamily family, wxFontStyle style, + wxFontWeight weight, bool underlined, const wxString& faceName, wxFontEncoding encoding) { @@ -363,14 +365,14 @@ void wxFontRefData::SetPointSize(int pointSize) } } -void wxFontRefData::SetFamily(int family) +void wxFontRefData::SetFamily(wxFontFamily family) { m_family = family; // TODO: what are we supposed to do with m_nativeFontInfo here? } -void wxFontRefData::SetStyle(int style) +void wxFontRefData::SetStyle(wxFontStyle style) { m_style = style; @@ -399,7 +401,7 @@ void wxFontRefData::SetStyle(int style) } } -void wxFontRefData::SetWeight(int weight) +void wxFontRefData::SetWeight(wxFontWeight weight) { m_weight = weight; @@ -436,7 +438,7 @@ void wxFontRefData::SetUnderlined(bool underlined) // the XLFD doesn't have "underlined" field anyhow } -void wxFontRefData::SetFaceName(const wxString& facename) +bool wxFontRefData::SetFaceName(const wxString& facename) { m_faceName = facename; @@ -444,6 +446,8 @@ void wxFontRefData::SetFaceName(const wxString& facename) { m_nativeFontInfo.SetXFontComponent(wxXLFD_FAMILY, facename); } + + return true; } void wxFontRefData::SetEncoding(wxFontEncoding encoding) @@ -484,9 +488,9 @@ wxFont::wxFont(const wxNativeFontInfo& info) } bool wxFont::Create( int pointSize, - int family, - int style, - int weight, + wxFontFamily family, + wxFontStyle style, + wxFontWeight weight, bool underlined, const wxString& face, wxFontEncoding encoding) @@ -532,6 +536,16 @@ wxFont::~wxFont() { } +wxGDIRefData *wxFont::CreateGDIRefData() const +{ + return new wxFontRefData; +} + +wxGDIRefData *wxFont::CloneGDIRefData(const wxGDIRefData *data) const +{ + return new wxFontRefData(*static_cast(data)); +} + // ---------------------------------------------------------------------------- // accessors // ---------------------------------------------------------------------------- @@ -540,67 +554,35 @@ int wxFont::GetPointSize() const { wxCHECK_MSG( Ok(), 0, wxT("invalid font") ); -#if wxUSE_PANGO - return M_FONTDATA->HasNativeFont() ? M_FONTDATA->m_nativeFontInfo.GetPointSize() - : M_FONTDATA->m_pointSize; -#else return M_FONTDATA->m_pointSize; -#endif } wxString wxFont::GetFaceName() const { wxCHECK_MSG( Ok(), wxEmptyString, wxT("invalid font") ); -#if wxUSE_PANGO - return M_FONTDATA->HasNativeFont() ? M_FONTDATA->m_nativeFontInfo.GetFaceName() - : M_FONTDATA->m_faceName; -#else return M_FONTDATA->m_faceName; -#endif } -int wxFont::GetFamily() const +wxFontFamily wxFont::GetFamily() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid font") ); - -#if wxUSE_PANGO - int ret = M_FONTDATA->m_family; - if (M_FONTDATA->HasNativeFont()) - // wxNativeFontInfo::GetFamily is expensive, must not call more than once - ret = M_FONTDATA->m_nativeFontInfo.GetFamily(); + wxCHECK_MSG( Ok(), wxFONTFAMILY_MAX, wxT("invalid font") ); - if (ret == wxFONTFAMILY_DEFAULT) - ret = M_FONTDATA->m_family; - - return ret; -#else return M_FONTDATA->m_family; -#endif } -int wxFont::GetStyle() const +wxFontStyle wxFont::GetStyle() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid font") ); + wxCHECK_MSG( Ok(), wxFONTSTYLE_MAX, wxT("invalid font") ); -#if wxUSE_PANGO - return M_FONTDATA->HasNativeFont() ? M_FONTDATA->m_nativeFontInfo.GetStyle() - : M_FONTDATA->m_style; -#else return M_FONTDATA->m_style; -#endif } -int wxFont::GetWeight() const +wxFontWeight wxFont::GetWeight() const { - wxCHECK_MSG( Ok(), 0, wxT("invalid font") ); + wxCHECK_MSG( Ok(), wxFONTWEIGHT_MAX, wxT("invalid font") ); -#if wxUSE_PANGO - return M_FONTDATA->HasNativeFont() ? M_FONTDATA->m_nativeFontInfo.GetWeight() - : M_FONTDATA->m_weight; -#else return M_FONTDATA->m_weight; -#endif } bool wxFont::GetUnderlined() const @@ -627,7 +609,7 @@ bool wxFont::GetNoAntiAliasing() const const wxNativeFontInfo *wxFont::GetNativeFontInfo() const { - wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") ); + wxCHECK_MSG( Ok(), NULL, wxT("invalid font") ); if ( !M_FONTDATA->HasNativeFont() ) { @@ -667,32 +649,33 @@ void wxFont::SetPointSize(int pointSize) M_FONTDATA->SetPointSize(pointSize); } -void wxFont::SetFamily(int family) +void wxFont::SetFamily(wxFontFamily family) { Unshare(); M_FONTDATA->SetFamily(family); } -void wxFont::SetStyle(int style) +void wxFont::SetStyle(wxFontStyle style) { Unshare(); M_FONTDATA->SetStyle(style); } -void wxFont::SetWeight(int weight) +void wxFont::SetWeight(wxFontWeight weight) { Unshare(); M_FONTDATA->SetWeight(weight); } -void wxFont::SetFaceName(const wxString& faceName) +bool wxFont::SetFaceName(const wxString& faceName) { Unshare(); - M_FONTDATA->SetFaceName(faceName); + return M_FONTDATA->SetFaceName(faceName) && + wxFontBase::SetFaceName(faceName); } void wxFont::SetUnderlined(bool underlined) @@ -727,7 +710,7 @@ void wxFont::SetNoAntiAliasing( bool no ) // get internal representation of font // ---------------------------------------------------------------------------- -static GdkFont *g_systemDefaultGuiFont = (GdkFont*) NULL; +static GdkFont *g_systemDefaultGuiFont = NULL; // this is also used from tbargtk.cpp and tooltip.cpp, hence extern extern GdkFont *GtkGetDefaultGuiFont() @@ -759,7 +742,7 @@ extern GdkFont *GtkGetDefaultGuiFont() GdkFont *wxFont::GetInternalFont( float scale ) const { - GdkFont *font = (GdkFont *) NULL; + GdkFont *font = NULL; wxCHECK_MSG( Ok(), font, wxT("invalid font") );