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";
2121 RtlInitEmptyUnicodeString(&PathName, pszBuffer,
Length);
2144 DPRINT1(
"Could not load font file: %wZ\n", &PathName);
2153 DPRINT1(
"ObReferenceObjectByHandle failed.\n");
2166 DPRINT1(
"Could not map file: %wZ\n", &PathName);
2177 DPRINT1(
"Could not map file: %wZ\n", &PathName);
2187 LoadFont.Characteristics = Characteristics;
2215 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
2238 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
2264 pFileName = PathName.
Buffer;
2305 cchFile =
wcslen(pchFile);
2316 ustrPathName.
Buffer = pchFile;
2323 pchFile += cchFile + 1;
2350 cchFile =
wcslen(pchFile);
2361 ustrPathName.
Buffer = pchFile;
2367 pchFile += cchFile + 1;
2376 if (!lpszPath || !*lpszPath)
2378 if (*lpszPath ==
L'\\' || (*lpszPath && lpszPath[1] ==
L':'))
2413 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
2426 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2432 for (
i = 0;
i < KeyFullInfo.
Values; ++
i)
2436 InfoBuffer, InfoSize, &
Length);
2445 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2450 InfoBuffer, InfoSize, &
Length);
2465 DPRINT1(
"RtlCreateUnicodeString failed\n");
2471 InfoBuffer, InfoSize, &
Length);
2480 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2485 InfoBuffer, InfoSize, &
Length);
2505 L"\\SystemRoot\\Fonts\\%s", pchPath);
2532 return (KeyFullInfo.
Values != 0 && nFontCount != 0);
2553 LoadFont.Characteristics = FR_PRIVATE | FR_NOT_ENUM;
2567 if (EntryCollection)
2577 Ret = EntryCollection->
Handle;
2637 if (CurrentEntry->
Handle == hMMFont)
2639 EntryCollection = CurrentEntry;
2647 if (EntryCollection)
2664 DPRINT(
"IntGdiCleanupPrivateFontsForProcess()\n");
2667 EntryCollection =
NULL;
2680 if (EntryCollection)
2758 if (lf->lfEscapement != lf->lfOrientation)
2852 int Ascent, Descent;
2909 - ((Ascent + Descent)
2911 YScale) + 32) >> 6);
3100 Names->OtmSize = OtmSize;
3180 if (
Size == 0 &&
Cache->OutlineRequiredSize > 0)
3183 return Cache->OutlineRequiredSize;
3198 return Cache->OutlineRequiredSize;
3203 if (Size < Cache->OutlineRequiredSize)
3205 DPRINT1(
"Size %u < OutlineRequiredSize %u\n",
Size,
3206 Cache->OutlineRequiredSize);
3225 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
3234 DPRINT1(
"Can't find HHEA table - not TT font?\n");
3255#define SCALE_X(value) ((FT_MulFix((value), XScale) + 32) >> 6)
3256#define SCALE_Y(value) ((FT_MulFix((value), YScale) + 32) >> 6)
3305 return Cache->OutlineRequiredSize;
3372 INT i,
Count, BestIndex, Score, BestScore;
3413 if (
Name.name_id != NameID)
3426 (
Name.string[0] == 0 &&
Name.string[1] == 0))
3450 if (Score > BestScore)
3509 if (!
Cache->FontFamily.Buffer)
3515 if (!
Cache->FullName.Buffer)
3560 Lf = &
Info->EnumLogFontEx.elfLogFont;
3573 Ntm = &
Info->NewTextMetricEx.ntmTm;
3618 sizeof(
Info->EnumLogFontEx.elfFullName),
3622 StyleW.
Buffer =
Info->EnumLogFontEx.elfStyle;
3663 if (
fs.fsCsb[0] == 0)
3670 case FT_ENCODING_UNICODE:
3671 case FT_ENCODING_APPLE_ROMAN:
3674 case FT_ENCODING_MS_SYMBOL:
3686 if (
fs.fsCsb[0] & fs0)
3698 DPRINT1(
"Unknown elfscript for bit %u\n",
i);
3703 Info->NewTextMetricEx.ntmFontSig =
fs;
3723 FontGDI = CurrentEntry->
Font;
3850 const DWORD *pdw = pv;
3866 DWORD dwHash = pCache->dwHash;
3870 for (CurrentEntry = g_FontCacheListHead.
Flink;
3871 CurrentEntry != &g_FontCacheListHead;
3872 CurrentEntry = CurrentEntry->
Flink)
3875 if (FontEntry->
dwHash == dwHash &&
3877 FontEntry->
Hashed.
Face == pCache->Hashed.Face &&
3888 if (CurrentEntry == &g_FontCacheListHead)
3914 DPRINT1(
"Failure caching glyph.\n");
3922 DPRINT1(
"Failure rendering glyph.\n");
3929 DPRINT1(
"Alloc failure caching glyph.\n");
3936 if (FT_Bitmap_Convert_ReactOS_Hack(GlyphSlot->library, &BitmapGlyph->
bitmap,
3937 &AlignedBitmap, 4,
TRUE))
3939 DPRINT1(
"Conversion failed\n");
3947 BitmapGlyph->
bitmap = AlignedBitmap;
3968 int needed = 0,
point = 0, contour, first_pt;
3969 unsigned int pph_start, cpfx;
3972 for (contour = 0; contour <
outline->n_contours; contour++)
3989 needed +=
sizeof(*pph);
3991 while (point <= outline->contours[contour])
4003 }
while (point <= outline->contours[contour] &&
4015 else if (point <= outline->contours[contour] &&
4029 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
4032 pph->
cb = needed - pph_start;
4055 int contour,
point = 0, first_pt;
4060 unsigned int needed = 0;
4062 for (contour = 0; contour <
outline->n_contours; contour++)
4072 needed +=
sizeof(*pph);
4074 while (point <= outline->contours[contour])
4101 cubic_control[0].
x >>= 1;
4102 cubic_control[0].
y >>= 1;
4105 cubic_control[3] =
outline->points[first_pt];
4113 cubic_control[3].
x >>= 1;
4114 cubic_control[3].
y >>= 1;
4119 cubic_control[1].
x = (2 *
outline->points[
point].x + 1) / 3;
4120 cubic_control[1].
y = (2 *
outline->points[
point].y + 1) / 3;
4121 cubic_control[2] = cubic_control[1];
4122 cubic_control[1].
x += (cubic_control[0].
x + 1) / 3;
4123 cubic_control[1].
y += (cubic_control[0].
y + 1) / 3;
4124 cubic_control[2].
x += (cubic_control[3].
x + 1) / 3;
4125 cubic_control[2].
y += (cubic_control[3].
y + 1) / 3;
4135 }
while (point <= outline->contours[contour] &&
4141 if (point <= outline->contours[contour] &&
4153 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
4156 pph->
cb = needed - pph_start;
4170 LONG Ascent, Descent, Sum, EmHeight;
4172 lfWidth =
abs(lfWidth);
4177 DPRINT(
"lfHeight and lfWidth are zero.\n");
4200 if (!pOS2 || !pHori)
4205 DPRINT1(
"%s: Failed to request font size.\n",
face->family_name);
4228#define FM_SEL_USE_TYPO_METRICS 0x80
4237 Sum = Ascent + Descent;
4250 else if (lfHeight < 0)
4266#undef FM_SEL_USE_TYPO_METRICS
4273 EmHeight =
max(EmHeight, 1);
4294 req.
height = (EmHeight << 6);
4318 DPRINT(
"WARNING: No charmap selected!\n");
4319 DPRINT(
"This font face has %d charmaps\n",
face->num_charmaps);
4322 for (
n = 0;
n <
face->num_charmaps;
n++)
4324 charmap =
face->charmaps[
n];
4325 if (charmap->
encoding == FT_ENCODING_UNICODE)
4333 for (
n = 0;
n <
face->num_charmaps;
n++)
4335 charmap =
face->charmaps[
n];
4345 for (
n = 0;
n <
face->num_charmaps;
n++)
4347 charmap =
face->charmaps[
n];
4348 if (charmap->
encoding == FT_ENCODING_MS_SYMBOL)
4355 if (!found &&
face->num_charmaps > 0)
4357 found =
face->charmaps[0];
4361 DPRINT1(
"WARNING: Could not find desired charmap!\n");
4369 DPRINT1(
"WARNING: Could not set the charmap!\n");
4395 if (glyph < 0x100) glyph += 0xf000;
4434 DPRINT1(
"%S, %p, %p\n", pChain->LogFont.lfFaceName, pChain->pBaseTextObj, pChain->pDefFace);
4436 Head = &pChain->FontLinkList;
4440 DPRINT1(
"FontLink #%d: %p, %d, %S, %p, %p\n",
4467 DPRINT(
"code: 0x%08X, index: 0x%08X, fCodeAsIndex:%d\n",
code,
index, fCodeAsIndex);
4468 pCache->Hashed.Face = *pFace = pChain->pDefFace;
4479 Head = &pChain->FontLinkList;
4493 pCache->Hashed.Face = *pFace =
face;
4502 pCache->Hashed.Face = *pFace = pChain->pDefFace;
4519 BOOL bIgnoreRotation)
4546 cjBuf, pvBuf, pmat2);
4548 pdcattr =
dc->pdcattr;
4616 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
4624 if (aveWidth && potm)
4653 DPRINT(
"Advance = %d, lsb = %d, bbx = %d\n",adv, lsb, bbx);
4670 needsTransform =
TRUE;
4684 needsTransform =
TRUE;
4692 DPRINT(
"Rotation Trans!\n");
4695 needsTransform =
TRUE;
4702 DPRINT(
"MAT2 Matrix Trans!\n");
4708 needsTransform =
TRUE;
4713 if (!needsTransform)
4715 DPRINT(
"No Need to be Transformed!\n");
4726 for (xc = 0; xc < 2; xc++)
4728 for (yc = 0; yc < 2; yc++)
4736 if (xc == 0 && yc == 0)
4767 DPRINT(
"CX %d CY %d BBX %u BBY %u GOX %d GOY %d\n",
4776 DPRINT(
"GGO_METRICS Exit!\n");
4793 pitch = ((
width + 31) >> 5) << 2;
4796 if (!pvBuf || !
cjBuf)
break;
4821 ft_bitmap.
pitch = pitch;
4823 ft_bitmap.
buffer = pvBuf;
4850 unsigned int mult,
row, col;
4855 pitch = (
width + 3) / 4 * 4;
4858 if (!pvBuf || !
cjBuf)
break;
4872 for (
x = 0; (
UINT)
x < pitch;
x++)
4874 if (x < ft_face->glyph->bitmap.width)
4875 dst[
x] = (
src[
x / 8] & (1 << ( (7 - (
x % 8))))) ? 0xff : 0;
4888 ft_bitmap.
pitch = pitch;
4890 ft_bitmap.
buffer = pvBuf;
4917 for (col = 0; col <
width; col++,
ptr++)
4919 *
ptr = (((
int)*
ptr) * mult + 128) / 256;
4945 if (!pvBuf || !
cjBuf)
4965 if (needsTransform && pvBuf)
4973 if (!pvBuf || !
cjBuf)
4987 DPRINT(
"ftGdiGetGlyphOutline END and needed %lu\n", needed);
5017 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %d]\n",
Cache->Hashed.GlyphIndex);
5021 glyph =
Cache->Hashed.Face->glyph;
5023 if (
Cache->Hashed.Aspect.Emu.Bold)
5026 if (
Cache->Hashed.Aspect.Emu.Italic)
5032 DPRINT1(
"Failed to render glyph! [index: %d]\n",
Cache->Hashed.GlyphIndex);
5051 INT glyph_index,
i, previous, nTenthsOfDegrees;
5054 BOOL use_kerning, bVerticalWriting;
5055 LONG ascender, descender;
5076 bVerticalWriting = ((nTenthsOfDegrees == 90 * 10) || (nTenthsOfDegrees == 270 * 10));
5110 Cache.Hashed.GlyphIndex = glyph_index;
5117 if (use_kerning && previous && glyph_index)
5121 TotalWidth64 += delta.
x;
5126 if (((TotalWidth64 + 32) >> 6) <= MaxExtent &&
NULL != Fit)
5132 Dx[
i] = (TotalWidth64 + 32) >> 6;
5135 previous = glyph_index;
5142 if (bVerticalWriting)
5144 Size->cx = ascender + descender;
5145 Size->cy = (TotalWidth64 + 32) >> 6;
5149 Size->cx = (TotalWidth64 + 32) >> 6;
5150 Size->cy = ascender + descender;
5179 pdcattr = Dc->pdcattr;
5215 DPRINT(
"Csb 1=%x 0=%x\n",
fs.fsCsb[1],
fs.fsCsb[0]);
5216 if (
fs.fsCsb[0] == 0)
5222 case FT_ENCODING_UNICODE:
5223 case FT_ENCODING_APPLE_ROMAN:
5226 case FT_ENCODING_MS_SYMBOL:
5253 if (
fs.fsCsb[0] & fs0)
5263 DPRINT1(
"TCI failing on %x\n", fs0);
5277 DWORD num_ranges = 0;
5282 DPRINT1(
"FIXME: No charmap selected! This is a BUG!\n");
5286 if (
face->charmap->encoding == FT_ENCODING_UNICODE)
5289 FT_ULong char_code, char_code_prev;
5293 DPRINT(
"Face encoding FT_ENCODING_UNICODE, number of glyphs %ld, first glyph %u, first char %04lx\n",
5294 face->num_glyphs, glyph_code, char_code);
5296 if (!glyph_code)
return 0;
5300 glyphset->ranges[0].wcLow = (
USHORT)char_code;
5301 glyphset->ranges[0].cGlyphs = 0;
5302 glyphset->cGlyphsSupported = 0;
5308 if (char_code < char_code_prev)
5310 DPRINT1(
"Expected increasing char code from FT_Get_Next_Char\n");
5313 if (char_code - char_code_prev > 1)
5318 glyphset->ranges[num_ranges - 1].wcLow = (
USHORT)char_code;
5319 glyphset->ranges[num_ranges - 1].cGlyphs = 1;
5320 glyphset->cGlyphsSupported++;
5325 glyphset->ranges[num_ranges - 1].cGlyphs++;
5326 glyphset->cGlyphsSupported++;
5328 char_code_prev = char_code;
5333 DPRINT1(
"Encoding %i not supported\n",
face->charmap->encoding);
5335 size =
sizeof(GLYPHSET) +
sizeof(WCRANGE) * (num_ranges - 1);
5338 glyphset->cbThis =
size;
5339 glyphset->cRanges = num_ranges;
5340 glyphset->flAccel = 0;
5376 pdcattr =
dc->pdcattr;
5378 if (
NULL != TextObj)
5409 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
5413 if (!pHori &&
Error)
5415 DPRINT1(
"Can't find HHEA table - not TT font?\n");
5462 (
Table << 8 & 0xFF0000);
5484#define GOT_PENALTY(name, value) Penalty += (value)
5490 const char * style_name)
5656 fNeedScaling =
TRUE;
5665 fNeedScaling =
TRUE;
5711 fNeedScaling =
TRUE;
5820 DPRINT(
"WARNING: Penalty:%ld < 200: RequestedNameW:%ls, "
5821 "ActualNameW:%ls, lfCharSet:%d, lfWeight:%ld, "
5822 "tmCharSet:%d, tmWeight:%ld\n",
5843 UINT OtmSize, OldOtmSize = 0;
5860 FontGDI = CurrentEntry->
Font;
5867 if (OtmSize > OldOtmSize)
5885 OldOtmSize = OtmSize;
5888 if (*MatchPenalty ==
MAXULONG || Penalty < *MatchPenalty)
5890 *FontObj =
GDIToObj(FontGDI, FONT);
5891 *MatchPenalty = Penalty;
6000 if (
NULL == TextObj)
6019 SubstitutedLogFont = *pLogFont;
6021 DPRINT(
"Font '%S,%u' is substituted by '%S,%u'.\n",
6025 MatchPenalty = 0xFFFFFFFF;
6044 DPRINT1(
"Request font %S not found, no fonts loaded at all\n",
6128 DPRINT(
"ZwOpenFile() failed (Status = 0x%lx)\n",
Status);
6136 DPRINT(
"ZwQueryObject() failed (Status = %lx)\n",
Status);
6192 const ULONG MaxFamInfo = 64;
6197 DPRINT(
"IntGdiGetFontResourceInfo: dwType == %lu\n", dwType);
6218 if (!NameInfo1 || !NameInfo2 || !FamInfo)
6234 for (ListEntry = g_FontListHead.
Flink; ListEntry != &g_FontListHead;
6235 ListEntry = ListEntry->
Flink)
6263 if (
Count >= MaxFamInfo)
6273 if (
Count == 0 && dwType != 5)
6309 Size +=
wcslen(FamInfo[
i].EnumLogFontEx.elfLogFont.lfFaceName);
6310 if (FamInfo[
i].EnumLogFontEx.elfStyle[0] &&
6311 _wcsicmp(FamInfo[
i].EnumLogFontEx.elfStyle,
L"Regular") != 0)
6313 Size += 1 +
wcslen(FamInfo[
i].EnumLogFontEx.elfStyle);
6458 Info->dwUnknown = -1;
6475 FT_UInt previous_index = 0, glyph_index = 0;
6485 if (previous_index && glyph_index)
6489 if (pKerningPair && cPairs)
6491 pKerningPair[
i].
wFirst = char_previous;
6492 pKerningPair[
i].
wSecond = char_code;
6495 if (
i == cPairs)
break;
6499 previous_index = glyph_index;
6500 char_previous = char_code;
6521 LONG AvailCount = 0;
6527 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;
6710 (fuOptions & ETO_GLYPH_INDEX));
6711 Cache->Hashed.GlyphIndex = glyph_index;
6718 if (use_kerning && previous && glyph_index)
6732 vec.
x = (Dx[2 *
i + 0] << 6);
6733 vec.
y = (Dx[2 *
i + 1] << 6);
6741 vec.
x = (Dx[
i] << 6);
6749 previous = glyph_index;
6772 Rect.left =
Rect.right = pPoints[0].x;
6773 Rect.top =
Rect.bottom = pPoints[0].y;
6774 for (
i = 1;
i < cPoints; ++
i)
6779 else if (
Rect.right <
x)
6785 else if (
Rect.bottom <
y)
6864 LONGLONG X64, Y64, RealXStart64, RealYStart64, DeltaX64, DeltaY64;
6866 RECTL DestRect, MaskRect;
6877 BOOL use_kerning, bResult, DoBreak;
6882 const DWORD del = 0x7f, nbsp = 0xa0;
6905 if (!
dc->dclevel.pSurface)
6912 pdcattr =
dc->pdcattr;
6931 psurf =
dc->dclevel.pSurface;
6956 &
dc->eboBackground.BrushObject);
6957 fuOptions &= ~ETO_OPAQUE;
6968 if (TextObj ==
NULL)
6974 FontObj = TextObj->
Font;
7014 bNoTransform = ((
mat.xy == 0) && (
mat.yx == 0) &&
7015 (
mat.xx == (1 << 16)) && (
mat.yy == (1 << 16)));
7019 vecAscent64.
y = (FontGDI->
tmAscent << 6);
7026#define VALIGN_MASK (TA_TOP | TA_BASELINE | TA_BOTTOM)
7033 RealXStart64 -= vecDescent64.
x;
7034 RealYStart64 += vecDescent64.
y;
7038 RealXStart64 -= vecAscent64.
x;
7039 RealYStart64 += vecAscent64.
y;
7049 fuOptions, bNoTransform, &Chain))
7060 RealXStart64 -= DeltaX64 / 2;
7061 RealYStart64 -= DeltaY64 / 2;
7065 RealXStart64 -= DeltaX64;
7066 RealYStart64 -= DeltaY64;
7072 INT X0 = (RealXStart64 + vecAscent64.
x + 32) >> 6;
7073 INT Y0 = (RealYStart64 - vecAscent64.
y + 32) >> 6;
7074 INT DX = (DeltaX64 >> 6);
7075 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
7077 INT CY = (vecAscent64.
y - vecDescent64.
y + 32) >> 6;
7082 INT DY = (DeltaY64 >> 6);
7083 INT X1 = ((RealXStart64 + vecDescent64.
x + 32) >> 6);
7084 INT Y1 = ((RealYStart64 - vecDescent64.
y + 32) >> 6);
7088 { X0 +
DX, Y0 + DY },
7089 { X1 +
DX, Y1 + DY },
7126 (fuOptions & ETO_GLYPH_INDEX));
7127 Cache.Hashed.GlyphIndex = glyph_index;
7137 if (use_kerning && previous && glyph_index &&
NULL == Dx)
7144 DPRINT(
"X64, Y64: %I64d, %I64d\n", X64, Y64);
7151 if (ch0 >
L' ' && ch0 !=
del && ch0 != nbsp && glyphSize.
cx == 0)
7152 DPRINT1(
"WARNING: WChar 0x%04x has a glyphSize.cx of zero\n", ch0);
7157 (ch0 ==
L' ' || ch0 == nbsp))
7163 glyphSize.
cx = spaceWidth.
cx;
7164 realglyph->
left = 0;
7170 DestRect.
left = ((X64 + 32) >> 6) + realglyph->
left;
7172 DestRect.
top = ((Y64 + 32) >> 6) - realglyph->
top;
7176 if ((glyphSize.
cx != 0) && (glyphSize.
cy != 0))
7188 DPRINT1(
"WARNING: EngCreateBitmap() failed!\n");
7197 DPRINT1(
"WARNING: EngLockSurface() failed!\n");
7230 &
dc->eboText.BrushObject,
7233 DPRINT1(
"Failed to MaskBlt a glyph!\n");
7250 vec.
x = (Dx[2 *
i + 0] << 6);
7251 vec.
y = (Dx[2 *
i + 1] << 6);
7259 vec.
x = (Dx[
i] << 6);
7267 DPRINT(
"New X64, New Y64: %I64d, %I64d\n", X64, Y64);
7269 previous = glyph_index;
7281 DeltaX64 = X64 - RealXStart64;
7282 DeltaY64 = Y64 - RealYStart64;
7284 if (!
face->units_per_EM)
7292 face->underline_position *
face->size->metrics.y_ppem /
face->units_per_EM;
7294 face->underline_thickness *
face->size->metrics.y_ppem /
face->units_per_EM;
7304 vecB64.
y = vecA64.
y + (thickness << 6);
7308 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
7309 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
7310 INT DX = (DeltaX64 >> 6);
7311 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
7313 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
7318 INT DY = (DeltaY64 >> 6);
7319 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
7320 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
7324 { X0 +
DX, Y0 + DY },
7325 { X1 +
DX, Y1 + DY },
7336 vecA64.
y = -(FontGDI->
tmAscent << 6) / 3;
7338 vecB64.
y = vecA64.
y + (thickness << 6);
7342 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
7343 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
7344 INT DX = (DeltaX64 >> 6);
7345 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
7347 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
7352 INT DY = (DeltaY64 >> 6);
7353 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
7354 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
7358 { X0 +
DX, Y0 + DY },
7359 { X1 +
DX, Y1 + DY },
7378 if (TextObj !=
NULL)
7425#define STACK_TEXT_BUFFER_SIZE 512
7468 if (
BufSize >
sizeof(LocalBuffer))
7514 SafeRect = *UnsafeRect;
7540 if (
Buffer != LocalBuffer)
7617 if (SafeBuff ==
NULL)
7638 pdcattr =
dc->pdcattr;
7644 if (TextObj ==
NULL)
7662 charmap =
face->charmaps[
i];
7672 DPRINT1(
"WARNING: Could not find desired charmap!\n");
7694 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
7708 left = (
INT)
face->glyph->metrics.horiBearingX & -64;
7709 right = (
INT)((
face->glyph->metrics.horiBearingX +
face->glyph->metrics.width) + 63) & -64;
7710 adv = (
face->glyph->advance.x + 32) >> 6;
7724 SafeBuffF[
i - FirstChar].
abcfC = (
FLOAT) (adv - lsb - bbx);
7728 SafeBuff[
i - FirstChar].
abcA = lsb;
7729 SafeBuff[
i - FirstChar].
abcB = bbx;
7730 SafeBuff[
i - FirstChar].
abcC = adv - lsb - bbx;
7748 DPRINT(
"NtGdiGetCharABCWidths Worked!\n");
7809 if (!
fl) SafeBuffF = (
PFLOAT) SafeBuff;
7810 if (SafeBuff ==
NULL)
7829 pdcattr =
dc->pdcattr;
7834 if (TextObj ==
NULL)
7851 charmap =
face->charmaps[
i];
7861 DPRINT1(
"WARNING: Could not find desired charmap!\n");
7883 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
7895 SafeBuffF[
i - FirstChar] = (
FLOAT) ((
face->glyph->advance.x + 32) >> 6);
7897 SafeBuff[
i - FirstChar] = (
face->glyph->advance.x + 32) >> 6;
7936 WCHAR DefChar = 0xffff;
7951 if (!UnSafepwc && !UnSafepgi && cwc > 0)
7953 DPRINT1(
"!UnSafepwc && !UnSafepgi && cwc > 0\n");
7957 if (!UnSafepwc != !UnSafepgi)
7959 DPRINT1(
"UnSafepwc == %p, UnSafepgi = %p\n", UnSafepwc, UnSafepgi);
7970 pdcattr =
dc->pdcattr;
7984 if (!UnSafepwc && !UnSafepgi)
7999 DPRINT1(
"ExAllocatePoolWithTag\n");
8044 pwcSize = cwc *
sizeof(
WCHAR);
8072 for (
i = 0;
i < cwc;
i++)
8098 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)
#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)
__kernel_entry W32KAPI DWORD APIENTRY NtGdiGetGlyphIndicesW(_In_ HDC hdc, _In_reads_opt_(cwc) LPCWSTR pwc, _In_ INT cwc, _Out_writes_opt_(cwc) LPWORD pgi, _In_ DWORD iMode)
BOOL FASTCALL TextIntUpdateSize(PDC dc, PTEXTOBJ TextObj, PFONTGDI FontGDI, BOOL bDoLock)
VOID APIENTRY IntEngFillPolygon(IN OUT PDC dc, IN POINTL *pPoints, IN UINT cPoints, IN BRUSHOBJ *BrushObj)
static FT_UInt FASTCALL get_glyph_index_flagged(FT_Face face, FT_ULong code, BOOL fCodeAsIndex)
static BOOLEAN FASTCALL GetFontFamilyInfoForList(const LOGFONTW *LogFont, PFONTFAMILYINFO Info, LPCWSTR NominalName, LONG *pCount, LONG MaxCount, PLIST_ENTRY Head)
static UINT FontLink_Chain_FindGlyph(_Inout_ PFONTLINK_CHAIN pChain, _Out_ PFONT_CACHE_ENTRY pCache, _Inout_ FT_Face *pFace, _In_ UINT code, _In_ BOOL fCodeAsIndex)
DWORD FASTCALL ftGdiGetKerningPairs(PFONTGDI Font, DWORD cPairs, LPKERNINGPAIR pKerningPair)
#define ASSERT_FREETYPE_LOCK_NOT_HELD()
static const CHARSETINFO g_FontTci[MAXTCIINDEX]
static 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 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)
FT_Library g_FreeTypeLibrary
BOOL FASTCALL TextIntGetTextExtentPoint(PDC dc, PTEXTOBJ TextObj, LPCWSTR String, INT Count, ULONG MaxExtent, LPINT Fit, LPINT Dx, LPSIZE Size, FLONG fl)
BOOL APIENTRY GreExtTextOutW(IN HDC hDC, IN INT XStart, IN INT YStart, IN UINT fuOptions, IN OPTIONAL PRECTL lprc, IN LPCWSTR String, IN INT Count, IN OPTIONAL LPINT Dx, IN DWORD dwCodePage)
BOOL FASTCALL IntGdiGetFontResourceInfo(PUNICODE_STRING FileName, PVOID pBuffer, DWORD *pdwBytes, DWORD dwType)
static PWCHAR g_ElfScripts[32]
static PSHARED_MEM SharedMem_Create(PBYTE Buffer, ULONG BufferSize, BOOL IsMapping)
ULONG FASTCALL ftGdiGetGlyphOutline(PDC dc, WCHAR wch, UINT iFormat, LPGLYPHMETRICS pgm, ULONG cjBuf, PVOID pvBuf, LPMAT2 pmat2, BOOL bIgnoreRotation)
static BOOL 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
BOOL APIENTRY NtGdiGetCharABCWidthsW(IN HDC hDC, IN UINT FirstChar, IN ULONG Count, IN OPTIONAL PWCHAR UnSafepwch, IN FLONG fl, OUT PVOID Buffer)
VOID FASTCALL IntGdiCleanupPrivateFontsForProcess(VOID)
static void SharedFaceCache_Init(PSHARED_FACE_CACHE Cache)
static unsigned int get_bezier_glyph_outline(FT_Outline *outline, unsigned int buflen, char *buf)
BOOL FASTCALL InitFontSupport(VOID)
static FT_UInt FASTCALL get_glyph_index_symbol(FT_Face ft_face, UINT glyph)
static __inline VOID FindBestFontFromList(FONTOBJ **FontObj, ULONG *MatchPenalty, const LOGFONTW *LogFont, const PLIST_ENTRY Head)
static const WCHAR s_szzDefFixedFontLink[]
BOOL FASTCALL IntLoadFontSubstList(PLIST_ENTRY pHead)
static UINT g_FontCacheNumEntries
static WCHAR s_szDefFontLinkFontName[MAX_PATH]
static LPCWSTR FASTCALL NameFromCharSet(BYTE CharSet)
BOOL APIENTRY IntExtTextOutW(IN PDC dc, IN INT XStart, IN INT YStart, IN UINT fuOptions, IN OPTIONAL PRECTL lprc, IN LPCWSTR String, IN INT Count, IN OPTIONAL LPINT Dx, IN DWORD dwCodePage)
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)
LONG NTAPI NtGdiGetFontFamilyInfo(HDC Dc, const LOGFONTW *UnsafeLogFont, PFONTFAMILYINFO UnsafeInfo, LPLONG UnsafeInfoCount)
#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)
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)
BOOL APIENTRY NtGdiGetCharWidthW(IN HDC hDC, IN UINT FirstChar, IN UINT Count, IN OPTIONAL PWCHAR UnSafepwc, IN FLONG fl, OUT PVOID Buffer)
static FT_BitmapGlyph IntGetBitmapGlyphWithCache(IN OUT PFONT_CACHE_ENTRY Cache, IN FT_GlyphSlot GlyphSlot)
#define STACK_TEXT_BUFFER_SIZE
static __inline void FTVectorToPOINTFX(FT_Vector *vec, POINTFX *pt)
NTSTATUS FASTCALL TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont)
static void SharedFaceCache_Release(PSHARED_FACE_CACHE Cache)
static BOOL g_RenderingEnabled
BOOL FASTCALL IntGdiRemoveFontMemResource(HANDLE hMMFont)
UINT FASTCALL IntGetCharSet(INT nIndex, FT_ULong CodePageRange1)
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 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 IntGetTextDisposition(OUT LONGLONG *pX64, OUT LONGLONG *pY64, IN LPCWSTR String, IN INT Count, IN OPTIONAL LPINT Dx, IN OUT PFONT_CACHE_ENTRY Cache, IN UINT fuOptions, IN BOOL bNoTransform, IN OUT PFONTLINK_CHAIN pChain)
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 NtGdiExtTextOutW(IN HDC hDC, IN INT XStart, IN INT YStart, IN UINT fuOptions, IN OPTIONAL LPCRECT UnsafeRect, IN LPCWSTR UnsafeString, IN UINT Count, IN OPTIONAL const INT *UnsafeDx, IN DWORD dwCodePage)
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 WINAPI PathIsRelativeW(LPCWSTR lpszPath)
FT_Load_Glyph(FT_Face face, FT_UInt glyph_index, FT_Int32 load_flags)
#define FT_LOAD_NO_BITMAP
FT_Set_Transform(FT_Face face, FT_Matrix *matrix, FT_Vector *delta)
@ FT_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_opt_(s)
#define _In_reads_opt_(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)
#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
PULONG MinorVersion OPTIONAL
base for all directory entries
base of all file and directory entries
UNICODE_STRING FontNames[FONTSUBST_FROM_AND_TO]
BYTE CharSets[FONTSUBST_FROM_AND_TO]
UNICODE_STRING FamilyNameW
UNICODE_STRING StyleNameW
FT_Short max_advance_width
FT_Size_Request_Type type
PUNICODE_STRING pFileName
PFONT_ENTRY_MEM PrivateEntry
UNICODE_STRING RegValueName
WCHAR lfFaceName[LF_FACESIZE]
FT_ULong ulCodePageRange1
FT_UShort usLastCharIndex
FT_Short ySuperscriptYSize
FT_Short ySuperscriptXSize
FT_Short ySubscriptYOffset
FT_Short ySuperscriptYOffset
FT_Short ySubscriptXOffset
FT_Short yStrikeoutPosition
FT_ULong ulCodePageRange2
FT_Short ySuperscriptXOffset
FT_UShort usFirstCharIndex
FT_Short underlineThickness
FT_Short underlinePosition
FT_BitmapGlyph BitmapGlyph
WCHAR TextFace[LF_FACESIZE]
struct _LIST_ENTRY * 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
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _Strict_type_match_ POOL_TYPE _In_opt_ ULONG _In_ _Out_ WDFMEMORY * Memory
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ WDFCOLLECTION Collection
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
BOOL APIENTRY IntEngBitBlt(SURFOBJ *psoTrg, SURFOBJ *psoSrc, SURFOBJ *psoMask, CLIPOBJ *pco, XLATEOBJ *pxlo, RECTL *prclTrg, POINTL *pptlSrc, POINTL *pptlMask, BRUSHOBJ *pbo, POINTL *pptlBrush, ROP4 Rop4)
BOOL APIENTRY IntEngMaskBlt(_Inout_ SURFOBJ *psoDest, _In_ SURFOBJ *psoMask, _In_ CLIPOBJ *pco, _In_ XLATEOBJ *pxloDest, _In_ XLATEOBJ *pxloSource, _In_ RECTL *prclDest, _In_ POINTL *pptlMask, _In_ BRUSHOBJ *pbo, _In_ POINTL *pptlBrushOrg)
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
PTEXTOBJ FASTCALL RealizeFontInit(HFONT hFont)
BOOL FASTCALL PATH_ExtTextOut(PDC dc, INT x, INT y, UINT flags, const RECTL *lprc, LPCWSTR str, UINT count, const INT *dx)
#define AFRX_WRITE_REGISTRY
#define LFONT_UnlockFont(plfnt)
FORCEINLINE PTEXTOBJ TEXTOBJ_LockText(HFONT hfont)
#define AFRX_DOS_DEVICE_PATH
#define AFRX_ALTERNATIVE_PATH
#define IntLockProcessPrivateFonts(W32Process)
FORCEINLINE VOID TEXTOBJ_UnlockText(PLFONT plfnt)
#define IntUnLockProcessPrivateFonts(W32Process)
#define LFONT_AllocFontWithHandle()
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define FLOATOBJ_Equal(pf, pf1)
#define FLOATOBJ_DivLong(pf, l)
ENGAPI BOOL APIENTRY EngDeleteSurface(_In_ _Post_ptr_invalid_ HSURF hsurf)
ENGAPI SURFOBJ *APIENTRY EngLockSurface(_In_ HSURF hsurf)
_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)