]> git.saurik.com Git - wxWidgets.git/commitdiff
Return wxFONTFAMILY_DEFAULT, not UNKNOWN, from wxFont::GetFamily().
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 29 Sep 2010 13:46:09 +0000 (13:46 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 29 Sep 2010 13:46:09 +0000 (13:46 +0000)
Although returning wxFONTFAMILY_UNKNOWN when the font family is not recognized
makes more sense, it breaks a lot of existing code including all the
font-related code generated by DialogBlocks, so prefer to return
wxFONTFAMILY_DEFAULT instead -- which can't be confused for a valid font
family neither but can be passed to wxFont ctor or SetFamily() without
problems.

To ensure that this behaviour is correctly implemented by all ports, rename
the existing wxFont::GetFamily() to DoGetFamily() and call the new method from
wxFontBase::GetFamily() which adjusts the return value if needed.

Closes #12330.

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

25 files changed:
include/wx/cocoa/font.h
include/wx/dfb/font.h
include/wx/font.h
include/wx/gtk/font.h
include/wx/gtk1/font.h
include/wx/mgl/font.h
include/wx/motif/font.h
include/wx/msw/font.h
include/wx/os2/font.h
include/wx/osx/font.h
include/wx/palmos/font.h
include/wx/x11/font.h
interface/wx/font.h
src/cocoa/font.mm
src/common/fontcmn.cpp
src/dfb/font.cpp
src/gtk/font.cpp
src/gtk1/font.cpp
src/mgl/font.cpp
src/motif/font.cpp
src/msw/font.cpp
src/os2/font.cpp
src/osx/carbon/font.cpp
src/palmos/font.cpp
src/x11/font.cpp

index 304a72db8da75500c627dad28b9023d9ba9def8b..b671f95bcb61a96792fe120f11529eabb262f344 100644 (file)
@@ -103,7 +103,6 @@ public:
 
     // implement base class pure virtuals
     virtual int GetPointSize() const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual bool GetUnderlined() const;
@@ -149,6 +148,8 @@ protected:
     virtual wxGDIRefData *CreateGDIRefData() const;
     virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
 
+    virtual wxFontFamily DoGetFamily() const;
+
 private:
     DECLARE_DYNAMIC_CLASS(wxFont)
 };
index f3c6c485b179a668e12525841ed65ecd555c718a..ad0e586e1e2fd3bf93871093117acf22a70c6ac3 100644 (file)
@@ -71,7 +71,6 @@ public:
 
     // implement base class pure virtuals
     virtual int GetPointSize() const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual wxString GetFaceName() const;
@@ -97,6 +96,8 @@ protected:
     virtual wxGDIRefData *CreateGDIRefData() const;
     virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
 
+    virtual wxFontFamily DoGetFamily() const;
+
 private:
     DECLARE_DYNAMIC_CLASS(wxFont)
 };
index 96efd04965d22575e8087b5959e39c734e3f80ae..6d7b46a31a49964692fe4376c41088a1016e91bc 100644 (file)
@@ -214,7 +214,7 @@ public:
     virtual int GetPointSize() const = 0;
     virtual wxSize GetPixelSize() const;
     virtual bool IsUsingSizeInPixels() const;
-    virtual wxFontFamily GetFamily() const = 0;
+    wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const = 0;
     virtual wxFontWeight GetWeight() const = 0;
     virtual bool GetUnderlined() const = 0;
@@ -264,6 +264,10 @@ protected:
     // the function called by both overloads of SetNativeFontInfo()
     virtual void DoSetNativeFontInfo(const wxNativeFontInfo& info);
 
+    // The function called by public GetFamily(): it can return
+    // wxFONTFAMILY_UNKNOWN unlike the public method (see comment there).
+    virtual wxFontFamily DoGetFamily() const = 0;
+
 private:
     // the currently default encoding: by default, it's the default system
     // encoding, but may be changed by the application using
index adbecdadeedd3db9c2183db34c8ff444dd1a7487..6bc37e9eff2c2100e57e87ef895ee0cba1772914 100644 (file)
@@ -78,7 +78,6 @@ public:
 
     // implement base class pure virtuals
     virtual int GetPointSize() const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual wxString GetFaceName() const;
@@ -111,6 +110,8 @@ protected:
     virtual wxGDIRefData* CreateGDIRefData() const;
     virtual wxGDIRefData* CloneGDIRefData(const wxGDIRefData* data) const;
 
+    virtual wxFontFamily DoGetFamily() const;
+
 private:
     DECLARE_DYNAMIC_CLASS(wxFont)
 };
index c619aad35e95a037f1a0b0db0a45fba4a1535a5a..b5e7e4ea207e6760b4465b302cd8da7c9e1e6d43 100644 (file)
@@ -92,7 +92,6 @@ public:
 
     // implement base class pure virtuals
     virtual int GetPointSize() const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual wxString GetFaceName() const;
@@ -121,6 +120,7 @@ protected:
     virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
 
     virtual void DoSetNativeFontInfo( const wxNativeFontInfo& info );
+    virtual wxFontFamily DoGetFamily() const;
 
 private:
     DECLARE_DYNAMIC_CLASS(wxFont)
index 6ef7f521df1e7274bb9adfba462c7980adcbf581..bc2bff6b8af25e65996aa64d3ad645d77bc566a9 100644 (file)
@@ -87,7 +87,6 @@ public:
 
     // implement base class pure virtuals
     virtual int GetPointSize() const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual wxString GetFaceName() const;
@@ -113,6 +112,8 @@ protected:
     virtual wxGDIRefData *CreateGDIRefData() const;
     virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
 
+    virtual wxFontFamily DoGetFamily() const;
+
 private:
     DECLARE_DYNAMIC_CLASS(wxFont)
 };
index 53f0c3a4d5bc47c72e1e26bbce7c76e6b91cae2d..e00eb848d355165e76272d6b4da2535990af04c7 100644 (file)
@@ -83,7 +83,6 @@ public:
 
     // implement base class pure virtuals
     virtual int GetPointSize() const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual bool GetUnderlined() const;
@@ -140,6 +139,7 @@ protected:
     virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
 
     virtual void DoSetNativeFontInfo( const wxNativeFontInfo& info );
+    virtual wxFontFamily DoGetFamily() const;
 
     void Unshare();
 
index 05edfdf958fd7e28ed0cdef0869b9bd5ab71fe8d..3f49e65e78287e67530c2054a8ac4ac82ed7b2d9 100644 (file)
@@ -114,7 +114,6 @@ public:
     virtual int GetPointSize() const;
     virtual wxSize GetPixelSize() const;
     virtual bool IsUsingSizeInPixels() const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual bool GetUnderlined() const;
@@ -159,6 +158,7 @@ protected:
                   wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
 
     virtual void DoSetNativeFontInfo(const wxNativeFontInfo& info);
+    virtual wxFontFamily DoGetFamily() const;
 
     // implement wxObject virtuals which are used by AllocExclusive()
     virtual wxGDIRefData *CreateGDIRefData() const;
index 3c14bf884bd77a8e5a73a385734ef78edfa91b0c..7060847d66b2f536e3f1797b9a1ede4d48c67bd5 100644 (file)
@@ -93,7 +93,6 @@ public:
     // Implement base class pure virtuals
     //
     virtual int               GetPointSize(void) const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual bool              GetUnderlined(void) const;
@@ -131,6 +130,7 @@ public:
 
 protected:
     virtual void DoSetNativeFontInfo(const wxNativeFontInfo& rInfo);
+    virtual wxFontFamily DoGetFamily() const;
 
     // implement wxObject virtuals which are used by AllocExclusive()
     virtual wxGDIRefData *CreateGDIRefData() const;
index 4d6f07fbc113601803157ed8f78a6c25af1bb674..3450dbc349fe1440fe71735d6692fa152e982a38 100644 (file)
@@ -101,7 +101,6 @@ public:
     // implement base class pure virtuals
     virtual int GetPointSize() const;
     virtual wxSize GetPixelSize() const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual bool GetUnderlined() const;
@@ -168,6 +167,7 @@ public:
 
 protected:
     virtual void DoSetNativeFontInfo(const wxNativeFontInfo& info);
+    virtual wxFontFamily DoGetFamily() const;
 
     virtual wxGDIRefData *CreateGDIRefData() const;
     virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
index 736e7bd812d27a66fd3734df039968d6ae5531fb..407cef5d0877e18832938541178a5e537733135a 100644 (file)
@@ -99,7 +99,6 @@ public:
     virtual int GetPointSize() const;
     virtual wxSize GetPixelSize() const;
     virtual bool IsUsingSizeInPixels() const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual bool GetUnderlined() const;
@@ -141,6 +140,7 @@ protected:
                   wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
 
     virtual void DoSetNativeFontInfo(const wxNativeFontInfo& info);
+    virtual wxFontFamily DoGetFamily() const;
 
     // implement wxObject virtuals which are used by AllocExclusive()
     virtual wxGDIRefData *CreateGDIRefData() const;
index a7197b878b4d10c8ef6c19279425fdbf46c17d94..b2c8718392aff65d09063dbeea730c10963bb7ce 100644 (file)
@@ -80,7 +80,6 @@ public:
 
     // implement base class pure virtuals
     virtual int GetPointSize() const;
-    virtual wxFontFamily GetFamily() const;
     virtual wxFontStyle GetStyle() const;
     virtual wxFontWeight GetWeight() const;
     virtual bool GetUnderlined() const;
@@ -129,6 +128,7 @@ protected:
     virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
 
     virtual void DoSetNativeFontInfo( const wxNativeFontInfo& info );
+    virtual wxFontFamily DoGetFamily() const;
 
     void Unshare();
 
index f9e22b306b7a8f45da68f118db426d8ff02c003b..ffa5505743bb49e5a2af87a545742e9ac30ea394 100644 (file)
@@ -36,11 +36,9 @@ enum wxFontFamily
     /// See also wxFont::IsFixedWidth() for an easy way to test for monospace property.
     wxFONTFAMILY_TELETYPE = wxTELETYPE,
 
-    /// Returned by wxFont::GetFamily() when the face name of the font cannot
-    /// be classified into one of the previous wxFontFamily values.
-    wxFONTFAMILY_UNKNOWN = wxFONTFAMILY_MAX,
-
-    wxFONTFAMILY_MAX
+    /// Invalid font family value, returned by wxFont::GetFamily() when the
+    /// font is invalid for example.
+    wxFONTFAMILY_UNKNOWN
 };
 
 /**
@@ -422,16 +420,17 @@ public:
     virtual wxString GetFaceName() const;
 
     /**
-        Gets the font family.
+        Gets the font family if possible.
+
         As described in ::wxFontFamily docs the returned value acts as a rough,
         basic classification of the main font properties (look, spacing).
 
         If the current font face name is not recognized by wxFont or by the
-        underlying system, @c wxFONTFAMILY_UNKNOWN is returned.
+        underlying system, @c wxFONTFAMILY_DEFAULT is returned.
 
-        Note that currently this function is rather unreliable (@c wxFONTFAMILY_UNKNOWN
-        is returned in too many cases) and not particularly useful.
-        Font families mostly make sense only for font creation; see SetFamily().
+        Note that currently this function is not very precise and so not
+        particularly useful. Font families mostly make sense only for font
+        creation, see SetFamily().
 
         @see SetFamily()
     */
index 9b67dbb3aa9456ead959aec48a47ab4c0c5d2869..2e2be8b5af293ed8575c867f0e4b45c4874501dd 100644 (file)
@@ -370,9 +370,8 @@ wxFontStyle wxFont::GetStyle() const
     return M_FONTDATA->m_info.style;
 }
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
-    wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
     return M_FONTDATA->m_info.family;
 }
 
index a59e671c5bea2d98a1e7dcbad80275fd7b563822..27154e9953bb4354188639921f12e658568366cb 100644 (file)
@@ -367,6 +367,20 @@ bool wxFontBase::operator==(const wxFont& font) const
            );
 }
 
+wxFontFamily wxFontBase::GetFamily() const
+{
+    wxCHECK_MSG( IsOk(), wxFONTFAMILY_UNKNOWN, wxS("invalid font") );
+
+    // Don't return wxFONTFAMILY_UNKNOWN from here because it prevents the code
+    // like wxFont(size, wxNORMAL_FONT->GetFamily(), ...) from working (see
+    // #12330). This is really just a hack but it allows to keep compatibility
+    // and doesn't really have any bad drawbacks so do this until someone comes
+    // up with a better idea.
+    const wxFontFamily family = DoGetFamily();
+
+    return family == wxFONTFAMILY_UNKNOWN ? wxFONTFAMILY_DEFAULT : family;
+}
+
 wxString wxFontBase::GetFamilyString() const
 {
     wxCHECK_MSG( IsOk(), "wxFONTFAMILY_DEFAULT", "invalid font" );
index 05a83676f00fcf4cd65d8f62c4dac3e65ee340b2..7f780bdba777552def05581fe870aa1ff6dc66ad 100644 (file)
@@ -98,10 +98,8 @@ wxString wxFont::GetFaceName() const
     return M_FONTDATA->GetFaceName();
 }
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
-    wxCHECK_MSG( Ok(), wxFONTFAMILY_MAX, wxT("invalid font") );
-
     return M_FONTDATA->GetFamily();
 }
 
index d011c26b35f8e7c48ac8912d95b4a1ccc2aa119c..adeb1354f7097ff5e0d421a5f40bf674fcb6de58 100644 (file)
@@ -333,10 +333,8 @@ wxString wxFont::GetFaceName() const
     return M_FONTDATA->m_nativeFontInfo.GetFaceName();
 }
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
-    wxCHECK_MSG( IsOk(), wxFONTFAMILY_MAX, wxT("invalid font") );
-
     return M_FONTDATA->m_nativeFontInfo.GetFamily();
 }
 
index 9970976eff9d4b89f28c0cd6220d279836345964..2d97fcd52fddb824237b09ad87c919de6d2e2e28 100644 (file)
@@ -534,10 +534,8 @@ wxString wxFont::GetFaceName() const
     return M_FONTDATA->m_faceName;
 }
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
-    wxCHECK_MSG( Ok(), wxFONTFAMILY_MAX, wxT("invalid font") );
-
     return M_FONTDATA->m_family;
 }
 
index e322af0f80254d8c5bceeff0f0a4c7438580e9b6..bb68eba936f4dbb75842e6fa09c800c6d26c74e9 100644 (file)
@@ -95,10 +95,8 @@ wxString wxFont::GetFaceName() const
     return M_FONTDATA->GetFaceName();
 }
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
-    wxCHECK_MSG( Ok(), wxFONTFAMILY_MAX, wxT("invalid font") );
-
     return M_FONTDATA->GetFamily();
 }
 
index 2969f829be42b054572d565893c89a221ed1a7a8..3d5488cc42264e629b8c07a723116bee9bacf2b1 100644 (file)
@@ -455,10 +455,8 @@ wxString wxFont::GetFaceName() const
     return M_FONTDATA->m_faceName ;
 }
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
-    wxCHECK_MSG( Ok(), wxFONTFAMILY_MAX, wxT("invalid font") );
-
     return M_FONTDATA->m_family;
 }
 
index b1e347d6740c364e27ba3593ca6a5f6011d5cbac..0acbf1aae6d91a57ed117c4624abf0e3ec0dea0e 100644 (file)
@@ -1016,10 +1016,8 @@ bool wxFont::IsUsingSizeInPixels() const
     return M_FONTDATA->IsUsingSizeInPixels();
 }
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
-    wxCHECK_MSG( IsOk(), wxFONTFAMILY_MAX, wxT("invalid font") );
-
     return M_FONTDATA->GetFamily();
 }
 
index d4be5633cb8fbf42ac9bf8b5b3f0f6dc7fd04784..eae1b4f8807f407ed6f1b8349724f1a9c52b0af3 100644 (file)
@@ -1082,12 +1082,10 @@ int wxFont::GetPointSize() const
     return M_FONTDATA->GetPointSize();
 } // end of wxFont::GetPointSize
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
-    wxCHECK_MSG( Ok(), wxFONTFAMILY_MAX, wxT("invalid font") );
-
     return M_FONTDATA->GetFamily();
-} // end of wxFont::GetFamily
+} // end of wxFont::DoGetFamily
 
 wxFontStyle wxFont::GetStyle() const
 {
index 2d0ae842e25fdbe33bfff63fb61313d2a423eb4f..4b477bb8ccf30912d551eb621c40d67cc8d674cf 100644 (file)
@@ -732,10 +732,8 @@ wxSize wxFont::GetPixelSize() const
 #endif
 }
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
-    wxCHECK_MSG( M_FONTDATA != NULL , wxFONTFAMILY_MAX, wxT("invalid font") );
-
     return M_FONTDATA->GetFamily();
 }
 
index 56bc52c737355bd37c367366a0e276fef91d1ad6..cf39e4dada0dbcbf4a00a7620091cba04627dfaa 100644 (file)
@@ -488,7 +488,7 @@ bool wxFont::IsUsingSizeInPixels() const
     return false;
 }
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
     return wxFONTFAMILY_ROMAN;
 }
index 32aa7d6a5651fdc5904fef4b892476c58ddcc831..6423e578ea9a54b78b13cba7b0765210f12f26e0 100644 (file)
@@ -725,10 +725,8 @@ wxString wxFont::GetFaceName() const
     return M_FONTDATA->m_faceName;
 }
 
-wxFontFamily wxFont::GetFamily() const
+wxFontFamily wxFont::DoGetFamily() const
 {
-    wxCHECK_MSG( Ok(), wxFONTFAMILY_MAX, wxT("invalid font") );
-
     return M_FONTDATA->m_family;
 }