Răsfoiți Sursa

+ added the win16api font support functions, types and consts

git-svn-id: trunk@31700 -
nickysn 10 ani în urmă
părinte
comite
34766b82d8
3 a modificat fișierele cu 424 adăugiri și 0 ștergeri
  1. 256 0
      rtl/win16/win31.pp
  2. 27 0
      rtl/win16/winprocsh.inc
  3. 141 0
      rtl/win16/wintypes.inc

+ 256 - 0
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.

+ 27 - 0
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';

+ 141 - 0
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;