]> git.saurik.com Git - wxWidgets.git/commitdiff
miscellaneous wxFont enhancements (patch 1496606):
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 29 May 2006 00:03:36 +0000 (00:03 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 29 May 2006 00:03:36 +0000 (00:03 +0000)
- made SetFaceName() bool and return false if the face name is not available
- corrected To/FromUserString() to complement each other

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39411 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

31 files changed:
docs/latex/wx/font.tex
docs/latex/wx/fontenum.tex
include/wx/cocoa/font.h
include/wx/font.h
include/wx/fontenum.h
include/wx/fontutil.h
include/wx/gtk/font.h
include/wx/gtk1/font.h
include/wx/mac/carbon/font.h
include/wx/mac/classic/font.h
include/wx/mgl/font.h
include/wx/motif/font.h
include/wx/msw/font.h
include/wx/os2/font.h
include/wx/palmos/font.h
include/wx/x11/font.h
samples/font/font.cpp
src/cocoa/font.cpp
src/common/fontcmn.cpp
src/common/fontenumcmn.cpp
src/gtk/font.cpp
src/gtk1/font.cpp
src/mac/carbon/font.cpp
src/mac/classic/font.cpp
src/mgl/font.cpp
src/motif/font.cpp
src/msw/font.cpp
src/os2/font.cpp
src/palmos/font.cpp
src/unix/fontutil.cpp
src/x11/font.cpp

index 0f74d6c2dbe546b47d013ff469c85f6d6a4bd984..5561188f3d85932380424b5c38ece61789161c53 100644 (file)
@@ -304,8 +304,8 @@ family identifiers.
 
 \constfunc{wxString}{GetNativeFontInfoDesc}{\void}
 
-Returns the platform-dependent string completely describing this font or an
-empty string if the font wasn't constructed using the native font description.
+Returns the platform-dependent string completely describing this font.
+Returned string is always non-empty.
 Note that the returned string is not meant to be shown or edited by the user: a typical
 use of this function is for serializing in string-form a wxFont object.
 
@@ -318,7 +318,8 @@ use of this function is for serializing in string-form a wxFont object.
 
 \func{wxString}{GetNativeFontInfoUserDesc}{\void}
 
-Returns a user-friendly string for this font object. Some examples of the formats of returned strings (which are platform-dependent) are in \helpref{SetNativeFontInfoUserDesc}{wxfontsetnativefontinfouserdesc}.
+Returns a user-friendly string for this font object. Returned string is always non-empty.
+Some examples of the formats of returned strings (which are platform-dependent) are in \helpref{SetNativeFontInfoUserDesc}{wxfontsetnativefontinfouserdesc}.
 
 \wxheading{See also}
 
@@ -417,9 +418,10 @@ Sets the default font encoding.
 
 \membersection{wxFont::SetFaceName}\label{wxfontsetfacename}
 
-\func{void}{SetFaceName}{\param{const wxString\& }{faceName}}
+\func{bool}{SetFaceName}{\param{const wxString\& }{faceName}}
 
 Sets the facename for the font.
+Returns \true if the given face name exists; \false otherwise.
 
 \wxheading{Parameters}
 
@@ -465,9 +467,10 @@ Sets the font family.
 
 \membersection{wxFont::SetNativeFontInfo}\label{wxfontsetnativefontinfo}
 
-\func{void}{SetNativeFontInfo}{\param{const wxString\& }{info}}
+\func{bool}{SetNativeFontInfo}{\param{const wxString\& }{info}}
 
-Creates the font corresponding to the given native font description string
+Creates the font corresponding to the given native font description string and returns \true if
+the creation was successful.
 which must have been previously returned by
 \helpref{GetNativeFontInfoDesc}{wxfontgetnativefontinfodesc}. If the string is
 invalid, font is unchanged. This function is typically used for de-serializing a wxFont
@@ -480,9 +483,10 @@ object previously saved in a string-form.
 
 \membersection{wxFont::SetNativeFontInfoUserDesc}\label{wxfontsetnativefontinfouserdesc}
 
-\func{void}{SetNativeFontInfoUserDesc}{\param{const wxString\& }{info}}
+\func{bool}{SetNativeFontInfoUserDesc}{\param{const wxString\& }{info}}
 
-Creates the font corresponding to the given native font description string.
+Creates the font corresponding to the given native font description string and returns \true if
+the creation was successful.
 Unlike \helpref{SetNativeFontInfo}{wxfontsetnativefontinfo}, this function accepts
 strings which are user-friendly.
 Examples of accepted string formats are:
index 749f1d77b9bee3d2038d7b93a06ce83ccf19bdf9..12f3a90c905ffd4e45a06d51eed9c9f8cc626eae 100644 (file)
@@ -91,6 +91,14 @@ Return array of strings containing all facenames found by
 \helpref{EnumerateFacenames}{wxfontenumeratorenumeratefacenames}.
 
 
+\membersection{wxFontEnumerator::IsValidFacename}\label{wxfontenumeratorisvalidfacename}
+
+\func{static bool}{IsValidFacename}{\param{const wxString \&}{ facename}}
+
+Returns \true if the given string is valid face name, i.e. it's the face name of an installed
+font and it can safely be used with \helpref{wxFont::SetFaceName}{wxfontsetfacename}.
+
+
 \membersection{wxFontEnumerator::OnFacename}\label{wxfontenumeratoronfacename}
 
 \func{virtual bool}{OnFacename}{\param{const wxString\& }{font}}
index c0743e44412354fd637f27d4a3f25cae408f3753..b230ab76a3af308921455f3f0421a590f3a56b59 100644 (file)
@@ -141,7 +141,7 @@ public:
     virtual void SetFamily(int family);
     virtual void SetStyle(int style);
     virtual void SetWeight(int weight);
-    virtual void SetFaceName(const wxString& faceName);
+    virtual bool SetFaceName(const wxString& faceName);
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
index 33f6068e093c0d73f41a3f03d7b1d79f9a918ba2..9ffccef70cc52390cf1dd92db6fd469908117310 100644 (file)
@@ -106,7 +106,7 @@ enum
 // ----------------------------------------------------------------------------
 
 class WXDLLEXPORT wxFontRefData;
-struct WXDLLEXPORT wxNativeFontInfo;
+class WXDLLEXPORT wxNativeFontInfo;
 
 class WXDLLEXPORT wxFontBase : public wxGDIObject
 {
@@ -186,14 +186,14 @@ public:
     virtual void SetFamily( int family ) = 0;
     virtual void SetStyle( int style ) = 0;
     virtual void SetWeight( int weight ) = 0;
-    virtual void SetFaceName( const wxString& faceName ) = 0;
     virtual void SetUnderlined( bool underlined ) = 0;
     virtual void SetEncoding(wxFontEncoding encoding) = 0;
+    virtual bool SetFaceName( const wxString& faceName );
     void SetNativeFontInfo(const wxNativeFontInfo& info)
         { DoSetNativeFontInfo(info); }
 
-    void SetNativeFontInfo(const wxString& info);
-    void SetNativeFontInfoUserDesc(const wxString& info);
+    bool SetNativeFontInfo(const wxString& info);
+    bool SetNativeFontInfoUserDesc(const wxString& info);
 
     // translate the fonts into human-readable string (i.e. GetStyleString()
     // will return "wxITALIC" for an italic font, ...)
index 58218c892db4a988b8ccf9c58d7f686dd2882a52..387081e73d4483e123a188d32a1e529ca706fb5d 100644 (file)
@@ -67,6 +67,10 @@ public:
     // convenience function that returns array of all available encodings.
     static wxArrayString GetEncodings(const wxString& facename = wxEmptyString);
 
+    // convenience function that returns true if the given face name exist
+    // in the user's system
+    static bool IsValidFacename(const wxString &str);
+
 private:
     DECLARE_NO_COPY_CLASS(wxFontEnumerator)
 };
index d2491dcbc534c154f8cd20bb8d7c1910385355f9..00ea14727ff00153dc00b3bf9af84212b55f0d68 100644 (file)
@@ -64,11 +64,9 @@ enum wxXLFDField
 // functions, the user code can only get the objects of this type from
 // somewhere and pass it somewhere else (possibly save them somewhere using
 // ToString() and restore them using FromString())
-//
-// NB: it is a POD currently for max efficiency but if it continues to grow
-//     further it might make sense to make it a real class with virtual methods
-struct WXDLLEXPORT wxNativeFontInfo
+class WXDLLEXPORT wxNativeFontInfo
 {
+public:
 #if wxUSE_PANGO
     PangoFontDescription *description;
 #elif defined(_WX_X_FONTLIKE)
@@ -195,10 +193,17 @@ public:
     void SetStyle(wxFontStyle style);
     void SetWeight(wxFontWeight weight);
     void SetUnderlined(bool underlined);
-    void SetFaceName(const wxString& facename);
+    bool SetFaceName(const wxString& facename);
     void SetFamily(wxFontFamily family);
     void SetEncoding(wxFontEncoding encoding);
 
+    // sets the first facename in the given array which is found
+    // to be valid. If no valid facename is given, sets the
+    // first valid facename returned by wxFontEnumerator::GetFacenames().
+    // Does not return a bool since it cannot fail.
+    void SetFaceName(const wxArrayString &facenames);
+
+
     // it is important to be able to serialize wxNativeFontInfo objects to be
     // able to store them (in config file, for example)
     bool FromString(const wxString& s);
index 1f2840764b92ea1930fbd0b51ce11f1486a106cc..7e597c249bda6348ac734c8be42582102f280e8c 100644 (file)
@@ -78,7 +78,7 @@ public:
     virtual void SetFamily( int family );
     virtual void SetStyle( int style );
     virtual void SetWeight( int weight );
-    virtual void SetFaceName( const wxString& faceName );
+    virtual bool SetFaceName( const wxString& faceName );
     virtual void SetUnderlined( bool underlined );
     virtual void SetEncoding(wxFontEncoding encoding);
 
index ca0c71af87b29754e6363a4cffb20ff0202d9290..e6033d971a1cebbd89c390cb1affefbd7df6878f 100644 (file)
@@ -79,7 +79,7 @@ public:
     virtual void SetFamily( int family );
     virtual void SetStyle( int style );
     virtual void SetWeight( int weight );
-    virtual void SetFaceName( const wxString& faceName );
+    virtual bool SetFaceName( const wxString& faceName );
     virtual void SetUnderlined( bool underlined );
     virtual void SetEncoding(wxFontEncoding encoding);
 
index f513354e3545b43a03066b7efee561ed6674e4b6..352a9a79f88012a62afb4e64afa28e71f7a8d526 100644 (file)
@@ -68,7 +68,7 @@ public:
     virtual void SetFamily(int family);
     virtual void SetStyle(int style);
     virtual void SetWeight(int weight);
-    virtual void SetFaceName(const wxString& faceName);
+    virtual bool SetFaceName(const wxString& faceName);
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
index 4fdbfef39805faaa6568a6205d6a7f8654f66caa..07e8f7107a9ba2cd076fcb5073d76b40aecfb90c 100644 (file)
@@ -66,7 +66,7 @@ public:
     virtual void SetFamily(int family);
     virtual void SetStyle(int style);
     virtual void SetWeight(int weight);
-    virtual void SetFaceName(const wxString& faceName);
+    virtual bool SetFaceName(const wxString& faceName);
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
index 2437ede286ca611e885ce0bb422572193df07069..3f748c413a847e7dd66f1ebb7294285caa84b4bd 100644 (file)
@@ -75,7 +75,7 @@ public:
     virtual void SetFamily(int family);
     virtual void SetStyle(int style);
     virtual void SetWeight(int weight);
-    virtual void SetFaceName(const wxString& faceName);
+    virtual bool SetFaceName(const wxString& faceName);
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
index 3c7fb4b05c4e55b77a2aa7f1a29d281466d6c5d1..4fb5e08a3d72b7d4fa57206c3e2a757d1b7499e2 100644 (file)
@@ -71,7 +71,7 @@ public:
     virtual void SetFamily(int family);
     virtual void SetStyle(int style);
     virtual void SetWeight(int weight);
-    virtual void SetFaceName(const wxString& faceName);
+    virtual bool SetFaceName(const wxString& faceName);
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
index c94d02a71c67c79cc68e4896309ec996ac1a0fc4..4ad4c115266473d6a3772517a4bbd008a1e220a8 100644 (file)
@@ -82,6 +82,10 @@ public:
 
     virtual ~wxFont();
 
+    // wxFontBase overridden functions
+    virtual wxString GetNativeFontInfoDesc() const;
+    virtual wxString GetNativeFontInfoUserDesc() const;
+
     // implement base class pure virtuals
     virtual int GetPointSize() const;
     virtual wxSize GetPixelSize() const;
@@ -99,7 +103,7 @@ public:
     virtual void SetFamily(int family);
     virtual void SetStyle(int style);
     virtual void SetWeight(int weight);
-    virtual void SetFaceName(const wxString& faceName);
+    virtual bool SetFaceName(const wxString& faceName);
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
index ba851805133f61fdd7ab82fae6dcb60be42e59f8..08e7ade7e3082f4027fdc16286ea6bb742f9d8ec 100644 (file)
@@ -88,7 +88,7 @@ public:
     virtual void SetFamily(int nFamily);
     virtual void SetStyle(int nStyle);
     virtual void SetWeight(int nWeight);
-    virtual void SetFaceName(const wxString& rsFaceName);
+    virtual bool SetFaceName(const wxString& rsFaceName);
     virtual void SetUnderlined(bool bUnderlined);
     virtual void SetEncoding(wxFontEncoding vEncoding);
 
index 146e45eeffb4ae0c2977d089f60c6d267d18ef0b..31fc7dba5ddcb0d21bd07ca1d8363a4653cd7138 100644 (file)
@@ -99,7 +99,7 @@ public:
     virtual void SetFamily(int family);
     virtual void SetStyle(int style);
     virtual void SetWeight(int weight);
-    virtual void SetFaceName(const wxString& faceName);
+    virtual bool SetFaceName(const wxString& faceName);
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
index fa9d1c9edb10f0c1ec4fb3024fbacd23730e3ceb..2e8a80258c5d345f6e92e271cb961de85fc1addf 100644 (file)
@@ -69,7 +69,7 @@ public:
     virtual void SetFamily(int family);
     virtual void SetStyle(int style);
     virtual void SetWeight(int weight);
-    virtual void SetFaceName(const wxString& faceName);
+    virtual bool SetFaceName(const wxString& faceName);
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
index 8203a16d6425295a45553eae375e177185bbf281..7fe8717618c9950c58bbe08d9b7585c3a93ade9a 100644 (file)
@@ -112,6 +112,8 @@ public:
     void OnEnumerateEncodings(wxCommandEvent& event);
 
     void OnCheckNativeToFromString(wxCommandEvent& event);
+    void OnCheckNativeToFromUserString(wxCommandEvent& event);
+    void OnCheckFaceName(wxCommandEvent& event);
 
 protected:
     bool DoEnumerateFamilies(bool fixedWidthOnly,
@@ -159,6 +161,8 @@ enum
     Font_EnumFixedFamilies,
     Font_EnumEncodings,
     Font_CheckNativeToFromString,
+    Font_CheckNativeToFromUserString,
+    Font_CheckFaceName,
     Font_Max
 };
 
@@ -185,7 +189,10 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(Font_wxITALIC_FONT, MyFrame::OnwxPointerFont)
     EVT_MENU(Font_wxSWISS_FONT, MyFrame::OnwxPointerFont)
 
+
     EVT_MENU(Font_CheckNativeToFromString, MyFrame::OnCheckNativeToFromString)
+    EVT_MENU(Font_CheckNativeToFromUserString, MyFrame::OnCheckNativeToFromUserString)
+    EVT_MENU(Font_CheckFaceName, MyFrame::OnCheckFaceName)
 
     EVT_MENU(Font_Choose, MyFrame::OnSelectFont)
     EVT_MENU(Font_EnumFamiliesForEncoding, MyFrame::OnEnumerateFamiliesForEncoding)
@@ -260,6 +267,10 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
     menuFont->AppendSeparator();
     menuFont->Append(Font_CheckNativeToFromString,
                      wxT("Check Native Font Info To/From String"));
+    menuFont->Append(Font_CheckNativeToFromUserString,
+                     wxT("Check Native Font Info User String"));
+    menuFont->Append(Font_CheckFaceName,
+                     wxT("Check font face name"));                     
 
     wxMenu *menuSelect = new wxMenu;
     menuSelect->Append(Font_Choose, wxT("&Select font...\tCtrl-S"),
@@ -488,6 +499,53 @@ void MyFrame::OnCheckNativeToFromString(wxCommandEvent& WXUNUSED(event))
      }
 }
 
+void MyFrame::OnCheckFaceName(wxCommandEvent& WXUNUSED(event))
+{
+    wxString facename = GetCanvas()->GetTextFont().GetFaceName();
+    wxString newFaceName = wxGetTextFromUser(
+            wxT("Here you can edit current font face name."),
+            wxT("Input font facename"), facename,
+            this);
+    if (newFaceName.IsEmpty())
+        return;     // user clicked "Cancel" - do nothing
+
+    wxFont font(GetCanvas()->GetTextFont());
+    if (font.SetFaceName(newFaceName))      // change facename only
+    {
+        wxASSERT_MSG(font.Ok(), wxT("The font should now be valid"));
+        DoChangeFont(font);
+    }
+    else
+    {
+        wxASSERT_MSG(!font.Ok(), wxT("The font should now be invalid"));
+        wxMessageBox(wxT("There is no font with such face name..."),
+                     wxT("Invalid face name"), wxOK|wxICON_ERROR, this);
+    }    
+}
+
+void MyFrame::OnCheckNativeToFromUserString(wxCommandEvent& WXUNUSED(event))
+{
+    wxString fontdesc = GetCanvas()->GetTextFont().GetNativeFontInfoUserDesc();
+    wxString fontUserInfo = wxGetTextFromUser(
+            wxT("Here you can edit current font description"),
+            wxT("Input font description"), fontdesc,
+            this);
+    if (fontUserInfo.IsEmpty())
+        return;     // user clicked "Cancel" - do nothing
+
+    wxFont font;
+    if (font.SetNativeFontInfoUserDesc(fontUserInfo))
+    {
+        wxASSERT_MSG(font.Ok(), wxT("The font should now be valid"));
+        DoChangeFont(font);
+    }
+    else
+    {
+        wxASSERT_MSG(!font.Ok(), wxT("The font should now be invalid"));
+        wxMessageBox(wxT("Error trying to create a font with such description..."));
+    }
+}
+
 void MyFrame::DoResizeFont(int diff)
 {
     wxFont font = m_canvas->GetTextFont();
@@ -533,10 +591,6 @@ void MyFrame::OnwxPointerFont(wxCommandEvent& event)
         default                 : font = wxFont(*wxNORMAL_FONT); break;
     }
 
-    GetMenuBar()->Check(Font_Bold, false);
-    GetMenuBar()->Check(Font_Italic, false);
-    GetMenuBar()->Check(Font_Underlined, false);
-
     DoChangeFont(font);
 }
 
@@ -550,6 +604,15 @@ void MyFrame::DoChangeFont(const wxFont& font, const wxColour& col)
     m_textctrl->SetFont(font);
     if ( col.Ok() )
         m_textctrl->SetForegroundColour(col);
+
+    // update the state of the bold/italic/underlined menu items
+    wxMenuBar *mbar = GetMenuBar();
+    if ( mbar )
+    {
+        mbar->Check(Font_Bold, font.GetWeight() == wxFONTWEIGHT_BOLD);
+        mbar->Check(Font_Italic, font.GetStyle() == wxFONTSTYLE_ITALIC);
+        mbar->Check(Font_Underlined, font.GetUnderlined());
+    }
 }
 
 void MyFrame::OnSelectFont(wxCommandEvent& WXUNUSED(event))
@@ -566,15 +629,6 @@ void MyFrame::OnSelectFont(wxCommandEvent& WXUNUSED(event))
         wxColour colour = retData.GetColour();
 
         DoChangeFont(font, colour);
-
-        // update the state of the bold/italic/underlined menu items
-        wxMenuBar *mbar = GetMenuBar();
-        if ( mbar )
-        {
-            mbar->Check(Font_Bold, font.GetWeight() == wxFONTWEIGHT_BOLD);
-            mbar->Check(Font_Italic, font.GetStyle() == wxFONTSTYLE_ITALIC);
-            mbar->Check(Font_Underlined, font.GetUnderlined());
-        }
     }
 }
 
index c8aa187d02a88996eb5cdb92c69984a81e4cf29f..606e2e3d726e435a14a2f4f5dfe0da8747b377c6 100644 (file)
@@ -160,13 +160,15 @@ void wxFont::SetWeight(int weight)
     RealizeResource();
 }
 
-void wxFont::SetFaceName(const wxString& faceName)
+bool wxFont::SetFaceName(const wxString& faceName)
 {
     Unshare();
 
     M_FONTDATA->m_faceName = faceName;
 
     RealizeResource();
+
+    return wxFontBase::SetFaceName(faceName);
 }
 
 void wxFont::SetUnderlined(bool underlined)
index 29bce8a1eb5049ce47afcb1bccf7f0659e0619c6..2857fa71b815e14f391326c1d34550a1a87ad557 100644 (file)
@@ -41,6 +41,7 @@
 
 #include "wx/fontutil.h" // for wxNativeFontInfo
 #include "wx/fontmap.h"
+#include "wx/fontenum.h"
 
 #include "wx/tokenzr.h"
 
@@ -266,6 +267,11 @@ wxString wxFontBase::GetNativeFontInfoDesc() const
     if ( fontInfo )
     {
         fontDesc = fontInfo->ToString();
+        wxASSERT_MSG(!fontDesc.IsEmpty(), wxT("This should be a non-empty string!"));
+    }
+    else
+    {
+        wxASSERT_MSG(0, wxT("Derived class should have created the wxNativeFontInfo!"));
     }
 
     return fontDesc;
@@ -278,27 +284,40 @@ wxString wxFontBase::GetNativeFontInfoUserDesc() const
     if ( fontInfo )
     {
         fontDesc = fontInfo->ToUserString();
+        wxASSERT_MSG(!fontDesc.IsEmpty(), wxT("This should be a non-empty string!"));
+    }
+    else
+    {
+        wxASSERT_MSG(0, wxT("Derived class should have created the wxNativeFontInfo!"));
     }
 
     return fontDesc;
 }
 
-void wxFontBase::SetNativeFontInfo(const wxString& info)
+bool wxFontBase::SetNativeFontInfo(const wxString& info)
 {
     wxNativeFontInfo fontInfo;
     if ( !info.empty() && fontInfo.FromString(info) )
     {
         SetNativeFontInfo(fontInfo);
+        return true;
     }
+
+    UnRef();
+    return false;
 }
 
-void wxFontBase::SetNativeFontInfoUserDesc(const wxString& info)
+bool wxFontBase::SetNativeFontInfoUserDesc(const wxString& info)
 {
     wxNativeFontInfo fontInfo;
     if ( !info.empty() && fontInfo.FromUserString(info) )
     {
         SetNativeFontInfo(fontInfo);
+        return true;
     }
+
+    UnRef();
+    return false;
 }
 
 bool wxFontBase::operator==(const wxFont& font) const
@@ -313,7 +332,7 @@ bool wxFontBase::operator==(const wxFont& font) const
             GetStyle() == font.GetStyle() &&
             GetWeight() == font.GetWeight() &&
             GetUnderlined() == font.GetUnderlined() &&
-            GetFaceName() == font.GetFaceName() &&
+            GetFaceName().IsSameAs(font.GetFaceName(), false) &&
             GetEncoding() == font.GetEncoding()
            );
 }
@@ -365,10 +384,41 @@ wxString wxFontBase::GetWeightString() const
     }
 }
 
+bool wxFontBase::SetFaceName(const wxString &facename)
+{
+    if (!wxFontEnumerator::IsValidFacename(facename))
+    {
+        UnRef();        // make Ok() return false
+        return false;
+    }
+
+    return true;
+}
+
+
 // ----------------------------------------------------------------------------
 // wxNativeFontInfo
 // ----------------------------------------------------------------------------
 
+// Up to now, there are no native implementations of this function:
+void wxNativeFontInfo::SetFaceName(const wxArrayString &facenames)
+{
+    for (size_t i=0; i < facenames.GetCount(); i++)
+    {
+        if (wxFontEnumerator::IsValidFacename(facenames[i]))
+        {
+            SetFaceName(facenames[i]);
+            return;
+        }
+    }
+
+    // set the first valid facename we can find on this system
+    wxString validfacename = wxFontEnumerator::GetFacenames().Item(0);
+    wxLogTrace(wxT("font"), wxT("Falling back to '%s'"), validfacename.c_str());
+    SetFaceName(validfacename);
+}
+
+
 #ifdef wxNO_NATIVE_FONTINFO
 
 // These are the generic forms of FromString()/ToString.
@@ -510,9 +560,10 @@ void wxNativeFontInfo::SetUnderlined(bool underlined_)
     underlined = underlined_;
 }
 
-void wxNativeFontInfo::SetFaceName(const wxString& facename_)
+bool wxNativeFontInfo::SetFaceName(const wxString& facename_)
 {
     faceName = facename_;
+    return true;
 }
 
 void wxNativeFontInfo::SetFamily(wxFontFamily family_)
@@ -542,7 +593,7 @@ wxString wxNativeFontInfo::ToUserString() const
     // but what else can we do?
     if ( GetUnderlined() )
     {
-        desc << _("underlined ");
+        desc << _("underlined");
     }
 
     switch ( GetWeight() )
@@ -555,11 +606,11 @@ wxString wxNativeFontInfo::ToUserString() const
             break;
 
         case wxFONTWEIGHT_LIGHT:
-            desc << _("light ");
+            desc << _(" light");
             break;
 
         case wxFONTWEIGHT_BOLD:
-            desc << _("bold ");
+            desc << _(" bold");
             break;
     }
 
@@ -575,7 +626,7 @@ wxString wxNativeFontInfo::ToUserString() const
             // we don't distinguish between the two for now anyhow...
         case wxFONTSTYLE_ITALIC:
         case wxFONTSTYLE_SLANT:
-            desc << _("italic");
+            desc << _(" italic");
             break;
     }
 
@@ -599,7 +650,7 @@ wxString wxNativeFontInfo::ToUserString() const
     }
 #endif // wxUSE_FONTMAP
 
-    return desc;
+    return desc.Strip(wxString::both).MakeLower();
 }
 
 bool wxNativeFontInfo::FromUserString(const wxString& s)
@@ -614,10 +665,7 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
 
     wxString face;
     unsigned long size;
-
-#if wxUSE_FONTMAP
-    wxFontEncoding encoding;
-#endif // wxUSE_FONTMAP
+    bool weightfound = false, pointsizefound = false, encodingfound = false;
 
     while ( tokenizer.HasMoreTokens() )
     {
@@ -634,10 +682,12 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
         else if ( token == _T("light") || token == _("light") )
         {
             SetWeight(wxFONTWEIGHT_LIGHT);
+            weightfound = true;
         }
         else if ( token == _T("bold") || token == _("bold") )
         {
             SetWeight(wxFONTWEIGHT_BOLD);
+            weightfound = true;
         }
         else if ( token == _T("italic") || token == _("italic") )
         {
@@ -646,16 +696,24 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
         else if ( token.ToULong(&size) )
         {
             SetPointSize(size);
+            pointsizefound = true;
         }
+        else
+        {
 #if wxUSE_FONTMAP
-        else if ( (encoding = wxFontMapper::Get()->CharsetToEncoding(token, false))
-                    != wxFONTENCODING_DEFAULT )
+            // try to interpret this as an encoding
+            wxFontEncoding encoding = wxFontMapper::Get()->CharsetToEncoding(token, false);
+            if ( encoding != wxFONTENCODING_DEFAULT &&
+                 encoding != wxFONTENCODING_SYSTEM )    // returned when the recognition failed
         {
             SetEncoding(encoding);
+                encodingfound = true;
         }
-#endif // wxUSE_FONTMAP
-        else // assume it is the face name
+            else
         {
+#endif // wxUSE_FONTMAP
+
+                // assume it is the face name
             if ( !face.empty() )
             {
                 face += _T(' ');
@@ -665,6 +723,10 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
 
             // skip the code which resets face below
             continue;
+
+#if wxUSE_FONTMAP
+        }
+#endif // wxUSE_FONTMAP
         }
 
         // if we had had the facename, we shouldn't continue appending tokens
@@ -672,7 +734,12 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
         // bar")
         if ( !face.empty() )
         {
-            SetFaceName(face);
+            // NB: the check on the facename is implemented in wxFontBase::SetFaceName
+            //     and not in wxNativeFontInfo::SetFaceName thus we need to explicitely
+            //     call here wxFontEnumerator::IsValidFacename
+            if (!wxFontEnumerator::IsValidFacename(face) ||
+                !SetFaceName(face))
+                SetFaceName(wxNORMAL_FONT->GetFaceName());
             face.clear();
         }
     }
@@ -680,9 +747,28 @@ bool wxNativeFontInfo::FromUserString(const wxString& s)
     // we might not have flushed it inside the loop
     if ( !face.empty() )
     {
-        SetFaceName(face);
+        // NB: the check on the facename is implemented in wxFontBase::SetFaceName
+        //     and not in wxNativeFontInfo::SetFaceName thus we need to explicitely
+        //     call here wxFontEnumerator::IsValidFacename
+        if (!wxFontEnumerator::IsValidFacename(face) ||
+            !SetFaceName(face))
+            SetFaceName(wxNORMAL_FONT->GetFaceName());
     }
 
+    // set point size to default value if size was not given
+    if ( !pointsizefound )
+        SetPointSize(wxNORMAL_FONT->GetPointSize());
+
+    // set font weight to default value if weight was not given
+    if ( !weightfound )
+        SetWeight(wxFONTWEIGHT_NORMAL);
+
+#if wxUSE_FONTMAP
+    // set font encoding to default value if encoding was not given
+    if ( !encodingfound )
+        SetEncoding(wxFONTENCODING_SYSTEM);
+#endif // wxUSE_FONTMAP
+
     return true;
 }
 
index f06fcf1269dd97786e7a1e5aa55a3e294cd9f507..fb57dd9104bab4a173b26d4319fa1f1538ac7910 100644 (file)
@@ -72,3 +72,31 @@ wxArrayString wxFontEnumerator::GetEncodings(const wxString& facename)
     temp.EnumerateEncodings(facename);
     return temp.m_arrEncodings;
 }
+
+/* static */
+bool wxFontEnumerator::IsValidFacename(const wxString &facename)
+{
+    // we cache the result of wxFontEnumerator::GetFacenames supposing that
+    // the array of face names won't change in the session of this program
+    static wxArrayString s_arr = wxFontEnumerator::GetFacenames();
+
+#ifdef __WXMSW__
+    // Quoting the MSDN:
+    //     "MS Shell Dlg is a mapping mechanism that enables 
+    //     U.S. English Microsoft Windows NT, and Microsoft Windows 2000 to 
+    //     support locales that have characters that are not contained in code 
+    //     page 1252. It is not a font but a face name for a nonexistent font."
+    // Thus we need to consider "Ms Shell Dlg" and "Ms Shell Dlg 2" as valid
+    // font face names even if they are enumerated by wxFontEnumerator
+    if (facename.IsSameAs(wxT("Ms Shell Dlg"), false) ||
+        facename.IsSameAs(wxT("Ms Shell Dlg 2"), false))
+        return true;
+#endif
+
+    // is given font face name a valid one ?
+    if (s_arr.Index(facename, false) == wxNOT_FOUND)
+        return false;
+
+    return true;
+}
+
index 6c9e102f31550ed6ee0e7f79c3e3d5366131ba09..ca71f41a55f77446241b47ee26a87e8285ecb2f4 100644 (file)
@@ -88,7 +88,7 @@ public:
     void SetStyle(int style);
     void SetWeight(int 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; }
@@ -321,11 +321,11 @@ 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;
 
-    m_nativeFontInfo.SetFaceName(facename);
+    return m_nativeFontInfo.SetFaceName(facename);
 }
 
 void wxFontRefData::SetEncoding(wxFontEncoding encoding)
@@ -548,11 +548,12 @@ void wxFont::SetWeight(int weight)
     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)
index a926b22363e796fc5323ec0201588a971b480076..ca4044af47e436c9712e7886dd7605b34f52811f 100644 (file)
@@ -88,7 +88,7 @@ public:
     void SetStyle(int style);
     void SetWeight(int 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; }
@@ -436,7 +436,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 +444,8 @@ void wxFontRefData::SetFaceName(const wxString& facename)
     {
         m_nativeFontInfo.SetXFontComponent(wxXLFD_FAMILY, facename);
     }
+
+    return true;
 }
 
 void wxFontRefData::SetEncoding(wxFontEncoding encoding)
@@ -688,11 +690,12 @@ void wxFont::SetWeight(int weight)
     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)
index 9f08a80e6be74628e4decd9645ebf46c97a14205..404b356b05cbb299ab60f6402e057dcff765bf7c 100644 (file)
@@ -473,13 +473,15 @@ void wxFont::SetWeight(int weight)
     RealizeResource();
 }
 
-void wxFont::SetFaceName(const wxString& faceName)
+bool wxFont::SetFaceName(const wxString& faceName)
 {
     Unshare();
 
     M_FONTDATA->m_faceName = faceName;
 
     RealizeResource();
+
+    return wxFontBase::SetFaceName(faceName);
 }
 
 void wxFont::SetUnderlined(bool underlined)
index 09feb155c6fb581a4f1081e8bbe1ae67bc292c71..daad04f0d7d4f99e257f0c9ea4fde73a103425b0 100644 (file)
@@ -339,13 +339,15 @@ void wxFont::SetWeight(int weight)
     RealizeResource();
 }
 
-void wxFont::SetFaceName(const wxString& faceName)
+bool wxFont::SetFaceName(const wxString& faceName)
 {
     Unshare();
 
     M_FONTDATA->m_faceName = faceName;
 
     RealizeResource();
+
+    return wxFontBase::SetFaceName(faceName);
 }
 
 void wxFont::SetUnderlined(bool underlined)
index 2cce8212f1333712be208f42e9a07f52d9762085..ddd6799cc87975ff59b23b28eb0fd4ffe320552c 100644 (file)
@@ -311,12 +311,14 @@ void wxFont::SetWeight(int weight)
     M_FONTDATA->m_valid = false;
 }
 
-void wxFont::SetFaceName(const wxString& faceName)
+bool wxFont::SetFaceName(const wxString& faceName)
 {
     AllocExclusive();
 
     M_FONTDATA->m_faceName = faceName;
     M_FONTDATA->m_valid = false;
+
+    return wxFontBase::SetFaceName(faceName);
 }
 
 void wxFont::SetUnderlined(bool underlined)
index 08f6720b64581a30f2303c061a3fac77d465261d..382fcb71b48dfa50c780bdb0e98a1e5a3841e3b2 100644 (file)
@@ -393,12 +393,14 @@ void wxFont::SetWeight(int weight)
     M_FONTDATA->m_nativeFontInfo.GetXFontName().Clear(); // invalid now
 }
 
-void wxFont::SetFaceName(const wxString& faceName)
+bool wxFont::SetFaceName(const wxString& faceName)
 {
     Unshare();
 
     M_FONTDATA->m_faceName = faceName;
     M_FONTDATA->m_nativeFontInfo.GetXFontName().Clear(); // invalid now
+
+    return wxFontBase::SetFaceName(faceName);
 }
 
 void wxFont::SetUnderlined(bool underlined)
index 059e4bdb59a91d092c0f2ece91b04250a998beab..308a36e837ddbf8b571b007115afcc1418b26ca4 100644 (file)
@@ -256,12 +256,13 @@ public:
             m_weight = weight;
     }
 
-    void SetFaceName(const wxString& faceName)
+    bool SetFaceName(const wxString& faceName)
     {
         if ( m_nativeFontInfoOk )
-            m_nativeFontInfo.SetFaceName(faceName);
-        else
+            return m_nativeFontInfo.SetFaceName(faceName);
+
             m_faceName = faceName;
+        return true;
     }
 
     void SetUnderlined(bool underlined)
@@ -385,12 +386,10 @@ bool wxFontRefData::Alloc(wxFont *font)
     if ( !hfont )
     {
         wxLogLastError(wxT("CreateFont"));
-
         return false;
     }
 
     m_hFont = (WXHFONT)hfont;
-
     return true;
 }
 
@@ -561,42 +560,66 @@ void wxNativeFontInfo::SetUnderlined(bool underlined)
     lf.lfUnderline = underlined;
 }
 
-void wxNativeFontInfo::SetFaceName(const wxString& facename)
+bool wxNativeFontInfo::SetFaceName(const wxString& facename)
 {
-    wxStrncpy(lf.lfFaceName, facename, WXSIZEOF(lf.lfFaceName));
+    size_t len = WXSIZEOF(lf.lfFaceName);
+    wxStrncpy(lf.lfFaceName, facename, len);
+    lf.lfFaceName[len - 1] = '\0';    // truncate the face name
+    return true;
 }
 
 void wxNativeFontInfo::SetFamily(wxFontFamily family)
 {
     BYTE ff_family;
-    wxString facename;
+    wxArrayString facename;
+
+    // the list of fonts associated with a family was partially 
+    // taken from http://www.codestyle.org/css/font-family
 
     switch ( family )
     {
         case wxSCRIPT:
             ff_family = FF_SCRIPT;
-            facename = _T("Script");
+            facename.Add(_T("Script"));
+            facename.Add(_T("Brush Script MT"));
+            facename.Add(_T("Comic Sans MS"));
+            facename.Add(_T("Lucida Handwriting"));
             break;
 
         case wxDECORATIVE:
             ff_family = FF_DECORATIVE;
-            facename = _T("Old English Text MT");
+            facename.Add(_T("Old English Text MT"));
+            facename.Add(_T("Comic Sans MS"));
+            facename.Add(_T("Lucida Handwriting"));
             break;
 
         case wxROMAN:
             ff_family = FF_ROMAN;
-            facename = _T("Times New Roman");
+            facename.Add(_T("Times New Roman"));
+            facename.Add(_T("Georgia"));
+            facename.Add(_T("Garamond"));
+            facename.Add(_T("Bookman Old Style"));
+            facename.Add(_T("Book Antiqua"));
             break;
 
         case wxTELETYPE:
         case wxMODERN:
             ff_family = FF_MODERN;
-            facename = _T("Courier New");
+            facename.Add(_T("Courier New"));
+            facename.Add(_T("Lucida Console"));
+            facename.Add(_T("Andale Mono"));
+            facename.Add(_T("OCR A Extended"));
+            facename.Add(_T("Terminal"));
             break;
 
         case wxSWISS:
             ff_family = FF_SWISS;
-            facename = _T("Arial");
+            facename.Add(_T("Arial"));
+            facename.Add(_T("Century Gothic"));
+            facename.Add(_T("Lucida Sans Unicode"));
+            facename.Add(_T("Tahoma"));
+            facename.Add(_T("Trebuchet MS"));
+            facename.Add(_T("Verdana"));
             break;
 
         case wxDEFAULT:
@@ -607,9 +630,15 @@ void wxNativeFontInfo::SetFamily(wxFontFamily family)
             int verMaj;
             ff_family = FF_SWISS;
             if(wxGetOsVersion(&verMaj) == wxWINDOWS_NT && verMaj >= 5)
-                facename = _T("MS Shell Dlg 2");
+                facename.Add(_T("MS Shell Dlg 2"));
             else
-                facename = _T("MS Shell Dlg");
+                facename.Add(_T("MS Shell Dlg"));
+
+            // Quoting the MSDN:
+            //     "MS Shell Dlg is a mapping mechanism that enables 
+            //     U.S. English Microsoft Windows NT, and Microsoft Windows 2000 to 
+            //     support locales that have characters that are not contained in code 
+            //     page 1252. It is not a font but a face name for a nonexistent font."
         }
     }
 
@@ -920,13 +949,22 @@ void wxFont::SetWeight(int weight)
     RealizeResource();
 }
 
-void wxFont::SetFaceName(const wxString& faceName)
+bool wxFont::SetFaceName(const wxString& faceName)
 {
     Unshare();
 
-    M_FONTDATA->SetFaceName(faceName);
+    bool refdataok = M_FONTDATA->SetFaceName(faceName);
 
     RealizeResource();
+
+    // NB: using win32's GetObject() API on M_FONTDATA->GetHFONT()
+    //     to retrieve a LOGFONT and then compare lf.lfFaceName
+    //     with given facename is not reliable at all:
+    //     Windows copies the facename given to ::CreateFontIndirect()
+    //     without any validity check.
+    //     Thus we use wxFontBase::SetFaceName to check if facename
+    //     is valid...
+    return refdataok && wxFontBase::SetFaceName(faceName);
 }
 
 void wxFont::SetUnderlined(bool underlined)
@@ -1029,6 +1067,20 @@ const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
                                            : NULL;
 }
 
+wxString wxFont::GetNativeFontInfoDesc() const
+{
+    // be sure we have an HFONT associated...
+    wxConstCast(this, wxFont)->RealizeResource();
+    return wxFontBase::GetNativeFontInfoDesc();
+}
+
+wxString wxFont::GetNativeFontInfoUserDesc() const
+{
+    // be sure we have an HFONT associated...
+    wxConstCast(this, wxFont)->RealizeResource();
+    return wxFontBase::GetNativeFontInfoUserDesc();
+}
+
 bool wxFont::IsFixedWidth() const
 {
     if ( M_FONTDATA->HasNativeFontInfo() )
@@ -1043,3 +1095,4 @@ bool wxFont::IsFixedWidth() const
 
     return wxFontBase::IsFixedWidth();
 }
+
index 63be231df61c19c553b389cd7c63853cad724be5..9871769c778a7b82cb6a8cb7dcd53d3fd8b1c5b2 100644 (file)
@@ -195,12 +195,13 @@ public:
             m_nWeight = nWeight;
     }
 
-    inline void SetFaceName(const wxString& sFaceName)
+    inline bool SetFaceName(const wxString& sFaceName)
     {
         if (m_bNativeFontInfoOk)
-            m_vNativeFontInfo.SetFaceName(sFaceName);
+            return m_vNativeFontInfo.SetFaceName(sFaceName);
         else
             m_sFaceName = sFaceName;
+        return true;
     }
 
     inline void SetUnderlined(bool bUnderlined)
@@ -689,11 +690,12 @@ void wxNativeFontInfo::SetUnderlined(
         fa.fsSelection |= FATTR_SEL_UNDERSCORE;
 } // end of wxNativeFontInfo::SetUnderlined
 
-void wxNativeFontInfo::SetFaceName(
+bool wxNativeFontInfo::SetFaceName(
   const wxString&                   sFacename
 )
 {
     wxStrncpy((wxChar*)fa.szFacename, sFacename, WXSIZEOF(fa.szFacename));
+    return true;
 } // end of wxNativeFontInfo::SetFaceName
 
 void wxNativeFontInfo::SetFamily(
@@ -1023,15 +1025,17 @@ void wxFont::SetWeight(
     RealizeResource();
 } // end of wxFont::SetWeight
 
-void wxFont::SetFaceName(
+bool wxFont::SetFaceName(
   const wxString&                   rsFaceName
 )
 {
     Unshare();
 
-    M_FONTDATA->SetFaceName(rsFaceName);
+    bool refdataok = M_FONTDATA->SetFaceName(rsFaceName);
 
     RealizeResource();
+
+    return refdataok && wxFontBase::SetFaceName(rsFaceName);
 } // end of wxFont::SetFaceName
 
 void wxFont::SetUnderlined(
index 3f1f84d7b65480f3dbc864856794a8a9653424ec..5eebd464f5f37566715f35f00eed03b7d9b13cb8 100644 (file)
@@ -251,7 +251,7 @@ public:
             m_weight = weight;
     }
 
-    void SetFaceName(const wxString& faceName)
+    bool SetFaceName(const wxString& faceName)
     {
         if ( m_nativeFontInfoOk )
             m_nativeFontInfo.SetFaceName(faceName);
@@ -444,8 +444,9 @@ void wxFont::SetWeight(int weight)
 {
 }
 
-void wxFont::SetFaceName(const wxString& faceName)
+bool wxFont::SetFaceName(const wxString& faceName)
 {
+    return true;
 }
 
 void wxFont::SetUnderlined(bool underlined)
index 501393ac7b503f0cb10d3d3ff7619306615a854e..93df3b0ced18602095f28df0ef3e5ad5de3ddfd8 100644 (file)
@@ -37,6 +37,7 @@
 #include "wx/fontmap.h"
 #include "wx/tokenzr.h"
 #include "wx/module.h"
+#include "wx/fontenum.h"
 
 #if wxUSE_PANGO
 
@@ -260,9 +261,10 @@ void wxNativeFontInfo::SetUnderlined(bool WXUNUSED(underlined))
     wxFAIL_MSG( _T("not implemented") );
 }
 
-void wxNativeFontInfo::SetFaceName(const wxString& facename)
+bool wxNativeFontInfo::SetFaceName(const wxString& facename)
 {
     pango_font_description_set_family(description, wxGTK_CONV_SYS(facename));
+    return true;
 }
 
 void wxNativeFontInfo::SetFamily(wxFontFamily WXUNUSED(family))
@@ -309,6 +311,10 @@ bool wxNativeFontInfo::FromString(const wxString& s)
 
     description = pango_font_description_from_string( wxGTK_CONV_SYS( str ) );
 
+    // ensure a valid facename is selected
+    if (!wxFontEnumerator::IsValidFacename(GetFaceName()))
+        SetFaceName(wxNORMAL_FONT->GetFaceName());
+
     return true;
 }
 
@@ -776,9 +782,10 @@ void wxNativeFontInfo::SetUnderlined(bool WXUNUSED(underlined))
     // can't do this under X
 }
 
-void wxNativeFontInfo::SetFaceName(const wxString& facename)
+bool wxNativeFontInfo::SetFaceName(const wxString& facename)
 {
     SetXFontComponent(wxXLFD_FAMILY, facename);
+    return true;
 }
 
 void wxNativeFontInfo::SetFamily(wxFontFamily WXUNUSED(family))
index 7215b892302ec33845dba4edec1bb24aad616bbe..675acc54bdd61665732c7cca70612e844bede49f 100644 (file)
@@ -121,7 +121,7 @@ public:
     void SetStyle(int style);
     void SetWeight(int 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; }
@@ -503,9 +503,10 @@ 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;
+    return true;
 }
 
 void wxFontRefData::SetEncoding(wxFontEncoding encoding)
@@ -816,11 +817,12 @@ void wxFont::SetWeight(int weight)
     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)