13#include FT_TYPE1_TABLES_H
14#include FT_TRUETYPE_TABLES_H
15#include FT_TRUETYPE_TAGS_H
16#include FT_TRIGONOMETRY_H
20#include FT_SFNT_NAMES_H
21#include FT_SYNTHESIS_H
22#include FT_TRUETYPE_IDS_H
58#define FONTLINK_DEFAULT_CHAR 0x30FB
80 L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink",
107 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\FontAssoc\\Associated DefaultFonts",
145 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\FontAssoc\\Associated Charset",
191#ifndef _TMPF_VARIABLE_PITCH
192 #define _TMPF_VARIABLE_PITCH TMPF_FIXED_PITCH
196#define EMUBOLD_NEEDED(original, request) \
197 (((request) != FW_DONTCARE) && ((request) - (original) >= FW_BOLD - FW_MEDIUM))
204#define gmxWorldToDeviceDefault gmxWorldToPageDefault
210 RTL_CONSTANT_STRING(
L"\\REGISTRY\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts");
219#define ASSERT_FREETYPE_LOCK_HELD() \
220 ASSERT(g_FreeTypeLock->Owner == KeGetCurrentThread())
222#define ASSERT_FREETYPE_LOCK_NOT_HELD() \
223 ASSERT(g_FreeTypeLock->Owner != KeGetCurrentThread())
225#define IntLockFreeType() \
227 ASSERT_FREETYPE_LOCK_NOT_HELD(); \
228 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(g_FreeTypeLock); \
231#define IntUnLockFreeType() \
233 ASSERT_FREETYPE_LOCK_HELD(); \
234 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(g_FreeTypeLock); \
237#define MAX_FONT_CACHE 256
269#define MAXTCIINDEX 32
360 if (pFontLink->bIgnore)
363 if (pFontLink->SharedFace)
380 pFontLink->bIgnore =
TRUE;
384 pFontGDI =
ObjToGDI(pFontObj, FONT);
392 pFontLink->bIgnore =
TRUE;
447 Ptr->IsMapping = IsMapping;
448 DPRINT(
"Creating SharedMem for %p (%i, %p)\n",
Buffer, IsMapping,
Ptr);
481 for (CurrentEntry = g_FontCacheListHead.
Flink;
482 CurrentEntry != &g_FontCacheListHead;
483 CurrentEntry = NextEntry)
486 NextEntry = CurrentEntry->
Flink;
500 if (
Ptr->RefCount <= 0)
504 if (
Ptr->RefCount == 0)
506 DPRINT(
"Releasing SharedMem for %p (%i, %p)\n",
Ptr->Buffer,
Ptr->IsMapping,
Ptr);
532 if (
Ptr->RefCount <= 0)
536 if (
Ptr->RefCount == 0)
538 DPRINT(
"Releasing SharedFace for %s\n",
Ptr->Face->family_name ?
Ptr->Face->family_name :
"<NULL>");
581 pt->x.fract = (
vec->
x & 0x3f) << 10;
582 pt->x.fract |= ((
pt->x.fract >> 6) | (
pt->x.fract >> 12));
584 pt->y.fract = (
vec->
y & 0x3f) << 10;
585 pt->y.fract |= ((
pt->y.fract >> 6) | (
pt->y.fract >> 12));
601 const char *style_name;
620 style_name =
"<invalid>";
623 DPRINT(
"family_name '%s', style_name '%s', FaceName '%wZ', StyleName '%wZ', FontGDI %p, "
624 "FontObj %p, iUnique %lu, SharedFace %p, Face %p, CharSet %u, Filename '%S'\n",
643 DPRINT(
"## DumpFontList(%p)\n", Head);
648 DumpFontEntry(CurrentEntry);
654 DPRINT(
"%wZ,%u -> %wZ,%u\n",
667 DPRINT(
"## DumpFontSubstList\n");
669 for (pListEntry = pHead->
Flink;
671 pListEntry = pListEntry->
Flink)
674 DumpFontSubstEntry(pSubstEntry);
678VOID DumpPrivateFontList(
BOOL bDoLock)
704VOID DumpGlobalFontList(
BOOL bDoLock)
711 DumpFontList(&g_FontListHead);
719 DumpGlobalFontList(bDoLock);
720 DumpPrivateFontList(bDoLock);
737 BYTE InfoBuffer[128];
746 L"Microsoft\\Windows NT\\CurrentVersion\\"
762 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
775 InfoBuffer,
sizeof(InfoBuffer), &
Length);
789 DPRINT(
"RtlCreateUnicodeString failed\n");
795 InfoBuffer,
sizeof(InfoBuffer), &
Length);
811 DPRINT(
"RtlCreateUnicodeString failed\n");
853 DPRINT(
"ExAllocatePoolWithTag failed\n");
890 pEntry->pszzFontLink = pszz;
918 L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink\\SystemLink",
923 for (
DWORD dwIndex = 0;; ++dwIndex)
926 cbData =
sizeof(szzFontLink);
938 DPRINT1(
"szzFontLink: %S\n", szzFontLink);
964 DPRINT1(
"FT_Init_FreeType failed with error code 0x%x\n", ulError);
970 DPRINT1(
"Fonts registry is empty.\n");
999 pHead = &g_FontCacheListHead;
1008 pHead = &g_FontSubstListHead;
1017 pHead = &g_FontListHead;
1043 pmat->
xx = vecAngle.
x;
1044 pmat->
xy = -vecAngle.
y;
1045 pmat->
yx = -pmat->
xy;
1046 pmat->
yy = pmat->
xx;
1082 BYTE RequestedCharSet,
1093 for (pListEntry = pHead->
Flink;
1094 pListEntry != pHead;
1095 pListEntry = pListEntry->
Flink)
1142 UINT RecurseCount = 5;
1153 while (RecurseCount-- > 0)
1156 &OutputNameW, &InputNameW,
1182 pChain->pBaseTextObj = pTextObj;
1183 pChain->pDefFace =
face;
1189 L"tahoma.ttf,Tahoma\0"
1190 L"msgothic.ttc,MS UI Gothic\0"
1191 L"mingliu.ttc,PMingLiU\0"
1192 L"simsun.ttc,SimSun\0"
1193 L"gulim.ttc,Gulim\0"
1197 L"cour.ttf,Courier New\0"
1198 L"msgothic.ttc,MS Gothic\0"
1199 L"mingliu.ttc,MingLiU\0"
1200 L"simsun.ttc,NSimSun\0"
1201 L"gulim.ttc,GulimChe\0"
1297 pChain->pszzFontLink =
pEntry->pszzFontLink;
1308 PTEXTOBJ pTextObj = pChain->pBaseTextObj;
1334 default: bFixCharSet =
TRUE;
break;
1339 pChain->LogFont = lfBase;
1346 pszLink = pChain->pszzFontLink;
1349 DPRINT(
"pszLink: '%S'\n", pszLink);
1353 pszLink +=
wcslen(pszLink) + 1;
1362 DPRINT(
"szEntry: '%S'\n", szEntry);
1384 BYTE *DirInfoBuffer;
1426 if (DirInfoBuffer ==
NULL)
1444 Status = ZwQueryDirectoryFile(
1493 bRestartScan =
FALSE;
1509 if (CodePageRange1 == 0)
1512 for (BitIndex = 0; BitIndex <
MAXTCIINDEX; ++BitIndex)
1514 if (CodePageRange1 & (1 << BitIndex))
1517 if ((nIndex >= 0) && (nCount == (
UINT)nIndex))
1529#define PX2PT(pixels) FT_MulDiv((pixels), 72, 96)
1557 Face = SharedFace->
Face;
1704 if (pOS2 && os2_version >= 1)
1711 for (BitIndex = 0; BitIndex <
MAXTCIINDEX; ++BitIndex)
1713 if (os2_ulCodePageRange1 & (1 << BitIndex))
1718 if ((CharSetIndex == -1 && CharSetCount == 0) ||
1719 CharSetIndex == CharSetCount)
1744 DPRINT(
"Font loaded: %s (%s)\n",
1751 Entry->Font = FontGDI;
1752 Entry->NotEnum = (Characteristics & FR_NOT_ENUM);
1755 if (Characteristics & FR_PRIVATE)
1770 if (CharSetIndex == -1)
1775 if (
Entry->StyleName.Length)
1776 NameLength +=
Entry->StyleName.Length +
sizeof(
WCHAR);
1804 *pValueName = NewString;
1806 if (
Entry->StyleName.Length)
1812 for (
i = 1;
i < CharSetCount; ++
i)
1836 ((FontIndex == -1) ? 0 : FontIndex), &Face);
1839 if (
Error == FT_Err_Unknown_File_Format)
1840 DPRINT1(
"Unknown font file format\n");
1842 DPRINT1(
"Error reading font (error code: %d)\n",
Error);
1855 DPRINT1(
"SharedFace_Create failed\n");
1860 if (FontIndex == -1)
1906 RtlInitEmptyUnicodeString(&PathName, pszBuffer,
Length);
1929 DPRINT1(
"Could not load font file: %wZ\n", &PathName);
1938 DPRINT1(
"ObReferenceObjectByHandle failed.\n");
1951 DPRINT1(
"Could not map file: %wZ\n", &PathName);
1962 DPRINT1(
"Could not map file: %wZ\n", &PathName);
1972 LoadFont.Characteristics = Characteristics;
2000 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
2023 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
2049 pFileName = PathName.
Buffer;
2090 cchFile =
wcslen(pchFile);
2101 ustrPathName.
Buffer = pchFile;
2108 pchFile += cchFile + 1;
2120 ULONG dwIndex, NameLength, ValueSize, dwType;
2129 ValueSize =
sizeof(szValue);
2159 PWSTR pszBuffer, pszFileTitle;
2171 RtlInitEmptyUnicodeString(&PathName, pszBuffer,
Length);
2182 pszFileTitle = PathName.
Buffer;
2186 if (!pszFileTitle || !*pszFileTitle)
2194 for (CurrentEntry = g_FontListHead.
Flink;
2195 CurrentEntry != &g_FontListHead;
2196 CurrentEntry = NextEntry)
2199 NextEntry = CurrentEntry->
Flink;
2201 FontGDI = FontEntry->
Font;
2231 cchFile =
wcslen(pchFile);
2242 ustrPathName.
Buffer = pchFile;
2248 pchFile += cchFile + 1;
2284 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
2297 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2303 for (
i = 0;
i < KeyFullInfo.
Values; ++
i)
2307 InfoBuffer, InfoSize, &
Length);
2316 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2321 InfoBuffer, InfoSize, &
Length);
2336 DPRINT1(
"RtlCreateUnicodeString failed\n");
2342 InfoBuffer, InfoSize, &
Length);
2351 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2356 InfoBuffer, InfoSize, &
Length);
2376 L"\\SystemRoot\\Fonts\\%s", pchPath);
2403 return (KeyFullInfo.
Values != 0 && nFontCount != 0);
2424 LoadFont.Characteristics = FR_PRIVATE | FR_NOT_ENUM;
2438 if (EntryCollection)
2448 Ret = EntryCollection->
Handle;
2508 if (CurrentEntry->
Handle == hMMFont)
2510 EntryCollection = CurrentEntry;
2518 if (EntryCollection)
2535 DPRINT(
"IntGdiCleanupPrivateFontsForProcess()\n");
2538 EntryCollection =
NULL;
2551 if (EntryCollection)
2628 if (lf->lfEscapement != lf->lfOrientation)
2721 int Ascent, Descent;
2778 - ((Ascent + Descent)
2780 YScale) + 32) >> 6);
2969 Names->OtmSize = OtmSize;
2986 Otm->otmpFamilyName = (
LPSTR)(pb - (
BYTE*) Otm);
2990 Otm->otmpFaceName = (
LPSTR)(pb - (
BYTE*) Otm);
2994 Otm->otmpStyleName = (
LPSTR)(pb - (
BYTE*) Otm);
2998 Otm->otmpFullName = (
LPSTR)(pb - (
BYTE*) Otm);
3072 if (Size < Cache->OutlineRequiredSize)
3074 DPRINT1(
"Size %u < OutlineRequiredSize %u\n",
Size,
3094 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
3103 DPRINT1(
"Can't find HHEA table - not TT font?\n");
3124#define SCALE_X(value) ((FT_MulFix((value), XScale) + 32) >> 6)
3125#define SCALE_Y(value) ((FT_MulFix((value), YScale) + 32) >> 6)
3182 INT i,
Count, BestIndex, Score, BestScore;
3213 if (
Name.name_id != NameID)
3224 (
Name.string[0] == 0 &&
Name.string[1] == 0))
3248 if (Score > BestScore)
3358 Lf = &
Info->EnumLogFontEx.elfLogFont;
3371 Ntm = &
Info->NewTextMetricEx.ntmTm;
3416 sizeof(
Info->EnumLogFontEx.elfFullName),
3420 StyleW.
Buffer =
Info->EnumLogFontEx.elfStyle;
3461 if (
fs.fsCsb[0] == 0)
3468 case FT_ENCODING_UNICODE:
3469 case FT_ENCODING_APPLE_ROMAN:
3472 case FT_ENCODING_MS_SYMBOL:
3484 if (
fs.fsCsb[0] & fs0)
3496 DPRINT1(
"Unknown elfscript for bit %u\n",
i);
3501 Info->NewTextMetricEx.ntmFontSig =
fs;
3521 FontGDI = CurrentEntry->
Font;
3647 const DWORD *pdw = pv;
3663 DWORD dwHash = pCache->dwHash;
3667 for (CurrentEntry = g_FontCacheListHead.
Flink;
3668 CurrentEntry != &g_FontCacheListHead;
3669 CurrentEntry = CurrentEntry->
Flink)
3672 if (FontEntry->
dwHash == dwHash &&
3674 FontEntry->
Hashed.
Face == pCache->Hashed.Face &&
3685 if (CurrentEntry == &g_FontCacheListHead)
3711 DPRINT1(
"Failure caching glyph.\n");
3719 DPRINT1(
"Failure rendering glyph.\n");
3726 DPRINT1(
"Alloc failure caching glyph.\n");
3733 if (FT_Bitmap_Convert_ReactOS_Hack(GlyphSlot->library, &BitmapGlyph->
bitmap,
3734 &AlignedBitmap, 4,
TRUE))
3736 DPRINT1(
"Conversion failed\n");
3744 BitmapGlyph->
bitmap = AlignedBitmap;
3747 NewEntry->
dwHash = Cache->dwHash;
3748 NewEntry->
Hashed = Cache->Hashed;
3765 int needed = 0,
point = 0, contour, first_pt;
3766 unsigned int pph_start, cpfx;
3769 for (contour = 0; contour <
outline->n_contours; contour++)
3786 needed +=
sizeof(*pph);
3788 while (point <= outline->contours[contour])
3800 }
while (point <= outline->contours[contour] &&
3812 else if (point <= outline->contours[contour] &&
3826 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
3829 pph->
cb = needed - pph_start;
3852 int contour,
point = 0, first_pt;
3857 unsigned int needed = 0;
3859 for (contour = 0; contour <
outline->n_contours; contour++)
3869 needed +=
sizeof(*pph);
3871 while (point <= outline->contours[contour])
3898 cubic_control[0].
x >>= 1;
3899 cubic_control[0].
y >>= 1;
3902 cubic_control[3] =
outline->points[first_pt];
3910 cubic_control[3].
x >>= 1;
3911 cubic_control[3].
y >>= 1;
3916 cubic_control[1].
x = (2 *
outline->points[
point].x + 1) / 3;
3917 cubic_control[1].
y = (2 *
outline->points[
point].y + 1) / 3;
3918 cubic_control[2] = cubic_control[1];
3919 cubic_control[1].
x += (cubic_control[0].
x + 1) / 3;
3920 cubic_control[1].
y += (cubic_control[0].
y + 1) / 3;
3921 cubic_control[2].
x += (cubic_control[3].
x + 1) / 3;
3922 cubic_control[2].
y += (cubic_control[3].
y + 1) / 3;
3932 }
while (point <= outline->contours[contour] &&
3938 if (point <= outline->contours[contour] &&
3950 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
3953 pph->
cb = needed - pph_start;
3967 LONG Ascent, Descent, Sum, EmHeight;
3969 lfWidth =
abs(lfWidth);
3974 DPRINT(
"lfHeight and lfWidth are zero.\n");
3990 if (!pOS2 || !pHori)
3995 DPRINT1(
"%s: Failed to request font size.\n",
face->family_name);
4018#define FM_SEL_USE_TYPO_METRICS 0x80
4027 Sum = Ascent + Descent;
4040 else if (lfHeight < 0)
4056#undef FM_SEL_USE_TYPO_METRICS
4063 EmHeight =
max(EmHeight, 1);
4084 req.
height = (EmHeight << 6);
4099 LONG Ascent, Descent, Sum, EmHeight;
4100 LONG tmAscent, tmDescent, tmHeight, tmInternalLeading;
4102 lfWidth =
abs(lfWidth);
4107 DPRINT(
"lfHeight and lfWidth are zero.\n");
4123 if (!pOS2 || !pHori)
4128 DPRINT1(
"%s: Failed to request font size.\n",
face->family_name);
4143#define FM_SEL_USE_TYPO_METRICS 0x80
4152 Sum = Ascent + Descent;
4160 tmAscent =
FT_MulDiv(lfHeight, Ascent, Sum);
4161 tmDescent =
FT_MulDiv(lfHeight, Descent, Sum);
4162 tmHeight = tmAscent + tmDescent;
4163 tmInternalLeading = tmHeight -
FT_MulDiv(lfHeight,
face->units_per_EM, Sum);
4165 else if (lfHeight < 0)
4178 tmHeight = tmAscent + tmDescent;
4179 tmInternalLeading = tmHeight + lfHeight;
4181#undef FM_SEL_USE_TYPO_METRICS
4183 EmHeight = tmHeight - tmInternalLeading;
4184 EmHeight =
max(EmHeight, 1);
4205 req.
height = (EmHeight << 6);
4230 DPRINT(
"WARNING: No charmap selected!\n");
4231 DPRINT(
"This font face has %d charmaps\n",
face->num_charmaps);
4234 for (
n = 0;
n <
face->num_charmaps;
n++)
4236 charmap =
face->charmaps[
n];
4237 if (charmap->
encoding == FT_ENCODING_UNICODE)
4245 for (
n = 0;
n <
face->num_charmaps;
n++)
4247 charmap =
face->charmaps[
n];
4257 for (
n = 0;
n <
face->num_charmaps;
n++)
4259 charmap =
face->charmaps[
n];
4260 if (charmap->
encoding == FT_ENCODING_MS_SYMBOL)
4267 if (!found &&
face->num_charmaps > 0)
4269 found =
face->charmaps[0];
4273 DPRINT1(
"WARNING: Could not find desired charmap!\n");
4281 DPRINT1(
"WARNING: Could not set the charmap!\n");
4307 if (glyph < 0x100) glyph += 0xf000;
4346 DPRINT1(
"%S, %p, %p\n", pChain->LogFont.lfFaceName, pChain->pBaseTextObj, pChain->pDefFace);
4348 Head = &pChain->FontLinkList;
4352 DPRINT1(
"FontLink #%d: %p, %d, %S, %p, %p\n",
4398 DPRINT(
"code: 0x%08X, index: 0x%08X, fCodeAsIndex:%d\n",
code,
index, fCodeAsIndex);
4399 pCache->Hashed.Face = *pFace = pChain->pDefFace;
4410 Head = &pChain->FontLinkList;
4424 pCache->Hashed.Face = *pFace =
face;
4435 pCache->Hashed.Face = *pFace = pChain->pDefFace;
4452 BOOL bIgnoreRotation)
4479 cjBuf, pvBuf, pmat2);
4481 pdcattr =
dc->pdcattr;
4549 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
4557 if (aveWidth && potm)
4586 DPRINT(
"Advance = %d, lsb = %d, bbx = %d\n",adv, lsb, bbx);
4603 needsTransform =
TRUE;
4617 needsTransform =
TRUE;
4625 DPRINT(
"Rotation Trans!\n");
4628 needsTransform =
TRUE;
4635 DPRINT(
"MAT2 Matrix Trans!\n");
4641 needsTransform =
TRUE;
4646 if (!needsTransform)
4648 DPRINT(
"No Need to be Transformed!\n");
4659 for (xc = 0; xc < 2; xc++)
4661 for (yc = 0; yc < 2; yc++)
4669 if (xc == 0 && yc == 0)
4700 DPRINT(
"CX %d CY %d BBX %u BBY %u GOX %d GOY %d\n",
4709 DPRINT(
"GGO_METRICS Exit!\n");
4726 pitch = ((
width + 31) >> 5) << 2;
4729 if (!pvBuf || !
cjBuf)
break;
4754 ft_bitmap.
pitch = pitch;
4756 ft_bitmap.
buffer = pvBuf;
4783 unsigned int mult,
row, col;
4788 pitch = (
width + 3) / 4 * 4;
4791 if (!pvBuf || !
cjBuf)
break;
4805 for (
x = 0; (
UINT)
x < pitch;
x++)
4807 if (x < ft_face->glyph->bitmap.width)
4808 dst[
x] = (
src[
x / 8] & (1 << ( (7 - (
x % 8))))) ? 0xff : 0;
4821 ft_bitmap.
pitch = pitch;
4823 ft_bitmap.
buffer = pvBuf;
4850 for (col = 0; col <
width; col++,
ptr++)
4852 *
ptr = (((
int)*
ptr) * mult + 128) / 256;
4878 if (!pvBuf || !
cjBuf)
4898 if (needsTransform && pvBuf)
4906 if (!pvBuf || !
cjBuf)
4920 DPRINT(
"ftGdiGetGlyphOutline END and needed %lu\n", needed);
4941 Cache->dwHash =
IntGetHash(&Cache->Hashed,
sizeof(Cache->Hashed) /
sizeof(
DWORD));
4950 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %d]\n", Cache->Hashed.GlyphIndex);
4954 glyph = Cache->Hashed.Face->glyph;
4956 if (Cache->Hashed.Aspect.Emu.Bold)
4959 if (Cache->Hashed.Aspect.Emu.Italic)
4965 DPRINT1(
"Failed to render glyph! [index: %d]\n", Cache->Hashed.GlyphIndex);
4985 INT glyph_index,
i, previous, nTenthsOfDegrees;
4988 BOOL use_kerning, bVerticalWriting;
4989 LONG ascender, descender;
4994 FontGDI =
ObjToGDI(TextObj->Font, FONT);
5002 plf = &TextObj->logfont.elfEnumLogfontEx.elfLogFont;
5010 bVerticalWriting = ((nTenthsOfDegrees == 90 * 10) || (nTenthsOfDegrees == 270 * 10));
5051 if (use_kerning && previous && glyph_index)
5055 TotalWidth64 += delta.
x;
5060 if (((TotalWidth64 + 32) >> 6) <= MaxExtent &&
NULL != Fit)
5066 Dx[
i] = (TotalWidth64 + 32) >> 6;
5069 previous = glyph_index;
5076 if (bVerticalWriting)
5078 Size->cx = ascender + descender;
5079 Size->cy = (TotalWidth64 + 32) >> 6;
5083 Size->cx = (TotalWidth64 + 32) >> 6;
5084 Size->cy = ascender + descender;
5110 pdcattr = Dc->pdcattr;
5146 DPRINT(
"Csb 1=%x 0=%x\n",
fs.fsCsb[1],
fs.fsCsb[0]);
5147 if (
fs.fsCsb[0] == 0)
5153 case FT_ENCODING_UNICODE:
5154 case FT_ENCODING_APPLE_ROMAN:
5157 case FT_ENCODING_MS_SYMBOL:
5184 if (
fs.fsCsb[0] & fs0)
5194 DPRINT1(
"TCI failing on %x\n", fs0);
5208 DWORD num_ranges = 0;
5213 DPRINT1(
"FIXME: No charmap selected! This is a BUG!\n");
5217 if (
face->charmap->encoding == FT_ENCODING_UNICODE)
5220 FT_ULong char_code, char_code_prev;
5224 DPRINT(
"Face encoding FT_ENCODING_UNICODE, number of glyphs %ld, first glyph %u, first char %04lx\n",
5225 face->num_glyphs, glyph_code, char_code);
5227 if (!glyph_code)
return 0;
5231 glyphset->ranges[0].wcLow = (
USHORT)char_code;
5232 glyphset->ranges[0].cGlyphs = 0;
5233 glyphset->cGlyphsSupported = 0;
5239 if (char_code < char_code_prev)
5241 DPRINT1(
"Expected increasing char code from FT_Get_Next_Char\n");
5244 if (char_code - char_code_prev > 1)
5249 glyphset->ranges[num_ranges - 1].wcLow = (
USHORT)char_code;
5250 glyphset->ranges[num_ranges - 1].cGlyphs = 1;
5251 glyphset->cGlyphsSupported++;
5256 glyphset->ranges[num_ranges - 1].cGlyphs++;
5257 glyphset->cGlyphsSupported++;
5259 char_code_prev = char_code;
5264 DPRINT1(
"Encoding %i not supported\n",
face->charmap->encoding);
5266 size =
sizeof(GLYPHSET) +
sizeof(WCRANGE) * (num_ranges - 1);
5269 glyphset->cbThis =
size;
5270 glyphset->cRanges = num_ranges;
5271 glyphset->flAccel = 0;
5307 pdcattr =
dc->pdcattr;
5309 if (
NULL != TextObj)
5340 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
5344 if (!pHori &&
Error)
5346 DPRINT1(
"Can't find HHEA table - not TT font?\n");
5393 (
Table << 8 & 0xFF0000);
5415#define GOT_PENALTY(name, value) Penalty += (value)
5421 const char * style_name)
5587 fNeedScaling =
TRUE;
5596 fNeedScaling =
TRUE;
5642 fNeedScaling =
TRUE;
5751 DPRINT(
"WARNING: Penalty:%ld < 200: RequestedNameW:%ls, "
5752 "ActualNameW:%ls, lfCharSet:%d, lfWeight:%ld, "
5753 "tmCharSet:%d, tmWeight:%ld\n",
5774 UINT OtmSize, OldOtmSize = 0;
5791 FontGDI = CurrentEntry->
Font;
5798 if (OtmSize > OldOtmSize)
5816 OldOtmSize = OtmSize;
5819 if (*MatchPenalty ==
MAXULONG || Penalty < *MatchPenalty)
5821 *FontObj =
GDIToObj(FontGDI, FONT);
5822 *MatchPenalty = Penalty;
5944 DPRINT(
"ZwOpenFile() failed (Status = 0x%lx)\n",
Status);
5952 DPRINT(
"ZwQueryObject() failed (Status = %lx)\n",
Status);
6008 if (
NULL == TextObj)
6027 SubstitutedLogFont = *pLogFont;
6029 DPRINT(
"Font '%S,%u' is substituted by '%S,%u'.\n",
6033 MatchPenalty = 0xFFFFFFFF;
6052 DPRINT1(
"Request font %S not found, no fonts loaded at all\n",
6122 const ULONG MaxFamInfo = 64;
6127 DPRINT(
"IntGdiGetFontResourceInfo: dwType == %lu\n", dwType);
6148 if (!NameInfo1 || !NameInfo2 || !FamInfo)
6164 for (ListEntry = g_FontListHead.
Flink; ListEntry != &g_FontListHead;
6165 ListEntry = ListEntry->
Flink)
6193 if (
Count >= MaxFamInfo)
6203 if (
Count == 0 && dwType != 5)
6239 Size +=
wcslen(FamInfo[
i].EnumLogFontEx.elfLogFont.lfFaceName);
6240 if (FamInfo[
i].EnumLogFontEx.elfStyle[0] &&
6241 _wcsicmp(FamInfo[
i].EnumLogFontEx.elfStyle,
L"Regular") != 0)
6243 Size += 1 +
wcslen(FamInfo[
i].EnumLogFontEx.elfStyle);
6388 Info->dwUnknown = -1;
6405 FT_UInt previous_index = 0, glyph_index = 0;
6415 if (previous_index && glyph_index)
6419 if (pKerningPair && cPairs)
6421 pKerningPair[
i].
wFirst = char_previous;
6422 pKerningPair[
i].
wSecond = char_code;
6425 if (
i == cPairs)
break;
6429 previous_index = glyph_index;
6430 char_previous = char_code;
6451 LONG AvailCount = 0;
6457 InfoCount, &g_FontListHead))
6495 LONG GotCount, AvailCount, SafeInfoCount;
6498 if (UnsafeLogFont ==
NULL || UnsafeInfo ==
NULL || UnsafeInfoCount ==
NULL)
6523 if (SafeInfoCount <= 0)
6546 GotCount =
min(AvailCount, SafeInfoCount);
6547 SafeInfoCount = AvailCount;
6624 (fuOptions & ETO_GLYPH_INDEX));
6625 Cache->Hashed.GlyphIndex = glyph_index;
6632 if (use_kerning && previous && glyph_index)
6646 vec.
x = (Dx[2 *
i + 0] << 6);
6647 vec.
y = (Dx[2 *
i + 1] << 6);
6655 vec.
x = (Dx[
i] << 6);
6663 previous = glyph_index;
6696 LONGLONG X64, Y64, RealXStart64, RealYStart64, DeltaX64, DeltaY64;
6698 RECTL DestRect, MaskRect;
6709 BOOL use_kerning, bResult, DoBreak;
6714 const DWORD del = 0x7f, nbsp = 0xa0;
6737 if (!
dc->dclevel.pSurface)
6744 pdcattr =
dc->pdcattr;
6763 psurf =
dc->dclevel.pSurface;
6788 &
dc->eboBackground.BrushObject);
6789 fuOptions &= ~ETO_OPAQUE;
6800 if (TextObj ==
NULL)
6806 FontObj = TextObj->
Font;
6846 bNoTransform = ((
mat.xy == 0) && (
mat.yx == 0) &&
6847 (
mat.xx == (1 << 16)) && (
mat.yy == (1 << 16)));
6851 vecAscent64.
y = (FontGDI->
tmAscent << 6);
6858#define VALIGN_MASK (TA_TOP | TA_BASELINE | TA_BOTTOM)
6865 RealXStart64 -= vecDescent64.
x;
6866 RealYStart64 += vecDescent64.
y;
6870 RealXStart64 -= vecAscent64.
x;
6871 RealYStart64 += vecAscent64.
y;
6881 fuOptions, bNoTransform, &Chain))
6891 RealXStart64 -= DeltaX64 / 2;
6892 RealYStart64 -= DeltaY64 / 2;
6896 RealXStart64 -= DeltaX64;
6897 RealYStart64 -= DeltaY64;
6903 INT X0 = (RealXStart64 + vecAscent64.
x + 32) >> 6;
6904 INT Y0 = (RealYStart64 - vecAscent64.
y + 32) >> 6;
6905 INT DX = (DeltaX64 >> 6);
6908 INT CY = (vecAscent64.
y - vecDescent64.
y + 32) >> 6;
6913 INT DY = (DeltaY64 >> 6);
6914 INT X1 = ((RealXStart64 + vecDescent64.
x + 32) >> 6);
6915 INT Y1 = ((RealYStart64 - vecDescent64.
y + 32) >> 6);
6919 { X0 +
DX, Y0 + DY },
6920 { X1 +
DX, Y1 + DY },
6957 (fuOptions & ETO_GLYPH_INDEX));
6968 if (use_kerning && previous && glyph_index &&
NULL == Dx)
6975 DPRINT(
"X64, Y64: %I64d, %I64d\n", X64, Y64);
6982 if (ch0 >
L' ' && ch0 !=
del && ch0 != nbsp && glyphSize.
cx == 0)
6984 DPRINT1(
"WARNING: family_name '%s' WChar 0x%04x has a glyphSize.cx of zero\n",
6985 face->family_name, ch0);
6991 (ch0 ==
L' ' || ch0 == nbsp))
6997 glyphSize.
cx = spaceWidth.
cx;
6998 realglyph->
left = 0;
7004 DestRect.
left = ((X64 + 32) >> 6) + realglyph->
left;
7006 DestRect.
top = ((Y64 + 32) >> 6) - realglyph->
top;
7010 if ((glyphSize.
cx != 0) && (glyphSize.
cy != 0))
7022 DPRINT1(
"WARNING: EngCreateBitmap() failed!\n");
7031 DPRINT1(
"WARNING: EngLockSurface() failed!\n");
7064 &
dc->eboText.BrushObject,
7067 DPRINT1(
"Failed to MaskBlt a glyph!\n");
7084 vec.
x = (Dx[2 *
i + 0] << 6);
7085 vec.
y = (Dx[2 *
i + 1] << 6);
7093 vec.
x = (Dx[
i] << 6);
7101 DPRINT(
"New X64, New Y64: %I64d, %I64d\n", X64, Y64);
7103 previous = glyph_index;
7115 DeltaX64 = X64 - RealXStart64;
7116 DeltaY64 = Y64 - RealYStart64;
7118 if (!
face->units_per_EM)
7126 face->underline_position *
face->size->metrics.y_ppem /
face->units_per_EM;
7128 face->underline_thickness *
face->size->metrics.y_ppem /
face->units_per_EM;
7138 vecB64.
y = vecA64.
y + (thickness << 6);
7142 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
7143 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
7144 INT DX = (DeltaX64 >> 6);
7147 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
7152 INT DY = (DeltaY64 >> 6);
7153 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
7154 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
7158 { X0 +
DX, Y0 + DY },
7159 { X1 +
DX, Y1 + DY },
7170 vecA64.
y = -(FontGDI->
tmAscent << 6) / 3;
7172 vecB64.
y = vecA64.
y + (thickness << 6);
7176 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
7177 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
7178 INT DX = (DeltaX64 >> 6);
7181 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
7186 INT DY = (DeltaY64 >> 6);
7187 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
7188 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
7192 { X0 +
DX, Y0 + DY },
7193 { X1 +
DX, Y1 + DY },
7210 if (TextObj !=
NULL)
7257#define STACK_TEXT_BUFFER_SIZE 512
7300 if (
BufSize >
sizeof(LocalBuffer))
7346 SafeRect = *UnsafeRect;
7372 if (
Buffer != LocalBuffer)
7388 charmap =
face->charmaps[
i];
7398 DPRINT1(
"WARNING: Could not find desired charmap!\n");
7431 UINT i, glyph_index;
7442 pdcattr =
dc->pdcattr;
7448 if (TextObj ==
NULL)
7472 SafeBuffF = SafeBuffer;
7474 SafeBuffI = SafeBuffer;
7476 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
7487 left = (
INT)
face->glyph->metrics.horiBearingX & -64;
7488 right = (
INT)((
face->glyph->metrics.horiBearingX +
face->glyph->metrics.width) + 63) & -64;
7489 adv = (
face->glyph->advance.x + 32) >> 6;
7503 SafeBuffF[
i - FirstChar].
abcfC = (
FLOAT) (adv - lsb - bbx);
7507 SafeBuffI[
i - FirstChar].
abcA = lsb;
7508 SafeBuffI[
i - FirstChar].
abcB = bbx;
7509 SafeBuffI[
i - FirstChar].
abcC = adv - lsb - bbx;
7536 UINT i, glyph_index;
7549 pdcattr =
dc->pdcattr;
7554 if (TextObj ==
NULL)
7582 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
7592 SafeBuffF[
i - FirstChar] = (
FLOAT) ((
face->glyph->advance.x + 32) >> 6);
7594 SafeBuffI[
i - FirstChar] = (
face->glyph->advance.x + 32) >> 6;
7675 WCHAR DefChar = 0xFFFF;
7686 for (
INT i = 0;
i < cwc;
i++)
NTSTATUS NTAPI MmUnmapViewInSystemSpace(IN PVOID MappedBase)
#define FILE_DIRECTORY_FILE
static VOID del(LPHIST_ENTRY item)
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)
#define STATUS_INVALID_HANDLE
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)
FORCEINLINE PDC DC_LockDc(HDC hdc)
#define ERROR_NOT_ENOUGH_MEMORY
#define NT_SUCCESS(StatCode)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
#define RTL_CONSTANT_STRING(s)
#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)
WCHAR *WINAPI PathFindFileNameW(const WCHAR *path)
BOOL WINAPI PathIsRelativeW(const WCHAR *path)
_ACRTIMP int __cdecl _wtoi(const wchar_t *)
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
_ACRTIMP __msvcrt_long __cdecl labs(__msvcrt_long)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
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)
struct _FileName FileName
#define FLOATOBJ_Set1(fo)
#define FLOATOBJ_Equal1(pf)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
BOOL LoadFont(LPWSTR lpCmdLine)
VOID IntDeleteRegFontEntries(_In_ PCWSTR pszFileName, _In_ DWORD dwFlags)
BOOL FASTCALL TextIntUpdateSize(PDC dc, PTEXTOBJ TextObj, PFONTGDI FontGDI, BOOL bDoLock)
BOOL FASTCALL TextIntGetTextExtentPoint(_In_ PDC dc, _In_ PTEXTOBJ TextObj, _In_reads_(Count) PCWCH String, _In_ INT Count, _In_ ULONG MaxExtent, _Out_ PINT Fit, _Out_writes_to_opt_(Count, *Fit) PINT Dx, _Out_ PSIZE Size, _In_ FLONG fl)
static FT_UInt FASTCALL get_glyph_index_flagged(FT_Face face, FT_ULong code, BOOL fCodeAsIndex)
static BOOLEAN FASTCALL GetFontFamilyInfoForList(const LOGFONTW *LogFont, PFONTFAMILYINFO Info, LPCWSTR NominalName, LONG *pCount, LONG MaxCount, PLIST_ENTRY Head)
static UINT FontLink_Chain_FindGlyph(_Inout_ PFONTLINK_CHAIN pChain, _Out_ PFONT_CACHE_ENTRY pCache, _Inout_ FT_Face *pFace, _In_ UINT code, _In_ BOOL fCodeAsIndex)
DWORD FASTCALL ftGdiGetKerningPairs(PFONTGDI Font, DWORD cPairs, LPKERNINGPAIR pKerningPair)
#define ASSERT_FREETYPE_LOCK_NOT_HELD()
static const CHARSETINFO g_FontTci[MAXTCIINDEX]
static WCHAR s_szDefFontLinkFileName[MAX_PATH]
static BOOL IntNeedRequestFontSize(PFONTLINK_CHAIN pChain, FT_Face face, PLIST_ENTRY TargetEntry)
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 const UNICODE_STRING DosPathPrefix
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 IntRequestFontSizeEx(FT_Face face, const LOGFONTW *plf)
static NTSTATUS FontLink_AddEntry(LPCWSTR lfFaceName, PZZWSTR pszzFontLink)
static FT_Error IntRequestFontSize(PDC dc, PFONTGDI FontGDI, LONG lfWidth, LONG lfHeight)
static INT FASTCALL IntGdiAddFontResourceSingle(_In_ PCUNICODE_STRING FileName, _In_ DWORD Characteristics, _In_ DWORD dwFlags)
static BOOL s_fFontLinkUseAnsi
static void SharedMem_AddRef(PSHARED_MEM Ptr)
BOOL FASTCALL ftGdiGetTextMetricsW(HDC hDC, PTMW_INTERNAL ptmwi)
BOOL FASTCALL IntGdiRemoveFontResource(_In_ PCUNICODE_STRING FileName, _In_ DWORD cFiles, _In_ DWORD dwFlags)
static INT FASTCALL IntGdiLoadFontByIndexFromMemory(PGDI_LOAD_FONT pLoadFont, FT_Long FontIndex)
static BOOL FontLink_PrepareFontInfo(_Inout_ PFONTLINK pFontLink)
static PSHARED_FACE SharedFace_Create(FT_Face Face, PSHARED_MEM Memory)
static VOID FASTCALL IntFontType(PFONTGDI Font)
BOOL APIENTRY GreExtTextOutW(_In_ HDC hDC, _In_ INT XStart, _In_ INT YStart, _In_ UINT fuOptions, _In_opt_ PRECTL lprc, _In_reads_opt_(Count) PCWCH String, _In_ INT Count, _In_opt_ const INT *Dx, _In_ DWORD dwCodePage)
FT_Library g_FreeTypeLibrary
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)
static BOOL EqualFamilyInfo(const FONTFAMILYINFO *pInfo1, const FONTFAMILYINFO *pInfo2)
static DWORD s_chFontLinkDefaultChar
BYTE FASTCALL IntCharSetFromCodePage(UINT uCodePage)
static PFONTLINK FontLink_Create(_Inout_ PFONTLINK_CHAIN pChain, _In_ const LOGFONTW *plfBase, _In_ LPCWSTR pszLink)
const MATRIX gmxWorldToPageDefault
UNICODE_STRING g_FontRegPath
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)
static NTSTATUS FontLink_Chain_FindEntry(_Inout_ PFONTLINK_CHAIN pChain, _Inout_ PLOGFONTW pLF)
static const WCHAR s_szzDefFixedFontLink[]
BOOL FASTCALL IntLoadFontSubstList(PLIST_ENTRY pHead)
static UINT g_FontCacheNumEntries
static WCHAR s_szDefFontLinkFontName[MAX_PATH]
static void FontLink_DeleteEntries(VOID)
static BOOL IntGetTextDisposition(_Out_ LONGLONG *pX64, _Out_ LONGLONG *pY64, _In_reads_(Count) PCWCH String, _In_ INT Count, _In_opt_ const INT *Dx, _Inout_ PFONT_CACHE_ENTRY Cache, _In_ UINT fuOptions, _In_ BOOL bNoTransform, _Inout_ PFONTLINK_CHAIN pChain)
VOID FASTCALL IntLoadSystemFonts(VOID)
DWORD FASTCALL ftGetFontUnicodeRanges(PFONTGDI Font, PGLYPHSET glyphset)
#define GOT_PENALTY(name, value)
static void SharedFace_AddRef(PSHARED_FACE Ptr)
static BOOL FASTCALL IntSelectFaceCharmap(FT_Face face)
BOOL FASTCALL ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS lprs)
static VOID FASTCALL UnlinkFontMemCollection(PFONT_ENTRY_COLL_MEM Collection)
INT FASTCALL IntGdiAddFontResourceEx(_In_ PCUNICODE_STRING FileName, _In_ DWORD cFiles, _In_ DWORD Characteristics, _In_ DWORD dwFlags)
static NTSTATUS FontLink_LoadDefaultCharset(VOID)
struct _FONTLINK_CHAIN FONTLINK_CHAIN
static VOID FontLink_Chain_Dump(_In_ PFONTLINK_CHAIN pChain)
static void FASTCALL FontFamilyFillInfo(PFONTFAMILYINFO Info, LPCWSTR FaceName, LPCWSTR FullName, PFONTGDI FontGDI)
static __inline void FASTCALL IntInitFontNames(FONT_NAMES *Names, PSHARED_FACE SharedFace)
static void RemoveCacheEntries(FT_Face Face)
#define FM_SEL_USE_TYPO_METRICS
static NTSTATUS FontLink_PopulateEntries(VOID)
BOOL FASTCALL ftGdiRealizationInfo(PFONTGDI Font, PREALIZATION_INFO Info)
VOID FASTCALL FreeFontSupport(VOID)
VOID FASTCALL IntEnableFontRendering(BOOL Enable)
#define IntUnLockFreeType()
static BOOL s_fFontLinkUseOem
BOOL APIENTRY GreGetCharWidthW(_In_ HDC hDC, _In_ UINT FirstChar, _In_ UINT Count, _In_reads_opt_(Count) PCWCH Safepwc, _In_ FLONG fl, _Out_writes_bytes_(Count *sizeof(INT)) PVOID Buffer)
struct _FONTLINK_ENTRY * PFONTLINK_ENTRY
static INT FASTCALL IntGdiLoadFontsFromMemory(PGDI_LOAD_FONT pLoadFont, PSHARED_FACE SharedFace, FT_Long FontIndex, INT CharSetIndex)
static NTSTATUS FontLink_Chain_Populate(_Inout_ PFONTLINK_CHAIN pChain)
static NTSTATUS FontLink_LoadSettings(VOID)
static BOOL FontLink_Chain_IsPopulated(const FONTLINK_CHAIN *pChain)
PBYTE FASTCALL IntStoreFontNames(_In_ const FONT_NAMES *Names, _Out_ OUTLINETEXTMETRICW *Otm)
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)
ULONG FASTCALL ftGdiGetGlyphOutline(PDC dc, WCHAR wch, UINT iFormat, LPGLYPHMETRICS pgm, ULONG cjBuf, PVOID pvBuf, const MAT2 *pmat2, BOOL bIgnoreRotation)
static BOOL FASTCALL IntGdiRemoveFontResourceSingle(_In_ PCUNICODE_STRING FileName, _In_ DWORD dwFlags)
struct _FONTLINK_CHAIN * PFONTLINK_CHAIN
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)
static FT_BitmapGlyph IntGetBitmapGlyphWithCache(IN OUT PFONT_CACHE_ENTRY Cache, IN FT_GlyphSlot GlyphSlot)
static BOOL IntGetFontDefaultChar(_In_ FT_Face Face, _Out_ PWCHAR pDefChar)
#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)
LONG NTAPI NtGdiGetFontFamilyInfo(_In_ HDC Dc, _In_ const LOGFONTW *UnsafeLogFont, _Out_ PFONTFAMILYINFO UnsafeInfo, _Inout_ PLONG UnsafeInfoCount)
UINT FASTCALL IntGetCharSet(INT nIndex, FT_ULong CodePageRange1)
static NTSTATUS FontLink_LoadDefaultFonts(VOID)
#define EMUBOLD_NEEDED(original, request)
static __inline VOID FASTCALL CleanupFontEntry(PFONT_ENTRY FontEntry)
struct _FONTLINK FONTLINK
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 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 __inline FT_Fixed FT_FixedFromFIXED(FIXED f)
static BOOL MatchFontName(PSHARED_FACE SharedFace, PUNICODE_STRING Name1, FT_UShort NameID, FT_UShort LangID)
static SIZE_T FASTCALL IntStoreName(_In_ const UNICODE_STRING *pName, _Out_ PBYTE pb)
static BOOLEAN FASTCALL GetFontFamilyInfoForSubstitutes(const LOGFONTW *LogFont, PFONTFAMILYINFO Info, LONG *pCount, LONG MaxCount)
static void SharedFace_Release(PSHARED_FACE Ptr, BOOL bDoLock)
static BOOL MatchFontNames(PSHARED_FACE SharedFace, LPCWSTR lfFaceName)
#define ASSERT_FREETYPE_LOCK_HELD()
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 APIENTRY NtGdiExtTextOutW(_In_ HDC hDC, _In_ INT XStart, _In_ INT YStart, _In_ UINT fuOptions, _In_opt_ LPCRECT UnsafeRect, _In_reads_opt_(Count) PCWCH UnsafeString, _In_range_(0, 0xFFFF) UINT Count, _In_reads_opt_(_Inexpressible_(cwc)) const INT *UnsafeDx, _In_ DWORD dwCodePage)
BOOL FASTCALL IntLoadFontsInRegistry(VOID)
BOOL FASTCALL IntIsFontRenderingEnabled(VOID)
DWORD FASTCALL ftGdiGetFontData(PFONTGDI FontGdi, DWORD Table, DWORD Offset, PVOID Buffer, DWORD Size)
#define gmxWorldToDeviceDefault
struct FONT_NAMES * LPFONT_NAMES
static NTSTATUS IntGetFontLocalizedName(PUNICODE_STRING pNameW, PSHARED_FACE SharedFace, FT_UShort NameID, FT_UShort LangID)
BOOL APIENTRY GreGetCharABCWidthsW(_In_ HDC hDC, _In_ UINT FirstChar, _In_ UINT Count, _In_reads_opt_(Count) PCWCH Safepwch, _In_ FLONG fl, _Out_writes_bytes_(Count *sizeof(ABC)) PVOID SafeBuffer)
static VOID FontLink_Destroy(_Inout_ PFONTLINK pLink)
struct _FONTLINK * PFONTLINK
static VOID FontLink_Chain_Init(_Out_ PFONTLINK_CHAIN pChain, _Inout_ PTEXTOBJ pTextObj, _In_ FT_Face face)
FT_Render_Mode FASTCALL IntGetFontRenderMode(LOGFONTW *logfont)
static PFONTLINK_ENTRY FontLink_FindEntry(const LOGFONTW *pLogFont)
static BOOL s_fFontLinkUseSymbol
struct _FONTLINK_ENTRY FONTLINK_ENTRY
static PFONTLINK FontLink_Chain_FindLink(PFONTLINK_CHAIN pChain, PLOGFONTW plf)
INT FASTCALL IntGetOutlineTextMetrics(PFONTGDI FontGDI, UINT Size, OUTLINETEXTMETRICW *Otm, BOOL bLocked)
static __inline void FASTCALL IntFreeFontNames(FONT_NAMES *Names)
static void RemoveCachedEntry(PFONT_CACHE_ENTRY Entry)
#define _TMPF_VARIABLE_PITCH
#define FONTLINK_DEFAULT_CHAR
static BOOL SubstituteFontRecurse(PLOGFONTW pLogFont)
static const WCHAR s_szzDefFontLink[]
static VOID FASTCALL CleanupFontEntryEx(PFONT_ENTRY FontEntry, PFONTGDI FontGDI)
BOOL APIENTRY IntExtTextOutW(_In_ PDC dc, _In_ INT XStart, _In_ INT YStart, _In_ UINT fuOptions, _In_opt_ PRECTL lprc, _In_reads_opt_(Count) PCWCH String, _In_ INT Count, _In_opt_ const INT *Dx, _In_ DWORD dwCodePage)
DWORD APIENTRY GreGetGlyphIndicesW(_In_ HDC hdc, _In_reads_opt_(cwc) PCWCH pwc, _In_ INT cwc, _Out_writes_opt_(cwc) PWORD pgi, _In_ DWORD iMode, _In_ BOOL bSubset)
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_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_Vector_Transform(FT_Vector *vector, const FT_Matrix *matrix)
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_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_Done_Library(FT_Library library)
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
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLdouble GLdouble GLdouble GLdouble top
GLenum GLuint GLint GLenum face
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
#define RtlEqualMemory(dst, src, len)
static PWSTR PDWORD pdwBytes
#define MmCopyToCaller(x, y, z)
#define ExFreePoolWithTag(_P, _T)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
#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
#define InitializeObjectAttributes(p, n, a, r, s)
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
_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)
NTSYSAPI VOID NTAPI RtlGetDefaultCodePage(_Out_ PUSHORT AnsiCodePage, _Out_ PUSHORT OemCodePage)
_In_ BOOLEAN _In_ USHORT Directory
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define _Out_writes_to_opt_(s, c)
#define _Out_writes_opt_(s)
#define _In_reads_opt_(s)
#define _Out_writes_bytes_(s)
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
_NullNull_terminated_ WCHAR * PZZWSTR
_NullNull_terminated_ CONST WCHAR * PCZZWSTR
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
static OUT PIO_STATUS_BLOCK IoStatusBlock
struct tagFONTFAMILYINFO FONTFAMILYINFO
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
#define STATUS_INTERNAL_ERROR
NTSTRSAFEAPI RtlStringCbCopyW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEAPI RtlStringCchCopyNW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_reads_or_z_(cchToCopy) STRSAFE_LPCWSTR pszSrc, _In_ size_t cchToCopy)
NTSTRSAFEAPI RtlStringCchCopyW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEAPI RtlStringCchCatW(_Inout_updates_(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)
#define PATH_IsPathOpen(dclevel)
void * EngAllocMem(int zero, unsigned long size, int tag=0)
static const WCHAR szName[]
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
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
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
WCHAR lfFaceName[LF_FACESIZE]
struct _FONT_ASPECT::@5453::@5454 Emu
FT_BitmapGlyph BitmapGlyph
WCHAR TextFace[LF_FACESIZE]
struct _LIST_ENTRY * Flink
POINT otmptSuperscriptOffset
POINT otmptSuperscriptSize
int otmsStrikeoutPosition
int otmsUnderscorePosition
TEXTMETRICW otmTextMetrics
POINT otmptSubscriptOffset
LIST_ENTRY PrivateMemFontListHead
UINT PrivateMemFontHandleCount
LIST_ENTRY PrivateFontListHead
UNICODE_STRING FontFamily
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)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_NO_MORE_FILES
WORD WORD PSZ PSZ pszFileName
_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
NTSTATUS IntDuplicateUnicodeString(IN ULONG Flags, IN PCUNICODE_STRING SourceString, OUT PUNICODE_STRING DestinationString)
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(_In_ 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()
VOID APIENTRY IntEngFillPolygon(IN OUT PDC dc, IN POINTL *pPoints, IN UINT cPoints, IN BRUSHOBJ *BrushObj)
VOID IntSwapEndian(_Inout_ LPVOID pvData, _In_ DWORD Size)
VOID IntUnicodeStringToBuffer(_Out_ LPWSTR pszBuffer, _In_ SIZE_T cbBuffer, _In_ const UNICODE_STRING *pString)
SIZE_T SZZ_GetSize(_In_ PCZZWSTR pszz)
LPCWSTR FASTCALL IntNameFromCharSet(_In_ BYTE CharSet)
BYTE IntCharSetFromLangID(_In_ LANGID LangID)
LONG IntNormalizeAngle(_In_ LONG nTenthsOfDegrees)
VOID FASTCALL IntEngFillBox(IN OUT PDC dc, IN INT X, IN INT Y, IN INT Width, IN INT Height, IN BRUSHOBJ *BrushObj)
static DWORD Utf32FromSurrogatePair(_In_ DWORD ch0, _In_ DWORD ch1)
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
#define FLOATOBJ_DivLong(pf, l)
ENGAPI BOOL APIENTRY EngDeleteSurface(_In_ _Post_ptr_invalid_ HSURF hsurf)
ENGAPI SURFOBJ *APIENTRY EngLockSurface(_In_ HSURF hsurf)
_In_ ULONG_PTR _In_ ULONG iFace
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)
#define FLOATOBJ_AddLong(pf, l)
struct _FILE_DIRECTORY_INFORMATION * PFILE_DIRECTORY_INFORMATION
#define ERROR_GEN_FAILURE
struct _OUTLINETEXTMETRICW OUTLINETEXTMETRICW
#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
#define IS_HIGH_SURROGATE(ch)
#define IS_LOW_SURROGATE(ch)
_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)