| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- /*
- ** Command & Conquer Generals Zero Hour(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program 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 General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /************************************************************************************************
- *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
- ************************************************************************************************
- * *
- * Project Name: Setup *
- * *
- * Archive: ttfont.h *
- * *
- * Author: Joe_b *
- * *
- * Modtime: 6/23/97 3:14p *
- * *
- * Updated: 08/01/2000 [MML] *
- * *
- * Revision: 22 *
- * *
- *----------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
- #pragma once
- #ifndef TTFONT_H
- #define TTFONT_H
- #include <stddef.h>
- #include "point.h"
- #include "rect.h"
- /******************************************************************************
- ** These are the control flags for Fancy_Text_Print function.
- */
- typedef enum TextPrintType {
- TPF_LASTPOINT = 0x0000, // Use previous font point value.
- TPF_TT_10POINT = 0x0001, // True Type Font - 10 point
- TPF_TT_12POINT = 0x0002, // True Type Font - 12 point
- TPF_TT_14POINT = 0x000A, // True Type Font - 14 point
- TPF_TT_16POINT = 0x000B, // True Type Font - 16 point
- TPF_TT_18POINT = 0x000C, // True Type Font - 18 point
- TPF_TT_20POINT = 0x000D, // True Type Font - 20 point
- TPF_TT_22POINT = 0x000E, // True Type Font - 22 point
- TPF_TT_24POINT = 0x000F, // True Type Font - 24 point
- TPF_BUTTON_FONT = 0x0010,
- TPF_TEXT_FONT = 0x0020,
- } TextPrintType;
- typedef enum TextShadowType {
- TPF_NOSHADOW = 0x0000,
- TPF_DROPSHADOW = 0x0001, // Use a simple drop shadow.
- TPF_LIGHTSHADOW = 0x0002,
- TPF_FULLSHADOW = 0x0004, // Use a full outline shadow.
- TPF_DOUBLESHADOW = 0x0008, // Use a simple drop shadow.
- TPF_SHADOW = 0x0010, // Print twice, using backcolor.
- } TextShadowType;
- typedef enum TextFormatType {
- TPF_TOP = DT_TOP, // Use with DT_SINGLELINE. Top-justifies text.
- TPF_VCENTER = DT_VCENTER, // Use with DT_SINGLELINE. Centers text vertically.
- TPF_BOTTOM = DT_BOTTOM, // Use with DT_SINGLELINE. Justifies test to the bottom of the rectangle.
- TPF_LEFT = DT_LEFT, // Aligns text to the left.
- TPF_CENTER = DT_CENTER, // Centers text horizontally in the rectangle.
- TPF_RIGHT = DT_RIGHT, // Right justify text.
- TPF_WORDBREAK = DT_WORDBREAK, // Lines are automatically broken between words.
- TPF_SINGLE_LINE = DT_SINGLELINE, // All text on one line only.
- TPF_NO_PREFIX = DT_NOPREFIX, // Turns off processing of prefix characters.
- TPF_PATH_ELLIPSIS = DT_PATH_ELLIPSIS, // For displayed text, replaces characters in the middle of the string with ellipses so that the result fits in the specified rectangle.
- } TextFormatType;
- /******************************************************************************
- ** Standard button text print flags.
- */
- //#define TPF_BUTTON (TextFormatType)( DT_VCENTER | DT_CENTER | DT_SINGLELINE )
- //#define TPF_CENTER_FORMAT (TextFormatType)( DT_VCENTER | DT_CENTER | DT_WORDBREAK )
- //#define TPF_CHECKBOX (TextFormatType)( DT_LEFT | DT_VCENTER | DT_WORDBREAK )
- //#define TPF_EDIT (TextFormatType)( DT_LEFT | DT_VCENTER )
- //#define TPF_DEFAULT (TextFormatType)( DT_LEFT | DT_WORDBREAK )
- #define TPF_BUTTON (TextFormatType)( DT_CENTER | DT_VCENTER | DT_SINGLELINE )
- #define TPF_EDITBOX (TextFormatType)( DT_LEFT | DT_VCENTER | DT_SINGLELINE )
- #define TPF_RADIO (TextFormatType)( DT_LEFT | DT_WORDBREAK )
- #define TPF_CHECKBOX (TextFormatType)( DT_LEFT | DT_WORDBREAK )
- #define TPF_OUTER_SCROLL (TextFormatType)( DT_LEFT | DT_WORDBREAK )
- #define TPF_INNER_SCROLL (TextFormatType)( DT_LEFT | DT_SINGLELINE )
-
- #define TPF_LEFT_TEXT (TextFormatType)( DT_LEFT | DT_WORDBREAK )
- #define TPF_CENTER_TEXT (TextFormatType)( DT_CENTER | DT_WORDBREAK )
- #define TPF_RIGHT_TEXT (TextFormatType)( DT_RIGHT | DT_WORDBREAK )
-
- #define TPF_LEFT_TOP_ALIGNMENT (TextFormatType)( DT_LEFT | DT_TOP | DT_SINGLELINE )
- #define TPF_LEFT_BOTTOM_ALIGNMENT (TextFormatType)( DT_LEFT | DT_BOTTOM | DT_SINGLELINE )
- #define TPF_LEFT_JUSTIFY (TextFormatType)( DT_LEFT | DT_VCENTER | DT_SINGLELINE )
- #define TPF_RIGHT_TOP_ALIGNMENT (TextFormatType)( DT_RIGHT | DT_TOP | DT_SINGLELINE )
- #define TPF_RIGHT_BOTTOM_ALIGNMENT (TextFormatType)( DT_RIGHT | DT_BOTTOM | DT_SINGLELINE )
- #define TPF_RIGHT_JUSTIFY (TextFormatType)( DT_RIGHT | DT_VCENTER | DT_SINGLELINE )
- #define TPF_CENTER_TOP_ALIGNMENT (TextFormatType)( DT_CENTER | DT_TOP | DT_SINGLELINE )
- #define TPF_CENTER_BOTTOM_ALIGNMENT (TextFormatType)( DT_CENTER | DT_BOTTOM | DT_SINGLELINE )
- #define TPF_CENTER_JUSTIFY (TextFormatType)( DT_CENTER | DT_VCENTER | DT_SINGLELINE )
- /******************************************************************************
- ** These are the control flags for Fancy_Text_Print function.
- */
- typedef enum SpecialEffectType {
- TPF_NONE =0x0000, // No special effects needed.
- TPF_CUTOFF_AT_WIDTH =0x0001, // Don't print past the allowed width.
- TPF_BURST_MODE =0x0002, // Print text one letter at a time like a typewriter.
- TPF_SPECIAL_WRAP =0x0003, // Begin at a specified point but start next line at a point before the starting point.
- } SpecialEffectType;
- /******************************************************************************
- ** Global DC. Use it or create your own!
- */
- extern HDC BackBufferDC;
- /******************************************************************************
- ** Global Colors for use throughout program.
- */
- extern unsigned long TEXT_COLOR;
- extern unsigned long SHADOW_COLOR;
- extern unsigned long TEXT_NORMAL_COLOR;
- extern unsigned long TEXT_FOCUSED_COLOR;
- extern unsigned long TEXT_PRESSED_COLOR;
- extern unsigned long TEXT_NORMAL_SHADOW_COLOR;
- extern unsigned long TEXT_FOCUSED_SHADOW_COLOR;
- extern unsigned long TEXT_PRESSED_SHADOW_COLOR;
- extern unsigned long WHITE_COLOR;
- extern unsigned long BLACK_COLOR;
- extern unsigned long RED_COLOR;
- extern unsigned long ORANGE_COLOR;
- extern unsigned long YELLOW_COLOR;
- extern unsigned long GREEN_COLOR;
- extern unsigned long BLUE_COLOR;
- extern unsigned long INDIGO_COLOR;
- extern unsigned long VIOLET_COLOR;
- /******************************************************************************
- ** This is a True Type Font class object to create and use True Type fonts.
- ******************************************************************************/
- // Font Weight - Specifies the weight of the font in the range 0 through 1000.
- // For example, 400 is normal and 700 is bold.
- // If this value is zero, a default weight is used.
- //
- // The following values are defined for convenience:
- // FW_DONTCARE 0 FW_SEMIBOLD 600
- // FW_THIN 100 FW_DEMIBOLD 600
- // FW_EXTRALIGHT 200 FW_BOLD 700
- // FW_ULTRALIGHT 200 FW_EXTRABOLD 800
- // FW_LIGHT 300 FW_ULTRABOLD 800
- // FW_NORMAL 400 FW_HEAVY 900
- // FW_REGULAR 400 FW_BLACK 900
- // FW_MEDIUM 500
- //-----------------------------------------------------------------------------
- class TTFontClass
- {
- public:
- TTFontClass (
- HDC hdc,
- char * filename,
- char * facename,
- int height,
- int weight = FW_NORMAL,
- BYTE charset = ANSI_CHARSET,
- int width = 0,
- int escapement = 0,
- int orientation = 0,
- BYTE italic = FALSE,
- BYTE underline = FALSE,
- BYTE strikeout = FALSE,
- BYTE outputPrecision = OUT_TT_ONLY_PRECIS,
- BYTE clipPrecision = CLIP_DEFAULT_PRECIS,
- BYTE quality = PROOF_QUALITY,
- BYTE pitchAndFamily = FF_DONTCARE );
- virtual ~TTFontClass(void)
- {
- if ( Font != NULL ) {
- DeleteObject( Font );
- Font = NULL;
- }
- RemoveFontResource( szFilename );
- };
- virtual int Char_Pixel_Width ( HDC hdc, UINT c ) const;
- virtual int Char_Pixel_Width ( HDC hdc, char const * string, int *num_bytes=NULL ) const;
- virtual int String_Pixel_Width ( HDC hdc, char const * string ) const;
- virtual void String_Pixel_Bounds ( HDC hdc, const char * string, Rect& bounds ) const;
- virtual int Get_Width ( void ) const;
- virtual int Get_Height ( void ) const;
- virtual int Set_XSpacing ( HDC hdc, int x );
- virtual int Set_YSpacing ( int y );
- virtual int Find_Text_VLength ( HDC hdc, char *str, int width );
- virtual HFONT Get_Font_Ptr ( void ) { return Font; };
- virtual int IsFontDBCS ( void ) const { return ((CharSet==SHIFTJIS_CHARSET)||(CharSet==HANGEUL_CHARSET)||(CharSet==CHINESEBIG5_CHARSET)); }; // [OYO]
- virtual UINT Get_Double_Byte_Char ( const char *string, int *num_bytes=NULL ) const;
- virtual Point2D Print(
- HDC hdc,
- char const * string,
- Rect const & cliprect,
- COLORREF forecolor = TEXT_COLOR,
- COLORREF backcolor = TEXT_NORMAL_SHADOW_COLOR,
- TextFormatType flag = TPF_LEFT_TEXT,
- TextShadowType shadow = TPF_NOSHADOW );
- virtual Point2D Print(
- HDC hdc,
- wchar_t const * string,
- Rect const & cliprect,
- COLORREF forecolor = TEXT_COLOR,
- COLORREF backcolor = TEXT_NORMAL_SHADOW_COLOR,
- TextFormatType flag = TPF_LEFT_TEXT,
- TextShadowType shadow = TPF_NOSHADOW );
- private:
- HFONT Font;
- long Height;
- long Ascent;
- long Descent;
- long InternalLeading;
- long ExternalLeading;
- long AveCharWidth;
- long MaxCharWidth;
- long Overhang;
- long Italic;
- long Underlined;
- long StruckOut;
- int CharSet; // [OYO]
- int FontXSpacing; // GetTextCharacterExtra;
- int FontYSpacing;
- char szFacename[ MAX_PATH ];
- char szFilename[ MAX_PATH ];
- };
- //-------------------------------------------------------------------------
- // Global functions.
- //-------------------------------------------------------------------------
- TTFontClass * Font_From_TPF ( TextPrintType flags ); // Returns FontPtr based on flags passed in.
- bool Is_True_Type_Font ( TextPrintType flags ); // True Type???
- //-------------------------------------------------------------------------
- // This class is a wrapper around all the fonts that we want to be available.
- // The constructer will make them, and the destructor will remove them for us.
- //-------------------------------------------------------------------------
- class FontManagerClass
- {
- public:
- FontManagerClass ( HDC hdc );
- ~FontManagerClass ( void );
- TTFontClass * Get_Font ( TextPrintType flags ) { return( Font_From_TPF( flags )); };
- };
- /******************************************************************************
- ** FontManager Class Pointer.
- */
- extern FontManagerClass *FontManager;
- /******************************************************************************
- ** Loaded data file pointers.
- */
- extern TTFontClass *TTButtonFontPtr;
- extern TTFontClass *TTButtonFontPtrSmall;
- extern TTFontClass *TTTextFontPtr;
- extern TTFontClass *TTTextFontPtr640;
- extern TTFontClass *TTTextFontPtr800;
- extern TTFontClass *TTLicenseFontPtr;
- #endif
|