00001 /*! \file 00002 * X-Forge Util <br> 00003 * Copyright 2000-2003 Fathammer Ltd 00004 * 00005 * \brief Primitive bitmap font printer class. 00006 * 00007 * $Id: XFuPrinter.h,v 1.17 2003/08/12 13:33:52 lars Exp $ 00008 * $Date: 2003/08/12 13:33:52 $ 00009 * $Revision: 1.17 $ 00010 */ 00011 00012 #ifndef XFUPRINTER_H_INCLUDED 00013 #define XFUPRINTER_H_INCLUDED 00014 00015 00016 //! Primitive bitmap font printer class. 00017 /*! 00018 * This class loads a single image file and creates as many XFcGLSurface objects as the 00019 * font has characters. The image file must have all of its characters in ASCII order starting 00020 * from character 33 (the exclamation mark, "!"). The image file must be as wide as a single 00021 * character is high, i.e. for a 8x8 font with 20 characters and one character, the image 00022 * dimensions would be 8x160. 00023 */ 00024 class XFuPrinter 00025 { 00026 public: 00027 //! Creates a XFuPrinter object from an image file. 00028 static XFuPrinter * create(const CHAR *aFname); 00029 //! Creates a XFuPrinter object from an image file, with choise of color key value. 00030 /*! 00031 * aAlphamask is the color key value. 00032 * \sa XFcGLSurface 00033 */ 00034 static XFuPrinter * create(const CHAR *aFname, INT32 aAlphamask); 00035 //! Creates a XFuPrinter object from an image file, with choise of color key value and scale 00036 static XFuPrinter * create(const CHAR *aFname, INT32 aAlphamask, REAL aXScale, REAL aYScale); 00037 //! Prints a character string with the printer's font. 00038 /*! String is printed to a target surface with optional blending and clipping rectangle. 00039 */ 00040 virtual void print(XFcGLSurface *aTarget, INT32 aX, INT32 aY, const CHAR *aText, 00041 INT32 aBlendType = 0, INT32 aBlendValue = 0x7f, XFcRectangle *aClipRect = NULL); 00042 //! Prints a character string with the printer's font, using target rectangle and word wrapping. 00043 /*! If the string contains words that are wider than the rectangle, the words are printed on a new 00044 * line (no inter-word chopping is performed). If the aTargetRect is NULL, the whole surface is used. 00045 * \Note This function uses print() and stringmetrics() internally, so it will also work with rlespriteprinter. 00046 * \sa print 00047 * \return Pixel height of the total printing operation (ignores clipping) 00048 */ 00049 INT32 print(XFcGLSurface *aTarget, XFcRectangle *aTargetRect, const CHAR *aText, 00050 INT32 aBlendType = 0, INT32 aBlendValue = 0x7f, XFcRectangle *aClipRect = NULL); 00051 00052 //! Calculates how big an area a string would take if printed. 00053 virtual void stringMetrics(const CHAR *aText, INT32 &aWidth, INT32 &aHeight); 00054 //! Returns the width of a single character. 00055 virtual INT32 getCharWidth(CHAR aChar); 00056 //! Sets the width of a space. 00057 virtual void setSpaceWidth(INT32 aSpacing); 00058 //! Sets letter spacing (i.e. extra space between characters). 00059 virtual void setLetterSpacing(INT32 aSpacing); 00060 //! Returns the current letter spacing (i.e. extra space between characters). 00061 virtual INT32 getLetterSpacing(); 00062 //! Sets line spacing (Y-coordinate offset from a row to the next row). 00063 virtual void setLineSpacing(INT32 aSpacing); 00064 //! Returns the current line spacing (Y-coordinate offset from a row to the next row). 00065 virtual INT32 getLineSpacing(); 00066 //! Returns height of one printer line. 00067 virtual INT32 getLineHeight(); 00068 //! Virtual destructor. 00069 virtual ~XFuPrinter(); 00070 00071 protected: 00072 00073 //! Protected constructor. 00074 XFuPrinter(); 00075 00076 INT32 mMaxletter; //!< Maximum letter in the font. 00077 XFcGLSurface **mLetter; //!< Array of XFcGLSurfaces. 00078 INT32 mLetterSpacing; //!< Current letter spacing. 00079 INT32 mLineSpacing; //!< Current line spacing. 00080 INT32 mLineHeight; //!< Line height. 00081 INT32 mSpaceWidth; //!< Width of space character. 00082 }; 00083 00084 00085 #endif // !XFUPRINTER_H_INCLUDED 00086
![]() | ||||
![]() |
Confidential Copyright © 2002-2003 Fathammer | with doxygen by Dimitri van Heesch |