/******************************************************************************** * * * F o n t O b j e c t * * * ********************************************************************************* * Copyright (C) 1997,2003 by Jeroen van der Zijp. All Rights Reserved. * ********************************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; * * version 2.1 of the License. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * ********************************************************************************* * $Id: FXPostscriptFont.h,v 1.28 2003/05/20 16:46:06 fox Exp $ * ********************************************************************************/ // The above rights relate to the file FXFont upon which this is based. // There are adjustments here by A C Norman who first notes the general FOX // extension to the LGPL that permits distribution of statically linked // binaries without consequence, and who explicitly makes his stuff available // under the FOX or any more permissive license. /* Signature: 59750f30 14-Apr-2006 */ #ifndef FXPOSTSCRIPTFONT_H #define FXPOSTSCRIPTFONT_H #include namespace FX { // I would rather like to override a bunch of things in FXFont, but they // are not virtual. Thus I need a work-around. // Define a version of FOX where these patches become unnecessary needed. // This is in that hope that at some stage FOX will make more functions // within FXFont virtual... #define FONT_MAJOR 99 #define FONT_MINOR 99 #define FONT_LEVEL 99 #ifndef INT_VERSION #define INT_VERSION(a,b,c) (((a*1000) + b)*1000 + c) #endif #if INT_VERSION(FOX_MAJOR,FOX_MAJOR,FOX_LEVEL) < \ INT_VERSION(FONT_MAJOR,FONT_MINOR,FONT_LEVEL) #define FONT_NOT_VIRTUAL 1 #endif #if INT_VERSION(FOX_MAJOR,FOX_MINOR,FOX_LEVEL) < INT_VERSION(1,1,49) // At 1.1.49 the fields in FXFont relating to font properties were split // so that having (eg) a single "size" field there were two fields // "wantedSize" and "actualSize". My code works in terms of the new names // but to support the older versions of FOX It maps the old names onto the // new ones when relevant. Beware that a crude set of #define statements // like this is dangerous in that if other classes have fields with the // same names references to them would suffer. // #define WANTED_AND_ACTUAL 1 // #define actualName name etc etc et #endif /// Font class class FXAPI FXPostscriptFont : public FXFont { FXDECLARE(FXPostscriptFont) protected: struct font_info *metrics; FXPostscriptFont(); private: FXPostscriptFont(const FXPostscriptFont&); FXPostscriptFont &operator=(const FXPostscriptFont&); public: /// Construct font from font description FXPostscriptFont(FXApp* a,const FXFontDesc& fontdesc); /// Construct a font with given face name, size in points(pixels), weight, slant, character set encoding, setwidth, and hints #if (FOX_MINOR<=4) FXPostscriptFont(FXApp* a,const FXString& face,FXuint sz,FXuint wt=FONTWEIGHT_NORMAL,FXuint sl=FONTSLANT_REGULAR,FXuint enc=FONTENCODING_DEFAULT,FXuint setw=FONTSETWIDTH_DONTCARE,FXuint h=0); #else FXPostscriptFont(FXApp* a,const FXString& face,FXuint sz,FXuint wt=Normal,FXuint sl=Straight,FXuint enc=FONTENCODING_DEFAULT,FXuint setw=0,FXuint h=0); #endif /// Construct a font with given X11 font string (not supported!) FXPostscriptFont(FXApp* a,const FXString& nm); /// Create the font virtual void create(); /// Find out if the font is monotype or proportional FXbool isFontMono() const; /// See if font has glyph for ch FXbool hasChar(FXint ch) const; /// Get first character glyph in font #if (FOX_MINOR<=4) FXint getMinChar() const; #else FXwchar getMinChar() const; #endif /// Get last character glyph in font #if (FOX_MINOR<=4) FXint getMaxChar() const; #else FXwchar getMaxChar() const; #endif /// Left bearing FXint leftBearing(FXchar ch) const; // // NB a FXPostscriptFont returns measurements here in units of // millipoints. // /// Right bearing FXint rightBearing(FXchar ch) const; /// Width of widest character in font FXint getFontWidth() const; /// Height of highest character in font FXint getFontHeight() const; /// Ascent from baseline FXint getFontAscent() const; /// Descent from baseline FXint getFontDescent() const; /// Get font leading [that is lead-ing as in Pb!] FXint getFontLeading() const; /// Get font line spacing FXint getFontSpacing() const; /// Calculate width of given text in this font FXint getTextWidth(const FXchar *text,FXuint n) const; /// Calculate width of given text in this font FXint getTextWidth(const FXString& text) const; /// Calculate height of given text in this font FXint getTextHeight(const FXchar *text,FXuint n) const; /// Calculate height of given text in this font FXint getTextHeight(const FXString& text) const; /** * List all fonts matching hints. If listFonts() returns TRUE then * fonts points to a newly-allocated array of length numfonts. It * is the caller's responsibility to free this array using FXFREE(). */ #if (FOX_MINOR<=4) static FXbool listFonts(FXFontDesc*& fonts,FXuint& numfonts,const FXString& face,FXuint wt=FONTWEIGHT_DONTCARE,FXuint sl=FONTSLANT_DONTCARE,FXuint sw=FONTSETWIDTH_DONTCARE,FXuint en=FONTENCODING_DEFAULT,FXuint h=0); #else static FXbool listFonts(FXFontDesc*& fonts,FXuint& numfonts,const FXString& face,FXuint wt=Normal,FXuint sl=Straight,FXuint sw=NonExpanded,FXuint en=FONTENCODING_DEFAULT,FXuint h=0); #endif /// Destroy font virtual ~FXPostscriptFont(); }; } #endif