X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6aea1e4a7067d8e7cbac03833b64a363baefcb16..b09857ae000a60704207d63290be937584805fb0:/interface/wx/font.h?ds=sidebyside diff --git a/interface/wx/font.h b/interface/wx/font.h index b1cb4e1b81..766ce5d225 100644 --- a/interface/wx/font.h +++ b/interface/wx/font.h @@ -3,7 +3,7 @@ // Purpose: interface of wxFont // Author: wxWidgets team // RCS-ID: $Id$ -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,28 +19,27 @@ 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,6 +133,8 @@ enum wxFontFlag /** Font encodings. + + See wxFont::SetEncoding(). */ enum wxFontEncoding { @@ -167,6 +191,8 @@ enum wxFontEncoding wxFONTENCODING_CP1255, //!< WinHebrew wxFONTENCODING_CP1256, //!< WinArabic wxFONTENCODING_CP1257, //!< WinBaltic (same as Latin 7) + wxFONTENCODING_CP1258, //!< WinVietnamese (since 2.9.4) + wxFONTENCODING_CP1361, //!< Johab Korean character set (since 2.9.4) wxFONTENCODING_CP12_MAX, wxFONTENCODING_UTF7, //!< UTF-7 Unicode encoding @@ -235,17 +261,15 @@ 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 + wxFONTENCODING_JOHAB = wxFONTENCODING_CP1361, //!< Korean Johab (since 2.9.4) + wxFONTENCODING_VIETNAMESE = wxFONTENCODING_CP1258 //!< Vietnamese (since 2.9.4) }; - /** @class wxFont @@ -285,7 +309,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. @@ -296,7 +320,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. @@ -311,8 +335,8 @@ public: @c wxFONTENCODING_SYSTEMDefault system encoding. @c wxFONTENCODING_DEFAULT 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. @c wxFONTENCODING_ISO8859_1...15ISO8859 encodings. @c wxFONTENCODING_KOI8The standard Russian encoding for Internet. @@ -331,7 +355,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. @@ -357,8 +381,8 @@ public: @c wxFONTENCODING_SYSTEMDefault system encoding. @c wxFONTENCODING_DEFAULT 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. @c wxFONTENCODING_ISO8859_1...15ISO8859 encodings. @c wxFONTENCODING_KOI8The standard Russian encoding for Internet. @@ -376,6 +400,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. @@ -383,7 +426,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. @@ -399,12 +447,20 @@ public: */ virtual ~wxFont(); + /** - Returns the current application's default encoding. + @name Getters + */ + //@{ - @see @ref overview_fontencoding, SetDefaultEncoding() + /** + Returns the encoding of this font. + + Note that under wxGTK the returned value is always @c wxFONTENCODING_UTF8. + + @see SetEncoding() */ - static wxFontEncoding GetDefaultEncoding(); + virtual wxFontEncoding GetEncoding() const; /** Returns the face name associated with the font, or the empty string if @@ -415,12 +471,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 not very precise and so not + particularly useful. Font families mostly make sense only for font + creation, see SetFamily(). @see SetFamily() */ @@ -428,7 +489,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. @@ -439,8 +502,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. @@ -451,6 +516,8 @@ public: */ wxString GetNativeFontInfoUserDesc() const; + const wxNativeFontInfo *GetNativeFontInfo() const; + /** Gets the point size. @@ -460,7 +527,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. @@ -468,7 +535,7 @@ public: @see SetPixelSize() */ virtual wxSize GetPixelSize() const; - + /** Gets the font style. See ::wxFontStyle for a list of valid styles. @@ -483,6 +550,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. @@ -493,7 +569,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 @@ -506,55 +582,198 @@ public: */ 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. + */ //@{ + /** - This function takes the same parameters as the relative - @ref wxFont::wxFont "wxFont constructor" and returns a new font - object allocated on the heap. + 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 */ - static wxFont* New(int pointSize, wxFontFamily family, wxFontStyle style, - wxFontWeight weight, - bool underline = false, - const wxString& faceName = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); - static wxFont* New(int pointSize, wxFontFamily family, - int flags = wxFONTFLAG_DEFAULT, - const wxString& faceName = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); - static wxFont* New(const wxSize& pixelSize, - wxFontFamily family, - wxFontStyle style, - wxFontWeight weight, - bool underline = false, - const wxString& faceName = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); - static wxFont* New(const wxSize& pixelSize, - wxFontFamily family, - int flags = wxFONTFLAG_DEFAULT, - const wxString& faceName = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); + 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; + //@} /** - Sets the default font encoding. + @name Setters - @see @ref overview_fontencoding, GetDefaultEncoding() + These functions internally recreate the native font object with the new + specified property. */ - static void SetDefaultEncoding(wxFontEncoding encoding); + //@{ + + /** + 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); /** Sets the facename for the font. - Returns @true if the given face name exists; @false otherwise. @param faceName A valid facename, which should be on the end-user's system. @remarks To avoid portability problems, don't rely on a specific face, - but specify the font family instead or as well (see ::wxFontFamily). - A suitable font will be found on the end-user's system. - If both the family and the facename are specified, wxWidgets will - first search for the specific face, and then for a font belonging - to the same family. + 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 + return @false) and @false is returned. @see GetFaceName(), SetFamily() */ @@ -563,6 +782,11 @@ 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). + + Note that changing the font family results in changing the font face name. + @param family One of the ::wxFontFamily values. @@ -593,7 +817,7 @@ public: @beginTable @hdr3col{platform, generic syntax, example} - @row3col{wxGTK2, [FACE-NAME] [bold] [oblique|italic] [POINTSIZE], Monospace bold 10} + @row3col{wxGTK2, [underlined] [strikethrough] [FACE-NAME] [bold] [oblique|italic] [POINTSIZE], Monospace bold 10} @row3col{wxMSW, [light|bold] [italic] [FACE-NAME] [POINTSIZE] [ENCODING], Tahoma 10 WINDOWS-1252} @endTable @@ -601,8 +825,10 @@ 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). - + (e.g. @c pango_font_description_from_string under GTK, although notice + that it doesn't support the "underlined" and "strikethrough" attributes + and so those are handled by wxWidgets itself). + 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). @@ -613,11 +839,13 @@ public: */ bool SetNativeFontInfoUserDesc(const wxString& info); + void SetNativeFontInfo(const wxNativeFontInfo& info); + /** Sets the point size. - - The point size is defined as 1/72 of the anglo-Saxon inch - (25.4 mm): it is approximately 0.0139 inch or 352.8 um. + + The point size 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. @@ -628,19 +856,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. @@ -651,6 +879,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. @@ -661,6 +911,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. @@ -671,6 +935,9 @@ public: */ virtual void SetWeight(wxFontWeight weight); + //@} + + /** Inequality operator. @@ -691,6 +958,57 @@ public: Assignment operator, using @ref overview_refcount "reference counting". */ wxFont& operator =(const wxFont& font); + + + // statics + + /** + Returns the current application's default encoding. + + @see @ref overview_fontencoding, SetDefaultEncoding() + */ + static wxFontEncoding GetDefaultEncoding(); + + /** + Sets the default font encoding. + + @see @ref overview_fontencoding, GetDefaultEncoding() + */ + static void SetDefaultEncoding(wxFontEncoding encoding); + + //@{ + /** + This function takes the same parameters as the relative + @ref wxFont::wxFont "wxFont constructor" and returns a new font + object allocated on the heap. + */ + static wxFont* New(int pointSize, wxFontFamily family, wxFontStyle style, + wxFontWeight weight, + bool underline = false, + const wxString& faceName = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT); + static wxFont* New(int pointSize, wxFontFamily family, + int flags = wxFONTFLAG_DEFAULT, + const wxString& faceName = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT); + static wxFont* New(const wxSize& pixelSize, + wxFontFamily family, + wxFontStyle style, + wxFontWeight weight, + bool underline = false, + const wxString& faceName = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT); + static wxFont* New(const wxSize& pixelSize, + wxFontFamily family, + int flags = wxFONTFLAG_DEFAULT, + const wxString& faceName = wxEmptyString, + wxFontEncoding encoding = wxFONTENCODING_DEFAULT); + + + static wxFont *New(const wxNativeFontInfo& nativeInfo); + static wxFont *New(const wxString& nativeInfoString); + + //@} }; @@ -701,28 +1019,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; /** @@ -744,7 +1062,7 @@ wxFont wxSWISS_FONT; @see wxFont */ -class wxFontList : public wxList +class wxFontList { public: /**