]> git.saurik.com Git - wxWidgets.git/commitdiff
added convenient wxFont::Make{Bold,Italic,Smaller,Larger} and Scale() methods
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 12 Jun 2009 20:11:21 +0000 (20:11 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 12 Jun 2009 20:11:21 +0000 (20:11 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61033 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

15 files changed:
docs/changes.txt
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/common/fontcmn.cpp

index 5fccff31e70560a035279d14f771ffb702ea1b24..239b8ebde675bdf2217877135c307105cba73320 100644 (file)
@@ -346,6 +346,7 @@ All (GUI):
 - Added wxMouseEventsManager.
 - Building OpenGL library is now enabled by default.
 - Improve wxTreeCtrl::ScrollTo() in generic version (Raanan Barzel).
+- Added wxFont::Make{Bold,Italic,Smaller,Larger} and Scale() methods.
 - Added wxDC::CopyAttributes() and use it in wxBufferedDC.
 - Added wxTextWrapper helper class useful for wrapping lines of text.
 
index acda832c6978d69767adb399039815acd3128a0e..ae5686f98d46cc8cd6dbcb98d5db8e7d8d6a07d5 100644 (file)
@@ -119,7 +119,7 @@ public:
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     // implementation only from now on
     // -------------------------------
index 941f513deec8e17a250a56643994d4730009417e..def7085e070efb3576b9634401a8e5732557e981 100644 (file)
@@ -88,7 +88,7 @@ public:
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     // Unofficial API, don't use
     virtual void SetNoAntiAliasing(bool no = true);
index ec8ed80d6caec2ee2943f0abc4b795bfe1e0f99c..873ba84a4a77dce291d00be0a1003e194767e130 100644 (file)
@@ -276,7 +276,7 @@ WXDLLIMPEXP_CORE bool wxFromString(const wxString& str, wxFontBase* font);
 
 
 #if FUTURE_WXWIN_COMPATIBILITY_3_0
-#define WXDECLARE_COMPAT_SETTERS   \
+#define wxDECLARE_FONT_COMPAT_SETTER   \
     wxDEPRECATED_FUTURE( void SetFamily(int family) ) \
         { SetFamily((wxFontFamily)family); } \
     wxDEPRECATED_FUTURE( void SetStyle(int style) ) \
@@ -290,9 +290,20 @@ WXDLLIMPEXP_CORE bool wxFromString(const wxString& str, wxFontBase* font);
     wxDEPRECATED_FUTURE( void SetWeight(wxDeprecatedGUIConstants weight) ) \
         { SetWeight((wxFontWeight)weight); }
 #else
-#define WXDECLARE_COMPAT_SETTERS  /*empty*/
+#define wxDECLARE_FONT_COMPAT_SETTER  /*empty*/
 #endif
 
+// this macro must be used in all derived wxFont classes declarations
+#define wxDECLARE_COMMON_FONT_METHODS() \
+    wxDECLARE_FONT_COMPAT_SETTER \
+ \
+    /* functions for creating fonts based on this one */ \
+    wxFont MakeBold() const; \
+    wxFont MakeItalic() const; \
+    wxFont MakeLarger() const { return Scale(1.2f); } \
+    wxFont MakeSmaller() const { return Scale(1/1.2f); } \
+    wxFont Scale(float x) const
+
 // include the real class declaration
 #if defined(__WXPALMOS__)
     #include "wx/palmos/font.h"
index 4fb065741cbb84eda8771e4070aedd7d3b70f9c5..8e03364bcaffb468964acfe30383c2c4fb82f6dc 100644 (file)
@@ -95,7 +95,7 @@ public:
     virtual void SetUnderlined( bool underlined );
     virtual void SetEncoding(wxFontEncoding encoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     virtual void SetNoAntiAliasing( bool no = true );
     virtual bool GetNoAntiAliasing() const ;
index de10438926b4f867f69afc69a25b1fa49fcb6bcc..0686c3934f2cd0992c902a55cbbd8c0bc7968ecd 100644 (file)
@@ -109,7 +109,7 @@ public:
     virtual void SetUnderlined( bool underlined );
     virtual void SetEncoding(wxFontEncoding encoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     virtual void SetNoAntiAliasing( bool no = true );
     virtual bool GetNoAntiAliasing() const ;
index 8625ccdd59c153e9622c913ad0731c8217b0b64a..a94a28c3eaa026f1a1a0acbfab0f59ba96c82846 100644 (file)
@@ -104,7 +104,7 @@ public:
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     // Unofficial API, don't use
     virtual void SetNoAntiAliasing(bool no = true);
index 6c59225a13e821a72c3d9efa3f966061cf65c4a8..80f86980ae7c6fe0d7d9996534d11ac356c2ba82 100644 (file)
@@ -99,7 +99,7 @@ public:
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     // Implementation
 
index 4756c68eab3b0ed3dd4c618ccd2b528ee040ad37..afadf95e08412b5cac5048010a7e90b088ecda59 100644 (file)
@@ -135,7 +135,7 @@ public:
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     virtual bool IsFixedWidth() const;
 
index e4a2f1d608fedf9df06a300da504f28771b527ae..ef692625d2a3f6f5e0ce0d01b50c0ceb29a70c17 100644 (file)
@@ -109,7 +109,7 @@ public:
     virtual void SetUnderlined(bool bUnderlined);
     virtual void SetEncoding(wxFontEncoding vEncoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     //
     // For internal use only!
index c005e55be33505f229c72783e4c2997d3ebe99ad..79fb78b7c49402a18e279e66f612d7b09fd501ba 100644 (file)
@@ -113,7 +113,7 @@ public:
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     // implementation only from now on
     // -------------------------------
index a800719d7c5f28c43c06abec4327edc8335ae524..716fd9a247b79a7c5d019be3a2a580bab9a7af52 100644 (file)
@@ -116,7 +116,7 @@ public:
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     virtual bool IsFixedWidth() const;
 
index 1093602daf0606b1f61a0faf3b2249a7add80974..bfe33ee3e0d75f8f71ddcbfbe9d84a1cf9b0798b 100644 (file)
@@ -98,7 +98,7 @@ public:
     virtual void SetUnderlined(bool underlined);
     virtual void SetEncoding(wxFontEncoding encoding);
 
-    WXDECLARE_COMPAT_SETTERS
+    wxDECLARE_COMMON_FONT_METHODS();
 
     virtual void SetNoAntiAliasing( bool no = TRUE );
     virtual bool GetNoAntiAliasing() const ;
index b880ee1cecbf0aa8236ff873d89d1b54b1036373..c814de2baae65577c1bb68e7b3a35c47108e9fee 100644 (file)
 enum wxFontFamily
 {
     wxFONTFAMILY_DEFAULT = wxDEFAULT,           //!< Chooses a default font.
-    
+
     wxFONTFAMILY_DECORATIVE = wxDECORATIVE,     //!< A decorative font.
     wxFONTFAMILY_ROMAN = wxROMAN,               //!< A formal, serif font.
     wxFONTFAMILY_SCRIPT = wxSCRIPT,             //!< A handwriting font.
     wxFONTFAMILY_SWISS = wxSWISS,               //!< A sans-serif font.
-    
+
     /// A fixed pitch font. Note that wxFont currently does not make distinctions
     /// between @c wxFONTFAMILY_MODERN and @c wxFONTFAMILY_TELETYPE.
     wxFONTFAMILY_MODERN = wxMODERN,
-    
+
     /// A teletype (i.e. monospaced) font.
-    /// Monospace fonts have a fixed width like typewriters and often have strong angular 
-    /// or block serifs. Monospace font faces are often used code samples and have a simple, 
+    /// Monospace fonts have a fixed width like typewriters and often have strong angular
+    /// or block serifs. Monospace font faces are often used code samples and have a simple,
     /// functional font style.
     /// 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,
@@ -53,8 +53,8 @@ enum wxFontStyle
 
     /// The font is slanted in an italic style.
     wxFONTSTYLE_ITALIC = wxITALIC,
-    
-    /// The font is slanted, but in a roman style. 
+
+    /// The font is slanted, but in a roman style.
     /// Note that under wxMSW this style is the same as @c wxFONTSTYLE_ITALIC.
     wxFONTSTYLE_SLANT = wxSLANT,
 
@@ -111,7 +111,7 @@ enum wxFontFlag
 
 /**
     Font encodings.
-    
+
     See wxFont::SetEncoding().
 */
 enum wxFontEncoding
@@ -298,7 +298,7 @@ public:
         @param style
             One of @c wxFONTSTYLE_NORMAL, @c wxFONTSTYLE_SLANT and @c wxFONTSTYLE_ITALIC.
         @param weight
-            Font weight, sometimes also referred to as font boldness. 
+            Font weight, sometimes also referred to as font boldness.
             One of the ::wxFontWeight enumeration values.
         @param underline
             The value can be @true or @false.
@@ -313,8 +313,8 @@ public:
                 <TR><TD>@c wxFONTENCODING_SYSTEM</TD><TD>Default system encoding.</TD></TR>
                 <TR><TD>@c wxFONTENCODING_DEFAULT</TD><TD>
                     Default application encoding: this is the encoding set by calls to
-                    SetDefaultEncoding() and which may be set to, say, KOI8 to create all 
-                    fonts by default with KOI8 encoding. Initially, the default application 
+                    SetDefaultEncoding() and which may be set to, say, KOI8 to create all
+                    fonts by default with KOI8 encoding. Initially, the default application
                     encoding is the same as default system encoding.</TD></TR>
                 <TR><TD>@c wxFONTENCODING_ISO8859_1...15</TD><TD>ISO8859 encodings.</TD></TR>
                 <TR><TD>@c wxFONTENCODING_KOI8</TD><TD>The standard Russian encoding for Internet.</TD></TR>
@@ -359,8 +359,8 @@ public:
                 <TR><TD>@c wxFONTENCODING_SYSTEM</TD><TD>Default system encoding.</TD></TR>
                 <TR><TD>@c wxFONTENCODING_DEFAULT</TD><TD>
                     Default application encoding: this is the encoding set by calls to
-                    SetDefaultEncoding() and which may be set to, say, KOI8 to create all 
-                    fonts by default with KOI8 encoding. Initially, the default application 
+                    SetDefaultEncoding() and which may be set to, say, KOI8 to create all
+                    fonts by default with KOI8 encoding. Initially, the default application
                     encoding is the same as default system encoding.</TD></TR>
                 <TR><TD>@c wxFONTENCODING_ISO8859_1...15</TD><TD>ISO8859 encodings.</TD></TR>
                 <TR><TD>@c wxFONTENCODING_KOI8</TD><TD>The standard Russian encoding for Internet.</TD></TR>
@@ -401,21 +401,21 @@ public:
     */
     virtual ~wxFont();
 
-    
+
     /**
         @name Getters
     */
     //@{
-    
+
     /**
         Returns the encoding of this font.
-        
+
         Note that under wxGTK the returned value is always @c wxFONTENCODING_UTF8.
-        
+
         @see SetEncoding()
     */
     virtual wxFontEncoding GetEncoding() const;
-    
+
     /**
         Returns the face name associated with the font, or the empty string if
         there is no face information.
@@ -428,12 +428,12 @@ public:
         Gets the font family.
         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.
-        
+
         Note that currently this function is rather unreliable (@c wxFONTFAMILY_UNKNOWN
-        is returned in too many cases) and not particularly useful. 
+        is returned in too many cases) and not particularly useful.
         Font families mostly make sense only for font creation; see SetFamily().
 
         @see SetFamily()
@@ -454,7 +454,7 @@ public:
     /**
         Returns a user-friendly string for this font object.
         Returned string is always non-empty.
-        
+
         The string does not encode all wxFont infos under all platforms;
         e.g. under wxMSW the font family is not present in the returned string.
 
@@ -474,7 +474,7 @@ public:
 
     /**
         Gets the pixel size.
-        
+
         Note that under wxMSW if you passed to SetPixelSize() (or to the ctor)
         a wxSize object with a null width value, you'll get a null width in
         the returned object.
@@ -482,7 +482,7 @@ public:
         @see SetPixelSize()
     */
     virtual wxSize GetPixelSize() const;
-    
+
     /**
         Gets the font style. See ::wxFontStyle for a list of valid styles.
 
@@ -507,7 +507,7 @@ public:
     /**
         Returns @true if the font is a fixed width (or monospaced) font,
         @false if it is a proportional one or font is invalid.
-        
+
         Note that this function under some platforms is different than just testing
         for the font family being equal to @c wxFONTFAMILY_TELETYPE because native
         platform-specific functions are used for the check (resulting in a more
@@ -519,14 +519,61 @@ public:
         Returns @true if this object is a valid font, @false otherwise.
     */
     virtual bool IsOk() const;
-    
+
+    //@}
+
+
+    /**
+        @name Similar fonts creation
+
+        The functions in this section create a font similar to the given one
+        but with its weight, style or size changed.
+     */
+    //@{
+
+    /**
+        Return a bold version of this font.
+     */
+    wxFont MakeBold() const;
+
+    /**
+        Return an italic version of this font.
+     */
+    wxFont MakeItalic() const;
+
+    /**
+        Return a larger version of this font.
+
+        The font size is multiplied by CSS specification inspired factor of @c
+        1.2.
+
+        @see MakeSmaller(), Scale()
+     */
+    wxFont MakeLarger() const;
+
+    /**
+        Return a smaller version of this font.
+
+        The font size is divided by CSS specification inspired factor of @c
+        1.2.
+
+        @see MakeLarger(), Scale()
+     */
+    wxFont MakeSmaller() const;
+
+    /**
+        Return a scaled version of this font.
+
+        The font size is multiplied by the given factor (which may be less than
+        1 to create a smaller version of the font).
+     */
+    wxFont Scale(float x) const;
+
     //@}
-    
-    
-    
+
     /**
         @name Setters
-        
+
         These functions internally recreate the native font object with the new
         specified property.
     */
@@ -534,10 +581,10 @@ public:
 
     /**
         Sets the encoding for this font.
-        
+
         Note that under wxGTK this function has no effect (because the underlying
         Pango library always uses @c wxFONTENCODING_UTF8).
-        
+
         @see GetEncoding()
     */
     virtual void SetEncoding(wxFontEncoding encoding);
@@ -552,7 +599,7 @@ public:
                  but specify the font family instead (see ::wxFontFamily and SetFamily()).
 
         @return @true if the given face name exists; if the face name doesn't exist
-                in the user's system then the font is invalidated (so that IsOk() will 
+                in the user's system then the font is invalidated (so that IsOk() will
                 return @false) and @false is returned.
 
         @see GetFaceName(), SetFamily()
@@ -561,7 +608,7 @@ public:
 
     /**
         Sets the font family.
-        
+
         As described in ::wxFontFamily docs the given @a family value acts as a rough,
         basic indication of the main font properties (look, spacing).
 
@@ -606,7 +653,7 @@ public:
         For more detailed information about the allowed syntaxes you can look at the
         documentation of the native API used for font-rendering
         (e.g. @c pango_font_description_from_string on GTK).
-        
+
         Note that unlike SetNativeFontInfo(), this function doesn't always restore all
         attributes of the wxFont object under all platforms; e.g. on wxMSW the font family
         is not restored (because GetNativeFontInfoUserDesc doesn't return it on wxMSW).
@@ -619,9 +666,9 @@ public:
 
     /**
         Sets the point size.
-        
-        The <em>point size</em> is defined as 1/72 of the anglo-Saxon inch 
-        (25.4 mm): it is approximately 0.0139 inch or 352.8 um. 
+
+        The <em>point size</em> is defined as 1/72 of the anglo-Saxon inch
+        (25.4 mm): it is approximately 0.0139 inch or 352.8 um.
 
         @param pointSize
             Size in points.
@@ -632,19 +679,19 @@ public:
 
     /**
         Sets the pixel size.
-        
+
         The height parameter of @a pixelSize must be positive while the width
         parameter may also be zero (to indicate that you're not interested in the
         width of the characters: a suitable width will be chosen for best rendering).
-        
-        This feature (specifying the font pixel size) is directly supported only 
-        under wxMSW and wxGTK currently; under other platforms a font with the 
+
+        This feature (specifying the font pixel size) is directly supported only
+        under wxMSW and wxGTK currently; under other platforms a font with the
         closest size to the given one is found using binary search (this maybe slower).
 
         @see GetPixelSize()
     */
     virtual void SetPixelSize(const wxSize& pixelSize);
-    
+
     /**
         Sets the font style.
 
@@ -674,7 +721,7 @@ public:
         @see GetWeight()
     */
     virtual void SetWeight(wxFontWeight weight);
-    
+
     //@}
 
 
@@ -698,8 +745,8 @@ public:
         Assignment operator, using @ref overview_refcount "reference counting".
     */
     wxFont& operator =(const wxFont& font);
-    
-    
+
+
     // statics
 
     /**
@@ -715,7 +762,7 @@ public:
         @see @ref overview_fontencoding, GetDefaultEncoding()
     */
     static void SetDefaultEncoding(wxFontEncoding encoding);
-    
+
     //@{
     /**
         This function takes the same parameters as the relative
@@ -754,7 +801,7 @@ wxFont wxNullFont;
 
 /**
     Equivalent to wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).
-    
+
     @see wxSystemSettings
 */
 wxFont wxNORMAL_FONT;
index ef779b3fb4f1d66f015ab236eaf4e35558e5907e..887145f0e097226515249beea9db3b757dbc5709 100644 (file)
@@ -421,6 +421,26 @@ bool wxFontBase::SetFaceName(const wxString& facename)
     return true;
 }
 
+wxFont wxFont::MakeBold() const
+{
+    wxFont font(*this);
+    font.SetWeight(wxFONTWEIGHT_BOLD);
+    return font;
+}
+
+wxFont wxFont::MakeItalic() const
+{
+    wxFont font(*this);
+    font.SetStyle(wxFONTSTYLE_ITALIC);
+    return font;
+}
+
+wxFont wxFont::Scale(float x) const
+{
+    wxFont font(*this);
+    font.SetPointSize(int(x*GetPointSize() + 0.5));
+    return font;
+}
 
 // ----------------------------------------------------------------------------
 // wxNativeFontInfo