15#include FT_TYPE1_TABLES_H
16#include FT_TRUETYPE_TABLES_H
17#include FT_TRUETYPE_TAGS_H
18#include FT_TRIGONOMETRY_H
22#include FT_SFNT_NAMES_H
23#include FT_SYNTHESIS_H
24#include FT_TRUETYPE_IDS_H
26#ifndef FT_INTERNAL_INTERNAL_H
27 #define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
28 #include FT_INTERNAL_INTERNAL_H
30#include FT_INTERNAL_TRUETYPE_TYPES_H
39#ifndef _TMPF_VARIABLE_PITCH
40 #define _TMPF_VARIABLE_PITCH TMPF_FIXED_PITCH
44#define EMUBOLD_NEEDED(original, request) \
45 (((request) != FW_DONTCARE) && ((request) - (original) >= FW_BOLD - FW_MEDIUM))
53#define gmxWorldToDeviceDefault gmxWorldToPageDefault
59 RTL_CONSTANT_STRING(
L"\\REGISTRY\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts");
70#define IntLockGlobalFonts() \
71 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(g_FontListLock)
73#define IntUnLockGlobalFonts() \
74 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(g_FontListLock)
76#define ASSERT_GLOBALFONTS_LOCK_HELD() \
77 ASSERT(g_FontListLock->Owner == KeGetCurrentThread())
79#define IntLockFreeType() \
80 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(g_FreeTypeLock)
82#define IntUnLockFreeType() \
83 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(g_FreeTypeLock)
85#define ASSERT_FREETYPE_LOCK_HELD() \
86 ASSERT(g_FreeTypeLock->Owner == KeGetCurrentThread())
88#define ASSERT_FREETYPE_LOCK_NOT_HELD() \
89 ASSERT(g_FreeTypeLock->Owner != KeGetCurrentThread())
91#define MAX_FONT_CACHE 256
123#define MAXTCIINDEX 32
208 Cache->OutlineRequiredSize = 0;
242 Ptr->IsMapping = IsMapping;
243 DPRINT(
"Creating SharedMem for %p (%i, %p)\n",
Buffer, IsMapping,
Ptr);
278 CurrentEntry = NextEntry)
281 NextEntry = CurrentEntry->
Flink;
295 if (
Ptr->RefCount <= 0)
299 if (
Ptr->RefCount == 0)
301 DPRINT(
"Releasing SharedMem for %p (%i, %p)\n",
Ptr->Buffer,
Ptr->IsMapping,
Ptr);
323 if (
Ptr->RefCount <= 0)
327 if (
Ptr->RefCount == 0)
329 DPRINT(
"Releasing SharedFace for %s\n",
Ptr->Face->family_name ?
Ptr->Face->family_name :
"<NULL>");
371 pt->x.fract = (
vec->
x & 0x3f) << 10;
372 pt->x.fract |= ((
pt->x.fract >> 6) | (
pt->x.fract >> 12));
374 pt->y.fract = (
vec->
y & 0x3f) << 10;
375 pt->y.fract |= ((
pt->y.fract >> 6) | (
pt->y.fract >> 12));
392 const char *style_name;
411 style_name =
"<invalid>";
414 DPRINT(
"family_name '%s', style_name '%s', FaceName '%wZ', StyleName '%wZ', FontGDI %p, "
415 "FontObj %p, iUnique %lu, SharedFace %p, Face %p, CharSet %u, Filename '%S'\n",
434 DPRINT(
"## DumpFontList(%p)\n", Head);
439 DumpFontEntry(CurrentEntry);
445 DPRINT(
"%wZ,%u -> %wZ,%u\n",
458 DPRINT(
"## DumpFontSubstList\n");
460 for (pListEntry = pHead->
Flink;
462 pListEntry = pListEntry->
Flink)
467 DumpFontSubstEntry(pSubstEntry);
471VOID DumpPrivateFontList(
BOOL bDoLock)
487VOID DumpGlobalFontList(
BOOL bDoLock)
500 DumpGlobalFontList(bDoLock);
501 DumpPrivateFontList(bDoLock);
518 BYTE InfoBuffer[128];
527 L"Microsoft\\Windows NT\\CurrentVersion\\"
543 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
556 InfoBuffer,
sizeof(InfoBuffer), &
Length);
570 DPRINT(
"RtlCreateUnicodeString failed\n");
576 InfoBuffer,
sizeof(InfoBuffer), &
Length);
592 DPRINT(
"RtlCreateUnicodeString failed\n");
634 DPRINT(
"ExAllocatePoolWithTag failed\n");
682 DPRINT1(
"FT_Init_FreeType failed with error code 0x%x\n", ulError);
688 DPRINT1(
"Fonts registry is empty.\n");
705 nTenthsOfDegrees %= 360 * 10;
706 if (nTenthsOfDegrees >= 0)
707 return nTenthsOfDegrees;
708 return nTenthsOfDegrees + 360 * 10;
717 pmat->
xx = vecAngle.
x;
718 pmat->
xy = -vecAngle.
y;
719 pmat->
yx = -pmat->
xy;
756 BYTE RequestedCharSet,
767 for (pListEntry = pHead->
Flink;
769 pListEntry = pListEntry->
Flink)
855 UINT RecurseCount = 5;
866 while (RecurseCount-- > 0)
869 &OutputNameW, &InputNameW,
940 if (DirInfoBuffer ==
NULL)
958 Status = ZwQueryDirectoryFile(
1009 bRestartScan =
FALSE;
1025 if (CodePageRange1 == 0)
1030 for (BitIndex = 0; BitIndex <
MAXTCIINDEX; ++BitIndex)
1032 if (CodePageRange1 & (1 << BitIndex))
1035 if ((nIndex >= 0) && (nCount == (
UINT)nIndex))
1047#define PX2PT(pixels) FT_MulDiv((pixels), 72, 96)
1071 if (SharedFace ==
NULL && CharSetIndex == -1)
1079 ((FontIndex != -1) ? FontIndex : 0),
1095 if (
Error == FT_Err_Unknown_File_Format)
1096 DPRINT1(
"Unknown font file format\n");
1098 DPRINT1(
"Error reading font (error code: %d)\n",
Error);
1104 Face = SharedFace->
Face;
1252 if (pOS2 && os2_version >= 1)
1259 for (BitIndex = 0; BitIndex <
MAXTCIINDEX; ++BitIndex)
1261 if (os2_ulCodePageRange1 & (1 << BitIndex))
1266 if ((CharSetIndex == -1 && CharSetCount == 0) ||
1267 CharSetIndex == CharSetCount)
1292 DPRINT(
"Font loaded: %s (%s)\n",
1299 Entry->Font = FontGDI;
1300 Entry->NotEnum = (Characteristics & FR_NOT_ENUM);
1302 if (Characteristics & FR_PRIVATE)
1318 if (FontIndex == -1)
1335 if (CharSetIndex == -1)
1340 if (
Entry->StyleName.Length)
1341 NameLength +=
Entry->StyleName.Length +
sizeof(
WCHAR);
1369 *pValueName = NewString;
1371 if (
Entry->StyleName.Length)
1377 for (
i = 1;
i < CharSetCount; ++
i)
1411 default:
return L"Unknown";
1450 RtlInitEmptyUnicodeString(&PathName, pszBuffer,
Length);
1473 DPRINT1(
"Could not load font file: %wZ\n", &PathName);
1482 DPRINT1(
"ObReferenceObjectByHandle failed.\n");
1495 DPRINT1(
"Could not map file: %wZ\n", &PathName);
1506 DPRINT1(
"Could not map file: %wZ\n", &PathName);
1515 LoadFont.Characteristics = Characteristics;
1545 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
1568 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
1594 pFileName = PathName.
Buffer;
1629 if (!lpszPath || !*lpszPath)
1631 if (*lpszPath ==
L'\\' || (*lpszPath && lpszPath[1] ==
L':'))
1666 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
1679 DPRINT1(
"ExAllocatePoolWithTag failed\n");
1685 for (
i = 0;
i < KeyFullInfo.
Values; ++
i)
1689 InfoBuffer, InfoSize, &
Length);
1698 DPRINT1(
"ExAllocatePoolWithTag failed\n");
1703 InfoBuffer, InfoSize, &
Length);
1718 DPRINT1(
"RtlCreateUnicodeString failed\n");
1724 InfoBuffer, InfoSize, &
Length);
1733 DPRINT1(
"ExAllocatePoolWithTag failed\n");
1738 InfoBuffer, InfoSize, &
Length);
1758 L"\\SystemRoot\\Fonts\\%s", pchPath);
1785 return (KeyFullInfo.
Values != 0 && nFontCount != 0);
1806 LoadFont.Characteristics = FR_PRIVATE | FR_NOT_ENUM;
1822 if (EntryCollection)
1830 Ret = EntryCollection->
Handle;
1891 if (CurrentEntry->
Handle == hMMFont)
1893 EntryCollection = CurrentEntry;
1900 if (EntryCollection)
1917 DPRINT(
"IntGdiCleanupPrivateFontsForProcess()\n");
1920 EntryCollection =
NULL;
1931 if (EntryCollection)
2007 if (lf->lfEscapement != lf->lfOrientation)
2101 int Ascent, Descent;
2158 - ((Ascent + Descent)
2160 YScale) + 32) >> 6);
2349 Names->OtmSize = OtmSize;
2423 if (
Size == 0 &&
Cache->OutlineRequiredSize > 0)
2426 return Cache->OutlineRequiredSize;
2436 return Cache->OutlineRequiredSize;
2441 if (Size < Cache->OutlineRequiredSize)
2443 DPRINT1(
"Size %u < OutlineRequiredSize %u\n",
Size,
2444 Cache->OutlineRequiredSize);
2462 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
2470 DPRINT1(
"Can't find HHEA table - not TT font?\n");
2491#define SCALE_X(value) ((FT_MulFix((value), XScale) + 32) >> 6)
2492#define SCALE_Y(value) ((FT_MulFix((value), YScale) + 32) >> 6)
2540 return Cache->OutlineRequiredSize;
2607 INT i,
Count, BestIndex, Score, BestScore;
2648 if (
Name.name_id != NameID)
2661 (
Name.string[0] == 0 &&
Name.string[1] == 0))
2685 if (Score > BestScore)
2745 if (!
Cache->FontFamily.Buffer)
2753 if (!
Cache->FullName.Buffer)
2797 Lf = &
Info->EnumLogFontEx.elfLogFont;
2810 Ntm = &
Info->NewTextMetricEx.ntmTm;
2855 sizeof(
Info->EnumLogFontEx.elfFullName),
2859 StyleW.
Buffer =
Info->EnumLogFontEx.elfStyle;
2903 if (
fs.fsCsb[0] == 0)
2910 case FT_ENCODING_UNICODE:
2911 case FT_ENCODING_APPLE_ROMAN:
2914 case FT_ENCODING_MS_SYMBOL:
2926 if (
fs.fsCsb[0] & fs0)
2938 DPRINT1(
"Unknown elfscript for bit %u\n",
i);
2943 Info->NewTextMetricEx.ntmFontSig =
fs;
2963 FontGDI = CurrentEntry->
Font;
3090 const DWORD *pdw = pv;
3106 DWORD dwHash = pCache->dwHash;
3112 CurrentEntry = CurrentEntry->
Flink)
3115 if (FontEntry->
dwHash == dwHash &&
3117 FontEntry->
Hashed.
Face == pCache->Hashed.Face &&
3155 DPRINT1(
"Failure getting glyph.\n");
3163 DPRINT1(
"Failure rendering glyph.\n");
3171 DPRINT1(
"Conversion failed\n");
3177 BitmapGlyph->
bitmap = AlignedBitmap;
3198 DPRINT1(
"Failure caching glyph.\n");
3206 DPRINT1(
"Failure rendering glyph.\n");
3213 DPRINT1(
"Alloc failure caching glyph.\n");
3222 DPRINT1(
"Conversion failed\n");
3230 BitmapGlyph->
bitmap = AlignedBitmap;
3251 int needed = 0,
point = 0, contour, first_pt;
3252 unsigned int pph_start, cpfx;
3255 for (contour = 0; contour <
outline->n_contours; contour++)
3272 needed +=
sizeof(*pph);
3274 while (point <= outline->contours[contour])
3286 }
while (point <= outline->contours[contour] &&
3298 else if (point <= outline->contours[contour] &&
3312 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
3315 pph->
cb = needed - pph_start;
3338 int contour,
point = 0, first_pt;
3343 unsigned int needed = 0;
3345 for (contour = 0; contour <
outline->n_contours; contour++)
3355 needed +=
sizeof(*pph);
3357 while (point <= outline->contours[contour])
3384 cubic_control[0].
x >>= 1;
3385 cubic_control[0].
y >>= 1;
3388 cubic_control[3] =
outline->points[first_pt];
3396 cubic_control[3].
x >>= 1;
3397 cubic_control[3].
y >>= 1;
3402 cubic_control[1].
x = (2 *
outline->points[
point].x + 1) / 3;
3403 cubic_control[1].
y = (2 *
outline->points[
point].y + 1) / 3;
3404 cubic_control[2] = cubic_control[1];
3405 cubic_control[1].
x += (cubic_control[0].
x + 1) / 3;
3406 cubic_control[1].
y += (cubic_control[0].
y + 1) / 3;
3407 cubic_control[2].
x += (cubic_control[3].
x + 1) / 3;
3408 cubic_control[2].
y += (cubic_control[3].
y + 1) / 3;
3418 }
while (point <= outline->contours[contour] &&
3424 if (point <= outline->contours[contour] &&
3436 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
3439 pph->
cb = needed - pph_start;
3453 LONG Ascent, Descent, Sum, EmHeight, Width64;
3455 lfWidth =
abs(lfWidth);
3460 DPRINT(
"lfHeight and lfWidth are zero.\n");
3483 if (!pOS2 || !pHori)
3488 DPRINT1(
"%s: Failed to request font size.\n",
face->family_name);
3512#define FM_SEL_USE_TYPO_METRICS 0x80
3521 Sum = Ascent + Descent;
3534 else if (lfHeight < 0)
3550#undef FM_SEL_USE_TYPO_METRICS
3557 EmHeight =
max(EmHeight, 1);
3570 Width64 = (
FT_MulDiv(lfWidth, 96 * 5, 72 * 3) << 6);
3576 req.
width = Width64;
3577 req.
height = (EmHeight << 6);
3601 DPRINT(
"WARNING: No charmap selected!\n");
3602 DPRINT(
"This font face has %d charmaps\n",
face->num_charmaps);
3605 for (
n = 0;
n <
face->num_charmaps;
n++)
3607 charmap =
face->charmaps[
n];
3608 if (charmap->
encoding == FT_ENCODING_UNICODE)
3616 for (
n = 0;
n <
face->num_charmaps;
n++)
3618 charmap =
face->charmaps[
n];
3628 for (
n = 0;
n <
face->num_charmaps;
n++)
3630 charmap =
face->charmaps[
n];
3631 if (charmap->
encoding == FT_ENCODING_MS_SYMBOL)
3638 if (!found &&
face->num_charmaps > 0)
3640 found =
face->charmaps[0];
3644 DPRINT1(
"WARNING: Could not find desired charmap!\n");
3652 DPRINT1(
"WARNING: Could not set the charmap!\n");
3678 if (glyph < 0x100) glyph += 0xf000;
3706 if (
flags & indexed_flag)
3731 BOOL bIgnoreRotation)
3758 cjBuf, pvBuf, pmat2);
3760 pdcattr =
dc->pdcattr;
3820 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
3828 if (aveWidth && potm)
3857 DPRINT(
"Advance = %d, lsb = %d, bbx = %d\n",adv, lsb, bbx);
3874 needsTransform =
TRUE;
3888 needsTransform =
TRUE;
3896 DPRINT(
"Rotation Trans!\n");
3899 needsTransform =
TRUE;
3906 DPRINT(
"MAT2 Matrix Trans!\n");
3912 needsTransform =
TRUE;
3917 if (!needsTransform)
3919 DPRINT(
"No Need to be Transformed!\n");
3930 for (xc = 0; xc < 2; xc++)
3932 for (yc = 0; yc < 2; yc++)
3940 if (xc == 0 && yc == 0)
3971 DPRINT(
"CX %d CY %d BBX %u BBY %u GOX %d GOY %d\n",
3981 DPRINT(
"GGO_METRICS Exit!\n");
3998 pitch = ((
width + 31) >> 5) << 2;
4001 if (!pvBuf || !
cjBuf)
break;
4026 ft_bitmap.
pitch = pitch;
4028 ft_bitmap.
buffer = pvBuf;
4055 unsigned int mult,
row, col;
4060 pitch = (
width + 3) / 4 * 4;
4063 if (!pvBuf || !
cjBuf)
break;
4077 for (
x = 0; (
UINT)
x < pitch;
x++)
4079 if (x < ft_face->glyph->bitmap.width)
4080 dst[
x] = (
src[
x / 8] & (1 << ( (7 - (
x % 8))))) ? 0xff : 0;
4093 ft_bitmap.
pitch = pitch;
4095 ft_bitmap.
buffer = pvBuf;
4122 for (col = 0; col <
width; col++,
ptr++)
4124 *
ptr = (((
int)*
ptr) * mult + 128) / 256;
4150 if (!pvBuf || !
cjBuf)
4170 if (needsTransform && pvBuf)
4178 if (!pvBuf || !
cjBuf)
4192 DPRINT(
"ftGdiGetGlyphOutline END and needed %lu\n", needed);
4213 if (
Cache->Hashed.Aspect.EmuBoldItalic)
4218 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %d]\n",
4219 Cache->Hashed.GlyphIndex);
4223 glyph =
Cache->Hashed.Face->glyph;
4225 if (
Cache->Hashed.Aspect.Emu.Bold)
4227 if (
Cache->Hashed.Aspect.Emu.Italic)
4242 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %d]\n",
Cache->Hashed.GlyphIndex);
4246 glyph =
Cache->Hashed.Face->glyph;
4251 DPRINT1(
"Failed to render glyph! [index: %d]\n",
Cache->Hashed.GlyphIndex);
4270 INT glyph_index,
i, previous, nTenthsOfDegrees;
4273 BOOL use_kerning, bVerticalWriting;
4274 LONG ascender, descender;
4293 bVerticalWriting = ((nTenthsOfDegrees == 90 * 10) || (nTenthsOfDegrees == 270 * 10));
4312 Cache.Hashed.GlyphIndex = glyph_index;
4319 if (use_kerning && previous && glyph_index)
4323 TotalWidth64 += delta.
x;
4328 if (((TotalWidth64 + 32) >> 6) <= MaxExtent &&
NULL != Fit)
4334 Dx[
i] = (TotalWidth64 + 32) >> 6;
4338 if (
Cache.Hashed.Aspect.EmuBoldItalic)
4343 previous = glyph_index;
4351 if (bVerticalWriting)
4353 Size->cx = ascender + descender;
4354 Size->cy = (TotalWidth64 + 32) >> 6;
4358 Size->cx = (TotalWidth64 + 32) >> 6;
4359 Size->cy = ascender + descender;
4386 pdcattr = Dc->pdcattr;
4422 DPRINT(
"Csb 1=%x 0=%x\n",
fs.fsCsb[1],
fs.fsCsb[0]);
4423 if (
fs.fsCsb[0] == 0)
4429 case FT_ENCODING_UNICODE:
4430 case FT_ENCODING_APPLE_ROMAN:
4433 case FT_ENCODING_MS_SYMBOL:
4460 if (
fs.fsCsb[0] & fs0)
4470 DPRINT1(
"TCI failing on %x\n", fs0);
4484 DWORD num_ranges = 0;
4489 DPRINT1(
"FIXME: No charmap selected! This is a BUG!\n");
4493 if (
face->charmap->encoding == FT_ENCODING_UNICODE)
4496 FT_ULong char_code, char_code_prev;
4500 DPRINT(
"Face encoding FT_ENCODING_UNICODE, number of glyphs %ld, first glyph %u, first char %04lx\n",
4501 face->num_glyphs, glyph_code, char_code);
4503 if (!glyph_code)
return 0;
4507 glyphset->ranges[0].wcLow = (
USHORT)char_code;
4508 glyphset->ranges[0].cGlyphs = 0;
4509 glyphset->cGlyphsSupported = 0;
4515 if (char_code < char_code_prev)
4517 DPRINT1(
"Expected increasing char code from FT_Get_Next_Char\n");
4520 if (char_code - char_code_prev > 1)
4525 glyphset->ranges[num_ranges - 1].wcLow = (
USHORT)char_code;
4526 glyphset->ranges[num_ranges - 1].cGlyphs = 1;
4527 glyphset->cGlyphsSupported++;
4532 glyphset->ranges[num_ranges - 1].cGlyphs++;
4533 glyphset->cGlyphsSupported++;
4535 char_code_prev = char_code;
4540 DPRINT1(
"Encoding %i not supported\n",
face->charmap->encoding);
4542 size =
sizeof(GLYPHSET) +
sizeof(WCRANGE) * (num_ranges - 1);
4545 glyphset->cbThis =
size;
4546 glyphset->cRanges = num_ranges;
4547 glyphset->flAccel = 0;
4583 pdcattr =
dc->pdcattr;
4585 if (
NULL != TextObj)
4612 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
4619 DPRINT1(
"Can't find HHEA table - not TT font?\n");
4668 (
Table << 8 & 0xFF0000);
4690#define GOT_PENALTY(name, value) Penalty += (value)
4696 const char * style_name)
4862 fNeedScaling =
TRUE;
4871 fNeedScaling =
TRUE;
4917 fNeedScaling =
TRUE;
5026 DPRINT(
"WARNING: Penalty:%ld < 200: RequestedNameW:%ls, "
5027 "ActualNameW:%ls, lfCharSet:%d, lfWeight:%ld, "
5028 "tmCharSet:%d, tmWeight:%ld\n",
5049 UINT OtmSize, OldOtmSize = 0;
5066 FontGDI = CurrentEntry->
Font;
5072 if (OtmSize > OldOtmSize)
5090 OldOtmSize = OtmSize;
5093 if (*MatchPenalty == 0xFFFFFFFF || Penalty < *MatchPenalty)
5095 *FontObj =
GDIToObj(FontGDI, FONT);
5096 *MatchPenalty = Penalty;
5205 if (
NULL == TextObj)
5224 SubstitutedLogFont = *pLogFont;
5229 MatchPenalty = 0xFFFFFFFF;
5248 DPRINT1(
"Request font %S not found, no fonts loaded at all\n",
5330 DPRINT(
"ZwOpenFile() failed (Status = 0x%lx)\n",
Status);
5338 DPRINT(
"ZwQueryObject() failed (Status = %lx)\n",
Status);
5394 const ULONG MaxFamInfo = 64;
5399 DPRINT(
"IntGdiGetFontResourceInfo: dwType == %lu\n", dwType);
5420 if (!NameInfo1 || !NameInfo2 || !FamInfo)
5437 ListEntry = ListEntry->
Flink)
5465 if (
Count >= MaxFamInfo)
5475 if (
Count == 0 && dwType != 5)
5511 Size +=
wcslen(FamInfo[
i].EnumLogFontEx.elfLogFont.lfFaceName);
5512 if (FamInfo[
i].EnumLogFontEx.elfStyle[0] &&
5513 _wcsicmp(FamInfo[
i].EnumLogFontEx.elfStyle,
L"Regular") != 0)
5515 Size += 1 +
wcslen(FamInfo[
i].EnumLogFontEx.elfStyle);
5660 Info->dwUnknown = -1;
5677 FT_UInt previous_index = 0, glyph_index = 0;
5687 if (previous_index && glyph_index)
5691 if (pKerningPair && cPairs)
5693 pKerningPair[
i].
wFirst = char_previous;
5694 pKerningPair[
i].
wSecond = char_code;
5697 if (
i == cPairs)
break;
5701 previous_index = glyph_index;
5702 char_previous = char_code;
5723 LONG AvailCount = 0;
5765 LONG GotCount, AvailCount, SafeInfoCount;
5768 if (UnsafeLogFont ==
NULL || UnsafeInfo ==
NULL || UnsafeInfoCount ==
NULL)
5793 if (SafeInfoCount <= 0)
5816 GotCount =
min(AvailCount, SafeInfoCount);
5817 SafeInfoCount = AvailCount;
5896 Cache->Hashed.GlyphIndex = glyph_index;
5903 if (use_kerning && previous && glyph_index)
5930 if (
Cache->Hashed.Aspect.EmuBoldItalic)
5933 previous = glyph_index;
5956 Rect.left =
Rect.right = pPoints[0].x;
5957 Rect.top =
Rect.bottom = pPoints[0].y;
5958 for (
i = 1;
i < cPoints; ++
i)
5963 else if (
Rect.right <
x)
5969 else if (
Rect.bottom <
y)
6043 SURFOBJ *SurfObj, *SourceGlyphSurf;
6048 LONGLONG X64, Y64, RealXStart64, RealYStart64, DeltaX64, DeltaY64;
6050 RECTL DestRect, MaskRect;
6059 FT_Vector delta, vecAscent64, vecDescent64;
6061 BOOL use_kerning, bResult, DoBreak;
6084 if (!
dc->dclevel.pSurface)
6091 pdcattr =
dc->pdcattr;
6110 psurf =
dc->dclevel.pSurface;
6135 &
dc->eboBackground.BrushObject);
6136 fuOptions &= ~ETO_OPAQUE;
6147 if (TextObj ==
NULL)
6153 FontObj = TextObj->
Font;
6192 vecAscent64.
y = (FontGDI->
tmAscent << 6);
6199#define VALIGN_MASK (TA_TOP | TA_BASELINE | TA_BOTTOM)
6206 RealXStart64 -= vecDescent64.
x;
6207 RealYStart64 += vecDescent64.
y;
6211 RealXStart64 -= vecAscent64.
x;
6212 RealYStart64 += vecAscent64.
y;
6231 RealXStart64 -= DeltaX64 / 2;
6232 RealYStart64 -= DeltaY64 / 2;
6236 RealXStart64 -= DeltaX64;
6237 RealYStart64 -= DeltaY64;
6243 INT X0 = (RealXStart64 + vecAscent64.
x + 32) >> 6;
6244 INT Y0 = (RealYStart64 - vecAscent64.
y + 32) >> 6;
6245 INT DX = (DeltaX64 >> 6);
6246 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
6248 INT CY = (vecAscent64.
y - vecDescent64.
y + 32) >> 6;
6253 INT DY = (DeltaY64 >> 6);
6254 INT X1 = ((RealXStart64 + vecDescent64.
x + 32) >> 6);
6255 INT Y1 = ((RealYStart64 - vecDescent64.
y + 32) >> 6);
6259 { X0 +
DX, Y0 + DY },
6260 { X1 +
DX, Y1 + DY },
6287 Cache.Hashed.GlyphIndex = glyph_index;
6297 if (use_kerning && previous && glyph_index &&
NULL == Dx)
6304 DPRINT(
"X64, Y64: %I64d, %I64d\n", X64, Y64);
6313 DestRect.
left = ((X64 + 32) >> 6) + realglyph->
left;
6315 DestRect.
top = ((Y64 + 32) >> 6) - realglyph->
top;
6319 if ((bitSize.
cx != 0) && (bitSize.
cy != 0))
6331 DPRINT1(
"WARNING: EngCreateBitmap() failed!\n");
6333 if (
Cache.Hashed.Aspect.EmuBoldItalic)
6339 if (!SourceGlyphSurf)
6342 DPRINT1(
"WARNING: EngLockSurface() failed!\n");
6344 if (
Cache.Hashed.Aspect.EmuBoldItalic)
6377 &
dc->eboText.BrushObject,
6380 DPRINT1(
"Failed to MaskBlt a glyph!\n");
6389 if (
Cache.Hashed.Aspect.EmuBoldItalic)
6414 DPRINT(
"New X64, New Y64: %I64d, %I64d\n", X64, Y64);
6416 previous = glyph_index;
6418 if (
Cache.Hashed.Aspect.EmuBoldItalic)
6433 DeltaX64 = X64 - RealXStart64;
6434 DeltaY64 = Y64 - RealYStart64;
6436 if (!
face->units_per_EM)
6444 face->underline_position *
face->size->metrics.y_ppem /
face->units_per_EM;
6446 face->underline_thickness *
face->size->metrics.y_ppem /
face->units_per_EM;
6456 vecB64.
y = vecA64.
y + (thickness << 6);
6460 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
6461 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
6462 INT DX = (DeltaX64 >> 6);
6463 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
6465 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
6470 INT DY = (DeltaY64 >> 6);
6471 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
6472 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
6476 { X0 +
DX, Y0 + DY },
6477 { X1 +
DX, Y1 + DY },
6488 vecA64.
y = -(FontGDI->
tmAscent << 6) / 3;
6490 vecB64.
y = vecA64.
y + (thickness << 6);
6494 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
6495 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
6496 INT DX = (DeltaX64 >> 6);
6497 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
6499 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
6504 INT DY = (DeltaY64 >> 6);
6505 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
6506 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
6510 { X0 +
DX, Y0 + DY },
6511 { X1 +
DX, Y1 + DY },
6528 if (TextObj !=
NULL)
6575#define STACK_TEXT_BUFFER_SIZE 100
6663 SafeRect = *UnsafeRect;
6689 if (
Buffer != LocalBuffer)
6766 if (SafeBuff ==
NULL)
6787 pdcattr =
dc->pdcattr;
6793 if (TextObj ==
NULL)
6811 charmap =
face->charmaps[
i];
6821 DPRINT1(
"WARNING: Could not find desired charmap!\n");
6843 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
6857 left = (
INT)
face->glyph->metrics.horiBearingX & -64;
6858 right = (
INT)((
face->glyph->metrics.horiBearingX +
face->glyph->metrics.width) + 63) & -64;
6859 adv = (
face->glyph->advance.x + 32) >> 6;
6873 SafeBuffF[
i - FirstChar].
abcfC = (
FLOAT) (adv - lsb - bbx);
6877 SafeBuff[
i - FirstChar].
abcA = lsb;
6878 SafeBuff[
i - FirstChar].
abcB = bbx;
6879 SafeBuff[
i - FirstChar].
abcC = adv - lsb - bbx;
6897 DPRINT(
"NtGdiGetCharABCWidths Worked!\n");
6958 if (!
fl) SafeBuffF = (
PFLOAT) SafeBuff;
6959 if (SafeBuff ==
NULL)
6978 pdcattr =
dc->pdcattr;
6983 if (TextObj ==
NULL)
7000 charmap =
face->charmaps[
i];
7010 DPRINT1(
"WARNING: Could not find desired charmap!\n");
7032 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
7044 SafeBuffF[
i - FirstChar] = (
FLOAT) ((
face->glyph->advance.x + 32) >> 6);
7046 SafeBuff[
i - FirstChar] = (
face->glyph->advance.x + 32) >> 6;
7085 WCHAR DefChar = 0xffff;
7100 if (!UnSafepwc && !UnSafepgi && cwc > 0)
7102 DPRINT1(
"!UnSafepwc && !UnSafepgi && cwc > 0\n");
7106 if (!UnSafepwc != !UnSafepgi)
7108 DPRINT1(
"UnSafepwc == %p, UnSafepgi = %p\n", UnSafepwc, UnSafepgi);
7119 pdcattr =
dc->pdcattr;
7133 if (!UnSafepwc && !UnSafepgi)
7148 DPRINT1(
"ExAllocatePoolWithTag\n");
7191 pwcSize = cwc *
sizeof(
WCHAR);
7219 for (
i = 0;
i < cwc;
i++)
7245 if (Safepwc !=
NULL)
NTSTATUS NTAPI MmUnmapViewInSystemSpace(IN PVOID MappedBase)
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
#define FILE_DIRECTORY_FILE
__inline USHORT Length(VOID)
__inline PWCHAR Buffer(VOID)
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
FORCEINLINE PMATRIX DC_pmxWorldToDevice(PDC pdc)
static BOOLEAN IntLPtoDP(DC *pdc, PPOINTL ppt, UINT count)
VOID FASTCALL DC_vPrepareDCsForBlit(PDC pdcDest, const RECT *rcDest, PDC pdcSrc, const RECT *rcSrc)
VOID FASTCALL DC_vFinishBlit(PDC pdc1, PDC pdc2)
FORCEINLINE VOID DC_UnlockDc(PDC pdc)
VOID FASTCALL DC_vUpdateTextBrush(PDC pdc)
VOID FASTCALL DC_vUpdateBackgroundBrush(PDC pdc)
#define ASSERT_DC_PREPARED(pdc)
FORCEINLINE PDC DC_LockDc(HDC hdc)
#define ERROR_NOT_ENOUGH_MEMORY
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
#define ERROR_INVALID_HANDLE
#define TT_MS_ID_UNICODE_CS
#define TT_PLATFORM_MICROSOFT
#define TT_MS_ID_SYMBOL_CS
#define TT_PLATFORM_APPLE_UNICODE
static void cleanup(void)
static void CharSet(RTF_Info *info)
struct png_info_def *typedef unsigned char **typedef struct png_info_def *typedef struct png_info_def *typedef struct png_info_def *typedef unsigned char ** row
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
static const WCHAR Cleanup[]
#define GDIToObj(ClipGDI, Type)
#define ObjToGDI(ClipObj, Type)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define ExInitializePushLock
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
struct _FileName FileName
static const FLOATOBJ gef1
#define FLOATOBJ_Set1(fo)
#define FLOATOBJ_Equal1(pf)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
BOOL LoadFont(LPWSTR lpCmdLine)
__kernel_entry W32KAPI DWORD APIENTRY NtGdiGetGlyphIndicesW(_In_ HDC hdc, _In_reads_opt_(cwc) LPCWSTR pwc, _In_ INT cwc, _Out_writes_opt_(cwc) LPWORD pgi, _In_ DWORD iMode)
BOOL FASTCALL TextIntUpdateSize(PDC dc, PTEXTOBJ TextObj, PFONTGDI FontGDI, BOOL bDoLock)
VOID APIENTRY IntEngFillPolygon(IN OUT PDC dc, IN POINTL *pPoints, IN UINT cPoints, IN BRUSHOBJ *BrushObj)
static BOOLEAN FASTCALL GetFontFamilyInfoForList(const LOGFONTW *LogFont, PFONTFAMILYINFO Info, LPCWSTR NominalName, LONG *pCount, LONG MaxCount, PLIST_ENTRY Head)
DWORD FASTCALL ftGdiGetKerningPairs(PFONTGDI Font, DWORD cPairs, LPKERNINGPAIR pKerningPair)
#define ASSERT_FREETYPE_LOCK_NOT_HELD()
static const CHARSETINFO g_FontTci[MAXTCIINDEX]
LONG FASTCALL IntGetFontFamilyInfo(HDC Dc, const LOGFONTW *SafeLogFont, PFONTFAMILYINFO SafeInfo, LONG InfoCount)
static PFAST_MUTEX g_FreeTypeLock
VOID FASTCALL IntGdiCleanupMemEntry(PFONT_ENTRY_MEM Head)
static UINT GetFontPenalty(const LOGFONTW *LogFont, const OUTLINETEXTMETRICW *Otm, const char *style_name)
static BOOL face_has_symbol_charmap(FT_Face ft_face)
static DWORD IntGetHash(IN LPCVOID pv, IN DWORD cdw)
static BOOL FASTCALL IntGetFullFileName(POBJECT_NAME_INFORMATION NameInfo, ULONG Size, PUNICODE_STRING FileName)
static FT_Error IntRequestFontSize(PDC dc, PFONTGDI FontGDI, LONG lfWidth, LONG lfHeight)
static void SharedMem_AddRef(PSHARED_MEM Ptr)
BOOL FASTCALL ftGdiGetTextMetricsW(HDC hDC, PTMW_INTERNAL ptmwi)
static NTSTATUS DuplicateUnicodeString(PUNICODE_STRING Source, PUNICODE_STRING Destination)
static PSHARED_FACE SharedFace_Create(FT_Face Face, PSHARED_MEM Memory)
static VOID FASTCALL IntFontType(PFONTGDI Font)
FT_Library g_FreeTypeLibrary
BOOL FASTCALL TextIntGetTextExtentPoint(PDC dc, PTEXTOBJ TextObj, LPCWSTR String, INT Count, ULONG MaxExtent, LPINT Fit, LPINT Dx, LPSIZE Size, FLONG fl)
static LIST_ENTRY g_FontListHead
BOOL APIENTRY GreExtTextOutW(IN HDC hDC, IN INT XStart, IN INT YStart, IN UINT fuOptions, IN OPTIONAL PRECTL lprc, IN LPCWSTR String, IN INT Count, IN OPTIONAL LPINT Dx, IN DWORD dwCodePage)
BOOL FASTCALL IntGdiGetFontResourceInfo(PUNICODE_STRING FileName, PVOID pBuffer, DWORD *pdwBytes, DWORD dwType)
static PWCHAR g_ElfScripts[32]
static PSHARED_MEM SharedMem_Create(PBYTE Buffer, ULONG BufferSize, BOOL IsMapping)
ULONG FASTCALL ftGdiGetGlyphOutline(PDC dc, WCHAR wch, UINT iFormat, LPGLYPHMETRICS pgm, ULONG cjBuf, PVOID pvBuf, LPMAT2 pmat2, BOOL bIgnoreRotation)
static BOOL SubstituteFontRecurse(LOGFONTW *pLogFont)
static BOOL EqualFamilyInfo(const FONTFAMILYINFO *pInfo1, const FONTFAMILYINFO *pInfo2)
BYTE FASTCALL IntCharSetFromCodePage(UINT uCodePage)
static __inline SIZE_T FASTCALL IntStoreName(const UNICODE_STRING *pName, BYTE *pb)
const MATRIX gmxWorldToPageDefault
static UNICODE_STRING g_FontRegPath
BOOL APIENTRY NtGdiGetCharABCWidthsW(IN HDC hDC, IN UINT FirstChar, IN ULONG Count, IN OPTIONAL PWCHAR UnSafepwch, IN FLONG fl, OUT PVOID Buffer)
VOID FASTCALL IntGdiCleanupPrivateFontsForProcess(VOID)
static void SharedFaceCache_Init(PSHARED_FACE_CACHE Cache)
static unsigned int get_bezier_glyph_outline(FT_Outline *outline, unsigned int buflen, char *buf)
BOOL FASTCALL InitFontSupport(VOID)
static FT_UInt FASTCALL get_glyph_index_symbol(FT_Face ft_face, UINT glyph)
static __inline VOID FindBestFontFromList(FONTOBJ **FontObj, ULONG *MatchPenalty, const LOGFONTW *LogFont, const PLIST_ENTRY Head)
BOOL FASTCALL IntLoadFontSubstList(PLIST_ENTRY pHead)
static UINT g_FontCacheNumEntries
static LPCWSTR FASTCALL NameFromCharSet(BYTE CharSet)
BOOL APIENTRY IntExtTextOutW(IN PDC dc, IN INT XStart, IN INT YStart, IN UINT fuOptions, IN OPTIONAL PRECTL lprc, IN LPCWSTR String, IN INT Count, IN OPTIONAL LPINT Dx, IN DWORD dwCodePage)
BOOL APIENTRY NtGdiExtTextOutW(IN HDC hDC, IN INT XStart, IN INT YStart, IN UINT fuOptions, IN OPTIONAL LPRECT UnsafeRect, IN LPWSTR UnsafeString, IN INT Count, IN OPTIONAL LPINT UnsafeDx, IN DWORD dwCodePage)
VOID FASTCALL IntLoadSystemFonts(VOID)
DWORD FASTCALL ftGetFontUnicodeRanges(PFONTGDI Font, PGLYPHSET glyphset)
#define GOT_PENALTY(name, value)
static void SharedFace_AddRef(PSHARED_FACE Ptr)
BOOL FASTCALL ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS lprs)
static VOID FASTCALL UnlinkFontMemCollection(PFONT_ENTRY_COLL_MEM Collection)
static void FASTCALL FontFamilyFillInfo(PFONTFAMILYINFO Info, LPCWSTR FaceName, LPCWSTR FullName, PFONTGDI FontGDI)
static void SharedFace_Release(PSHARED_FACE Ptr)
static void SwapEndian(LPVOID pvData, DWORD Size)
static __inline void FASTCALL IntInitFontNames(FONT_NAMES *Names, PSHARED_FACE SharedFace)
static void RemoveCacheEntries(FT_Face Face)
LONG NTAPI NtGdiGetFontFamilyInfo(HDC Dc, const LOGFONTW *UnsafeLogFont, PFONTFAMILYINFO UnsafeInfo, LPLONG UnsafeInfoCount)
#define FM_SEL_USE_TYPO_METRICS
BOOL FASTCALL ftGdiRealizationInfo(PFONTGDI Font, PREALIZATION_INFO Info)
static FT_BitmapGlyph IntGetBitmapGlyphNoCache(FT_Face Face, FT_GlyphSlot GlyphSlot, FT_Render_Mode RenderMode)
static BOOL IntGetTextDisposition(OUT LONGLONG *pX64, OUT LONGLONG *pY64, IN LPCWSTR String, IN INT Count, IN OPTIONAL LPINT Dx, IN OUT PFONT_CACHE_ENTRY Cache, IN UINT fuOptions)
VOID FASTCALL IntEnableFontRendering(BOOL Enable)
#define IntUnLockFreeType()
static VOID IntUnicodeStringToBuffer(LPWSTR pszBuffer, SIZE_T cbBuffer, const UNICODE_STRING *pString)
static INT FASTCALL IntGdiLoadFontsFromMemory(PGDI_LOAD_FONT pLoadFont, PSHARED_FACE SharedFace, FT_Long FontIndex, INT CharSetIndex)
static unsigned int get_native_glyph_outline(FT_Outline *outline, unsigned int buflen, char *buf)
static VOID FASTCALL IntMatrixFromMx(FT_Matrix *pmat, const MATRIX *pmx)
static VOID FASTCALL IntEscapeMatrix(FT_Matrix *pmat, LONG lfEscapement)
static FT_UInt FASTCALL get_glyph_index_flagged(FT_Face face, FT_ULong code, DWORD indexed_flag, DWORD flags)
static __inline BYTE *FASTCALL IntStoreFontNames(const FONT_NAMES *Names, OUTLINETEXTMETRICW *Otm)
#define IntUnLockGlobalFonts()
static BOOLEAN IntTranslateCharsetInfo(PDWORD Src, LPCHARSETINFO Cs, DWORD Flags)
static VOID IntAddNameFromFamInfo(LPWSTR psz, FONTFAMILYINFO *FamInfo)
static void FASTCALL FillTM(TEXTMETRICW *TM, PFONTGDI FontGDI, TT_OS2 *pOS2, TT_HoriHeader *pHori, FT_WinFNT_HeaderRec *pFNT)
#define IntLockFreeType()
static FT_BitmapGlyph IntFindGlyphCache(IN const FONT_CACHE_ENTRY *pCache)
BOOL APIENTRY NtGdiGetCharWidthW(IN HDC hDC, IN UINT FirstChar, IN UINT Count, IN OPTIONAL PWCHAR UnSafepwc, IN FLONG fl, OUT PVOID Buffer)
INT FASTCALL IntGdiAddFontResourceEx(PUNICODE_STRING FileName, DWORD Characteristics, DWORD dwFlags)
static FT_BitmapGlyph IntGetBitmapGlyphWithCache(IN OUT PFONT_CACHE_ENTRY Cache, IN FT_GlyphSlot GlyphSlot)
#define STACK_TEXT_BUFFER_SIZE
static __inline void FTVectorToPOINTFX(FT_Vector *vec, POINTFX *pt)
NTSTATUS FASTCALL TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont)
static void SharedFaceCache_Release(PSHARED_FACE_CACHE Cache)
static BOOL g_RenderingEnabled
BOOL FASTCALL IntGdiRemoveFontMemResource(HANDLE hMMFont)
UINT FASTCALL IntGetCharSet(INT nIndex, FT_ULong CodePageRange1)
#define EMUBOLD_NEEDED(original, request)
static __inline VOID FASTCALL CleanupFontEntry(PFONT_ENTRY FontEntry)
NTSTATUS FASTCALL TextIntRealizeFont(HFONT FontHandle, PTEXTOBJ pTextObj)
static BOOL SubstituteFontByList(PLIST_ENTRY pHead, PUNICODE_STRING pOutputName, PUNICODE_STRING pInputName, BYTE RequestedCharSet, BYTE CharSetMap[FONTSUBST_FROM_AND_TO])
static LIST_ENTRY g_FontCacheListHead
static FT_UInt FASTCALL get_glyph_index(FT_Face ft_face, UINT glyph)
static const FT_Matrix identityMat
HANDLE FASTCALL IntGdiAddFontMemResource(PVOID Buffer, DWORD dwSize, PDWORD pNumAdded)
static LONG ScaleLong(LONG lValue, PFLOATOBJ pef)
static __inline FT_Fixed FT_FixedFromFIXED(FIXED f)
INT FASTCALL IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics)
static PFAST_MUTEX g_FontListLock
static BOOL MatchFontName(PSHARED_FACE SharedFace, PUNICODE_STRING Name1, FT_UShort NameID, FT_UShort LangID)
static BOOLEAN FASTCALL GetFontFamilyInfoForSubstitutes(const LOGFONTW *LogFont, PFONTFAMILYINFO Info, LONG *pCount, LONG MaxCount)
static BOOL MatchFontNames(PSHARED_FACE SharedFace, LPCWSTR lfFaceName)
#define ASSERT_FREETYPE_LOCK_HELD()
static LONG IntNormalizeAngle(LONG nTenthsOfDegrees)
INT FASTCALL IntGetOutlineTextMetrics(PFONTGDI FontGDI, UINT Size, OUTLINETEXTMETRICW *Otm)
INT FASTCALL ftGdiGetTextCharsetInfo(PDC Dc, LPFONTSIGNATURE lpSig, DWORD dwFlags)
static FT_BitmapGlyph IntGetRealGlyph(IN OUT PFONT_CACHE_ENTRY Cache)
static void SharedMem_Release(PSHARED_MEM Ptr)
BOOL FASTCALL IntLoadFontsInRegistry(VOID)
BOOL FASTCALL IntIsFontRenderingEnabled(VOID)
DWORD FASTCALL ftGdiGetFontData(PFONTGDI FontGdi, DWORD Table, DWORD Offset, PVOID Buffer, DWORD Size)
#define IntLockGlobalFonts()
#define gmxWorldToDeviceDefault
struct FONT_NAMES * LPFONT_NAMES
static NTSTATUS IntGetFontLocalizedName(PUNICODE_STRING pNameW, PSHARED_FACE SharedFace, FT_UShort NameID, FT_UShort LangID)
FT_Render_Mode FASTCALL IntGetFontRenderMode(LOGFONTW *logfont)
static __inline void FASTCALL IntFreeFontNames(FONT_NAMES *Names)
static void RemoveCachedEntry(PFONT_CACHE_ENTRY Entry)
#define _TMPF_VARIABLE_PITCH
VOID FASTCALL IntEngFillBox(IN OUT PDC dc, IN INT X, IN INT Y, IN INT Width, IN INT Height, IN BRUSHOBJ *BrushObj)
static BYTE CharSetFromLangID(LANGID LangID)
static VOID FASTCALL CleanupFontEntryEx(PFONT_ENTRY FontEntry, PFONTGDI FontGDI)
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
FT_Load_Glyph(FT_Face face, FT_UInt glyph_index, FT_Int32 load_flags)
#define FT_LOAD_NO_BITMAP
FT_Set_Transform(FT_Face face, FT_Matrix *matrix, FT_Vector *delta)
FT_Vector_Transform(FT_Vector *vec, const FT_Matrix *matrix)
@ FT_SIZE_REQUEST_TYPE_NOMINAL
FT_Done_Face(FT_Face face)
FT_Get_First_Char(FT_Face face, FT_UInt *agindex)
#define FT_HAS_MULTIPLE_MASTERS(face)
enum FT_Render_Mode_ FT_Render_Mode
#define FT_LOAD_NO_HINTING
FT_Get_Char_Index(FT_Face face, FT_ULong charcode)
#define FT_HAS_FIXED_SIZES(face)
#define FT_IS_SCALABLE(face)
#define FT_HAS_VERTICAL(face)
#define FT_IS_FIXED_WIDTH(face)
FT_Request_Size(FT_Face face, FT_Size_Request req)
FT_Get_Next_Char(FT_Face face, FT_ULong char_code, FT_UInt *agindex)
FT_Set_Charmap(FT_Face face, FT_CharMap charmap)
#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH
FT_Get_Kerning(FT_Face face, FT_UInt left_glyph, FT_UInt right_glyph, FT_UInt kern_mode, FT_Vector *akerning)
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
FT_New_Memory_Face(FT_Library library, const FT_Byte *file_base, FT_Long file_size, FT_Long face_index, FT_Face *aface)
FT_MulFix(FT_Long a, FT_Long b)
#define FT_HAS_KERNING(face)
FT_Init_FreeType(FT_Library *alibrary)
@ FileDirectoryInformation
#define FILE_SYNCHRONOUS_IO_NONALERT
_Must_inspect_result_ _In_ PCUNICODE_STRING Name2
_Must_inspect_result_ _Outptr_ PVOID * SectionObject
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
FT_Bitmap_Convert(FT_Library library, const FT_Bitmap *source, FT_Bitmap *target, FT_Int alignment)
FT_Bitmap_New(FT_Bitmap *abitmap)
FT_Bitmap_Done(FT_Library library, FT_Bitmap *bitmap)
FT_Done_Glyph(FT_Glyph glyph)
FT_Glyph_To_Bitmap(FT_Glyph *the_glyph, FT_Render_Mode render_mode, FT_Vector *origin, FT_Bool destroy)
FT_Get_Glyph(FT_GlyphSlot slot, FT_Glyph *aglyph)
struct FT_BitmapGlyphRec_ * FT_BitmapGlyph
FT_Matrix_Multiply(const FT_Matrix *a, FT_Matrix *b)
#define ft_glyph_format_bitmap
#define ft_glyph_format_outline
FT_Outline_Translate(const FT_Outline *outline, FT_Pos xOffset, FT_Pos yOffset)
FT_Outline_Get_Bitmap(FT_Library library, FT_Outline *outline, const FT_Bitmap *abitmap)
FT_Outline_Transform(const FT_Outline *outline, const FT_Matrix *matrix)
FT_Get_Sfnt_Name_Count(FT_Face face)
FT_BEGIN_HEADER struct FT_SfntName_ FT_SfntName
FT_Get_Sfnt_Name(FT_Face face, FT_UInt idx, FT_SfntName *aname)
FT_BEGIN_HEADER FT_GlyphSlot_Embolden(FT_GlyphSlot slot)
FT_GlyphSlot_Oblique(FT_GlyphSlot slot)
FT_BEGIN_HEADER typedef FT_Fixed FT_Angle
FT_Vector_Unit(FT_Vector *vec, FT_Angle angle)
FT_Get_WinFNT_Header(FT_Face face, FT_WinFNT_HeaderRec *aheader)
#define FONTSUBST_FROM_AND_TO
struct FONTSUBST_ENTRY * PFONTSUBST_ENTRY
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLdouble GLdouble GLdouble GLdouble top
GLenum GLuint GLint GLenum face
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define EXCEPTION_EXECUTE_HANDLER
_Check_return_ long __cdecl labs(_In_ long x)
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
struct _FILE_DIRECTORY_INFORMATION * PFILE_DIRECTORY_INFORMATION
#define ROP4_FROM_INDEX(index)
static PWSTR PDWORD pdwBytes
#define MmCopyToCaller(x, y, z)
#define ExFreePoolWithTag(_P, _T)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
#define TT_NAME_ID_FULL_NAME
#define TT_NAME_ID_UNIQUE_ID
static LPCSTR INT LPWORD pgi
#define TT_NAME_ID_FONT_FAMILY
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define TT_NAME_ID_FONT_SUBFAMILY
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define InitializeObjectAttributes(p, n, a, r, s)
#define _Out_writes_opt_(size)
#define _In_reads_opt_(size)
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
NTSYSAPI NTSTATUS NTAPI ZwOpenFile(_Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_ ULONG ShareAccess, _In_ ULONG OpenOptions)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
NTSYSAPI VOID NTAPI RtlGetDefaultCodePage(_Out_ PUSHORT AnsiCodePage, _Out_ PUSHORT OemCodePage)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
@ KeyValueFullInformation
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
#define FILE_LIST_DIRECTORY
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
struct _OBJECT_NAME_INFORMATION OBJECT_NAME_INFORMATION
#define FILE_SHARE_DELETE
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define FILE_GENERIC_READ
struct _KEY_VALUE_FULL_INFORMATION * PKEY_VALUE_FULL_INFORMATION
#define STANDARD_RIGHTS_REQUIRED
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
struct tagFONTFAMILYINFO FONTFAMILYINFO
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
#define STATUS_INTERNAL_ERROR
#define STATUS_INVALID_HANDLE
NTSTRSAFEAPI RtlStringCbCopyW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEAPI RtlStringCchCopyW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
BOOL FASTCALL IntFillPolygon(PDC dc, SURFACE *psurf, BRUSHOBJ *BrushObj, CONST PPOINT Points, int Count, RECTL DestRect, POINTL *BrushOrigin)
#define PATH_IsPathOpen(dclevel)
void * EngAllocMem(int zero, unsigned long size, int tag=0)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
#define SUBLANG_CHINESE_TRADITIONAL
#define SUBLANG_CHINESE_SIMPLIFIED
NTSTATUS NTAPI MmMapViewInSystemSpace(IN PVOID SectionObject, OUT PVOID *MappedBase, IN OUT PSIZE_T ViewSize)
NTSTATUS NTAPI MmCreateSection(OUT PVOID *Section, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize, IN ULONG SectionPageProtection, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL, IN PFILE_OBJECT FileObject OPTIONAL)
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
PULONG MinorVersion OPTIONAL
base for all directory entries
base of all file and directory entries
UNICODE_STRING FontNames[FONTSUBST_FROM_AND_TO]
BYTE CharSets[FONTSUBST_FROM_AND_TO]
UNICODE_STRING FamilyNameW
UNICODE_STRING StyleNameW
FT_Short max_advance_width
FT_Size_Request_Type type
PUNICODE_STRING pFileName
PFONT_ENTRY_MEM PrivateEntry
UNICODE_STRING RegValueName
WCHAR lfFaceName[LF_FACESIZE]
FT_ULong ulCodePageRange1
FT_UShort usLastCharIndex
FT_Short ySuperscriptYSize
FT_Short ySuperscriptXSize
FT_Short ySubscriptYOffset
FT_Short ySuperscriptYOffset
FT_Short ySubscriptXOffset
FT_Short yStrikeoutPosition
FT_ULong ulCodePageRange2
FT_Short ySuperscriptXOffset
FT_UShort usFirstCharIndex
FT_Short underlineThickness
FT_Short underlinePosition
FT_BitmapGlyph BitmapGlyph
WCHAR TextFace[LF_FACESIZE]
struct _LIST_ENTRY * Blink
struct _LIST_ENTRY * Flink
POINT otmptSuperscriptOffset
POINT otmptSuperscriptSize
int otmsStrikeoutPosition
int otmsUnderscorePosition
TEXTMETRICW otmTextMetrics
POINT otmptSubscriptOffset
LIST_ENTRY PrivateMemFontListHead
UINT PrivateMemFontHandleCount
LIST_ENTRY PrivateFontListHead
SHARED_FACE_CACHE UserLanguage
SHARED_FACE_CACHE EnglishUS
struct _PALETTE *const ppal
ENUMLOGFONTEXW elfEnumLogfontEx
WCHAR elfStyle[LF_FACESIZE]
WCHAR elfFullName[LF_FULLFACESIZE]
ENUMLOGFONTEXW EnumLogFontEx
WCHAR lfFaceName[LF_FACESIZE]
FT_Get_PS_Font_Info(FT_Face face, PS_FontInfo afont_info)
FT_BEGIN_HEADER struct PS_FontInfoRec_ PS_FontInfoRec
T1_FIELD_DICT_FONTDICT family_name
T1_FIELD_DICT_FONTDICT T1_FIELD_DICT_FONTDICT T1_FIELD_DICT_FONTDICT underline_position
FT_Get_Sfnt_Table(FT_Face face, FT_Sfnt_Tag tag)
FT_Load_Sfnt_Table(FT_Face face, FT_ULong tag, FT_Long offset, FT_Byte *buffer, FT_ULong *length)
struct TT_FaceRec_ * TT_Face
#define RTL_CONSTANT_STRING(s)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_NO_MORE_FILES
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
_In_ HFONT _Out_ PUINT Height
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _Strict_type_match_ POOL_TYPE _In_opt_ ULONG _In_ _Out_ WDFMEMORY * Memory
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ WDFCOLLECTION Collection
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
BOOL APIENTRY IntEngBitBlt(SURFOBJ *psoTrg, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclTrg, POINTL *pptlSrc, POINTL *pptlMask, BRUSHOBJ *pbo, POINTL *pptlBrush, ROP4 Rop4)
BOOL APIENTRY IntEngMaskBlt(_Inout_ SURFOBJ *psoDest, _In_ SURFOBJ *psoMask, _In_ CLIPOBJ *pco, _In_ XLATEOBJ *pxloDest, _In_ XLATEOBJ *pxloSource, _In_ RECTL *prclDest, _In_ POINTL *pptlMask, _In_ BRUSHOBJ *pbo, _In_ POINTL *pptlBrushOrg)
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
PTEXTOBJ FASTCALL RealizeFontInit(HFONT hFont)
BOOL FASTCALL PATH_ExtTextOut(PDC dc, INT x, INT y, UINT flags, const RECTL *lprc, LPCWSTR str, UINT count, const INT *dx)
#define AFRX_WRITE_REGISTRY
#define LFONT_UnlockFont(plfnt)
FORCEINLINE PTEXTOBJ TEXTOBJ_LockText(HFONT hfont)
#define AFRX_DOS_DEVICE_PATH
#define AFRX_ALTERNATIVE_PATH
#define IntLockProcessPrivateFonts(W32Process)
FORCEINLINE VOID TEXTOBJ_UnlockText(PLFONT plfnt)
#define IntUnLockProcessPrivateFonts(W32Process)
#define LFONT_AllocFontWithHandle()
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define FLOATOBJ_Equal(pf, pf1)
#define FLOATOBJ_DivLong(pf, l)
ENGAPI BOOL APIENTRY EngDeleteSurface(_In_ _Post_ptr_invalid_ HSURF hsurf)
ENGAPI SURFOBJ *APIENTRY EngLockSurface(_In_ HSURF hsurf)
ENGAPI HBITMAP APIENTRY EngCreateBitmap(_In_ SIZEL sizl, _In_ LONG lWidth, _In_ ULONG iFormat, _In_ FLONG fl, _In_opt_ PVOID pvBits)
#define FLOATOBJ_Mul(pf, pf1)
ENGAPI VOID APIENTRY EngGetCurrentCodePage(_Out_ PUSHORT OemCodePage, _Out_ PUSHORT AnsiCodePage)
#define FLOATOBJ_MulLong(pf, l)
#define FLOATOBJ_GetLong(pf)
#define FLOATOBJ_SetFloat(pf, f)
typedef HSURF(APIENTRY FN_DrvEnableSurface)(_In_ DHPDEV dhpdev)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define FLOATOBJ_SetLong(pf, l)
#define FO_MULTIPLEMASTER
_In_ SIZEL _In_ ULONG iFormat
ENGAPI VOID APIENTRY EngUnlockSurface(_In_ _Post_ptr_invalid_ SURFOBJ *pso)
_In_ ULONG _In_opt_ PVOID pvData
#define FLOATOBJ_AddLong(pf, l)
struct _OUTLINETEXTMETRICW OUTLINETEXTMETRICW
struct _ABCFLOAT * LPABCFLOAT
#define PAN_FAMILY_TEXT_DISPLAY
#define PAN_PROP_MONOSPACED
#define ANTIALIASED_QUALITY
#define PAN_SERIFSTYLE_INDEX
#define PAN_SERIF_NORMAL_SANS
struct _RASTERIZER_STATUS RASTERIZER_STATUS
#define PAN_SERIF_OBTUSE_SANS
#define PAN_FAMILY_PICTORIAL
#define TRUETYPE_FONTTYPE
#define PAN_SERIF_TRIANGLE
#define OUT_DEVICE_PRECIS
#define PAN_PROPORTION_INDEX
#define PAN_SERIF_SQUARE_COVE
#define PAN_SERIF_OBTUSE_SQUARE_COVE
#define CHINESEBIG5_CHARSET
#define PAN_SERIF_EXAGGERATED
#define OUT_DEFAULT_PRECIS
#define PAN_SERIF_ROUNDED
#define PAN_FAMILYTYPE_INDEX
#define CLIP_DEFAULT_PRECIS
#define PAN_FAMILY_DECORATIVE
#define PAN_SERIF_PERP_SANS
#define VIETNAMESE_CHARSET
#define PAN_FAMILY_SCRIPT
#define CLEARTYPE_QUALITY
#define PAN_SERIF_OBTUSE_COVE
#define GGI_MARK_NONEXISTING_GLYPHS
#define EASTEUROPE_CHARSET
#define NONANTIALIASED_QUALITY
#define OUT_OUTLINE_PRECIS
_In_ int _Inout_ LPRECT lprc
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_Must_inspect_result_ _In_ ULONG Flags
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
#define ObDereferenceObject
#define RTL_STATIC_LIST_HEAD(x)
VOID NTAPI EXLATEOBJ_vInitialize(_Out_ PEXLATEOBJ pexlo, _In_opt_ PALETTE *ppalSrc, _In_opt_ PALETTE *ppalDst, _In_ COLORREF crSrcBackColor, _In_ COLORREF crDstBackColor, _In_ COLORREF crDstForeColor)
VOID NTAPI EXLATEOBJ_vCleanup(_Inout_ PEXLATEOBJ pexlo)