Files
source/Utils/Font Control.h
T
Marco Antonio J. Costaandmajcosta b147e47856 let the text drawing path take a string it will not write to
DrawTextToScreen takes STR16, a mutable wchar_t*, for a string it only
measures and prints. Quest Debug System.cpp picks its text with a conditional:

  DrawTextToScreen( gubFact[ usLoop1 ] ? L"True" : L"False", ... );

which has type const wchar_t*. clang-cl's MSVC compatibility lets a bare
string literal decay to wchar_t*, but not a const wchar_t* expression, so it
reports

  error: no matching function for call to 'DrawTextToScreen'
  note: candidate function not viable: 1st argument ('const wchar_t *')
  would lose const qualifier

The parameter is const-correct in every function DrawTextToScreen hands the
string on to, so the change follows the string down the call chain rather
than stopping at the top:

  DrawTextToScreen, ShadowText          Utils/WordWrap.h
  WFStringPixLength                     Utils/Font Control.h
  mprintf, StringPixLength,             sgp/Font.h
  VarFindFontCenterCoordinates,
  VarFindFontRightCoordinates
  WinFontStringPixLength                sgp/WinFont.h
  gprintfdirty                          TileEngine/Render Dirty.h

The varargs members of that list copy the format string into a local buffer
before doing anything with it, and the measuring ones walk it and return a
width; none of the nine assigns through the parameter. Where StringPixLength
casts the string to UINT16* to walk it, the cast and the local now carry the
const rather than dropping it.

Callers are unaffected: every one already passes something that converts to
const CHAR16*. Both configurations build with no new diagnostics, and the
parse sweep drops from 9 error sites in 7 files to 5 in 3.

To check the claim that nothing writes through these parameters, read the
nine bodies; each is short.
2026-07-23 19:29:55 -03:00

184 lines
5.1 KiB
C

#ifndef __FONT_CONTROL_H
#define __FONT_CONTROL_H
#include "builddefines.h"
#include "Font.h"
extern BOOLEAN gfUseWinFonts;
extern INT32 giCurWinFont;
// ATE: Use this define to enable winfonts in JA2
// #define WINFONTS
#define GET_WINFONT( ) ( giCurWinFont )
#define SET_USE_WINFONTS( fSet ) ( gfUseWinFonts = fSet );
#define SET_WINFONT( fFont ) ( giCurWinFont = fFont );
// ATE: A few winfont wrappers..
UINT16 WFGetFontHeight( INT32 FontNum );
INT16 WFStringPixLength( const CHAR16* string,INT32 UseFont );
// Global variables for video objects
extern INT32 gpLargeFontType1;
extern HVOBJECT gvoLargeFontType1;
extern INT32 gpSmallFontType1;
extern HVOBJECT gvoSmallFontType1;
extern INT32 gpTinyFontType1;
extern HVOBJECT gvoTinyFontType1;
extern INT32 gp12PointFont1;
extern HVOBJECT gvo12PointFont1;
extern INT32 gpClockFont;
extern HVOBJECT gvoClockFont;
extern INT32 gpCompFont;
extern HVOBJECT gvoCompFont;
extern INT32 gpSmallCompFont;
extern HVOBJECT gvoSmallCompFont;
extern INT32 gp10PointRoman;
extern HVOBJECT gvo10PointRoman;
extern INT32 gp12PointRoman;
extern HVOBJECT gvo12PointRoman;
extern INT32 gp14PointSansSerif;
extern HVOBJECT gvo14PointSansSerif;
//INT32 gpMilitaryFont1;
//HVOBJECT gvoMilitaryFont1;
extern INT32 gp10PointArial;
extern HVOBJECT gvo10PointArial;
extern INT32 gp14PointArial;
extern HVOBJECT gvo14PointArial;
extern INT32 gp12PointArial;
extern HVOBJECT gvo12PointArial;
extern INT32 gpBlockyFont;
extern HVOBJECT gvoBlockyFont;
extern INT32 gpBlockyFont2;
extern HVOBJECT gvoBlockyFont2;
extern INT32 gpBlockyFont3;
extern HVOBJECT gvoBlockyFont3;
extern INT32 gp10PointArialBold;
extern HVOBJECT gvo10PointArialBold;
extern INT32 gp12PointArialFixedFont;
extern HVOBJECT gvo12PointArialFixedFont;
extern INT32 gp16PointArial;
extern HVOBJECT gvo16PointArial;
extern INT32 gpBlockFontNarrow;
extern HVOBJECT gvoBlockFontNarrow;
extern INT32 gp14PointHumanist;
extern HVOBJECT gvo14PointHumanist;
//extern INT32 giSubTitleWinFont;
extern BOOLEAN gfFontsInit;
// Defines
#define LARGEFONT1 gpLargeFontType1
#define SMALLFONT1 gpSmallFontType1
#define TINYFONT1 gpTinyFontType1
#define FONT12POINT1 gp12PointFont1
//#define CLOCKFONT gpClockFont //remove comment if change ok! "FONTS\\CLOCKFONT.sti" does not exist in Data Folder!
#define CLOCKFONT gpCompFont
#define COMPFONT gpCompFont
#define SMALLCOMPFONT gpSmallCompFont
#define FONT10ROMAN gp10PointRoman
#define FONT12ROMAN gp12PointRoman
#define FONT14SANSERIF gp14PointSansSerif
#define MILITARYFONT1 BLOCKFONT //gpMilitaryFont1
#define FONT10ARIAL gp10PointArial
#define FONT14ARIAL gp14PointArial
#define FONT12ARIAL gp12PointArial
#define FONT10ARIALBOLD gp10PointArialBold
#define BLOCKFONT gpBlockyFont
#define BLOCKFONT2 gpBlockyFont2
#define BLOCKFONT3 gpBlockyFont3
#define FONT12ARIALFIXEDWIDTH gp12PointArialFixedFont
#define FONT16ARIAL gp16PointArial
#define BLOCKFONTNARROW gpBlockFontNarrow
#define FONT14HUMANIST gp14PointHumanist
auto GetHugeFont() -> INT32;
#define FONT_SHADE_RED 6
#define FONT_SHADE_BLUE 1
#define FONT_SHADE_GREEN 2
#define FONT_SHADE_YELLOW 3
#define FONT_SHADE_NEUTRAL 4
#define FONT_SHADE_WHITE 5
#define FONT_MCOLOR_BLACK 0
#define FONT_MCOLOR_WHITE 208
#define FONT_MCOLOR_DKWHITE 134
#define FONT_MCOLOR_DKWHITE2 134
#define FONT_MCOLOR_LTGRAY 134
#define FONT_MCOLOR_LTGRAY2 134
#define FONT_MCOLOR_DKGRAY 136
#define FONT_MCOLOR_LTBLUE 203
#define FONT_MCOLOR_LTRED 162
#define FONT_MCOLOR_RED 163
#define FONT_MCOLOR_DKRED 164
#define FONT_MCOLOR_LTGREEN 184
#define FONT_MCOLOR_LTYELLOW 144
//Grayscale font colors
#define FONT_WHITE 208 //lightest color
#define FONT_GRAY1 133
#define FONT_GRAY2 134 //light gray
#define FONT_GRAY3 135
#define FONT_GRAY4 136 //gray
#define FONT_GRAY5 137
#define FONT_GRAY6 138
#define FONT_GRAY7 139 //dark gray
#define FONT_GRAY8 140
#define FONT_NEARBLACK 141
#define FONT_BLACK 0 //darkest color
//Color font colors
#define FONT_LTRED 162
#define FONT_RED 163
#define FONT_DKRED 218
#define FONT_ORANGE 76
#define FONT_YELLOW 145
#define FONT_DKYELLOW 80
#define FONT_LTGREEN 184
#define FONT_GREEN 185
#define FONT_DKGREEN 186
#define FONT_LTBLUE 71
#define FONT_BLUE 203
#define FONT_DKBLUE 205
#define FONT_BEIGE 130
#define FONT_METALGRAY 94
#define FONT_BURGUNDY 172
#define FONT_LTKHAKI 88
#define FONT_KHAKI 198
#define FONT_DKKHAKI 201
BOOLEAN InitializeFonts( );
void ShutdownFonts( );
BOOLEAN SetFontShade( UINT32 uiFontID, INT8 bColorID );
#endif