15#include FT_TYPE1_TABLES_H
16#include FT_TRUETYPE_TABLES_H
17#include FT_TRUETYPE_TAGS_H
18#include FT_TRIGONOMETRY_H
22#include FT_SFNT_NAMES_H
23#include FT_SYNTHESIS_H
24#include FT_TRUETYPE_IDS_H
26#ifndef FT_INTERNAL_INTERNAL_H
27 #define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
28 #include FT_INTERNAL_INTERNAL_H
30#include FT_INTERNAL_TRUETYPE_TYPES_H
63#define FONTLINK_DEFAULT_CHAR 0x30FB
72#define MAX_FONTLINK_CACHE 128
96 DWORD cbData, dwValue;
103 L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink",
108 cbData =
sizeof(dwValue);
130 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\FontAssoc\\Associated DefaultFonts",
135 cbData =
sizeof(szValue);
143 cbData =
sizeof(szValue);
168 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\FontAssoc\\Associated Charset",
173 cbData =
sizeof(szValue);
181 cbData =
sizeof(szValue);
189 cbData =
sizeof(szValue);
224 if (pChain->pszzFontLink)
264 ASSERT(pNewHead != pOldHead);
289 pCache->
LogFont = pChain->LogFont;
290 pCache->
Chain = *pChain;
329#define HIGH_SURROGATE_MIN 0xD800U
330#define HIGH_SURROGATE_MAX 0xDBFFU
331#define LOW_SURROGATE_MIN 0xDC00U
332#define LOW_SURROGATE_MAX 0xDFFFU
334#define IS_HIGH_SURROGATE(ch0) (HIGH_SURROGATE_MIN <= (ch0) && (ch0) <= HIGH_SURROGATE_MAX)
335#define IS_LOW_SURROGATE(ch1) (LOW_SURROGATE_MIN <= (ch1) && (ch1) <= LOW_SURROGATE_MAX)
344#ifndef _TMPF_VARIABLE_PITCH
345 #define _TMPF_VARIABLE_PITCH TMPF_FIXED_PITCH
349#define EMUBOLD_NEEDED(original, request) \
350 (((request) != FW_DONTCARE) && ((request) - (original) >= FW_BOLD - FW_MEDIUM))
358#define gmxWorldToDeviceDefault gmxWorldToPageDefault
364 RTL_CONSTANT_STRING(
L"\\REGISTRY\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts");
374#define ASSERT_FREETYPE_LOCK_HELD() \
375 ASSERT(g_FreeTypeLock->Owner == KeGetCurrentThread())
377#define ASSERT_FREETYPE_LOCK_NOT_HELD() \
378 ASSERT(g_FreeTypeLock->Owner != KeGetCurrentThread())
380#define IntLockFreeType() \
382 ASSERT_FREETYPE_LOCK_NOT_HELD(); \
383 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(g_FreeTypeLock); \
386#define IntUnLockFreeType() \
388 ASSERT_FREETYPE_LOCK_HELD(); \
389 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(g_FreeTypeLock); \
392#define MAX_FONT_CACHE 256
424#define MAXTCIINDEX 32
515 if (pFontLink->bIgnore)
518 if (pFontLink->SharedFace)
535 pFontLink->bIgnore =
TRUE;
539 pFontGDI =
ObjToGDI(pFontObj, FONT);
547 pFontLink->bIgnore =
TRUE;
568 Cache->OutlineRequiredSize = 0;
602 Ptr->IsMapping = IsMapping;
603 DPRINT(
"Creating SharedMem for %p (%i, %p)\n",
Buffer, IsMapping,
Ptr);
636 for (CurrentEntry = g_FontCacheListHead.
Flink;
637 CurrentEntry != &g_FontCacheListHead;
638 CurrentEntry = NextEntry)
641 NextEntry = CurrentEntry->
Flink;
655 if (
Ptr->RefCount <= 0)
659 if (
Ptr->RefCount == 0)
661 DPRINT(
"Releasing SharedMem for %p (%i, %p)\n",
Ptr->Buffer,
Ptr->IsMapping,
Ptr);
683 if (
Ptr->RefCount <= 0)
687 if (
Ptr->RefCount == 0)
689 DPRINT(
"Releasing SharedFace for %s\n",
Ptr->Face->family_name ?
Ptr->Face->family_name :
"<NULL>");
731 pt->x.fract = (
vec->
x & 0x3f) << 10;
732 pt->x.fract |= ((
pt->x.fract >> 6) | (
pt->x.fract >> 12));
734 pt->y.fract = (
vec->
y & 0x3f) << 10;
735 pt->y.fract |= ((
pt->y.fract >> 6) | (
pt->y.fract >> 12));
752 const char *style_name;
771 style_name =
"<invalid>";
774 DPRINT(
"family_name '%s', style_name '%s', FaceName '%wZ', StyleName '%wZ', FontGDI %p, "
775 "FontObj %p, iUnique %lu, SharedFace %p, Face %p, CharSet %u, Filename '%S'\n",
794 DPRINT(
"## DumpFontList(%p)\n", Head);
799 DumpFontEntry(CurrentEntry);
805 DPRINT(
"%wZ,%u -> %wZ,%u\n",
818 DPRINT(
"## DumpFontSubstList\n");
820 for (pListEntry = pHead->
Flink;
822 pListEntry = pListEntry->
Flink)
825 DumpFontSubstEntry(pSubstEntry);
829VOID DumpPrivateFontList(
BOOL bDoLock)
851VOID DumpGlobalFontList(
BOOL bDoLock)
856 DumpFontList(&g_FontListHead);
864 DumpGlobalFontList(bDoLock);
865 DumpPrivateFontList(bDoLock);
882 BYTE InfoBuffer[128];
891 L"Microsoft\\Windows NT\\CurrentVersion\\"
907 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
920 InfoBuffer,
sizeof(InfoBuffer), &
Length);
934 DPRINT(
"RtlCreateUnicodeString failed\n");
940 InfoBuffer,
sizeof(InfoBuffer), &
Length);
956 DPRINT(
"RtlCreateUnicodeString failed\n");
998 DPRINT(
"ExAllocatePoolWithTag failed\n");
1037 DPRINT1(
"FT_Init_FreeType failed with error code 0x%x\n", ulError);
1043 DPRINT1(
"Fonts registry is empty.\n");
1074 pHead = &g_FontCacheListHead;
1083 pHead = &g_FontSubstListHead;
1092 pHead = &g_FontListHead;
1112 nTenthsOfDegrees %= 360 * 10;
1113 if (nTenthsOfDegrees >= 0)
1114 return nTenthsOfDegrees;
1115 return nTenthsOfDegrees + 360 * 10;
1124 pmat->
xx = vecAngle.
x;
1125 pmat->
xy = -vecAngle.
y;
1126 pmat->
yx = -pmat->
xy;
1127 pmat->
yy = pmat->
xx;
1163 BYTE RequestedCharSet,
1174 for (pListEntry = pHead->
Flink;
1175 pListEntry != pHead;
1176 pListEntry = pListEntry->
Flink)
1263 UINT RecurseCount = 5;
1274 while (RecurseCount-- > 0)
1277 &OutputNameW, &InputNameW,
1303 pChain->pBaseTextObj = pTextObj;
1304 pChain->pDefFace =
face;
1310 L"tahoma.ttf,Tahoma\0"
1311 L"msgothic.ttc,MS UI Gothic\0"
1312 L"mingliu.ttc,PMingLiU\0"
1313 L"simsun.ttc,SimSun\0"
1314 L"gulim.ttc,Gulim\0"
1318 L"cour.ttf,Courier New\0"
1319 L"msgothic.ttc,MS Gothic\0"
1320 L"mingliu.ttc,MingLiU\0"
1321 L"simsun.ttc,NSimSun\0"
1322 L"gulim.ttc,GulimChe\0"
1333 WCHAR szzFontLink[512];
1337 ASSERT(pLF->lfFaceName[0]);
1341 L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink\\SystemLink",
1347 cbData =
sizeof(szzFontLink);
1354 cbData =
sizeof(szzFontLink);
1361 if (cbData >= 2 *
sizeof(
WCHAR))
1363 FontLinkSize = cbData;
1374 pszzFontLink =
NULL;
1411 pChain->pszzFontLink = pszzFontLink;
1482 PTEXTOBJ pTextObj = pChain->pBaseTextObj;
1509 default: bFixCharSet =
TRUE;
break;
1519 *pChain = pLinkCache->
Chain;
1525 pChain->LogFont = lfBase;
1532 pszLink = pChain->pszzFontLink;
1535 DPRINT(
"pszLink: '%S'\n", pszLink);
1539 pszLink +=
wcslen(pszLink) + 1;
1548 DPRINT(
"szEntry: '%S'\n", szEntry);
1570 BYTE *DirInfoBuffer;
1612 if (DirInfoBuffer ==
NULL)
1630 Status = ZwQueryDirectoryFile(
1679 bRestartScan =
FALSE;
1695 if (CodePageRange1 == 0)
1700 for (BitIndex = 0; BitIndex <
MAXTCIINDEX; ++BitIndex)
1702 if (CodePageRange1 & (1 << BitIndex))
1705 if ((nIndex >= 0) && (nCount == (
UINT)nIndex))
1717#define PX2PT(pixels) FT_MulDiv((pixels), 72, 96)
1745 Face = SharedFace->
Face;
1892 if (pOS2 && os2_version >= 1)
1899 for (BitIndex = 0; BitIndex <
MAXTCIINDEX; ++BitIndex)
1901 if (os2_ulCodePageRange1 & (1 << BitIndex))
1906 if ((CharSetIndex == -1 && CharSetCount == 0) ||
1907 CharSetIndex == CharSetCount)
1932 DPRINT(
"Font loaded: %s (%s)\n",
1939 Entry->Font = FontGDI;
1940 Entry->NotEnum = (Characteristics & FR_NOT_ENUM);
1943 if (Characteristics & FR_PRIVATE)
1958 if (CharSetIndex == -1)
1963 if (
Entry->StyleName.Length)
1964 NameLength +=
Entry->StyleName.Length +
sizeof(
WCHAR);
1992 *pValueName = NewString;
1994 if (
Entry->StyleName.Length)
2000 for (
i = 1;
i < CharSetCount; ++
i)
2024 ((FontIndex == -1) ? 0 : FontIndex), &Face);
2027 if (
Error == FT_Err_Unknown_File_Format)
2028 DPRINT1(
"Unknown font file format\n");
2030 DPRINT1(
"Error reading font (error code: %d)\n",
Error);
2043 DPRINT1(
"SharedFace_Create failed\n");
2048 if (FontIndex == -1)
2085 default:
return L"Unknown";
2122 RtlInitEmptyUnicodeString(&PathName, pszBuffer,
Length);
2145 DPRINT1(
"Could not load font file: %wZ\n", &PathName);
2154 DPRINT1(
"ObReferenceObjectByHandle failed.\n");
2167 DPRINT1(
"Could not map file: %wZ\n", &PathName);
2178 DPRINT1(
"Could not map file: %wZ\n", &PathName);
2188 LoadFont.Characteristics = Characteristics;
2216 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
2239 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
2265 pFileName = PathName.
Buffer;
2306 cchFile =
wcslen(pchFile);
2317 ustrPathName.
Buffer = pchFile;
2324 pchFile += cchFile + 1;
2334 PCWSTR lastSlash = pszPath;
2337 if ((*pszPath ==
L'\\' || *pszPath ==
L'/' || *pszPath ==
L':') &&
2338 pszPath[1] && pszPath[1] !=
'\\' && pszPath[1] !=
L'/')
2340 lastSlash = pszPath + 1;
2344 return (
PWSTR)lastSlash;
2354 ULONG dwIndex, NameLength, ValueSize, dwType;
2363 ValueSize =
sizeof(szValue);
2393 PWSTR pszBuffer, pszFileTitle;
2405 RtlInitEmptyUnicodeString(&PathName, pszBuffer,
Length);
2416 pszFileTitle = PathName.
Buffer;
2420 if (!pszFileTitle || !*pszFileTitle)
2428 for (CurrentEntry = g_FontListHead.
Flink;
2429 CurrentEntry != &g_FontListHead;
2430 CurrentEntry = NextEntry)
2433 NextEntry = CurrentEntry->
Flink;
2435 FontGDI = FontEntry->
Font;
2465 cchFile =
wcslen(pchFile);
2476 ustrPathName.
Buffer = pchFile;
2482 pchFile += cchFile + 1;
2491 if (!lpszPath || !*lpszPath)
2493 if (*lpszPath ==
L'\\' || (*lpszPath && lpszPath[1] ==
L':'))
2528 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
2541 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2547 for (
i = 0;
i < KeyFullInfo.
Values; ++
i)
2551 InfoBuffer, InfoSize, &
Length);
2560 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2565 InfoBuffer, InfoSize, &
Length);
2580 DPRINT1(
"RtlCreateUnicodeString failed\n");
2586 InfoBuffer, InfoSize, &
Length);
2595 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2600 InfoBuffer, InfoSize, &
Length);
2620 L"\\SystemRoot\\Fonts\\%s", pchPath);
2647 return (KeyFullInfo.
Values != 0 && nFontCount != 0);
2668 LoadFont.Characteristics = FR_PRIVATE | FR_NOT_ENUM;
2682 if (EntryCollection)
2692 Ret = EntryCollection->
Handle;
2752 if (CurrentEntry->
Handle == hMMFont)
2754 EntryCollection = CurrentEntry;
2762 if (EntryCollection)
2779 DPRINT(
"IntGdiCleanupPrivateFontsForProcess()\n");
2782 EntryCollection =
NULL;
2795 if (EntryCollection)
2873 if (lf->lfEscapement != lf->lfOrientation)
2967 int Ascent, Descent;
3024 - ((Ascent + Descent)
3026 YScale) + 32) >> 6);
3215 Names->OtmSize = OtmSize;
3295 if (
Size == 0 &&
Cache->OutlineRequiredSize > 0)
3298 return Cache->OutlineRequiredSize;
3313 return Cache->OutlineRequiredSize;
3318 if (Size < Cache->OutlineRequiredSize)
3320 DPRINT1(
"Size %u < OutlineRequiredSize %u\n",
Size,
3321 Cache->OutlineRequiredSize);
3340 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
3349 DPRINT1(
"Can't find HHEA table - not TT font?\n");
3370#define SCALE_X(value) ((FT_MulFix((value), XScale) + 32) >> 6)
3371#define SCALE_Y(value) ((FT_MulFix((value), YScale) + 32) >> 6)
3420 return Cache->OutlineRequiredSize;
3487 INT i,
Count, BestIndex, Score, BestScore;
3528 if (
Name.name_id != NameID)
3541 (
Name.string[0] == 0 &&
Name.string[1] == 0))
3565 if (Score > BestScore)
3624 if (!
Cache->FontFamily.Buffer)
3630 if (!
Cache->FullName.Buffer)
3675 Lf = &
Info->EnumLogFontEx.elfLogFont;
3688 Ntm = &
Info->NewTextMetricEx.ntmTm;
3733 sizeof(
Info->EnumLogFontEx.elfFullName),
3737 StyleW.
Buffer =
Info->EnumLogFontEx.elfStyle;
3778 if (
fs.fsCsb[0] == 0)
3785 case FT_ENCODING_UNICODE:
3786 case FT_ENCODING_APPLE_ROMAN:
3789 case FT_ENCODING_MS_SYMBOL:
3801 if (
fs.fsCsb[0] & fs0)
3813 DPRINT1(
"Unknown elfscript for bit %u\n",
i);
3818 Info->NewTextMetricEx.ntmFontSig =
fs;
3838 FontGDI = CurrentEntry->
Font;
3965 const DWORD *pdw = pv;
3981 DWORD dwHash = pCache->dwHash;
3985 for (CurrentEntry = g_FontCacheListHead.
Flink;
3986 CurrentEntry != &g_FontCacheListHead;
3987 CurrentEntry = CurrentEntry->
Flink)
3990 if (FontEntry->
dwHash == dwHash &&
3992 FontEntry->
Hashed.
Face == pCache->Hashed.Face &&
4003 if (CurrentEntry == &g_FontCacheListHead)
4029 DPRINT1(
"Failure caching glyph.\n");
4037 DPRINT1(
"Failure rendering glyph.\n");
4044 DPRINT1(
"Alloc failure caching glyph.\n");
4051 if (FT_Bitmap_Convert_ReactOS_Hack(GlyphSlot->library, &BitmapGlyph->
bitmap,
4052 &AlignedBitmap, 4,
TRUE))
4054 DPRINT1(
"Conversion failed\n");
4062 BitmapGlyph->
bitmap = AlignedBitmap;
4083 int needed = 0,
point = 0, contour, first_pt;
4084 unsigned int pph_start, cpfx;
4087 for (contour = 0; contour <
outline->n_contours; contour++)
4104 needed +=
sizeof(*pph);
4106 while (point <= outline->contours[contour])
4118 }
while (point <= outline->contours[contour] &&
4130 else if (point <= outline->contours[contour] &&
4144 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
4147 pph->
cb = needed - pph_start;
4170 int contour,
point = 0, first_pt;
4175 unsigned int needed = 0;
4177 for (contour = 0; contour <
outline->n_contours; contour++)
4187 needed +=
sizeof(*pph);
4189 while (point <= outline->contours[contour])
4216 cubic_control[0].
x >>= 1;
4217 cubic_control[0].
y >>= 1;
4220 cubic_control[3] =
outline->points[first_pt];
4228 cubic_control[3].
x >>= 1;
4229 cubic_control[3].
y >>= 1;
4234 cubic_control[1].
x = (2 *
outline->points[
point].x + 1) / 3;
4235 cubic_control[1].
y = (2 *
outline->points[
point].y + 1) / 3;
4236 cubic_control[2] = cubic_control[1];
4237 cubic_control[1].
x += (cubic_control[0].
x + 1) / 3;
4238 cubic_control[1].
y += (cubic_control[0].
y + 1) / 3;
4239 cubic_control[2].
x += (cubic_control[3].
x + 1) / 3;
4240 cubic_control[2].
y += (cubic_control[3].
y + 1) / 3;
4250 }
while (point <= outline->contours[contour] &&
4256 if (point <= outline->contours[contour] &&
4268 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
4271 pph->
cb = needed - pph_start;
4285 LONG Ascent, Descent, Sum, EmHeight;
4287 lfWidth =
abs(lfWidth);
4292 DPRINT(
"lfHeight and lfWidth are zero.\n");
4315 if (!pOS2 || !pHori)
4320 DPRINT1(
"%s: Failed to request font size.\n",
face->family_name);
4343#define FM_SEL_USE_TYPO_METRICS 0x80
4352 Sum = Ascent + Descent;
4365 else if (lfHeight < 0)
4381#undef FM_SEL_USE_TYPO_METRICS
4388 EmHeight =
max(EmHeight, 1);
4409 req.
height = (EmHeight << 6);
4433 DPRINT(
"WARNING: No charmap selected!\n");
4434 DPRINT(
"This font face has %d charmaps\n",
face->num_charmaps);
4437 for (
n = 0;
n <
face->num_charmaps;
n++)
4439 charmap =
face->charmaps[
n];
4440 if (charmap->
encoding == FT_ENCODING_UNICODE)
4448 for (
n = 0;
n <
face->num_charmaps;
n++)
4450 charmap =
face->charmaps[
n];
4460 for (
n = 0;
n <
face->num_charmaps;
n++)
4462 charmap =
face->charmaps[
n];
4463 if (charmap->
encoding == FT_ENCODING_MS_SYMBOL)
4470 if (!found &&
face->num_charmaps > 0)
4472 found =
face->charmaps[0];
4476 DPRINT1(
"WARNING: Could not find desired charmap!\n");
4484 DPRINT1(
"WARNING: Could not set the charmap!\n");
4510 if (glyph < 0x100) glyph += 0xf000;
4549 DPRINT1(
"%S, %p, %p\n", pChain->LogFont.lfFaceName, pChain->pBaseTextObj, pChain->pDefFace);
4551 Head = &pChain->FontLinkList;
4555 DPRINT1(
"FontLink #%d: %p, %d, %S, %p, %p\n",
4582 DPRINT(
"code: 0x%08X, index: 0x%08X, fCodeAsIndex:%d\n",
code,
index, fCodeAsIndex);
4583 pCache->Hashed.Face = *pFace = pChain->pDefFace;
4594 Head = &pChain->FontLinkList;
4608 pCache->Hashed.Face = *pFace =
face;
4617 pCache->Hashed.Face = *pFace = pChain->pDefFace;
4634 BOOL bIgnoreRotation)
4661 cjBuf, pvBuf, pmat2);
4663 pdcattr =
dc->pdcattr;
4731 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
4739 if (aveWidth && potm)
4768 DPRINT(
"Advance = %d, lsb = %d, bbx = %d\n",adv, lsb, bbx);
4785 needsTransform =
TRUE;
4799 needsTransform =
TRUE;
4807 DPRINT(
"Rotation Trans!\n");
4810 needsTransform =
TRUE;
4817 DPRINT(
"MAT2 Matrix Trans!\n");
4823 needsTransform =
TRUE;
4828 if (!needsTransform)
4830 DPRINT(
"No Need to be Transformed!\n");
4841 for (xc = 0; xc < 2; xc++)
4843 for (yc = 0; yc < 2; yc++)
4851 if (xc == 0 && yc == 0)
4882 DPRINT(
"CX %d CY %d BBX %u BBY %u GOX %d GOY %d\n",
4891 DPRINT(
"GGO_METRICS Exit!\n");
4908 pitch = ((
width + 31) >> 5) << 2;
4911 if (!pvBuf || !
cjBuf)
break;
4936 ft_bitmap.
pitch = pitch;
4938 ft_bitmap.
buffer = pvBuf;
4965 unsigned int mult,
row, col;
4970 pitch = (
width + 3) / 4 * 4;
4973 if (!pvBuf || !
cjBuf)
break;
4987 for (
x = 0; (
UINT)
x < pitch;
x++)
4989 if (x < ft_face->glyph->bitmap.width)
4990 dst[
x] = (
src[
x / 8] & (1 << ( (7 - (
x % 8))))) ? 0xff : 0;
5003 ft_bitmap.
pitch = pitch;
5005 ft_bitmap.
buffer = pvBuf;
5032 for (col = 0; col <
width; col++,
ptr++)
5034 *
ptr = (((
int)*
ptr) * mult + 128) / 256;
5060 if (!pvBuf || !
cjBuf)
5080 if (needsTransform && pvBuf)
5088 if (!pvBuf || !
cjBuf)
5102 DPRINT(
"ftGdiGetGlyphOutline END and needed %lu\n", needed);
5132 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %d]\n",
Cache->Hashed.GlyphIndex);
5136 glyph =
Cache->Hashed.Face->glyph;
5138 if (
Cache->Hashed.Aspect.Emu.Bold)
5141 if (
Cache->Hashed.Aspect.Emu.Italic)
5147 DPRINT1(
"Failed to render glyph! [index: %d]\n",
Cache->Hashed.GlyphIndex);
5167 INT glyph_index,
i, previous, nTenthsOfDegrees;
5170 BOOL use_kerning, bVerticalWriting;
5171 LONG ascender, descender;
5176 FontGDI =
ObjToGDI(TextObj->Font, FONT);
5184 plf = &TextObj->logfont.elfEnumLogfontEx.elfLogFont;
5192 bVerticalWriting = ((nTenthsOfDegrees == 90 * 10) || (nTenthsOfDegrees == 270 * 10));
5226 Cache.Hashed.GlyphIndex = glyph_index;
5233 if (use_kerning && previous && glyph_index)
5237 TotalWidth64 += delta.
x;
5242 if (((TotalWidth64 + 32) >> 6) <= MaxExtent &&
NULL != Fit)
5248 Dx[
i] = (TotalWidth64 + 32) >> 6;
5251 previous = glyph_index;
5258 if (bVerticalWriting)
5260 Size->cx = ascender + descender;
5261 Size->cy = (TotalWidth64 + 32) >> 6;
5265 Size->cx = (TotalWidth64 + 32) >> 6;
5266 Size->cy = ascender + descender;
5295 pdcattr = Dc->pdcattr;
5331 DPRINT(
"Csb 1=%x 0=%x\n",
fs.fsCsb[1],
fs.fsCsb[0]);
5332 if (
fs.fsCsb[0] == 0)
5338 case FT_ENCODING_UNICODE:
5339 case FT_ENCODING_APPLE_ROMAN:
5342 case FT_ENCODING_MS_SYMBOL:
5369 if (
fs.fsCsb[0] & fs0)
5379 DPRINT1(
"TCI failing on %x\n", fs0);
5393 DWORD num_ranges = 0;
5398 DPRINT1(
"FIXME: No charmap selected! This is a BUG!\n");
5402 if (
face->charmap->encoding == FT_ENCODING_UNICODE)
5405 FT_ULong char_code, char_code_prev;
5409 DPRINT(
"Face encoding FT_ENCODING_UNICODE, number of glyphs %ld, first glyph %u, first char %04lx\n",
5410 face->num_glyphs, glyph_code, char_code);
5412 if (!glyph_code)
return 0;
5416 glyphset->ranges[0].wcLow = (
USHORT)char_code;
5417 glyphset->ranges[0].cGlyphs = 0;
5418 glyphset->cGlyphsSupported = 0;
5424 if (char_code < char_code_prev)
5426 DPRINT1(
"Expected increasing char code from FT_Get_Next_Char\n");
5429 if (char_code - char_code_prev > 1)
5434 glyphset->ranges[num_ranges - 1].wcLow = (
USHORT)char_code;
5435 glyphset->ranges[num_ranges - 1].cGlyphs = 1;
5436 glyphset->cGlyphsSupported++;
5441 glyphset->ranges[num_ranges - 1].cGlyphs++;
5442 glyphset->cGlyphsSupported++;
5444 char_code_prev = char_code;
5449 DPRINT1(
"Encoding %i not supported\n",
face->charmap->encoding);
5451 size =
sizeof(GLYPHSET) +
sizeof(WCRANGE) * (num_ranges - 1);
5454 glyphset->cbThis =
size;
5455 glyphset->cRanges = num_ranges;
5456 glyphset->flAccel = 0;
5492 pdcattr =
dc->pdcattr;
5494 if (
NULL != TextObj)
5525 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
5529 if (!pHori &&
Error)
5531 DPRINT1(
"Can't find HHEA table - not TT font?\n");
5578 (
Table << 8 & 0xFF0000);
5600#define GOT_PENALTY(name, value) Penalty += (value)
5606 const char * style_name)
5772 fNeedScaling =
TRUE;
5781 fNeedScaling =
TRUE;
5827 fNeedScaling =
TRUE;
5936 DPRINT(
"WARNING: Penalty:%ld < 200: RequestedNameW:%ls, "
5937 "ActualNameW:%ls, lfCharSet:%d, lfWeight:%ld, "
5938 "tmCharSet:%d, tmWeight:%ld\n",
5959 UINT OtmSize, OldOtmSize = 0;
5976 FontGDI = CurrentEntry->
Font;
5983 if (OtmSize > OldOtmSize)
6001 OldOtmSize = OtmSize;
6004 if (*MatchPenalty ==
MAXULONG || Penalty < *MatchPenalty)
6006 *FontObj =
GDIToObj(FontGDI, FONT);
6007 *MatchPenalty = Penalty;
6116 if (
NULL == TextObj)
6135 SubstitutedLogFont = *pLogFont;
6137 DPRINT(
"Font '%S,%u' is substituted by '%S,%u'.\n",
6141 MatchPenalty = 0xFFFFFFFF;
6160 DPRINT1(
"Request font %S not found, no fonts loaded at all\n",
6244 DPRINT(
"ZwOpenFile() failed (Status = 0x%lx)\n",
Status);
6252 DPRINT(
"ZwQueryObject() failed (Status = %lx)\n",
Status);
6308 const ULONG MaxFamInfo = 64;
6313 DPRINT(
"IntGdiGetFontResourceInfo: dwType == %lu\n", dwType);
6334 if (!NameInfo1 || !NameInfo2 || !FamInfo)
6350 for (ListEntry = g_FontListHead.
Flink; ListEntry != &g_FontListHead;
6351 ListEntry = ListEntry->
Flink)
6379 if (
Count >= MaxFamInfo)
6389 if (
Count == 0 && dwType != 5)
6425 Size +=
wcslen(FamInfo[
i].EnumLogFontEx.elfLogFont.lfFaceName);
6426 if (FamInfo[
i].EnumLogFontEx.elfStyle[0] &&
6427 _wcsicmp(FamInfo[
i].EnumLogFontEx.elfStyle,
L"Regular") != 0)
6429 Size += 1 +
wcslen(FamInfo[
i].EnumLogFontEx.elfStyle);
6574 Info->dwUnknown = -1;
6591 FT_UInt previous_index = 0, glyph_index = 0;
6601 if (previous_index && glyph_index)
6605 if (pKerningPair && cPairs)
6607 pKerningPair[
i].
wFirst = char_previous;
6608 pKerningPair[
i].
wSecond = char_code;
6611 if (
i == cPairs)
break;
6615 previous_index = glyph_index;
6616 char_previous = char_code;
6637 LONG AvailCount = 0;
6643 InfoCount, &g_FontListHead))
6681 LONG GotCount, AvailCount, SafeInfoCount;
6684 if (UnsafeLogFont ==
NULL || UnsafeInfo ==
NULL || UnsafeInfoCount ==
NULL)
6709 if (SafeInfoCount <= 0)
6732 GotCount =
min(AvailCount, SafeInfoCount);
6733 SafeInfoCount = AvailCount;
6827 (fuOptions & ETO_GLYPH_INDEX));
6828 Cache->Hashed.GlyphIndex = glyph_index;
6835 if (use_kerning && previous && glyph_index)
6849 vec.
x = (Dx[2 *
i + 0] << 6);
6850 vec.
y = (Dx[2 *
i + 1] << 6);
6858 vec.
x = (Dx[
i] << 6);
6866 previous = glyph_index;
6889 Rect.left =
Rect.right = pPoints[0].x;
6890 Rect.top =
Rect.bottom = pPoints[0].y;
6891 for (
i = 1;
i < cPoints; ++
i)
6896 else if (
Rect.right <
x)
6902 else if (
Rect.bottom <
y)
6981 LONGLONG X64, Y64, RealXStart64, RealYStart64, DeltaX64, DeltaY64;
6983 RECTL DestRect, MaskRect;
6994 BOOL use_kerning, bResult, DoBreak;
6999 const DWORD del = 0x7f, nbsp = 0xa0;
7022 if (!
dc->dclevel.pSurface)
7029 pdcattr =
dc->pdcattr;
7048 psurf =
dc->dclevel.pSurface;
7073 &
dc->eboBackground.BrushObject);
7074 fuOptions &= ~ETO_OPAQUE;
7085 if (TextObj ==
NULL)
7091 FontObj = TextObj->
Font;
7131 bNoTransform = ((
mat.xy == 0) && (
mat.yx == 0) &&
7132 (
mat.xx == (1 << 16)) && (
mat.yy == (1 << 16)));
7136 vecAscent64.
y = (FontGDI->
tmAscent << 6);
7143#define VALIGN_MASK (TA_TOP | TA_BASELINE | TA_BOTTOM)
7150 RealXStart64 -= vecDescent64.
x;
7151 RealYStart64 += vecDescent64.
y;
7155 RealXStart64 -= vecAscent64.
x;
7156 RealYStart64 += vecAscent64.
y;
7166 fuOptions, bNoTransform, &Chain))
7177 RealXStart64 -= DeltaX64 / 2;
7178 RealYStart64 -= DeltaY64 / 2;
7182 RealXStart64 -= DeltaX64;
7183 RealYStart64 -= DeltaY64;
7189 INT X0 = (RealXStart64 + vecAscent64.
x + 32) >> 6;
7190 INT Y0 = (RealYStart64 - vecAscent64.
y + 32) >> 6;
7191 INT DX = (DeltaX64 >> 6);
7192 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
7194 INT CY = (vecAscent64.
y - vecDescent64.
y + 32) >> 6;
7199 INT DY = (DeltaY64 >> 6);
7200 INT X1 = ((RealXStart64 + vecDescent64.
x + 32) >> 6);
7201 INT Y1 = ((RealYStart64 - vecDescent64.
y + 32) >> 6);
7205 { X0 +
DX, Y0 + DY },
7206 { X1 +
DX, Y1 + DY },
7243 (fuOptions & ETO_GLYPH_INDEX));
7244 Cache.Hashed.GlyphIndex = glyph_index;
7254 if (use_kerning && previous && glyph_index &&
NULL == Dx)
7261 DPRINT(
"X64, Y64: %I64d, %I64d\n", X64, Y64);
7268 if (ch0 >
L' ' && ch0 !=
del && ch0 != nbsp && glyphSize.
cx == 0)
7269 DPRINT1(
"WARNING: WChar 0x%04x has a glyphSize.cx of zero\n", ch0);
7274 (ch0 ==
L' ' || ch0 == nbsp))
7280 glyphSize.
cx = spaceWidth.
cx;
7281 realglyph->
left = 0;
7287 DestRect.
left = ((X64 + 32) >> 6) + realglyph->
left;
7289 DestRect.
top = ((Y64 + 32) >> 6) - realglyph->
top;
7293 if ((glyphSize.
cx != 0) && (glyphSize.
cy != 0))
7305 DPRINT1(
"WARNING: EngCreateBitmap() failed!\n");
7314 DPRINT1(
"WARNING: EngLockSurface() failed!\n");
7347 &
dc->eboText.BrushObject,
7350 DPRINT1(
"Failed to MaskBlt a glyph!\n");
7367 vec.
x = (Dx[2 *
i + 0] << 6);
7368 vec.
y = (Dx[2 *
i + 1] << 6);
7376 vec.
x = (Dx[
i] << 6);
7384 DPRINT(
"New X64, New Y64: %I64d, %I64d\n", X64, Y64);
7386 previous = glyph_index;
7398 DeltaX64 = X64 - RealXStart64;
7399 DeltaY64 = Y64 - RealYStart64;
7401 if (!
face->units_per_EM)
7409 face->underline_position *
face->size->metrics.y_ppem /
face->units_per_EM;
7411 face->underline_thickness *
face->size->metrics.y_ppem /
face->units_per_EM;
7421 vecB64.
y = vecA64.
y + (thickness << 6);
7425 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
7426 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
7427 INT DX = (DeltaX64 >> 6);
7428 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
7430 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
7435 INT DY = (DeltaY64 >> 6);
7436 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
7437 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
7441 { X0 +
DX, Y0 + DY },
7442 { X1 +
DX, Y1 + DY },
7453 vecA64.
y = -(FontGDI->
tmAscent << 6) / 3;
7455 vecB64.
y = vecA64.
y + (thickness << 6);
7459 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
7460 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
7461 INT DX = (DeltaX64 >> 6);
7462 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
7464 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
7469 INT DY = (DeltaY64 >> 6);
7470 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
7471 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
7475 { X0 +
DX, Y0 + DY },
7476 { X1 +
DX, Y1 + DY },
7495 if (TextObj !=
NULL)
7542#define STACK_TEXT_BUFFER_SIZE 512
7585 if (
BufSize >
sizeof(LocalBuffer))
7631 SafeRect = *UnsafeRect;
7657 if (
Buffer != LocalBuffer)
7734 if (SafeBuff ==
NULL)
7755 pdcattr =
dc->pdcattr;
7761 if (TextObj ==
NULL)
7779 charmap =
face->charmaps[
i];
7789 DPRINT1(
"WARNING: Could not find desired charmap!\n");
7811 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
7825 left = (
INT)
face->glyph->metrics.horiBearingX & -64;
7826 right = (
INT)((
face->glyph->metrics.horiBearingX +
face->glyph->metrics.width) + 63) & -64;
7827 adv = (
face->glyph->advance.x + 32) >> 6;
7841 SafeBuffF[
i - FirstChar].
abcfC = (
FLOAT) (adv - lsb - bbx);
7845 SafeBuff[
i - FirstChar].
abcA = lsb;
7846 SafeBuff[
i - FirstChar].
abcB = bbx;
7847 SafeBuff[
i - FirstChar].
abcC = adv - lsb - bbx;
7865 DPRINT(
"NtGdiGetCharABCWidths Worked!\n");
7926 if (!
fl) SafeBuffF = (
PFLOAT) SafeBuff;
7927 if (SafeBuff ==
NULL)
7946 pdcattr =
dc->pdcattr;
7951 if (TextObj ==
NULL)
7968 charmap =
face->charmaps[
i];
7978 DPRINT1(
"WARNING: Could not find desired charmap!\n");
8000 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
8012 SafeBuffF[
i - FirstChar] = (
FLOAT) ((
face->glyph->advance.x + 32) >> 6);
8014 SafeBuff[
i - FirstChar] = (
face->glyph->advance.x + 32) >> 6;
8053 WCHAR DefChar = 0xffff;
8068 if (!UnSafepwc && !UnSafepgi && cwc > 0)
8070 DPRINT1(
"!UnSafepwc && !UnSafepgi && cwc > 0\n");
8074 if (!UnSafepwc != !UnSafepgi)
8076 DPRINT1(
"UnSafepwc == %p, UnSafepgi = %p\n", UnSafepwc, UnSafepgi);
8087 pdcattr =
dc->pdcattr;
8101 if (!UnSafepwc && !UnSafepgi)
8116 DPRINT1(
"ExAllocatePoolWithTag\n");
8161 pwcSize = cwc *
sizeof(
WCHAR);
8189 for (
i = 0;
i < cwc;
i++)
8215 if (Safepwc !=
NULL)
NTSTATUS NTAPI MmUnmapViewInSystemSpace(IN PVOID MappedBase)
int strcmp(const char *String1, const char *String2)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
#define FILE_DIRECTORY_FILE
static VOID del(LPHIST_ENTRY item)
__inline USHORT Length(VOID)
__inline PWCHAR Buffer(VOID)
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
FORCEINLINE PMATRIX DC_pmxWorldToDevice(PDC pdc)
static BOOLEAN IntLPtoDP(DC *pdc, PPOINTL ppt, UINT count)
#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)
#define ASSERT_DC_PREPARED(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 ERROR_INVALID_PARAMETER
#define ERROR_INVALID_HANDLE
#define TT_MS_ID_UNICODE_CS
#define TT_PLATFORM_MICROSOFT
#define TT_MS_ID_SYMBOL_CS
#define TT_PLATFORM_APPLE_UNICODE
static void cleanup(void)
static void CharSet(RTF_Info *info)
struct png_info_def *typedef unsigned char **typedef struct png_info_def *typedef struct png_info_def *typedef struct png_info_def *typedef unsigned char ** row
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
static const WCHAR Cleanup[]
#define GDIToObj(ClipGDI, Type)
#define ObjToGDI(ClipObj, Type)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
#define RemoveTailList(ListHead)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define ExInitializePushLock
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
struct _FileName FileName
static const FLOATOBJ gef1
#define FLOATOBJ_Set1(fo)
#define FLOATOBJ_Equal1(pf)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
BOOL LoadFont(LPWSTR lpCmdLine)
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)
VOID APIENTRY IntEngFillPolygon(IN OUT PDC dc, IN POINTL *pPoints, IN UINT cPoints, IN BRUSHOBJ *BrushObj)
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 NTSTATUS DuplicateUnicodeString(_In_ PCUNICODE_STRING Source, _Out_ PUNICODE_STRING Destination)
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)
#define IS_HIGH_SURROGATE(ch0)
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 __inline SIZE_T FASTCALL IntStoreName(const UNICODE_STRING *pName, BYTE *pb)
const MATRIX gmxWorldToPageDefault
static 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 const WCHAR s_szzDefFixedFontLink[]
BOOL FASTCALL IntLoadFontSubstList(PLIST_ENTRY pHead)
static UINT g_FontCacheNumEntries
static PWSTR PathFindFileNameW(_In_ PCWSTR pszPath)
static WCHAR s_szDefFontLinkFontName[MAX_PATH]
static LPCWSTR FASTCALL NameFromCharSet(BYTE CharSet)
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)
#define LOW_SURROGATE_MIN
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 DWORD Utf32FromSurrogatePair(DWORD ch0, DWORD ch1)
static VOID FontLink_Chain_Dump(_In_ PFONTLINK_CHAIN pChain)
static void FASTCALL FontFamilyFillInfo(PFONTFAMILYINFO Info, LPCWSTR FaceName, LPCWSTR FullName, PFONTGDI FontGDI)
static void SharedFace_Release(PSHARED_FACE Ptr)
static void SwapEndian(LPVOID pvData, DWORD Size)
static __inline void FASTCALL IntInitFontNames(FONT_NAMES *Names, PSHARED_FACE SharedFace)
static void RemoveCacheEntries(FT_Face Face)
#define FM_SEL_USE_TYPO_METRICS
#define IS_LOW_SURROGATE(ch1)
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
static VOID IntUnicodeStringToBuffer(LPWSTR pszBuffer, SIZE_T cbBuffer, const UNICODE_STRING *pString)
static INT FASTCALL IntGdiLoadFontsFromMemory(PGDI_LOAD_FONT pLoadFont, PSHARED_FACE SharedFace, FT_Long FontIndex, INT CharSetIndex)
static NTSTATUS FontLink_Chain_Populate(_Inout_ PFONTLINK_CHAIN pChain)
static NTSTATUS FontLink_LoadSettings(VOID)
static BOOL FontLink_Chain_IsPopulated(const FONTLINK_CHAIN *pChain)
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)
static __inline BYTE *FASTCALL IntStoreFontNames(const FONT_NAMES *Names, OUTLINETEXTMETRICW *Otm)
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)
#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)
static VOID IntDeleteRegFontEntries(_In_ PCWSTR pszFileName, _In_ DWORD dwFlags)
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 LONG ScaleLong(LONG lValue, PFLOATOBJ pef)
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 SZZ_GetSize(_In_ PCZZWSTR pszz)
static BOOLEAN FASTCALL GetFontFamilyInfoForSubstitutes(const LOGFONTW *LogFont, PFONTFAMILYINFO Info, LONG *pCount, LONG MaxCount)
struct _FONTLINK_CACHE FONTLINK_CACHE
static BOOL MatchFontNames(PSHARED_FACE SharedFace, LPCWSTR lfFaceName)
#define ASSERT_FREETYPE_LOCK_HELD()
static LONG IntNormalizeAngle(LONG nTenthsOfDegrees)
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
#define HIGH_SURROGATE_MIN
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 VOID IntRebaseList(_Inout_ PLIST_ENTRY pNewHead, _Inout_ PLIST_ENTRY pOldHead)
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
static PFONTLINK_CACHE FontLink_FindCache(_In_ const LOGFONTW *pLogFont)
#define FONTLINK_DEFAULT_CHAR
BOOL APIENTRY NtGdiGetCharWidthW(_In_ HDC hDC, _In_ UINT FirstChar, _In_ UINT Count, _In_reads_opt_(Count) PCWCH UnSafepwc, _In_ FLONG fl, _Out_writes_bytes_(Count *sizeof(ULONG)) PVOID Buffer)
static BOOL SubstituteFontRecurse(PLOGFONTW pLogFont)
VOID FASTCALL IntEngFillBox(IN OUT PDC dc, IN INT X, IN INT Y, IN INT Width, IN INT Height, IN BRUSHOBJ *BrushObj)
static LONG g_nFontLinkCacheCount
static const WCHAR s_szzDefFontLink[]
#define MAX_FONTLINK_CACHE
static BYTE CharSetFromLangID(LANGID LangID)
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 WINAPI PathIsRelativeW(LPCWSTR lpszPath)
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 GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLdouble GLdouble GLdouble GLdouble top
GLenum GLuint GLint GLenum face
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_Check_return_ long __cdecl labs(_In_ long x)
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
struct _FILE_DIRECTORY_INFORMATION * PFILE_DIRECTORY_INFORMATION
#define EXCEPTION_EXECUTE_HANDLER
#define ROP4_FROM_INDEX(index)
#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)
static DWORD DWORD void LPSTR DWORD cch
#define TT_NAME_ID_FULL_NAME
#define TT_NAME_ID_UNIQUE_ID
static LPCSTR INT LPWORD pgi
#define TT_NAME_ID_FONT_FAMILY
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define TT_NAME_ID_FONT_SUBFAMILY
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define InitializeObjectAttributes(p, n, a, r, s)
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
NTSYSAPI NTSTATUS NTAPI ZwOpenFile(_Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_ ULONG ShareAccess, _In_ ULONG OpenOptions)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
NTSYSAPI VOID NTAPI RtlGetDefaultCodePage(_Out_ PUSHORT AnsiCodePage, _Out_ PUSHORT OemCodePage)
#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
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)
BOOL FASTCALL IntFillPolygon(PDC dc, SURFACE *psurf, BRUSHOBJ *BrushObj, CONST PPOINT Points, int Count, RECTL DestRect, POINTL *BrushOrigin)
#define PATH_IsPathOpen(dclevel)
void * EngAllocMem(int zero, unsigned long size, int tag=0)
static const WCHAR szName[]
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
#define SUBLANG_CHINESE_TRADITIONAL
#define SUBLANG_CHINESE_SIMPLIFIED
NTSTATUS NTAPI MmMapViewInSystemSpace(IN PVOID SectionObject, OUT PVOID *MappedBase, IN OUT PSIZE_T ViewSize)
NTSTATUS NTAPI MmCreateSection(OUT PVOID *Section, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize, IN ULONG SectionPageProtection, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL, IN PFILE_OBJECT FileObject OPTIONAL)
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
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 RTL_CONSTANT_STRING(s)
#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
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
_In_ HFONT _Out_ PUINT Height
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
BOOL APIENTRY IntEngBitBlt(SURFOBJ *psoTrg, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclTrg, POINTL *pptlSrc, POINTL *pptlMask, BRUSHOBJ *pbo, POINTL *pptlBrush, ROP4 Rop4)
BOOL APIENTRY IntEngMaskBlt(_Inout_ SURFOBJ *psoDest, _In_ SURFOBJ *psoMask, _In_ CLIPOBJ *pco, _In_ XLATEOBJ *pxloDest, _In_ XLATEOBJ *pxloSource, _In_ RECTL *prclDest, _In_ POINTL *pptlMask, _In_ BRUSHOBJ *pbo, _In_ POINTL *pptlBrushOrg)
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
PTEXTOBJ FASTCALL RealizeFontInit(_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()
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define FLOATOBJ_Equal(pf, pf1)
#define FLOATOBJ_DivLong(pf, l)
ENGAPI BOOL APIENTRY EngDeleteSurface(_In_ _Post_ptr_invalid_ HSURF hsurf)
ENGAPI SURFOBJ *APIENTRY EngLockSurface(_In_ HSURF hsurf)
_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)
_In_ ULONG _In_opt_ PVOID pvData
#define FLOATOBJ_AddLong(pf, l)
#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
_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)