From 34766b82d8c678a437b819fc0eebfe5c06697b88 Mon Sep 17 00:00:00 2001 From: nickysn Date: Tue, 15 Sep 2015 15:03:37 +0000 Subject: [PATCH] + added the win16api font support functions, types and consts git-svn-id: trunk@31700 - --- rtl/win16/win31.pp | 256 ++++++++++++++++++++++++++++++++++++++++ rtl/win16/winprocsh.inc | 27 +++++ rtl/win16/wintypes.inc | 141 ++++++++++++++++++++++ 3 files changed, 424 insertions(+) diff --git a/rtl/win16/win31.pp b/rtl/win16/win31.pp index dc54f5e109..86718685c9 100644 --- a/rtl/win16/win31.pp +++ b/rtl/win16/win31.pp @@ -190,6 +190,234 @@ const COLOR_INACTIVECAPTIONTEXT = 19; COLOR_BTNHIGHLIGHT = 20; +{ Font support } +{ OutPrecision values } + OUT_TT_PRECIS = 4; + OUT_DEVICE_PRECIS = 5; + OUT_RASTER_PRECIS = 6; + OUT_TT_ONLY_PRECIS = 7; + +{ ClipPrecision values } + CLIP_LH_ANGLES = $10; + CLIP_TT_ALWAYS = $20; + CLIP_EMBEDDED = $80; + +{ tmPitchAndFamily values } + TMPF_TRUETYPE = $04; + +type + PPANOSE = ^PANOSE; + LPPANOSE = ^PANOSE; far; + PANOSE = record + bFamilyType: BYTE; + bSerifStyle: BYTE; + bWeight: BYTE; + bProportion: BYTE; + bContrast: BYTE; + bStrokeVariation: BYTE; + bArmStyle: BYTE; + bLetterform: BYTE; + bMidline: BYTE; + bXHeight: BYTE; + end; + TPanose = PANOSE; + + POUTLINETEXTMETRIC = ^OUTLINETEXTMETRIC; + LPOUTLINETEXTMETRIC = ^OUTLINETEXTMETRIC; far; + OUTLINETEXTMETRIC = record + otmSize: UINT; + otmTextMetrics: TEXTMETRIC; + otmFiller: BYTE; + otmPanoseNumber: PANOSE; + otmfsSelection: UINT; + otmfsType: UINT; + otmsCharSlopeRise: SmallInt; + otmsCharSlopeRun: SmallInt; + otmItalicAngle: SmallInt; + otmEMSquare: UINT; + otmAscent: SmallInt; + otmDescent: SmallInt; + otmLineGap: UINT; + otmsCapEmHeight: UINT; + otmsXHeight: UINT; + otmrcFontBox: RECT; + otmMacAscent: SmallInt; + otmMacDescent: SmallInt; + otmMacLineGap: UINT; + otmusMinimumPPEM: UINT; + otmptSubscriptSize: POINT; + otmptSubscriptOffset: POINT; + otmptSuperscriptSize: POINT; + otmptSuperscriptOffset: POINT; + otmsStrikeoutSize: UINT; + otmsStrikeoutPosition: SmallInt; + otmsUnderscorePosition: SmallInt; + otmsUnderscoreSize: SmallInt; + otmpFamilyName: PSTR; + otmpFaceName: PSTR; + otmpStyleName: PSTR; + otmpFullName: PSTR; + end; + TOutlineTextMetric = OUTLINETEXTMETRIC; + +{ Structure passed to FONTENUMPROC } +{ NOTE: NEWTEXTMETRIC is the same as TEXTMETRIC plus 4 new fields } + PNEWTEXTMETRIC = ^NEWTEXTMETRIC; + NPNEWTEXTMETRIC = ^NEWTEXTMETRIC; near; + LPNEWTEXTMETRIC = ^NEWTEXTMETRIC; far; + NEWTEXTMETRIC = record + tmHeight: SmallInt; + tmAscent: SmallInt; + tmDescent: SmallInt; + tmInternalLeading: SmallInt; + tmExternalLeading: SmallInt; + tmAveCharWidth: SmallInt; + tmMaxCharWidth: SmallInt; + tmWeight: SmallInt; + tmItalic: BYTE; + tmUnderlined: BYTE; + tmStruckOut: BYTE; + tmFirstChar: BYTE; + tmLastChar: BYTE; + tmDefaultChar: BYTE; + tmBreakChar: BYTE; + tmPitchAndFamily: BYTE; + tmCharSet: BYTE; + tmOverhang: SmallInt; + tmDigitizedAspectX: SmallInt; + tmDigitizedAspectY: SmallInt; + ntmFlags: DWORD; + ntmSizeEM: UINT; + ntmCellHeight: UINT; + ntmAvgWidth: UINT; + end; + TNewTextMetric = NEWTEXTMETRIC; + +const +{ ntmFlags field flags } + NTM_REGULAR = $00000040; + NTM_BOLD = $00000020; + NTM_ITALIC = $00000001; + + LF_FULLFACESIZE = 64; + +type +{ Structure passed to FONTENUMPROC } + PENUMLOGFONT = ^ENUMLOGFONT; + LPENUMLOGFONT = ^ENUMLOGFONT; far; + ENUMLOGFONT = record + elfLogFont: LOGFONT; + elfFullName: array [0..LF_FULLFACESIZE-1] of char; + elfStyle: array [0..LF_FACESIZE-1] of char; + end; + TEnumLogFont = ENUMLOGFONT; + + FONTENUMPROC = function(lpelf: LPENUMLOGFONT; lpntm: LPNEWTEXTMETRIC; FontType: SmallInt; lpData: LPARAM): SmallInt; far; + +const +{ EnumFonts font type values } + TRUETYPE_FONTTYPE = $0004; + +type + PGLYPHMETRICS = ^GLYPHMETRICS; + LPGLYPHMETRICS = ^GLYPHMETRICS; far; + GLYPHMETRICS = record + gmBlackBoxX: UINT; + gmBlackBoxY: UINT; + gmptGlyphOrigin: POINT; + gmCellIncX: SmallInt; + gmCellIncY: SmallInt; + end; + TGlyphMetrics = GLYPHMETRICS; + + PFIXED = ^FIXED; + LPFIXED = ^FIXED; far; + FIXED = record + fract: UINT; + value: SmallInt; + end; + TFixed = FIXED; + + PMAT2 = ^MAT2; + LPMAT2 = ^MAT2; far; + MAT2 = record + eM11: FIXED; + eM12: FIXED; + eM21: FIXED; + eM22: FIXED; + end; + TMat2 = MAT2; + +const +{ GetGlyphOutline constants } + GGO_METRICS = 0; + GGO_BITMAP = 1; + GGO_NATIVE = 2; + + TT_POLYGON_TYPE = 24; + + TT_PRIM_LINE = 1; + TT_PRIM_QSPLINE = 2; + +type + PPOINTFX = ^POINTFX; + LPPOINTFX = ^POINTFX; far; + POINTFX = record + x: FIXED; + y: FIXED; + end; + TPointFX = POINTFX; + + PTTPOLYCURVE = ^TTPOLYCURVE; + LPTTPOLYCURVE = ^TTPOLYCURVE; far; + TTPOLYCURVE = record + wType: UINT; + cpfx: UINT; + apfx: array [0..0] of POINTFX; + end; + TTTPOLYCURVE = TTPolyCurve; + + PTTPOLYGONHEADER = ^TTPOLYGONHEADER; + LPTTPOLYGONHEADER = ^TTPOLYGONHEADER; far; + TTPOLYGONHEADER = record + cb: DWORD; + dwType: DWORD; + pfxStart: POINTFX; + end; + TTTPolygonHeader = TTPOLYGONHEADER; + + PABC = ^ABC; + LPABC = ^ABC; far; + ABC = record + abcA: SmallInt; + abcB: UINT; + abcC: SmallInt; + end; + TABC = ABC; + + PKERNINGPAIR = ^KERNINGPAIR; + LPKERNINGPAIR = ^KERNINGPAIR; far; + KERNINGPAIR = record + wFirst: WORD; + wSecond: WORD; + iKernAmount: SmallInt; + end; + TKerningPair = KERNINGPAIR; + + PRASTERIZER_STATUS = ^RASTERIZER_STATUS; + LPRASTERIZER_STATUS = ^RASTERIZER_STATUS; far; + RASTERIZER_STATUS = record + nSize: SmallInt; + wFlags: SmallInt; + nLanguageID: SmallInt; + end; + TRasterizer_Status = RASTERIZER_STATUS; + +const +{ bits defined in wFlags of RASTERIZER_STATUS } + TT_AVAILABLE = $0001; + TT_ENABLED = $0002; + function GetFreeSystemResources(SysResource: UINT): UINT; external 'USER'; procedure LogError(err: UINT; lpInfo: FarPointer); external 'KERNEL'; @@ -271,6 +499,34 @@ function GetTextExtentPoint(hdc: HDC; lpszString: LPCSTR; cbString: SmallInt; lp function GetTextExtentPoint(hdc: HDC; lpszString: LPCSTR; cbString: SmallInt; var Size: SIZE): BOOL; external 'GDI'; {$endif} +{ Font support } +function GetAspectRatioFilterEx(hdc: HDC; lpAspectRatio: LPSIZE): BOOL; external 'GDI'; + +function GetOutlineTextMetrics(hdc: HDC; cbData: UINT; lpotm: LPOUTLINETEXTMETRIC): WORD; external 'GDI'; + +function EnumFontFamilies(hdc: HDC; lpszFamily: LPCSTR; fntenmprc: FONTENUMPROC; lParam: LPARAM): SmallInt; external 'GDI'; +function EnumFontFamilies(hdc: HDC; lpszFamily: LPCSTR; fntenmprc: TFarProc; lParam: LPARAM): SmallInt; external 'GDI'; + +function GetFontData(hdc: HDC; dwTable, dwOffset: DWORD; lpvBuffer: FarPointer; cbData: DWORD): DWORD; external 'GDI'; +function CreateScalableFontResource(fHidden: UINT; lpszResourceFile, lpszFontFile, lpszCurrentPath: LPCSTR): BOOL; external 'GDI'; + +function GetGlyphOutline(hdc: HDC; uChar, fuFormat: UINT; lpgm: LPGLYPHMETRICS; cbBuffer: DWORD; lpBuffer: FarPointer; lpmat2: LPMAT2): DWORD; external 'GDI'; +{$ifdef VAR_PARAMS_ARE_FAR} +function GetGlyphOutline(hdc: HDC; uChar, fuFormat: UINT; var gm: GLYPHMETRICS; cbBuffer: DWORD; lpBuffer: FarPointer; var mat2: MAT2): DWORD; external 'GDI'; +{$endif} + +function GetCharABCWidths(hdc: HDC; uFirstChar, uLastChar: UINT; lpabc: LPABC): BOOL; external 'GDI'; +{$ifdef VAR_PARAMS_ARE_FAR} +function GetCharABCWidths(hdc: HDC; uFirstChar, uLastChar: UINT; var abc: ABC): BOOL; external 'GDI'; +{$endif} + +function GetKerningPairs(hdc: HDC; cPairs: SmallInt; lpkrnpair: LPKERNINGPAIR): SmallInt; external 'GDI'; + +function GetRasterizerCaps(lpraststat: LPRASTERIZER_STATUS; cb: SmallInt): BOOL; external 'GDI'; +{$ifdef VAR_PARAMS_ARE_FAR} +function GetRasterizerCaps(var raststat: RASTERIZER_STATUS; cb: SmallInt): BOOL; external 'GDI'; +{$endif} + implementation end. diff --git a/rtl/win16/winprocsh.inc b/rtl/win16/winprocsh.inc index b149f96a5a..b16f60c513 100644 --- a/rtl/win16/winprocsh.inc +++ b/rtl/win16/winprocsh.inc @@ -586,3 +586,30 @@ function SetTextCharacterExtra(hdc: HDC; nExtraSpace: SmallInt): SmallInt; exter function GetTextCharacterExtra(hdc: HDC): SmallInt; external 'GDI'; function SetTextJustification(hdc: HDC; nExtraSpace, cBreakChars: SmallInt): SmallInt; external 'GDI'; + +{ Font support } + +function CreateFont(nHeight, nWidth, nEscapement, nOrientation, fnWeight: SmallInt; + fbItalic, fbUnderline, fbStrikeOut, fbCharSet, + fbOutputPrecision, fbClipPrecision, fbQuality, fbPitchAndFamily: BYTE; lpszFace: LPCSTR): HFONT; external 'GDI'; +function CreateFontIndirect(lplf: LPLOGFONT): HFONT; external 'GDI'; +{$ifdef VAR_PARAMS_ARE_FAR} +function CreateFontIndirect(var lf: LOGFONT): HFONT; external 'GDI'; +{$endif} + +function SetMapperFlags(hdc: HDC; fdwMatch: DWORD): DWORD; external 'GDI'; + +function AddFontResource(lpszFilename: LPCSTR): SmallInt; external 'GDI'; +function RemoveFontResource(lpszFile: LPCSTR): BOOL; external 'GDI'; + +function GetTextFace(hdc: HDC; cbBuffer: SmallInt; lpszFace: LPSTR): SmallInt; external 'GDI'; + +function GetAspectRatioFilter(hdc: HDC): DWORD; external 'GDI'; + +function GetTextMetrics(hdc: HDC; lptm: LPTEXTMETRIC): BOOL; external 'GDI'; +{$ifdef VAR_PARAMS_ARE_FAR} +function GetTextMetrics(hdc: HDC; var tm: TEXTMETRIC): BOOL; external 'GDI'; +{$endif} + +function EnumFonts(hdc: HDC; lpszFace: LPCSTR; fntenmprc: OLDFONTENUMPROC; lParam: LPARAM): SmallInt; external 'GDI'; +function EnumFonts(hdc: HDC; lpszFace: LPCSTR; fntenmprc: TFarProc; lParam: LPARAM): SmallInt; external 'GDI'; diff --git a/rtl/win16/wintypes.inc b/rtl/win16/wintypes.inc index 816a5e162b..5d7920ed1c 100644 --- a/rtl/win16/wintypes.inc +++ b/rtl/win16/wintypes.inc @@ -725,3 +725,144 @@ const type GRAYSTRINGPROC = function(hdc: HDC; lpData: LPARAM; cch: SmallInt): BOOL; far; + +{ Font support } + +const +{ Logical Font } + LF_FACESIZE = 32; + +type + PLOGFONT = ^LOGFONT; + NPLOGFONT = ^LOGFONT; near; + LPLOGFONT = ^LOGFONT; far; + LOGFONT = record + lfHeight: SmallInt; + lfWidth: SmallInt; + lfEscapement: SmallInt; + lfOrientation: SmallInt; + lfWeight: SmallInt; + lfItalic: BYTE; + lfUnderline: BYTE; + lfStrikeOut: BYTE; + lfCharSet: BYTE; + lfOutPrecision: BYTE; + lfClipPrecision: BYTE; + lfQuality: BYTE; + lfPitchAndFamily: BYTE; + lfFaceName: array [0..LF_FACESIZE-1] of char; + end; + TLogFont = LOGFONT; + +const +{ weight values } + FW_DONTCARE = 0; + FW_THIN = 100; + FW_EXTRALIGHT = 200; + FW_LIGHT = 300; + FW_NORMAL = 400; + FW_MEDIUM = 500; + FW_SEMIBOLD = 600; + FW_BOLD = 700; + FW_EXTRABOLD = 800; + FW_HEAVY = 900; + + FW_ULTRALIGHT = FW_EXTRALIGHT; + FW_REGULAR = FW_NORMAL; + FW_DEMIBOLD = FW_SEMIBOLD; + FW_ULTRABOLD = FW_EXTRABOLD; + FW_BLACK = FW_HEAVY; + +{ CharSet values } + ANSI_CHARSET = 0; + DEFAULT_CHARSET = 1; + SYMBOL_CHARSET = 2; + SHIFTJIS_CHARSET = 128; + HANGEUL_CHARSET = 129; + CHINESEBIG5_CHARSET = 136; + OEM_CHARSET = 255; + +{ OutPrecision values } + OUT_DEFAULT_PRECIS = 0; + OUT_STRING_PRECIS = 1; + OUT_CHARACTER_PRECIS = 2; + OUT_STROKE_PRECIS = 3; + +{ ClipPrecision values } + CLIP_DEFAULT_PRECIS = $00; + CLIP_CHARACTER_PRECIS = $01; + CLIP_STROKE_PRECIS = $02; + CLIP_MASK = $0F; + +{ Quality values } + DEFAULT_QUALITY = 0; + DRAFT_QUALITY = 1; + PROOF_QUALITY = 2; + +{ PitchAndFamily pitch values (low 4 bits) } + DEFAULT_PITCH = $00; + FIXED_PITCH = $01; + VARIABLE_PITCH = $02; + +{ PitchAndFamily family values (high 4 bits) } + FF_DONTCARE = $00; + FF_ROMAN = $10; + FF_SWISS = $20; + FF_MODERN = $30; + FF_SCRIPT = $40; + FF_DECORATIVE = $50; + +{ Stock fonts for use with GetStockObject() } + OEM_FIXED_FONT = 10; + ANSI_FIXED_FONT = 11; + ANSI_VAR_FONT = 12; + SYSTEM_FONT = 13; + DEVICE_DEFAULT_FONT = 14; + DEFAULT_PALETTE = 15; + SYSTEM_FIXED_FONT = 16; + + ASPECT_FILTERING = $00000001; + + WM_FONTCHANGE = $001D; + +type + PTEXTMETRIC = ^TEXTMETRIC; + NPTEXTMETRIC = ^TEXTMETRIC; near; + LPTEXTMETRIC = ^TEXTMETRIC; far; + TEXTMETRIC = record + tmHeight: SmallInt; + tmAscent: SmallInt; + tmDescent: SmallInt; + tmInternalLeading: SmallInt; + tmExternalLeading: SmallInt; + tmAveCharWidth: SmallInt; + tmMaxCharWidth: SmallInt; + tmWeight: SmallInt; + tmItalic: BYTE; + tmUnderlined: BYTE; + tmStruckOut: BYTE; + tmFirstChar: BYTE; + tmLastChar: BYTE; + tmDefaultChar: BYTE; + tmBreakChar: BYTE; + tmPitchAndFamily: BYTE; + tmCharSet: BYTE; + tmOverhang: SmallInt; + tmDigitizedAspectX: SmallInt; + tmDigitizedAspectY: SmallInt; + end; + TTextMetric = TEXTMETRIC; + +const +{ tmPitchAndFamily values } + TMPF_FIXED_PITCH = $01; + TMPF_VECTOR = $02; + TMPF_DEVICE = $08; + +type + OLDFONTENUMPROC = function(lplf: LPLOGFONT; lptm: LPTEXTMETRIC; FontType: SmallInt; lpData: LPARAM): SmallInt; far; + +const +{ EnumFonts font type values } + RASTER_FONTTYPE = $0001; + DEVICE_FONTTYPE = $0002;