X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8f1337ed68fb7b8ce177e83718afa9c13cb21eb6..2028c33ab5a39a12bd410ac953731a56ad6377ba:/interface/wx/font.h diff --git a/interface/wx/font.h b/interface/wx/font.h index 6b600a95f7..a4283059b0 100644 --- a/interface/wx/font.h +++ b/interface/wx/font.h @@ -8,22 +8,39 @@ /** - Standard font families: these may be used only for the font creation, it - doesn't make sense to query an existing font for its font family as, - especially if the font had been created from a native font description, it - may be unknown. + Standard font families: these are used mainly during wxFont creation to specify + the generic properties of the font without hardcoding in the sources a specific + face name. + + wxFontFamily thus allows to group the font face names of fonts with similar + properties. Most wxWidgets ports use lists of fonts for each font family + inspired by the data taken from http://www.codestyle.org/css/font-family. */ 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. - wxFONTFAMILY_MODERN = wxMODERN, //!< A fixed pitch font. - wxFONTFAMILY_TELETYPE = wxTELETYPE, //!< A teletype font. - wxFONTFAMILY_MAX, - wxFONTFAMILY_UNKNOWN = wxFONTFAMILY_MAX + + /// 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, + /// 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 }; /** @@ -31,9 +48,16 @@ enum wxFontFamily */ enum wxFontStyle { + /// The font is drawn without slant. wxFONTSTYLE_NORMAL = wxNORMAL, + + /// The font is slanted in an italic style. wxFONTSTYLE_ITALIC = wxITALIC, + + /// 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, + wxFONTSTYLE_MAX }; @@ -87,6 +111,8 @@ enum wxFontFlag /** Font encodings. + + See wxFont::SetEncoding(). */ enum wxFontEncoding { @@ -266,19 +292,20 @@ public: @param pointSize Size in points. See SetPointSize() for more info. @param family - Font family, a generic way of referring to fonts without specifying actual - facename. One of the ::wxFontFamily enumeration values. + The font family: a generic portable way of referring to fonts without specifying a + facename. This parameter must be one of the ::wxFontFamily enumeration values. + If the @a faceName argument is provided, then it overrides the font family. @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. At present this has an effect on Windows and Motif 2.x only. @param faceName - An optional string specifying the actual typeface to be used. - If it is an empty string, a default typeface will be chosen based on the family. + An optional string specifying the face name to be used. + If it is an empty string, a default face name will be chosen based on the family. @param encoding An encoding which may be one of the enumeration values of ::wxFontEncoding. Briefly these can be summed up as: @@ -286,8 +313,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. @@ -311,8 +338,9 @@ public: @param pixelSize Size in pixels. See SetPixelSize() for more info. @param family - Font family, a generic way of referring to fonts without specifying actual - facename. One of ::wxFontFamily enumeration values. + The font family: a generic portable way of referring to fonts without specifying a + facename. This parameter must be one of the ::wxFontFamily enumeration values. + If the @a faceName argument is provided, then it overrides the font family. @param style One of @c wxFONTSTYLE_NORMAL, @c wxFONTSTYLE_SLANT and @c wxFONTSTYLE_ITALIC. @param weight @@ -322,8 +350,8 @@ public: The value can be @true or @false. At present this has an effect on Windows and Motif 2.x only. @param faceName - An optional string specifying the actual typeface to be used. - If it is an empty string, a default typeface will be chosen based on the family. + An optional string specifying the face name to be used. + If it is an empty string, a default face name will be chosen based on the family. @param encoding An encoding which may be one of the enumeration values of ::wxFontEncoding. Briefly these can be summed up as: @@ -331,8 +359,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. @@ -350,6 +378,15 @@ public: const wxString& faceName = wxEmptyString, wxFontEncoding encoding = wxFONTENCODING_DEFAULT); + /** + Constructor from font description string. + + This constructor uses SetNativeFontInfo() to initialize the font. + If @a fontdesc is invalid the font remains uninitialized, i.e. its IsOk() method + will return @false. + */ + wxFont(const wxString& fontdesc); + /** Destructor. @@ -364,24 +401,40 @@ 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 typeface name associated with the font, or the empty string if - there is no typeface information. + Returns the face name associated with the font, or the empty string if + there is no face information. @see SetFaceName() */ virtual wxString GetFaceName() const; /** - Gets the font family. See SetFamily() for a list of valid - family identifiers. + 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. + Font families mostly make sense only for font creation; see SetFamily(). @see SetFamily() */ @@ -389,23 +442,30 @@ 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. - @see SetNativeFontInfo(),GetNativeFontInfoUserDesc() + @see SetNativeFontInfo(), GetNativeFontInfoUserDesc() */ wxString GetNativeFontInfoDesc() const; /** 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. Some examples of the formats of returned strings (which are platform-dependent) are in SetNativeFontInfoUserDesc(). - @see GetNativeFontInfoDesc() + @see SetNativeFontInfoUserDesc(), GetNativeFontInfoDesc() */ wxString GetNativeFontInfoUserDesc() const; @@ -418,7 +478,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. @@ -426,7 +486,7 @@ public: @see SetPixelSize() */ virtual wxSize GetPixelSize() const; - + /** Gets the font style. See ::wxFontStyle for a list of valid styles. @@ -451,6 +511,11 @@ 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 + accurate return value). */ virtual bool IsFixedWidth() const; @@ -459,55 +524,158 @@ 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. - */ - 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); + Return a bold version of this font. + + @see MakeBold() + + @since 2.9.1 + */ + wxFont Bold() const; + + /** + Return an italic version of this font. + + @see MakeItalic() + + @since 2.9.1 + */ + wxFont Italic() const; + + /** + Return a larger version of this font. + + The font size is multiplied by CSS specification inspired factor of @c + 1.2. + + @see Larger(), MakeSmaller(), Scale() + + @since 2.9.1 + */ + wxFont Larger() 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 CSS specification inspired factor of @c + 1.2. + + @see Larger(), MakeSmaller(), Scale() + + @since 2.9.1 + */ + wxFont& MakeLarger(); + + /** + Return a smaller version of this font. + + The font size is divided by CSS specification inspired factor of @c + 1.2. + + @see MakeLarger(), Scale(), Smaller() + + @since 2.9.1 + */ + wxFont& MakeSmaller(); + + /** + 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); + + /** + 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). + + @see Scale(), Larger(), Smaller() + + @since 2.9.1 + */ + wxFont Scaled(float x) const; + + /** + Return a smaller version of this font. + + The font size is divided by CSS specification inspired factor of @c + 1.2. + + @see Larger(), MakeSmaller(), Scaled() + + @since 2.9.1 + */ + wxFont Smaller() 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. - 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() */ @@ -516,6 +684,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. @@ -556,15 +729,21 @@ public: 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). + If you want to serialize/deserialize a font in string form, you should use + GetNativeFontInfoDesc() and SetNativeFontInfo() instead. + @see SetNativeFontInfo() */ bool SetNativeFontInfoUserDesc(const wxString& 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. @@ -575,19 +754,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. @@ -618,6 +797,9 @@ public: */ virtual void SetWeight(wxFontWeight weight); + //@} + + /** Inequality operator. @@ -638,6 +820,52 @@ 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); + //@} }; @@ -648,7 +876,7 @@ wxFont wxNullFont; /** Equivalent to wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT). - + @see wxSystemSettings */ wxFont wxNORMAL_FONT;