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
67#define MAX_FONTLINK_CACHE 128
83 L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink",
110 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\FontAssoc\\Associated DefaultFonts",
148 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\FontAssoc\\Associated Charset",
203 if (pChain->pszzFontLink)
251 pCache->
LogFont = pChain->LogFont;
252 pCache->
Chain = *pChain;
299#define MAX_FONT_LOOKUP_CACHE 64
303#ifndef _TMPF_VARIABLE_PITCH
304 #define _TMPF_VARIABLE_PITCH TMPF_FIXED_PITCH
308#define EMUBOLD_NEEDED(original, request) \
309 (((request) != FW_DONTCARE) && ((request) - (original) >= FW_BOLD - FW_MEDIUM))
316#define gmxWorldToDeviceDefault gmxWorldToPageDefault
322 RTL_CONSTANT_STRING(
L"\\REGISTRY\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts");
331#define ASSERT_FREETYPE_LOCK_HELD() \
332 ASSERT(g_FreeTypeLock->Owner == KeGetCurrentThread())
334#define ASSERT_FREETYPE_LOCK_NOT_HELD() \
335 ASSERT(g_FreeTypeLock->Owner != KeGetCurrentThread())
337#define IntLockFreeType() \
339 ASSERT_FREETYPE_LOCK_NOT_HELD(); \
340 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(g_FreeTypeLock); \
343#define IntUnLockFreeType() \
345 ASSERT_FREETYPE_LOCK_HELD(); \
346 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(g_FreeTypeLock); \
349#define MAX_FONT_CACHE 256
381#define MAXTCIINDEX 32
465 if (pFontLink->bIgnore)
467 if (pFontLink->SharedFace)
473 pFontLink->bIgnore =
TRUE;
477 pFontLink->SharedFace = SharedFace;
495 Cache->OutlineRequiredSize = 0;
529 Ptr->IsMapping = IsMapping;
530 DPRINT(
"Creating SharedMem for %p (%i, %p)\n",
Buffer, IsMapping,
Ptr);
563 for (CurrentEntry = g_FontCacheListHead.
Flink;
564 CurrentEntry != &g_FontCacheListHead;
565 CurrentEntry = NextEntry)
568 NextEntry = CurrentEntry->
Flink;
582 if (
Ptr->RefCount <= 0)
586 if (
Ptr->RefCount == 0)
588 DPRINT(
"Releasing SharedMem for %p (%i, %p)\n",
Ptr->Buffer,
Ptr->IsMapping,
Ptr);
612 if (
Ptr->RefCount <= 0)
616 if (
Ptr->RefCount == 0)
618 DPRINT(
"Releasing SharedFace for %s\n",
Ptr->Face->family_name ?
Ptr->Face->family_name :
"<NULL>");
661 pt->x.fract = (
vec->
x & 0x3f) << 10;
662 pt->x.fract |= ((
pt->x.fract >> 6) | (
pt->x.fract >> 12));
664 pt->y.fract = (
vec->
y & 0x3f) << 10;
665 pt->y.fract |= ((
pt->y.fract >> 6) | (
pt->y.fract >> 12));
681 const char *style_name;
700 style_name =
"<invalid>";
703 DPRINT(
"family_name '%s', style_name '%s', FaceName '%wZ', StyleName '%wZ', FontGDI %p, "
704 "FontObj %p, iUnique %lu, SharedFace %p, Face %p, CharSet %u, Filename '%S'\n",
723 DPRINT(
"## DumpFontList(%p)\n", Head);
728 DumpFontEntry(CurrentEntry);
734 DPRINT(
"%wZ,%u -> %wZ,%u\n",
747 DPRINT(
"## DumpFontSubstList\n");
749 for (pListEntry = pHead->
Flink;
751 pListEntry = pListEntry->
Flink)
754 DumpFontSubstEntry(pSubstEntry);
758VOID DumpPrivateFontList(
BOOL bDoLock)
780VOID DumpGlobalFontList(
BOOL bDoLock)
785 DumpFontList(&g_FontListHead);
793 DumpGlobalFontList(bDoLock);
794 DumpPrivateFontList(bDoLock);
811 BYTE InfoBuffer[128];
820 L"Microsoft\\Windows NT\\CurrentVersion\\"
836 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
849 InfoBuffer,
sizeof(InfoBuffer), &
Length);
863 DPRINT(
"RtlCreateUnicodeString failed\n");
869 InfoBuffer,
sizeof(InfoBuffer), &
Length);
885 DPRINT(
"RtlCreateUnicodeString failed\n");
927 DPRINT(
"ExAllocatePoolWithTag failed\n");
1013 DPRINT1(
"FT_Init_FreeType failed with error code 0x%x\n", ulError);
1019 DPRINT1(
"Fonts registry is empty.\n");
1053 pHead = &g_FontCacheListHead;
1062 pHead = &g_FontSubstListHead;
1071 pHead = &g_FontListHead;
1095 pmat->
xx = vecAngle.
x;
1096 pmat->
xy = -vecAngle.
y;
1097 pmat->
yx = -pmat->
xy;
1098 pmat->
yy = pmat->
xx;
1134 BYTE RequestedCharSet,
1145 for (pListEntry = pHead->
Flink;
1146 pListEntry != pHead;
1147 pListEntry = pListEntry->
Flink)
1194 UINT RecurseCount = 5;
1205 while (RecurseCount-- > 0)
1208 &OutputNameW, &InputNameW,
1234 pChain->pBaseTextObj = pTextObj;
1235 pChain->pDefFace =
face;
1241 L"tahoma.ttf,Tahoma\0"
1242 L"msgothic.ttc,MS UI Gothic\0"
1243 L"mingliu.ttc,PMingLiU\0"
1244 L"simsun.ttc,SimSun\0"
1245 L"gulim.ttc,Gulim\0"
1249 L"cour.ttf,Courier New\0"
1250 L"msgothic.ttc,MS Gothic\0"
1251 L"mingliu.ttc,MingLiU\0"
1252 L"simsun.ttc,NSimSun\0"
1253 L"gulim.ttc,GulimChe\0"
1264 WCHAR szzFontLink[512];
1268 ASSERT(pLF->lfFaceName[0]);
1272 L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink\\SystemLink",
1278 cbData =
sizeof(szzFontLink);
1285 cbData =
sizeof(szzFontLink);
1305 pszzFontLink =
NULL;
1342 pChain->pszzFontLink = pszzFontLink;
1413 PTEXTOBJ pTextObj = pChain->pBaseTextObj;
1440 default: bFixCharSet =
TRUE;
break;
1450 *pChain = pLinkCache->
Chain;
1456 pChain->LogFont = lfBase;
1463 pszLink = pChain->pszzFontLink;
1466 DPRINT(
"pszLink: '%S'\n", pszLink);
1470 pszLink +=
wcslen(pszLink) + 1;
1479 DPRINT(
"szEntry: '%S'\n", szEntry);
1501 BYTE *DirInfoBuffer;
1543 if (DirInfoBuffer ==
NULL)
1561 Status = ZwQueryDirectoryFile(
1610 bRestartScan =
FALSE;
1626 if (CodePageRange1 == 0)
1629 for (BitIndex = 0; BitIndex <
MAXTCIINDEX; ++BitIndex)
1631 if (CodePageRange1 & (1 << BitIndex))
1634 if ((nIndex >= 0) && (nCount == (
UINT)nIndex))
1646#define PX2PT(pixels) FT_MulDiv((pixels), 72, 96)
1674 Face = SharedFace->
Face;
1821 if (pOS2 && os2_version >= 1)
1828 for (BitIndex = 0; BitIndex <
MAXTCIINDEX; ++BitIndex)
1830 if (os2_ulCodePageRange1 & (1 << BitIndex))
1835 if ((CharSetIndex == -1 && CharSetCount == 0) ||
1836 CharSetIndex == CharSetCount)
1861 DPRINT(
"Font loaded: %s (%s)\n",
1868 Entry->Font = FontGDI;
1869 Entry->NotEnum = (Characteristics & FR_NOT_ENUM);
1872 if (Characteristics & FR_PRIVATE)
1887 if (CharSetIndex == -1)
1892 if (
Entry->StyleName.Length)
1893 NameLength +=
Entry->StyleName.Length +
sizeof(
WCHAR);
1921 *pValueName = NewString;
1923 if (
Entry->StyleName.Length)
1929 for (
i = 1;
i < CharSetCount; ++
i)
1953 ((FontIndex == -1) ? 0 : FontIndex), &Face);
1956 if (
Error == FT_Err_Unknown_File_Format)
1957 DPRINT1(
"Unknown font file format\n");
1959 DPRINT1(
"Error reading font (error code: %d)\n",
Error);
1972 DPRINT1(
"SharedFace_Create failed\n");
1977 if (FontIndex == -1)
2023 RtlInitEmptyUnicodeString(&PathName, pszBuffer,
Length);
2046 DPRINT1(
"Could not load font file: %wZ\n", &PathName);
2055 DPRINT1(
"ObReferenceObjectByHandle failed.\n");
2068 DPRINT1(
"Could not map file: %wZ\n", &PathName);
2079 DPRINT1(
"Could not map file: %wZ\n", &PathName);
2089 LoadFont.Characteristics = Characteristics;
2117 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
2140 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
2166 pFileName = PathName.
Buffer;
2207 cchFile =
wcslen(pchFile);
2218 ustrPathName.
Buffer = pchFile;
2225 pchFile += cchFile + 1;
2240 ULONG dwIndex, NameLength, ValueSize, dwType;
2249 ValueSize =
sizeof(szValue);
2279 PWSTR pszBuffer, pszFileTitle;
2291 RtlInitEmptyUnicodeString(&PathName, pszBuffer,
Length);
2302 pszFileTitle = PathName.
Buffer;
2306 if (!pszFileTitle || !*pszFileTitle)
2314 for (CurrentEntry = g_FontListHead.
Flink;
2315 CurrentEntry != &g_FontListHead;
2316 CurrentEntry = NextEntry)
2319 NextEntry = CurrentEntry->
Flink;
2321 FontGDI = FontEntry->
Font;
2352 cchFile =
wcslen(pchFile);
2363 ustrPathName.
Buffer = pchFile;
2369 pchFile += cchFile + 1;
2405 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
2418 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2424 for (
i = 0;
i < KeyFullInfo.
Values; ++
i)
2428 InfoBuffer, InfoSize, &
Length);
2437 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2442 InfoBuffer, InfoSize, &
Length);
2457 DPRINT1(
"RtlCreateUnicodeString failed\n");
2463 InfoBuffer, InfoSize, &
Length);
2472 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2477 InfoBuffer, InfoSize, &
Length);
2497 L"\\SystemRoot\\Fonts\\%s", pchPath);
2524 return (KeyFullInfo.
Values != 0 && nFontCount != 0);
2545 LoadFont.Characteristics = FR_PRIVATE | FR_NOT_ENUM;
2559 if (EntryCollection)
2569 Ret = EntryCollection->
Handle;
2629 if (CurrentEntry->
Handle == hMMFont)
2631 EntryCollection = CurrentEntry;
2639 if (EntryCollection)
2656 DPRINT(
"IntGdiCleanupPrivateFontsForProcess()\n");
2659 EntryCollection =
NULL;
2672 if (EntryCollection)
2749 if (lf->lfEscapement != lf->lfOrientation)
2842 int Ascent, Descent;
2899 - ((Ascent + Descent)
2901 YScale) + 32) >> 6);
3090 Names->OtmSize = OtmSize;
3107 Otm->otmpFamilyName = (
LPSTR)(pb - (
BYTE*) Otm);
3111 Otm->otmpFaceName = (
LPSTR)(pb - (
BYTE*) Otm);
3115 Otm->otmpStyleName = (
LPSTR)(pb - (
BYTE*) Otm);
3119 Otm->otmpFullName = (
LPSTR)(pb - (
BYTE*) Otm);
3170 if (
Size == 0 &&
Cache->OutlineRequiredSize > 0)
3173 return Cache->OutlineRequiredSize;
3188 return Cache->OutlineRequiredSize;
3193 if (Size < Cache->OutlineRequiredSize)
3195 DPRINT1(
"Size %u < OutlineRequiredSize %u\n",
Size,
3196 Cache->OutlineRequiredSize);
3215 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
3224 DPRINT1(
"Can't find HHEA table - not TT font?\n");
3245#define SCALE_X(value) ((FT_MulFix((value), XScale) + 32) >> 6)
3246#define SCALE_Y(value) ((FT_MulFix((value), YScale) + 32) >> 6)
3295 return Cache->OutlineRequiredSize;
3303 INT i,
Count, BestIndex, Score, BestScore;
3334 if (
Name.name_id != NameID)
3345 (
Name.string[0] == 0 &&
Name.string[1] == 0))
3369 if (Score > BestScore)
3428 if (!
Cache->FontFamily.Buffer)
3434 if (!
Cache->FullName.Buffer)
3479 Lf = &
Info->EnumLogFontEx.elfLogFont;
3492 Ntm = &
Info->NewTextMetricEx.ntmTm;
3537 sizeof(
Info->EnumLogFontEx.elfFullName),
3541 StyleW.
Buffer =
Info->EnumLogFontEx.elfStyle;
3582 if (
fs.fsCsb[0] == 0)
3589 case FT_ENCODING_UNICODE:
3590 case FT_ENCODING_APPLE_ROMAN:
3593 case FT_ENCODING_MS_SYMBOL:
3605 if (
fs.fsCsb[0] & fs0)
3617 DPRINT1(
"Unknown elfscript for bit %u\n",
i);
3622 Info->NewTextMetricEx.ntmFontSig =
fs;
3642 FontGDI = CurrentEntry->
Font;
3768 const DWORD *pdw = pv;
3784 DWORD dwHash = pCache->dwHash;
3788 for (CurrentEntry = g_FontCacheListHead.
Flink;
3789 CurrentEntry != &g_FontCacheListHead;
3790 CurrentEntry = CurrentEntry->
Flink)
3793 if (FontEntry->
dwHash == dwHash &&
3795 FontEntry->
Hashed.
Face == pCache->Hashed.Face &&
3806 if (CurrentEntry == &g_FontCacheListHead)
3832 DPRINT1(
"Failure caching glyph.\n");
3840 DPRINT1(
"Failure rendering glyph.\n");
3847 DPRINT1(
"Alloc failure caching glyph.\n");
3854 if (FT_Bitmap_Convert_ReactOS_Hack(GlyphSlot->library, &BitmapGlyph->
bitmap,
3855 &AlignedBitmap, 4,
TRUE))
3857 DPRINT1(
"Conversion failed\n");
3865 BitmapGlyph->
bitmap = AlignedBitmap;
3886 int needed = 0,
point = 0, contour, first_pt;
3887 unsigned int pph_start, cpfx;
3890 for (contour = 0; contour <
outline->n_contours; contour++)
3907 needed +=
sizeof(*pph);
3909 while (point <= outline->contours[contour])
3921 }
while (point <= outline->contours[contour] &&
3933 else if (point <= outline->contours[contour] &&
3947 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
3950 pph->
cb = needed - pph_start;
3973 int contour,
point = 0, first_pt;
3978 unsigned int needed = 0;
3980 for (contour = 0; contour <
outline->n_contours; contour++)
3990 needed +=
sizeof(*pph);
3992 while (point <= outline->contours[contour])
4019 cubic_control[0].
x >>= 1;
4020 cubic_control[0].
y >>= 1;
4023 cubic_control[3] =
outline->points[first_pt];
4031 cubic_control[3].
x >>= 1;
4032 cubic_control[3].
y >>= 1;
4037 cubic_control[1].
x = (2 *
outline->points[
point].x + 1) / 3;
4038 cubic_control[1].
y = (2 *
outline->points[
point].y + 1) / 3;
4039 cubic_control[2] = cubic_control[1];
4040 cubic_control[1].
x += (cubic_control[0].
x + 1) / 3;
4041 cubic_control[1].
y += (cubic_control[0].
y + 1) / 3;
4042 cubic_control[2].
x += (cubic_control[3].
x + 1) / 3;
4043 cubic_control[2].
y += (cubic_control[3].
y + 1) / 3;
4053 }
while (point <= outline->contours[contour] &&
4059 if (point <= outline->contours[contour] &&
4071 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
4074 pph->
cb = needed - pph_start;
4088 LONG Ascent, Descent, Sum, EmHeight;
4090 lfWidth =
abs(lfWidth);
4095 DPRINT(
"lfHeight and lfWidth are zero.\n");
4118 if (!pOS2 || !pHori)
4123 DPRINT1(
"%s: Failed to request font size.\n",
face->family_name);
4146#define FM_SEL_USE_TYPO_METRICS 0x80
4155 Sum = Ascent + Descent;
4168 else if (lfHeight < 0)
4184#undef FM_SEL_USE_TYPO_METRICS
4191 EmHeight =
max(EmHeight, 1);
4212 req.
height = (EmHeight << 6);
4235 DPRINT(
"WARNING: No charmap selected!\n");
4236 DPRINT(
"This font face has %d charmaps\n",
face->num_charmaps);
4239 for (
n = 0;
n <
face->num_charmaps;
n++)
4241 charmap =
face->charmaps[
n];
4242 if (charmap->
encoding == FT_ENCODING_UNICODE)
4250 for (
n = 0;
n <
face->num_charmaps;
n++)
4252 charmap =
face->charmaps[
n];
4262 for (
n = 0;
n <
face->num_charmaps;
n++)
4264 charmap =
face->charmaps[
n];
4265 if (charmap->
encoding == FT_ENCODING_MS_SYMBOL)
4272 if (!found &&
face->num_charmaps > 0)
4274 found =
face->charmaps[0];
4278 DPRINT1(
"WARNING: Could not find desired charmap!\n");
4286 DPRINT1(
"WARNING: Could not set the charmap!\n");
4312 if (glyph < 0x100) glyph += 0xf000;
4351 DPRINT1(
"%S, %p, %p\n", pChain->LogFont.lfFaceName, pChain->pBaseTextObj, pChain->pDefFace);
4353 Head = &pChain->FontLinkList;
4357 DPRINT1(
"FontLink #%d: %p, %d, %S, %p, %p\n",
4384 DPRINT(
"code: 0x%08X, index: 0x%08X, fCodeAsIndex:%d\n",
code,
index, fCodeAsIndex);
4385 pCache->Hashed.Face = *pFace = pChain->pDefFace;
4396 Head = &pChain->FontLinkList;
4410 pCache->Hashed.Face = *pFace =
face;
4419 pCache->Hashed.Face = *pFace = pChain->pDefFace;
4436 BOOL bIgnoreRotation)
4463 cjBuf, pvBuf, pmat2);
4465 pdcattr =
dc->pdcattr;
4533 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
4541 if (aveWidth && potm)
4570 DPRINT(
"Advance = %d, lsb = %d, bbx = %d\n",adv, lsb, bbx);
4587 needsTransform =
TRUE;
4601 needsTransform =
TRUE;
4609 DPRINT(
"Rotation Trans!\n");
4612 needsTransform =
TRUE;
4619 DPRINT(
"MAT2 Matrix Trans!\n");
4625 needsTransform =
TRUE;
4630 if (!needsTransform)
4632 DPRINT(
"No Need to be Transformed!\n");
4643 for (xc = 0; xc < 2; xc++)
4645 for (yc = 0; yc < 2; yc++)
4653 if (xc == 0 && yc == 0)
4684 DPRINT(
"CX %d CY %d BBX %u BBY %u GOX %d GOY %d\n",
4693 DPRINT(
"GGO_METRICS Exit!\n");
4710 pitch = ((
width + 31) >> 5) << 2;
4713 if (!pvBuf || !
cjBuf)
break;
4738 ft_bitmap.
pitch = pitch;
4740 ft_bitmap.
buffer = pvBuf;
4767 unsigned int mult,
row, col;
4772 pitch = (
width + 3) / 4 * 4;
4775 if (!pvBuf || !
cjBuf)
break;
4789 for (
x = 0; (
UINT)
x < pitch;
x++)
4791 if (x < ft_face->glyph->bitmap.width)
4792 dst[
x] = (
src[
x / 8] & (1 << ( (7 - (
x % 8))))) ? 0xff : 0;
4805 ft_bitmap.
pitch = pitch;
4807 ft_bitmap.
buffer = pvBuf;
4834 for (col = 0; col <
width; col++,
ptr++)
4836 *
ptr = (((
int)*
ptr) * mult + 128) / 256;
4862 if (!pvBuf || !
cjBuf)
4882 if (needsTransform && pvBuf)
4890 if (!pvBuf || !
cjBuf)
4904 DPRINT(
"ftGdiGetGlyphOutline END and needed %lu\n", needed);
4934 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %d]\n",
Cache->Hashed.GlyphIndex);
4938 glyph =
Cache->Hashed.Face->glyph;
4940 if (
Cache->Hashed.Aspect.Emu.Bold)
4943 if (
Cache->Hashed.Aspect.Emu.Italic)
4949 DPRINT1(
"Failed to render glyph! [index: %d]\n",
Cache->Hashed.GlyphIndex);
4969 INT glyph_index,
i, previous, nTenthsOfDegrees;
4972 BOOL use_kerning, bVerticalWriting;
4973 LONG ascender, descender;
4978 FontGDI =
ObjToGDI(TextObj->Font, FONT);
4986 plf = &TextObj->logfont.elfEnumLogfontEx.elfLogFont;
4994 bVerticalWriting = ((nTenthsOfDegrees == 90 * 10) || (nTenthsOfDegrees == 270 * 10));
5028 Cache.Hashed.GlyphIndex = glyph_index;
5035 if (use_kerning && previous && glyph_index)
5039 TotalWidth64 += delta.
x;
5044 if (((TotalWidth64 + 32) >> 6) <= MaxExtent &&
NULL != Fit)
5050 Dx[
i] = (TotalWidth64 + 32) >> 6;
5053 previous = glyph_index;
5060 if (bVerticalWriting)
5062 Size->cx = ascender + descender;
5063 Size->cy = (TotalWidth64 + 32) >> 6;
5067 Size->cx = (TotalWidth64 + 32) >> 6;
5068 Size->cy = ascender + descender;
5096 pdcattr = Dc->pdcattr;
5132 DPRINT(
"Csb 1=%x 0=%x\n",
fs.fsCsb[1],
fs.fsCsb[0]);
5133 if (
fs.fsCsb[0] == 0)
5139 case FT_ENCODING_UNICODE:
5140 case FT_ENCODING_APPLE_ROMAN:
5143 case FT_ENCODING_MS_SYMBOL:
5170 if (
fs.fsCsb[0] & fs0)
5180 DPRINT1(
"TCI failing on %x\n", fs0);
5194 DWORD num_ranges = 0;
5199 DPRINT1(
"FIXME: No charmap selected! This is a BUG!\n");
5203 if (
face->charmap->encoding == FT_ENCODING_UNICODE)
5206 FT_ULong char_code, char_code_prev;
5210 DPRINT(
"Face encoding FT_ENCODING_UNICODE, number of glyphs %ld, first glyph %u, first char %04lx\n",
5211 face->num_glyphs, glyph_code, char_code);
5213 if (!glyph_code)
return 0;
5217 glyphset->ranges[0].wcLow = (
USHORT)char_code;
5218 glyphset->ranges[0].cGlyphs = 0;
5219 glyphset->cGlyphsSupported = 0;
5225 if (char_code < char_code_prev)
5227 DPRINT1(
"Expected increasing char code from FT_Get_Next_Char\n");
5230 if (char_code - char_code_prev > 1)
5235 glyphset->ranges[num_ranges - 1].wcLow = (
USHORT)char_code;
5236 glyphset->ranges[num_ranges - 1].cGlyphs = 1;
5237 glyphset->cGlyphsSupported++;
5242 glyphset->ranges[num_ranges - 1].cGlyphs++;
5243 glyphset->cGlyphsSupported++;
5245 char_code_prev = char_code;
5250 DPRINT1(
"Encoding %i not supported\n",
face->charmap->encoding);
5252 size =
sizeof(GLYPHSET) +
sizeof(WCRANGE) * (num_ranges - 1);
5255 glyphset->cbThis =
size;
5256 glyphset->cRanges = num_ranges;
5257 glyphset->flAccel = 0;
5293 pdcattr =
dc->pdcattr;
5295 if (
NULL != TextObj)
5326 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
5330 if (!pHori &&
Error)
5332 DPRINT1(
"Can't find HHEA table - not TT font?\n");
5379 (
Table << 8 & 0xFF0000);
5401#define GOT_PENALTY(name, value) Penalty += (value)
5407 const char * style_name)
5573 fNeedScaling =
TRUE;
5582 fNeedScaling =
TRUE;
5628 fNeedScaling =
TRUE;
5737 DPRINT(
"WARNING: Penalty:%ld < 200: RequestedNameW:%ls, "
5738 "ActualNameW:%ls, lfCharSet:%d, lfWeight:%ld, "
5739 "tmCharSet:%d, tmWeight:%ld\n",
5760 UINT OtmSize, OldOtmSize = 0;
5777 FontGDI = CurrentEntry->
Font;
5784 if (OtmSize > OldOtmSize)
5802 OldOtmSize = OtmSize;
5805 if (*MatchPenalty ==
MAXULONG || Penalty < *MatchPenalty)
5807 *FontObj =
GDIToObj(FontGDI, FONT);
5808 *MatchPenalty = Penalty;
5910 TextObj->
Font = pFontObj;
5993 pEntry->SharedFace = SharedFace;
5995 pEntry->pFontObj = pFontObj;
6010 pLogFont = &LogFont;
6013 LOGFONTW SubstitutedLogFont = *pLogFont;
6015 DPRINT(
"Font '%S,%u' is substituted by '%S,%u'.\n",
6027 ULONG MatchPenalty = 0xFFFFFFFF;
6042 DPRINT1(
"Request font %S not found, no fonts loaded at all\n", pLogFont->
lfFaceName);
6069 if (
NULL == TextObj)
6127 DPRINT(
"ZwOpenFile() failed (Status = 0x%lx)\n",
Status);
6135 DPRINT(
"ZwQueryObject() failed (Status = %lx)\n",
Status);
6191 const ULONG MaxFamInfo = 64;
6196 DPRINT(
"IntGdiGetFontResourceInfo: dwType == %lu\n", dwType);
6217 if (!NameInfo1 || !NameInfo2 || !FamInfo)
6233 for (ListEntry = g_FontListHead.
Flink; ListEntry != &g_FontListHead;
6234 ListEntry = ListEntry->
Flink)
6262 if (
Count >= MaxFamInfo)
6272 if (
Count == 0 && dwType != 5)
6308 Size +=
wcslen(FamInfo[
i].EnumLogFontEx.elfLogFont.lfFaceName);
6309 if (FamInfo[
i].EnumLogFontEx.elfStyle[0] &&
6310 _wcsicmp(FamInfo[
i].EnumLogFontEx.elfStyle,
L"Regular") != 0)
6312 Size += 1 +
wcslen(FamInfo[
i].EnumLogFontEx.elfStyle);
6457 Info->dwUnknown = -1;
6474 FT_UInt previous_index = 0, glyph_index = 0;
6484 if (previous_index && glyph_index)
6488 if (pKerningPair && cPairs)
6490 pKerningPair[
i].
wFirst = char_previous;
6491 pKerningPair[
i].
wSecond = char_code;
6494 if (
i == cPairs)
break;
6498 previous_index = glyph_index;
6499 char_previous = char_code;
6520 LONG AvailCount = 0;
6526 InfoCount, &g_FontListHead))
6564 LONG GotCount, AvailCount, SafeInfoCount;
6567 if (UnsafeLogFont ==
NULL || UnsafeInfo ==
NULL || UnsafeInfoCount ==
NULL)
6592 if (SafeInfoCount <= 0)
6615 GotCount =
min(AvailCount, SafeInfoCount);
6616 SafeInfoCount = AvailCount;
6693 (fuOptions & ETO_GLYPH_INDEX));
6694 Cache->Hashed.GlyphIndex = glyph_index;
6701 if (use_kerning && previous && glyph_index)
6715 vec.
x = (Dx[2 *
i + 0] << 6);
6716 vec.
y = (Dx[2 *
i + 1] << 6);
6724 vec.
x = (Dx[
i] << 6);
6732 previous = glyph_index;
6765 LONGLONG X64, Y64, RealXStart64, RealYStart64, DeltaX64, DeltaY64;
6767 RECTL DestRect, MaskRect;
6778 BOOL use_kerning, bResult, DoBreak;
6783 const DWORD del = 0x7f, nbsp = 0xa0;
6806 if (!
dc->dclevel.pSurface)
6813 pdcattr =
dc->pdcattr;
6832 psurf =
dc->dclevel.pSurface;
6857 &
dc->eboBackground.BrushObject);
6858 fuOptions &= ~ETO_OPAQUE;
6869 if (TextObj ==
NULL)
6875 FontObj = TextObj->
Font;
6915 bNoTransform = ((
mat.xy == 0) && (
mat.yx == 0) &&
6916 (
mat.xx == (1 << 16)) && (
mat.yy == (1 << 16)));
6920 vecAscent64.
y = (FontGDI->
tmAscent << 6);
6927#define VALIGN_MASK (TA_TOP | TA_BASELINE | TA_BOTTOM)
6934 RealXStart64 -= vecDescent64.
x;
6935 RealYStart64 += vecDescent64.
y;
6939 RealXStart64 -= vecAscent64.
x;
6940 RealYStart64 += vecAscent64.
y;
6950 fuOptions, bNoTransform, &Chain))
6961 RealXStart64 -= DeltaX64 / 2;
6962 RealYStart64 -= DeltaY64 / 2;
6966 RealXStart64 -= DeltaX64;
6967 RealYStart64 -= DeltaY64;
6973 INT X0 = (RealXStart64 + vecAscent64.
x + 32) >> 6;
6974 INT Y0 = (RealYStart64 - vecAscent64.
y + 32) >> 6;
6975 INT DX = (DeltaX64 >> 6);
6976 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
6978 INT CY = (vecAscent64.
y - vecDescent64.
y + 32) >> 6;
6983 INT DY = (DeltaY64 >> 6);
6984 INT X1 = ((RealXStart64 + vecDescent64.
x + 32) >> 6);
6985 INT Y1 = ((RealYStart64 - vecDescent64.
y + 32) >> 6);
6989 { X0 +
DX, Y0 + DY },
6990 { X1 +
DX, Y1 + DY },
7027 (fuOptions & ETO_GLYPH_INDEX));
7028 Cache.Hashed.GlyphIndex = glyph_index;
7038 if (use_kerning && previous && glyph_index &&
NULL == Dx)
7045 DPRINT(
"X64, Y64: %I64d, %I64d\n", X64, Y64);
7052 if (ch0 >
L' ' && ch0 !=
del && ch0 != nbsp && glyphSize.
cx == 0)
7054 DPRINT1(
"WARNING: family_name '%s' WChar 0x%04x has a glyphSize.cx of zero\n",
7055 face->family_name, ch0);
7061 (ch0 ==
L' ' || ch0 == nbsp))
7067 glyphSize.
cx = spaceWidth.
cx;
7068 realglyph->
left = 0;
7074 DestRect.
left = ((X64 + 32) >> 6) + realglyph->
left;
7076 DestRect.
top = ((Y64 + 32) >> 6) - realglyph->
top;
7080 if ((glyphSize.
cx != 0) && (glyphSize.
cy != 0))
7092 DPRINT1(
"WARNING: EngCreateBitmap() failed!\n");
7101 DPRINT1(
"WARNING: EngLockSurface() failed!\n");
7134 &
dc->eboText.BrushObject,
7137 DPRINT1(
"Failed to MaskBlt a glyph!\n");
7154 vec.
x = (Dx[2 *
i + 0] << 6);
7155 vec.
y = (Dx[2 *
i + 1] << 6);
7163 vec.
x = (Dx[
i] << 6);
7171 DPRINT(
"New X64, New Y64: %I64d, %I64d\n", X64, Y64);
7173 previous = glyph_index;
7185 DeltaX64 = X64 - RealXStart64;
7186 DeltaY64 = Y64 - RealYStart64;
7188 if (!
face->units_per_EM)
7196 face->underline_position *
face->size->metrics.y_ppem /
face->units_per_EM;
7198 face->underline_thickness *
face->size->metrics.y_ppem /
face->units_per_EM;
7208 vecB64.
y = vecA64.
y + (thickness << 6);
7212 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
7213 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
7214 INT DX = (DeltaX64 >> 6);
7215 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
7217 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
7222 INT DY = (DeltaY64 >> 6);
7223 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
7224 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
7228 { X0 +
DX, Y0 + DY },
7229 { X1 +
DX, Y1 + DY },
7240 vecA64.
y = -(FontGDI->
tmAscent << 6) / 3;
7242 vecB64.
y = vecA64.
y + (thickness << 6);
7246 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
7247 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
7248 INT DX = (DeltaX64 >> 6);
7249 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
7251 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
7256 INT DY = (DeltaY64 >> 6);
7257 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
7258 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
7262 { X0 +
DX, Y0 + DY },
7263 { X1 +
DX, Y1 + DY },
7282 if (TextObj !=
NULL)
7329#define STACK_TEXT_BUFFER_SIZE 512
7372 if (
BufSize >
sizeof(LocalBuffer))
7418 SafeRect = *UnsafeRect;
7444 if (
Buffer != LocalBuffer)
7521 if (SafeBuff ==
NULL)
7541 pdcattr =
dc->pdcattr;
7547 if (TextObj ==
NULL)
7565 charmap =
face->charmaps[
i];
7575 DPRINT1(
"WARNING: Could not find desired charmap!\n");
7597 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
7611 left = (
INT)
face->glyph->metrics.horiBearingX & -64;
7612 right = (
INT)((
face->glyph->metrics.horiBearingX +
face->glyph->metrics.width) + 63) & -64;
7613 adv = (
face->glyph->advance.x + 32) >> 6;
7627 SafeBuffF[
i - FirstChar].
abcfC = (
FLOAT) (adv - lsb - bbx);
7631 SafeBuff[
i - FirstChar].
abcA = lsb;
7632 SafeBuff[
i - FirstChar].
abcB = bbx;
7633 SafeBuff[
i - FirstChar].
abcC = adv - lsb - bbx;
7651 DPRINT(
"NtGdiGetCharABCWidths Worked!\n");
7673 UINT i, glyph_index;
7686 pdcattr =
dc->pdcattr;
7691 if (TextObj ==
NULL)
7705 charmap =
face->charmaps[
i];
7715 DPRINT1(
"WARNING: Could not find desired charmap!\n");
7741 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
7751 SafeBuffF[
i - FirstChar] = (
FLOAT) ((
face->glyph->advance.x + 32) >> 6);
7753 SafeBuffI[
i - FirstChar] = (
face->glyph->advance.x + 32) >> 6;
7818 WCHAR DefChar = 0xffff;
7820 WORD StackBuffer[40];
7834 if (!UnSafepwc && !UnSafepgi && cwc > 0)
7836 DPRINT1(
"!UnSafepwc && !UnSafepgi && cwc > 0\n");
7840 if (!UnSafepwc != !UnSafepgi)
7842 DPRINT1(
"UnSafepwc == %p, UnSafepgi = %p\n", UnSafepwc, UnSafepgi);
7853 pdcattr =
dc->pdcattr;
7868 if (!UnSafepwc && !UnSafepgi)
7876 pwcSize = cwc *
sizeof(
WORD);
7877 if (pwcSize <=
sizeof(StackBuffer) && pwcSize <=
sizeof(pwcStack))
7912 for (
i = 0;
i < cwc;
i++)
7925 if (Safepwc && Safepwc != pwcStack)
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 RemoveTailList(ListHead)
#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 PFONT_LOOKUP_CACHE FontLookUp_LookUp(const LOGFONTW *pLogFont)
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]
__kernel_entry W32KAPI DWORD APIENTRY NtGdiGetGlyphIndicesW(_In_ HDC hdc, _In_reads_opt_(cwc) PCWCH pwc, _In_ INT cwc, _Out_writes_opt_(cwc) PWORD pgi, _In_ DWORD iMode)
static WCHAR s_szDefFontLinkFileName[MAX_PATH]
static VOID FontLink_Chain_Free(_Inout_ PFONTLINK_CHAIN pChain)
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 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)
static void FontLookUp_Add(const LOGFONTW *LogFont, PSHARED_FACE SharedFace, FONTOBJ *pFontObj)
static void IntPopulateFontGdi(PFONTGDI FontGdi, const FONTOBJ *pFontObj, const LOGFONTW *pLogFont)
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)
PSHARED_FACE IntRealizeFont(const LOGFONTW *pLogFont, _Inout_opt_ PTEXTOBJ TextObj)
static const WCHAR s_szzDefFixedFontLink[]
static void FontLookUp_Destroy(PFONT_LOOKUP_CACHE pCache)
BOOL FASTCALL IntLoadFontSubstList(PLIST_ENTRY pHead)
static UINT g_FontCacheNumEntries
static WCHAR s_szDefFontLinkFontName[MAX_PATH]
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)
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
BOOL FASTCALL ftGdiRealizationInfo(PFONTGDI Font, PREALIZATION_INFO Info)
static NTSTATUS FontLink_Chain_LoadReg(_Inout_ PFONTLINK_CHAIN pChain, _Inout_ PLOGFONTW pLF)
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)
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)
static VOID FontLink_CleanupCache(VOID)
struct _FONTLINK_CHAIN * PFONTLINK_CHAIN
static BOOLEAN IntTranslateCharsetInfo(PDWORD Src, LPCHARSETINFO Cs, DWORD Flags)
static void FontLookUp_Cleanup(_In_ BOOL bDoLock, _Inout_opt_ PSHARED_FACE SharedFace)
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
static VOID FontLink_AddCache(_In_ PFONTLINK_CACHE pCache)
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)
struct _FONTLINK_CACHE FONTLINK_CACHE
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)
static ULONG s_FontLookupCacheCount
BOOL FASTCALL IntIsFontRenderingEnabled(VOID)
DWORD FASTCALL ftGdiGetFontData(PFONTGDI FontGdi, DWORD Table, DWORD Offset, PVOID Buffer, DWORD Size)
#define gmxWorldToDeviceDefault
struct FONT_NAMES * LPFONT_NAMES
#define MAX_FONT_LOOKUP_CACHE
static VOID FontLink_Chain_Finish(_Inout_ PFONTLINK_CHAIN pChain)
static NTSTATUS IntGetFontLocalizedName(PUNICODE_STRING pNameW, PSHARED_FACE SharedFace, FT_UShort NameID, FT_UShort LangID)
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 BOOL s_fFontLinkUseSymbol
static PFONTLINK FontLink_Chain_FindLink(PFONTLINK_CHAIN pChain, PLOGFONTW plf)
struct _FONT_LOOKUP_CACHE * PFONT_LOOKUP_CACHE
struct _FONT_LOOKUP_CACHE FONT_LOOKUP_CACHE
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
static PFONTLINK_CACHE FontLink_FindCache(_In_ const LOGFONTW *pLogFont)
#define FONTLINK_DEFAULT_CHAR
static void IntPopulateTextObj(PTEXTOBJ TextObj, PFONTGDI FontGdi, FONTOBJ *pFontObj, const LOGFONTW *pLogFont, PLOGFONTW SubstitutedLogFont)
static BOOL SubstituteFontRecurse(PLOGFONTW pLogFont)
static LONG g_nFontLinkCacheCount
static const WCHAR s_szzDefFontLink[]
#define MAX_FONTLINK_CACHE
struct _FONTLINK_CACHE * PFONTLINK_CACHE
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)
BOOL APIENTRY NtGdiGetCharABCWidthsW(_In_ HDC hDC, _In_ UINT FirstChar, _In_ ULONG Count, _In_reads_opt_(Count) PCWCH UnSafepwch, _In_ FLONG fl, _Out_writes_bytes_(Count *sizeof(ABC)) PVOID Buffer)
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
FORCEINLINE 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_ 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
_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
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 * 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)
#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 IntRebaseList(_Inout_ PLIST_ENTRY pNewHead, _Inout_ PLIST_ENTRY pOldHead)
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)
#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
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
#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)