]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/font.h
Phoenix needs to see the implementation of pure virtuals so it knows that this class...
[wxWidgets.git] / interface / wx / font.h
index b880ee1cecbf0aa8236ff873d89d1b54b1036373..dab6d19b2a2bb4c4abc7b0f56cfcf9872b29918d 100644 (file)
@@ -3,7 +3,7 @@
 // Purpose:     interface of wxFont
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 
 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,
 
-    wxFONTFAMILY_MAX
+    wxFONTFAMILY_MAX,
+    /// Invalid font family value, returned by wxFont::GetFamily() when the
+    /// font is invalid for example.
+    wxFONTFAMILY_UNKNOWN = wxFONTFAMILY_MAX
 };
 
 /**
@@ -53,8 +52,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,
 
@@ -72,6 +71,27 @@ enum wxFontWeight
     wxFONTWEIGHT_MAX
 };
 
+/**
+    Symbolic font sizes.
+
+    The elements of this enum correspond to CSS absolute size specifications,
+    see http://www.w3.org/TR/CSS21/fonts.html#font-size-props
+
+    @see wxFont::SetSymbolicSize()
+
+    @since 2.9.2
+ */
+enum wxFontSymbolicSize
+{
+    wxFONTSIZE_XX_SMALL = -3,   //!< Extra small.
+    wxFONTSIZE_X_SMALL,         //!< Very small.
+    wxFONTSIZE_SMALL,           //!< Small.
+    wxFONTSIZE_MEDIUM,          //!< Normal.
+    wxFONTSIZE_LARGE,           //!< Large.
+    wxFONTSIZE_X_LARGE,         //!< Very large.
+    wxFONTSIZE_XX_LARGE         //!< Extra large.
+};
+
 /**
     The font flag bits for the new font ctor accepting one combined flags word.
 */
@@ -92,8 +112,10 @@ enum wxFontFlag
     wxFONTFLAG_ANTIALIASED      = 1 << 4,
     wxFONTFLAG_NOT_ANTIALIASED  = 1 << 5,
 
-    /// underlined/strikethrough flags (default: no lines)
+    /// Underlined style (not underlined by default).
     wxFONTFLAG_UNDERLINED       = 1 << 6,
+
+    /// Strike-through style (only supported in wxMSW and wxGTK currently).
     wxFONTFLAG_STRIKETHROUGH    = 1 << 7,
 
     /// the mask of all currently used flags
@@ -111,7 +133,7 @@ enum wxFontFlag
 
 /**
     Font encodings.
-    
+
     See wxFont::SetEncoding().
 */
 enum wxFontEncoding
@@ -237,17 +259,13 @@ enum wxFontEncoding
     /// (this is used by wxEncodingConverter and wxUTFFile only for now)
     wxFONTENCODING_UNICODE,
 
-    // alternative names for Far Eastern encodings
-    // Chinese
     wxFONTENCODING_GB2312 = wxFONTENCODING_CP936, //!< Simplified Chinese
     wxFONTENCODING_BIG5 = wxFONTENCODING_CP950,   //!< Traditional Chinese
-
-        // Japanese (see http://zsigri.tripod.com/fontboard/cjk/jis.html)
-    wxFONTENCODING_SHIFT_JIS = wxFONTENCODING_CP932 //!< Shift JIS
+    wxFONTENCODING_SHIFT_JIS = wxFONTENCODING_CP932, //!< Shift JIS
+    wxFONTENCODING_EUC_KR = wxFONTENCODING_CP949 //!< Korean
 };
 
 
-
 /**
     @class wxFont
 
@@ -287,7 +305,7 @@ public:
     wxFont(const wxFont& font);
 
     /**
-        Creates a font object with the specified attributes.
+        Creates a font object with the specified attributes and size in points.
 
         @param pointSize
             Size in points. See SetPointSize() for more info.
@@ -298,7 +316,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 +331,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>
@@ -333,7 +351,7 @@ public:
            wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
 
     /**
-        Creates a font object with the specified attributes.
+        Creates a font object with the specified attributes and size in pixels.
 
         @param pixelSize
             Size in pixels. See SetPixelSize() for more info.
@@ -359,8 +377,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>
@@ -378,6 +396,25 @@ public:
            const wxString& faceName = wxEmptyString,
            wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
 
+    /**
+        Creates a font object using font flags.
+
+        This constructor is similar to the constructors above except it
+        specifies the font styles such as underlined, italic, bold, ... in a
+        single @a flags argument instead of using separate arguments for them.
+        This parameter can be a combination of ::wxFontFlag enum elements.
+        The meaning of the remaining arguments is the same as in the other
+        constructors, please see their documentation for details.
+
+        Notice that this constructor provides the only way of creating fonts
+        with strike-through style.
+
+        @since 2.9.4
+     */
+    wxFont(int pointSize, wxFontFamily family, int flags,
+           const wxString& faceName = wxEmptyString,
+           wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
+
     /**
         Constructor from font description string.
 
@@ -385,7 +422,12 @@ public:
         If @a fontdesc is invalid the font remains uninitialized, i.e. its IsOk() method
         will return @false.
      */
-    wxFont(const wxString& fontdesc);
+    wxFont(const wxString& nativeInfoString);
+
+    /**
+       Construct font from a native font info structure.
+    */
+    wxFont(const wxNativeFontInfo& nativeInfo);
 
     /**
         Destructor.
@@ -401,21 +443,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.
@@ -425,16 +467,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.
-        
-        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().
+        underlying system, @c wxFONTFAMILY_DEFAULT is returned.
+
+        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()
     */
@@ -442,7 +485,9 @@ public:
 
     /**
         Returns the platform-dependent string completely describing this font.
-        Returned string is always non-empty.
+
+        Returned string is always non-empty unless the font is invalid (in
+        which case an assert is triggered).
 
         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.
@@ -453,8 +498,10 @@ public:
 
     /**
         Returns a user-friendly string for this font object.
-        Returned string is always non-empty.
-        
+
+        Returned string is always non-empty unless the font is invalid (in
+        which case an assert is triggered).
+
         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.
 
@@ -465,6 +512,8 @@ public:
     */
     wxString GetNativeFontInfoUserDesc() const;
 
+    const wxNativeFontInfo *GetNativeFontInfo() const;
+
     /**
         Gets the point size.
 
@@ -474,7 +523,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 +531,7 @@ public:
         @see SetPixelSize()
     */
     virtual wxSize GetPixelSize() const;
-    
+
     /**
         Gets the font style. See ::wxFontStyle for a list of valid styles.
 
@@ -497,6 +546,15 @@ public:
     */
     virtual bool GetUnderlined() const;
 
+    /**
+        Returns @true if the font is stricken-through, @false otherwise.
+
+        @see SetStrikethrough()
+
+        @since 2.9.4
+     */
+    virtual bool GetStrikethrough() const;
+
     /**
         Gets the font weight. See ::wxFontWeight for a list of valid weight identifiers.
 
@@ -507,7 +565,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 +577,172 @@ 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 either modify the font in place or create
+        a new font similar to the given one but with its weight, style or size
+        changed.
+     */
+    //@{
+
+    /**
+        Returns a bold version of this font.
+
+        @see MakeBold()
+
+        @since 2.9.1
+     */
+    wxFont Bold() const;
+
+    /**
+        Returns an italic version of this font.
+
+        @see MakeItalic()
+
+        @since 2.9.1
+     */
+    wxFont Italic() const;
+
+    /**
+        Returns a larger version of this font.
+
+        The font size is multiplied by @c 1.2, the factor of @c 1.2 being
+        inspired by the W3C CSS specification.
+
+        @see MakeLarger(), Smaller(), Scaled()
+
+        @since 2.9.1
+     */
+    wxFont Larger() const;
+
+    /**
+        Returns a smaller version of this font.
+
+        The font size is divided by @c 1.2, the factor of @c 1.2 being
+        inspired by the W3C CSS specification.
+
+        @see MakeSmaller(), Larger(), Scaled()
+
+        @since 2.9.1
+     */
+    wxFont Smaller() const;
+
+    /**
+        Returns underlined version of this font.
+
+        @see MakeUnderlined()
+
+        @since 2.9.2
+     */
+    wxFont Underlined() const;
+
+    /**
+        Returns stricken-through version of this font.
+
+        Currently stricken-through fonts are only supported in wxMSW and wxGTK.
+
+        @see MakeStrikethrough()
+
+        @since 2.9.4
+     */
+    wxFont Strikethrough() const;
+
+    /**
+        Changes this font to be bold.
+
+        @see Bold()
+
+        @since 2.9.1
+     */
+    wxFont& MakeBold();
+
+    /**
+        Changes this font to be italic.
+
+        @see Italic()
+
+        @since 2.9.1
+     */
+    wxFont& MakeItalic();
+
+    /**
+        Changes this font to be larger.
+
+        The font size is multiplied by @c 1.2, the factor of @c 1.2 being
+        inspired by the W3C CSS specification.
+
+        @see Larger(), MakeSmaller(), Scale()
+
+        @since 2.9.1
+     */
+    wxFont& MakeLarger();
+
+    /**
+        Changes this font to be smaller.
+
+        The font size is divided by @c 1.2, the factor of @c 1.2 being
+        inspired by the W3C CSS specification.
+
+        @see Smaller(), MakeLarger(), Scale()
+
+        @since 2.9.1
+     */
+    wxFont& MakeSmaller();
+
+    /**
+        Changes this font to be underlined.
+
+        @see Underlined()
+
+        @since 2.9.2
+     */
+    wxFont& MakeUnderlined();
+
+    /**
+        Changes this font to be stricken-through.
+
+        Currently stricken-through fonts are only supported in wxMSW and wxGTK.
+
+        @see Strikethrough()
+
+        @since 2.9.4
+    */
+    wxFont& MakeStrikethrough();
+
+    /**
+        Changes the size 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).
+
+        @see Scaled(), MakeLarger(), MakeSmaller()
+
+        @since 2.9.1
+     */
+    wxFont& Scale(float x);
+
+    /**
+        Returns 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).
+
+        @see Scale(), Larger(), Smaller()
+
+        @since 2.9.1
+     */
+    wxFont Scaled(float x) const;
+
+    //@}
+
     /**
         @name Setters
-        
+
         These functions internally recreate the native font object with the new
         specified property.
     */
@@ -534,10 +750,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 +768,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 +777,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 +822,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).
@@ -617,11 +833,13 @@ public:
     */
     bool SetNativeFontInfoUserDesc(const wxString& info);
 
+    void SetNativeFontInfo(const wxNativeFontInfo& info);
+        
     /**
         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 +850,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.
 
@@ -655,6 +873,28 @@ public:
     */
     virtual void SetStyle(wxFontStyle style);
 
+    /**
+        Sets the font size using a predefined symbolic size name.
+
+        This function allows to change font size to be (very) large or small
+        compared to the standard font size.
+
+        @see SetSymbolicSizeRelativeTo().
+
+        @since 2.9.2
+     */
+    void SetSymbolicSize(wxFontSymbolicSize size);
+
+    /**
+        Sets the font size compared to the base font size.
+
+        This is the same as SetSymbolicSize() except that it uses the given
+        font size as the normal font size instead of the standard font size.
+
+        @since 2.9.2
+     */
+    void SetSymbolicSizeRelativeTo(wxFontSymbolicSize size, int base);
+
     /**
         Sets underlining.
 
@@ -665,6 +905,20 @@ public:
     */
     virtual void SetUnderlined(bool underlined);
 
+    /**
+        Sets strike-through attribute of the font.
+
+        Currently stricken-through fonts are only supported in wxMSW and wxGTK.
+
+        @param strikethrough
+            @true to add strike-through style, @false to remove it.
+
+        @see GetStrikethrough()
+
+        @since 2.9.4
+    */
+    virtual void SetStrikethrough(bool strikethrough);
+
     /**
         Sets the font weight.
 
@@ -674,7 +928,7 @@ public:
         @see GetWeight()
     */
     virtual void SetWeight(wxFontWeight weight);
-    
+
     //@}
 
 
@@ -698,8 +952,8 @@ public:
         Assignment operator, using @ref overview_refcount "reference counting".
     */
     wxFont& operator =(const wxFont& font);
-    
-    
+
+
     // statics
 
     /**
@@ -715,7 +969,7 @@ public:
         @see @ref overview_fontencoding, GetDefaultEncoding()
     */
     static void SetDefaultEncoding(wxFontEncoding encoding);
-    
+
     //@{
     /**
         This function takes the same parameters as the relative
@@ -743,6 +997,11 @@ public:
                        int flags = wxFONTFLAG_DEFAULT,
                        const wxString& faceName = wxEmptyString,
                        wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
+
+    
+    static wxFont *New(const wxNativeFontInfo& nativeInfo);
+    static wxFont *New(const wxString& nativeInfoString);
+
     //@}
 };
 
@@ -754,28 +1013,28 @@ wxFont wxNullFont;
 
 /**
     Equivalent to wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).
-    
+
     @see wxSystemSettings
 */
-wxFont wxNORMAL_FONT;
+wxFont* wxNORMAL_FONT;
 
 /**
     A font using the @c wxFONTFAMILY_SWISS family and 2 points smaller than
     ::wxNORMAL_FONT.
 */
-wxFont wxSMALL_FONT;
+wxFont* wxSMALL_FONT;
 
 /**
     A font using the @c wxFONTFAMILY_ROMAN family and @c wxFONTSTYLE_ITALIC style and
     of the same size of ::wxNORMAL_FONT.
 */
-wxFont wxITALIC_FONT;
+wxFont* wxITALIC_FONT;
 
 /**
     A font identic to ::wxNORMAL_FONT except for the family used which is
     @c wxFONTFAMILY_SWISS.
 */
-wxFont wxSWISS_FONT;
+wxFont* wxSWISS_FONT;
 
 
 /**