13#include FT_TYPE1_TABLES_H
14#include FT_TRUETYPE_TABLES_H
15#include FT_TRUETYPE_TAGS_H
16#include FT_TRIGONOMETRY_H
20#include FT_SFNT_NAMES_H
21#include FT_SYNTHESIS_H
22#include FT_TRUETYPE_IDS_H
24#ifndef FT_INTERNAL_INTERNAL_H
25 #define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
26 #include FT_INTERNAL_INTERNAL_H
28#include FT_INTERNAL_TRUETYPE_TYPES_H
62#define FONTLINK_DEFAULT_CHAR 0x30FB
71#define MAX_FONTLINK_CACHE 128
87 L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink",
114 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\FontAssoc\\Associated DefaultFonts",
152 L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\FontAssoc\\Associated Charset",
207 if (pChain->pszzFontLink)
255 pCache->
LogFont = pChain->LogFont;
256 pCache->
Chain = *pChain;
303#define MAX_FONT_LOOKUP_CACHE 64
307#ifndef _TMPF_VARIABLE_PITCH
308 #define _TMPF_VARIABLE_PITCH TMPF_FIXED_PITCH
312#define EMUBOLD_NEEDED(original, request) \
313 (((request) != FW_DONTCARE) && ((request) - (original) >= FW_BOLD - FW_MEDIUM))
320#define gmxWorldToDeviceDefault gmxWorldToPageDefault
326 RTL_CONSTANT_STRING(
L"\\REGISTRY\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts");
335#define ASSERT_FREETYPE_LOCK_HELD() \
336 ASSERT(g_FreeTypeLock->Owner == KeGetCurrentThread())
338#define ASSERT_FREETYPE_LOCK_NOT_HELD() \
339 ASSERT(g_FreeTypeLock->Owner != KeGetCurrentThread())
341#define IntLockFreeType() \
343 ASSERT_FREETYPE_LOCK_NOT_HELD(); \
344 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(g_FreeTypeLock); \
347#define IntUnLockFreeType() \
349 ASSERT_FREETYPE_LOCK_HELD(); \
350 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(g_FreeTypeLock); \
353#define MAX_FONT_CACHE 256
385#define MAXTCIINDEX 32
469 if (pFontLink->bIgnore)
471 if (pFontLink->SharedFace)
477 pFontLink->bIgnore =
TRUE;
481 pFontLink->SharedFace = SharedFace;
499 Cache->OutlineRequiredSize = 0;
533 Ptr->IsMapping = IsMapping;
534 DPRINT(
"Creating SharedMem for %p (%i, %p)\n",
Buffer, IsMapping,
Ptr);
567 for (CurrentEntry = g_FontCacheListHead.
Flink;
568 CurrentEntry != &g_FontCacheListHead;
569 CurrentEntry = NextEntry)
572 NextEntry = CurrentEntry->
Flink;
586 if (
Ptr->RefCount <= 0)
590 if (
Ptr->RefCount == 0)
592 DPRINT(
"Releasing SharedMem for %p (%i, %p)\n",
Ptr->Buffer,
Ptr->IsMapping,
Ptr);
616 if (
Ptr->RefCount <= 0)
620 if (
Ptr->RefCount == 0)
622 DPRINT(
"Releasing SharedFace for %s\n",
Ptr->Face->family_name ?
Ptr->Face->family_name :
"<NULL>");
665 pt->x.fract = (
vec->
x & 0x3f) << 10;
666 pt->x.fract |= ((
pt->x.fract >> 6) | (
pt->x.fract >> 12));
668 pt->y.fract = (
vec->
y & 0x3f) << 10;
669 pt->y.fract |= ((
pt->y.fract >> 6) | (
pt->y.fract >> 12));
685 const char *style_name;
704 style_name =
"<invalid>";
707 DPRINT(
"family_name '%s', style_name '%s', FaceName '%wZ', StyleName '%wZ', FontGDI %p, "
708 "FontObj %p, iUnique %lu, SharedFace %p, Face %p, CharSet %u, Filename '%S'\n",
727 DPRINT(
"## DumpFontList(%p)\n", Head);
732 DumpFontEntry(CurrentEntry);
738 DPRINT(
"%wZ,%u -> %wZ,%u\n",
751 DPRINT(
"## DumpFontSubstList\n");
753 for (pListEntry = pHead->
Flink;
755 pListEntry = pListEntry->
Flink)
758 DumpFontSubstEntry(pSubstEntry);
762VOID DumpPrivateFontList(
BOOL bDoLock)
784VOID DumpGlobalFontList(
BOOL bDoLock)
789 DumpFontList(&g_FontListHead);
797 DumpGlobalFontList(bDoLock);
798 DumpPrivateFontList(bDoLock);
815 BYTE InfoBuffer[128];
824 L"Microsoft\\Windows NT\\CurrentVersion\\"
840 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
853 InfoBuffer,
sizeof(InfoBuffer), &
Length);
867 DPRINT(
"RtlCreateUnicodeString failed\n");
873 InfoBuffer,
sizeof(InfoBuffer), &
Length);
889 DPRINT(
"RtlCreateUnicodeString failed\n");
931 DPRINT(
"ExAllocatePoolWithTag failed\n");
1017 DPRINT1(
"FT_Init_FreeType failed with error code 0x%x\n", ulError);
1023 DPRINT1(
"Fonts registry is empty.\n");
1057 pHead = &g_FontCacheListHead;
1066 pHead = &g_FontSubstListHead;
1075 pHead = &g_FontListHead;
1099 pmat->
xx = vecAngle.
x;
1100 pmat->
xy = -vecAngle.
y;
1101 pmat->
yx = -pmat->
xy;
1102 pmat->
yy = pmat->
xx;
1138 BYTE RequestedCharSet,
1149 for (pListEntry = pHead->
Flink;
1150 pListEntry != pHead;
1151 pListEntry = pListEntry->
Flink)
1198 UINT RecurseCount = 5;
1209 while (RecurseCount-- > 0)
1212 &OutputNameW, &InputNameW,
1238 pChain->pBaseTextObj = pTextObj;
1239 pChain->pDefFace =
face;
1245 L"tahoma.ttf,Tahoma\0"
1246 L"msgothic.ttc,MS UI Gothic\0"
1247 L"mingliu.ttc,PMingLiU\0"
1248 L"simsun.ttc,SimSun\0"
1249 L"gulim.ttc,Gulim\0"
1253 L"cour.ttf,Courier New\0"
1254 L"msgothic.ttc,MS Gothic\0"
1255 L"mingliu.ttc,MingLiU\0"
1256 L"simsun.ttc,NSimSun\0"
1257 L"gulim.ttc,GulimChe\0"
1268 WCHAR szzFontLink[512];
1272 ASSERT(pLF->lfFaceName[0]);
1276 L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink\\SystemLink",
1282 cbData =
sizeof(szzFontLink);
1289 cbData =
sizeof(szzFontLink);
1309 pszzFontLink =
NULL;
1346 pChain->pszzFontLink = pszzFontLink;
1417 PTEXTOBJ pTextObj = pChain->pBaseTextObj;
1444 default: bFixCharSet =
TRUE;
break;
1454 *pChain = pLinkCache->
Chain;
1460 pChain->LogFont = lfBase;
1467 pszLink = pChain->pszzFontLink;
1470 DPRINT(
"pszLink: '%S'\n", pszLink);
1474 pszLink +=
wcslen(pszLink) + 1;
1483 DPRINT(
"szEntry: '%S'\n", szEntry);
1505 BYTE *DirInfoBuffer;
1547 if (DirInfoBuffer ==
NULL)
1565 Status = ZwQueryDirectoryFile(
1614 bRestartScan =
FALSE;
1630 if (CodePageRange1 == 0)
1633 for (BitIndex = 0; BitIndex <
MAXTCIINDEX; ++BitIndex)
1635 if (CodePageRange1 & (1 << BitIndex))
1638 if ((nIndex >= 0) && (nCount == (
UINT)nIndex))
1650#define PX2PT(pixels) FT_MulDiv((pixels), 72, 96)
1678 Face = SharedFace->
Face;
1825 if (pOS2 && os2_version >= 1)
1832 for (BitIndex = 0; BitIndex <
MAXTCIINDEX; ++BitIndex)
1834 if (os2_ulCodePageRange1 & (1 << BitIndex))
1839 if ((CharSetIndex == -1 && CharSetCount == 0) ||
1840 CharSetIndex == CharSetCount)
1865 DPRINT(
"Font loaded: %s (%s)\n",
1872 Entry->Font = FontGDI;
1873 Entry->NotEnum = (Characteristics & FR_NOT_ENUM);
1876 if (Characteristics & FR_PRIVATE)
1891 if (CharSetIndex == -1)
1896 if (
Entry->StyleName.Length)
1897 NameLength +=
Entry->StyleName.Length +
sizeof(
WCHAR);
1925 *pValueName = NewString;
1927 if (
Entry->StyleName.Length)
1933 for (
i = 1;
i < CharSetCount; ++
i)
1957 ((FontIndex == -1) ? 0 : FontIndex), &Face);
1960 if (
Error == FT_Err_Unknown_File_Format)
1961 DPRINT1(
"Unknown font file format\n");
1963 DPRINT1(
"Error reading font (error code: %d)\n",
Error);
1976 DPRINT1(
"SharedFace_Create failed\n");
1981 if (FontIndex == -1)
2027 RtlInitEmptyUnicodeString(&PathName, pszBuffer,
Length);
2050 DPRINT1(
"Could not load font file: %wZ\n", &PathName);
2059 DPRINT1(
"ObReferenceObjectByHandle failed.\n");
2072 DPRINT1(
"Could not map file: %wZ\n", &PathName);
2083 DPRINT1(
"Could not map file: %wZ\n", &PathName);
2093 LoadFont.Characteristics = Characteristics;
2121 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
2144 RtlInitEmptyUnicodeString(&NewString, pszBuffer,
Length);
2170 pFileName = PathName.
Buffer;
2211 cchFile =
wcslen(pchFile);
2222 ustrPathName.
Buffer = pchFile;
2229 pchFile += cchFile + 1;
2244 ULONG dwIndex, NameLength, ValueSize, dwType;
2253 ValueSize =
sizeof(szValue);
2283 PWSTR pszBuffer, pszFileTitle;
2295 RtlInitEmptyUnicodeString(&PathName, pszBuffer,
Length);
2306 pszFileTitle = PathName.
Buffer;
2310 if (!pszFileTitle || !*pszFileTitle)
2318 for (CurrentEntry = g_FontListHead.
Flink;
2319 CurrentEntry != &g_FontListHead;
2320 CurrentEntry = NextEntry)
2323 NextEntry = CurrentEntry->
Flink;
2325 FontGDI = FontEntry->
Font;
2356 cchFile =
wcslen(pchFile);
2367 ustrPathName.
Buffer = pchFile;
2373 pchFile += cchFile + 1;
2409 &KeyFullInfo,
sizeof(KeyFullInfo), &
Length);
2422 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2428 for (
i = 0;
i < KeyFullInfo.
Values; ++
i)
2432 InfoBuffer, InfoSize, &
Length);
2441 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2446 InfoBuffer, InfoSize, &
Length);
2461 DPRINT1(
"RtlCreateUnicodeString failed\n");
2467 InfoBuffer, InfoSize, &
Length);
2476 DPRINT1(
"ExAllocatePoolWithTag failed\n");
2481 InfoBuffer, InfoSize, &
Length);
2501 L"\\SystemRoot\\Fonts\\%s", pchPath);
2528 return (KeyFullInfo.
Values != 0 && nFontCount != 0);
2549 LoadFont.Characteristics = FR_PRIVATE | FR_NOT_ENUM;
2563 if (EntryCollection)
2573 Ret = EntryCollection->
Handle;
2633 if (CurrentEntry->
Handle == hMMFont)
2635 EntryCollection = CurrentEntry;
2643 if (EntryCollection)
2660 DPRINT(
"IntGdiCleanupPrivateFontsForProcess()\n");
2663 EntryCollection =
NULL;
2676 if (EntryCollection)
2753 if (lf->lfEscapement != lf->lfOrientation)
2846 int Ascent, Descent;
2903 - ((Ascent + Descent)
2905 YScale) + 32) >> 6);
3094 Names->OtmSize = OtmSize;
3111 Otm->otmpFamilyName = (
LPSTR)(pb - (
BYTE*) Otm);
3115 Otm->otmpFaceName = (
LPSTR)(pb - (
BYTE*) Otm);
3119 Otm->otmpStyleName = (
LPSTR)(pb - (
BYTE*) Otm);
3123 Otm->otmpFullName = (
LPSTR)(pb - (
BYTE*) Otm);
3174 if (
Size == 0 &&
Cache->OutlineRequiredSize > 0)
3177 return Cache->OutlineRequiredSize;
3192 return Cache->OutlineRequiredSize;
3197 if (Size < Cache->OutlineRequiredSize)
3199 DPRINT1(
"Size %u < OutlineRequiredSize %u\n",
Size,
3200 Cache->OutlineRequiredSize);
3219 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
3228 DPRINT1(
"Can't find HHEA table - not TT font?\n");
3249#define SCALE_X(value) ((FT_MulFix((value), XScale) + 32) >> 6)
3250#define SCALE_Y(value) ((FT_MulFix((value), YScale) + 32) >> 6)
3299 return Cache->OutlineRequiredSize;
3307 INT i,
Count, BestIndex, Score, BestScore;
3338 if (
Name.name_id != NameID)
3349 (
Name.string[0] == 0 &&
Name.string[1] == 0))
3373 if (Score > BestScore)
3432 if (!
Cache->FontFamily.Buffer)
3438 if (!
Cache->FullName.Buffer)
3483 Lf = &
Info->EnumLogFontEx.elfLogFont;
3496 Ntm = &
Info->NewTextMetricEx.ntmTm;
3541 sizeof(
Info->EnumLogFontEx.elfFullName),
3545 StyleW.
Buffer =
Info->EnumLogFontEx.elfStyle;
3586 if (
fs.fsCsb[0] == 0)
3593 case FT_ENCODING_UNICODE:
3594 case FT_ENCODING_APPLE_ROMAN:
3597 case FT_ENCODING_MS_SYMBOL:
3609 if (
fs.fsCsb[0] & fs0)
3621 DPRINT1(
"Unknown elfscript for bit %u\n",
i);
3626 Info->NewTextMetricEx.ntmFontSig =
fs;
3646 FontGDI = CurrentEntry->
Font;
3772 const DWORD *pdw = pv;
3788 DWORD dwHash = pCache->dwHash;
3792 for (CurrentEntry = g_FontCacheListHead.
Flink;
3793 CurrentEntry != &g_FontCacheListHead;
3794 CurrentEntry = CurrentEntry->
Flink)
3797 if (FontEntry->
dwHash == dwHash &&
3799 FontEntry->
Hashed.
Face == pCache->Hashed.Face &&
3810 if (CurrentEntry == &g_FontCacheListHead)
3836 DPRINT1(
"Failure caching glyph.\n");
3844 DPRINT1(
"Failure rendering glyph.\n");
3851 DPRINT1(
"Alloc failure caching glyph.\n");
3858 if (FT_Bitmap_Convert_ReactOS_Hack(GlyphSlot->library, &BitmapGlyph->
bitmap,
3859 &AlignedBitmap, 4,
TRUE))
3861 DPRINT1(
"Conversion failed\n");
3869 BitmapGlyph->
bitmap = AlignedBitmap;
3890 int needed = 0,
point = 0, contour, first_pt;
3891 unsigned int pph_start, cpfx;
3894 for (contour = 0; contour <
outline->n_contours; contour++)
3911 needed +=
sizeof(*pph);
3913 while (point <= outline->contours[contour])
3925 }
while (point <= outline->contours[contour] &&
3937 else if (point <= outline->contours[contour] &&
3951 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
3954 pph->
cb = needed - pph_start;
3977 int contour,
point = 0, first_pt;
3982 unsigned int needed = 0;
3984 for (contour = 0; contour <
outline->n_contours; contour++)
3994 needed +=
sizeof(*pph);
3996 while (point <= outline->contours[contour])
4023 cubic_control[0].
x >>= 1;
4024 cubic_control[0].
y >>= 1;
4027 cubic_control[3] =
outline->points[first_pt];
4035 cubic_control[3].
x >>= 1;
4036 cubic_control[3].
y >>= 1;
4041 cubic_control[1].
x = (2 *
outline->points[
point].x + 1) / 3;
4042 cubic_control[1].
y = (2 *
outline->points[
point].y + 1) / 3;
4043 cubic_control[2] = cubic_control[1];
4044 cubic_control[1].
x += (cubic_control[0].
x + 1) / 3;
4045 cubic_control[1].
y += (cubic_control[0].
y + 1) / 3;
4046 cubic_control[2].
x += (cubic_control[3].
x + 1) / 3;
4047 cubic_control[2].
y += (cubic_control[3].
y + 1) / 3;
4057 }
while (point <= outline->contours[contour] &&
4063 if (point <= outline->contours[contour] &&
4075 needed +=
sizeof(*ppc) + (cpfx - 1) *
sizeof(
POINTFX);
4078 pph->
cb = needed - pph_start;
4092 LONG Ascent, Descent, Sum, EmHeight;
4094 lfWidth =
abs(lfWidth);
4099 DPRINT(
"lfHeight and lfWidth are zero.\n");
4122 if (!pOS2 || !pHori)
4127 DPRINT1(
"%s: Failed to request font size.\n",
face->family_name);
4150#define FM_SEL_USE_TYPO_METRICS 0x80
4159 Sum = Ascent + Descent;
4172 else if (lfHeight < 0)
4188#undef FM_SEL_USE_TYPO_METRICS
4195 EmHeight =
max(EmHeight, 1);
4216 req.
height = (EmHeight << 6);
4239 DPRINT(
"WARNING: No charmap selected!\n");
4240 DPRINT(
"This font face has %d charmaps\n",
face->num_charmaps);
4243 for (
n = 0;
n <
face->num_charmaps;
n++)
4245 charmap =
face->charmaps[
n];
4246 if (charmap->
encoding == FT_ENCODING_UNICODE)
4254 for (
n = 0;
n <
face->num_charmaps;
n++)
4256 charmap =
face->charmaps[
n];
4266 for (
n = 0;
n <
face->num_charmaps;
n++)
4268 charmap =
face->charmaps[
n];
4269 if (charmap->
encoding == FT_ENCODING_MS_SYMBOL)
4276 if (!found &&
face->num_charmaps > 0)
4278 found =
face->charmaps[0];
4282 DPRINT1(
"WARNING: Could not find desired charmap!\n");
4290 DPRINT1(
"WARNING: Could not set the charmap!\n");
4316 if (glyph < 0x100) glyph += 0xf000;
4355 DPRINT1(
"%S, %p, %p\n", pChain->LogFont.lfFaceName, pChain->pBaseTextObj, pChain->pDefFace);
4357 Head = &pChain->FontLinkList;
4361 DPRINT1(
"FontLink #%d: %p, %d, %S, %p, %p\n",
4388 DPRINT(
"code: 0x%08X, index: 0x%08X, fCodeAsIndex:%d\n",
code,
index, fCodeAsIndex);
4389 pCache->Hashed.Face = *pFace = pChain->pDefFace;
4400 Head = &pChain->FontLinkList;
4414 pCache->Hashed.Face = *pFace =
face;
4423 pCache->Hashed.Face = *pFace = pChain->pDefFace;
4440 BOOL bIgnoreRotation)
4467 cjBuf, pvBuf, pmat2);
4469 pdcattr =
dc->pdcattr;
4537 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
4545 if (aveWidth && potm)
4574 DPRINT(
"Advance = %d, lsb = %d, bbx = %d\n",adv, lsb, bbx);
4591 needsTransform =
TRUE;
4605 needsTransform =
TRUE;
4613 DPRINT(
"Rotation Trans!\n");
4616 needsTransform =
TRUE;
4623 DPRINT(
"MAT2 Matrix Trans!\n");
4629 needsTransform =
TRUE;
4634 if (!needsTransform)
4636 DPRINT(
"No Need to be Transformed!\n");
4647 for (xc = 0; xc < 2; xc++)
4649 for (yc = 0; yc < 2; yc++)
4657 if (xc == 0 && yc == 0)
4688 DPRINT(
"CX %d CY %d BBX %u BBY %u GOX %d GOY %d\n",
4697 DPRINT(
"GGO_METRICS Exit!\n");
4714 pitch = ((
width + 31) >> 5) << 2;
4717 if (!pvBuf || !
cjBuf)
break;
4742 ft_bitmap.
pitch = pitch;
4744 ft_bitmap.
buffer = pvBuf;
4771 unsigned int mult,
row, col;
4776 pitch = (
width + 3) / 4 * 4;
4779 if (!pvBuf || !
cjBuf)
break;
4793 for (
x = 0; (
UINT)
x < pitch;
x++)
4795 if (x < ft_face->glyph->bitmap.width)
4796 dst[
x] = (
src[
x / 8] & (1 << ( (7 - (
x % 8))))) ? 0xff : 0;
4809 ft_bitmap.
pitch = pitch;
4811 ft_bitmap.
buffer = pvBuf;
4838 for (col = 0; col <
width; col++,
ptr++)
4840 *
ptr = (((
int)*
ptr) * mult + 128) / 256;
4866 if (!pvBuf || !
cjBuf)
4886 if (needsTransform && pvBuf)
4894 if (!pvBuf || !
cjBuf)
4908 DPRINT(
"ftGdiGetGlyphOutline END and needed %lu\n", needed);
4938 DPRINT1(
"WARNING: Failed to load and render glyph! [index: %d]\n",
Cache->Hashed.GlyphIndex);
4942 glyph =
Cache->Hashed.Face->glyph;
4944 if (
Cache->Hashed.Aspect.Emu.Bold)
4947 if (
Cache->Hashed.Aspect.Emu.Italic)
4953 DPRINT1(
"Failed to render glyph! [index: %d]\n",
Cache->Hashed.GlyphIndex);
4973 INT glyph_index,
i, previous, nTenthsOfDegrees;
4976 BOOL use_kerning, bVerticalWriting;
4977 LONG ascender, descender;
4982 FontGDI =
ObjToGDI(TextObj->Font, FONT);
4990 plf = &TextObj->logfont.elfEnumLogfontEx.elfLogFont;
4998 bVerticalWriting = ((nTenthsOfDegrees == 90 * 10) || (nTenthsOfDegrees == 270 * 10));
5032 Cache.Hashed.GlyphIndex = glyph_index;
5039 if (use_kerning && previous && glyph_index)
5043 TotalWidth64 += delta.
x;
5048 if (((TotalWidth64 + 32) >> 6) <= MaxExtent &&
NULL != Fit)
5054 Dx[
i] = (TotalWidth64 + 32) >> 6;
5057 previous = glyph_index;
5064 if (bVerticalWriting)
5066 Size->cx = ascender + descender;
5067 Size->cy = (TotalWidth64 + 32) >> 6;
5071 Size->cx = (TotalWidth64 + 32) >> 6;
5072 Size->cy = ascender + descender;
5100 pdcattr = Dc->pdcattr;
5136 DPRINT(
"Csb 1=%x 0=%x\n",
fs.fsCsb[1],
fs.fsCsb[0]);
5137 if (
fs.fsCsb[0] == 0)
5143 case FT_ENCODING_UNICODE:
5144 case FT_ENCODING_APPLE_ROMAN:
5147 case FT_ENCODING_MS_SYMBOL:
5174 if (
fs.fsCsb[0] & fs0)
5184 DPRINT1(
"TCI failing on %x\n", fs0);
5198 DWORD num_ranges = 0;
5203 DPRINT1(
"FIXME: No charmap selected! This is a BUG!\n");
5207 if (
face->charmap->encoding == FT_ENCODING_UNICODE)
5210 FT_ULong char_code, char_code_prev;
5214 DPRINT(
"Face encoding FT_ENCODING_UNICODE, number of glyphs %ld, first glyph %u, first char %04lx\n",
5215 face->num_glyphs, glyph_code, char_code);
5217 if (!glyph_code)
return 0;
5221 glyphset->ranges[0].wcLow = (
USHORT)char_code;
5222 glyphset->ranges[0].cGlyphs = 0;
5223 glyphset->cGlyphsSupported = 0;
5229 if (char_code < char_code_prev)
5231 DPRINT1(
"Expected increasing char code from FT_Get_Next_Char\n");
5234 if (char_code - char_code_prev > 1)
5239 glyphset->ranges[num_ranges - 1].wcLow = (
USHORT)char_code;
5240 glyphset->ranges[num_ranges - 1].cGlyphs = 1;
5241 glyphset->cGlyphsSupported++;
5246 glyphset->ranges[num_ranges - 1].cGlyphs++;
5247 glyphset->cGlyphsSupported++;
5249 char_code_prev = char_code;
5254 DPRINT1(
"Encoding %i not supported\n",
face->charmap->encoding);
5256 size =
sizeof(GLYPHSET) +
sizeof(WCRANGE) * (num_ranges - 1);
5259 glyphset->cbThis =
size;
5260 glyphset->cRanges = num_ranges;
5261 glyphset->flAccel = 0;
5297 pdcattr =
dc->pdcattr;
5299 if (
NULL != TextObj)
5330 DPRINT1(
"Can't find OS/2 table - not TT font?\n");
5334 if (!pHori &&
Error)
5336 DPRINT1(
"Can't find HHEA table - not TT font?\n");
5383 (
Table << 8 & 0xFF0000);
5405#define GOT_PENALTY(name, value) Penalty += (value)
5411 const char * style_name)
5577 fNeedScaling =
TRUE;
5586 fNeedScaling =
TRUE;
5632 fNeedScaling =
TRUE;
5741 DPRINT(
"WARNING: Penalty:%ld < 200: RequestedNameW:%ls, "
5742 "ActualNameW:%ls, lfCharSet:%d, lfWeight:%ld, "
5743 "tmCharSet:%d, tmWeight:%ld\n",
5764 UINT OtmSize, OldOtmSize = 0;
5781 FontGDI = CurrentEntry->
Font;
5788 if (OtmSize > OldOtmSize)
5806 OldOtmSize = OtmSize;
5809 if (*MatchPenalty ==
MAXULONG || Penalty < *MatchPenalty)
5811 *FontObj =
GDIToObj(FontGDI, FONT);
5812 *MatchPenalty = Penalty;
5914 TextObj->
Font = pFontObj;
5997 pEntry->SharedFace = SharedFace;
5999 pEntry->pFontObj = pFontObj;
6014 pLogFont = &LogFont;
6017 LOGFONTW SubstitutedLogFont = *pLogFont;
6019 DPRINT(
"Font '%S,%u' is substituted by '%S,%u'.\n",
6031 ULONG MatchPenalty = 0xFFFFFFFF;
6046 DPRINT1(
"Request font %S not found, no fonts loaded at all\n", pLogFont->
lfFaceName);
6073 if (
NULL == TextObj)
6131 DPRINT(
"ZwOpenFile() failed (Status = 0x%lx)\n",
Status);
6139 DPRINT(
"ZwQueryObject() failed (Status = %lx)\n",
Status);
6195 const ULONG MaxFamInfo = 64;
6200 DPRINT(
"IntGdiGetFontResourceInfo: dwType == %lu\n", dwType);
6221 if (!NameInfo1 || !NameInfo2 || !FamInfo)
6237 for (ListEntry = g_FontListHead.
Flink; ListEntry != &g_FontListHead;
6238 ListEntry = ListEntry->
Flink)
6266 if (
Count >= MaxFamInfo)
6276 if (
Count == 0 && dwType != 5)
6312 Size +=
wcslen(FamInfo[
i].EnumLogFontEx.elfLogFont.lfFaceName);
6313 if (FamInfo[
i].EnumLogFontEx.elfStyle[0] &&
6314 _wcsicmp(FamInfo[
i].EnumLogFontEx.elfStyle,
L"Regular") != 0)
6316 Size += 1 +
wcslen(FamInfo[
i].EnumLogFontEx.elfStyle);
6461 Info->dwUnknown = -1;
6478 FT_UInt previous_index = 0, glyph_index = 0;
6488 if (previous_index && glyph_index)
6492 if (pKerningPair && cPairs)
6494 pKerningPair[
i].
wFirst = char_previous;
6495 pKerningPair[
i].
wSecond = char_code;
6498 if (
i == cPairs)
break;
6502 previous_index = glyph_index;
6503 char_previous = char_code;
6524 LONG AvailCount = 0;
6530 InfoCount, &g_FontListHead))
6568 LONG GotCount, AvailCount, SafeInfoCount;
6571 if (UnsafeLogFont ==
NULL || UnsafeInfo ==
NULL || UnsafeInfoCount ==
NULL)
6596 if (SafeInfoCount <= 0)
6619 GotCount =
min(AvailCount, SafeInfoCount);
6620 SafeInfoCount = AvailCount;
6697 (fuOptions & ETO_GLYPH_INDEX));
6698 Cache->Hashed.GlyphIndex = glyph_index;
6705 if (use_kerning && previous && glyph_index)
6719 vec.
x = (Dx[2 *
i + 0] << 6);
6720 vec.
y = (Dx[2 *
i + 1] << 6);
6728 vec.
x = (Dx[
i] << 6);
6736 previous = glyph_index;
6769 LONGLONG X64, Y64, RealXStart64, RealYStart64, DeltaX64, DeltaY64;
6771 RECTL DestRect, MaskRect;
6782 BOOL use_kerning, bResult, DoBreak;
6787 const DWORD del = 0x7f, nbsp = 0xa0;
6810 if (!
dc->dclevel.pSurface)
6817 pdcattr =
dc->pdcattr;
6836 psurf =
dc->dclevel.pSurface;
6861 &
dc->eboBackground.BrushObject);
6862 fuOptions &= ~ETO_OPAQUE;
6873 if (TextObj ==
NULL)
6879 FontObj = TextObj->
Font;
6919 bNoTransform = ((
mat.xy == 0) && (
mat.yx == 0) &&
6920 (
mat.xx == (1 << 16)) && (
mat.yy == (1 << 16)));
6924 vecAscent64.
y = (FontGDI->
tmAscent << 6);
6931#define VALIGN_MASK (TA_TOP | TA_BASELINE | TA_BOTTOM)
6938 RealXStart64 -= vecDescent64.
x;
6939 RealYStart64 += vecDescent64.
y;
6943 RealXStart64 -= vecAscent64.
x;
6944 RealYStart64 += vecAscent64.
y;
6954 fuOptions, bNoTransform, &Chain))
6965 RealXStart64 -= DeltaX64 / 2;
6966 RealYStart64 -= DeltaY64 / 2;
6970 RealXStart64 -= DeltaX64;
6971 RealYStart64 -= DeltaY64;
6977 INT X0 = (RealXStart64 + vecAscent64.
x + 32) >> 6;
6978 INT Y0 = (RealYStart64 - vecAscent64.
y + 32) >> 6;
6979 INT DX = (DeltaX64 >> 6);
6980 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
6982 INT CY = (vecAscent64.
y - vecDescent64.
y + 32) >> 6;
6987 INT DY = (DeltaY64 >> 6);
6988 INT X1 = ((RealXStart64 + vecDescent64.
x + 32) >> 6);
6989 INT Y1 = ((RealYStart64 - vecDescent64.
y + 32) >> 6);
6993 { X0 +
DX, Y0 + DY },
6994 { X1 +
DX, Y1 + DY },
7031 (fuOptions & ETO_GLYPH_INDEX));
7032 Cache.Hashed.GlyphIndex = glyph_index;
7042 if (use_kerning && previous && glyph_index &&
NULL == Dx)
7049 DPRINT(
"X64, Y64: %I64d, %I64d\n", X64, Y64);
7056 if (ch0 >
L' ' && ch0 !=
del && ch0 != nbsp && glyphSize.
cx == 0)
7058 DPRINT1(
"WARNING: family_name '%s' WChar 0x%04x has a glyphSize.cx of zero\n",
7059 face->family_name, ch0);
7065 (ch0 ==
L' ' || ch0 == nbsp))
7071 glyphSize.
cx = spaceWidth.
cx;
7072 realglyph->
left = 0;
7078 DestRect.
left = ((X64 + 32) >> 6) + realglyph->
left;
7080 DestRect.
top = ((Y64 + 32) >> 6) - realglyph->
top;
7084 if ((glyphSize.
cx != 0) && (glyphSize.
cy != 0))
7096 DPRINT1(
"WARNING: EngCreateBitmap() failed!\n");
7105 DPRINT1(
"WARNING: EngLockSurface() failed!\n");
7138 &
dc->eboText.BrushObject,
7141 DPRINT1(
"Failed to MaskBlt a glyph!\n");
7158 vec.
x = (Dx[2 *
i + 0] << 6);
7159 vec.
y = (Dx[2 *
i + 1] << 6);
7167 vec.
x = (Dx[
i] << 6);
7175 DPRINT(
"New X64, New Y64: %I64d, %I64d\n", X64, Y64);
7177 previous = glyph_index;
7189 DeltaX64 = X64 - RealXStart64;
7190 DeltaY64 = Y64 - RealYStart64;
7192 if (!
face->units_per_EM)
7200 face->underline_position *
face->size->metrics.y_ppem /
face->units_per_EM;
7202 face->underline_thickness *
face->size->metrics.y_ppem /
face->units_per_EM;
7212 vecB64.
y = vecA64.
y + (thickness << 6);
7216 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
7217 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
7218 INT DX = (DeltaX64 >> 6);
7219 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
7221 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
7226 INT DY = (DeltaY64 >> 6);
7227 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
7228 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
7232 { X0 +
DX, Y0 + DY },
7233 { X1 +
DX, Y1 + DY },
7244 vecA64.
y = -(FontGDI->
tmAscent << 6) / 3;
7246 vecB64.
y = vecA64.
y + (thickness << 6);
7250 INT X0 = (RealXStart64 - vecA64.
x + 32) >> 6;
7251 INT Y0 = (RealYStart64 + vecA64.
y + 32) >> 6;
7252 INT DX = (DeltaX64 >> 6);
7253 if (
Cache.Hashed.matTransform.xy == 0 &&
Cache.Hashed.matTransform.yx == 0)
7255 INT CY = (vecB64.
y - vecA64.
y + 32) >> 6;
7260 INT DY = (DeltaY64 >> 6);
7261 INT X1 = X0 + ((vecA64.
x - vecB64.
x + 32) >> 6);
7262 INT Y1 = Y0 + ((vecB64.
y - vecA64.
y + 32) >> 6);
7266 { X0 +
DX, Y0 + DY },
7267 { X1 +
DX, Y1 + DY },
7286 if (TextObj !=
NULL)
7333#define STACK_TEXT_BUFFER_SIZE 512
7376 if (
BufSize >
sizeof(LocalBuffer))
7422 SafeRect = *UnsafeRect;
7448 if (
Buffer != LocalBuffer)
7525 if (SafeBuff ==
NULL)
7545 pdcattr =
dc->pdcattr;
7551 if (TextObj ==
NULL)
7569 charmap =
face->charmaps[
i];
7579 DPRINT1(
"WARNING: Could not find desired charmap!\n");
7601 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
7615 left = (
INT)
face->glyph->metrics.horiBearingX & -64;
7616 right = (
INT)((
face->glyph->metrics.horiBearingX +
face->glyph->metrics.width) + 63) & -64;
7617 adv = (
face->glyph->advance.x + 32) >> 6;
7631 SafeBuffF[
i - FirstChar].
abcfC = (
FLOAT) (adv - lsb - bbx);
7635 SafeBuff[
i - FirstChar].
abcA = lsb;
7636 SafeBuff[
i - FirstChar].
abcB = bbx;
7637 SafeBuff[
i - FirstChar].
abcC = adv - lsb - bbx;
7655 DPRINT(
"NtGdiGetCharABCWidths Worked!\n");
7716 if (!
fl) SafeBuffF = (
PFLOAT) SafeBuff;
7717 if (SafeBuff ==
NULL)
7736 pdcattr =
dc->pdcattr;
7741 if (TextObj ==
NULL)
7758 charmap =
face->charmaps[
i];
7768 DPRINT1(
"WARNING: Could not find desired charmap!\n");
7790 for (
i = FirstChar;
i < FirstChar+
Count;
i++)
7799 SafeBuffF[
i - FirstChar] = (
FLOAT) ((
face->glyph->advance.x + 32) >> 6);
7801 SafeBuff[
i - FirstChar] = (
face->glyph->advance.x + 32) >> 6;
7840 WCHAR DefChar = 0xffff;
7855 if (!UnSafepwc && !UnSafepgi && cwc > 0)
7857 DPRINT1(
"!UnSafepwc && !UnSafepgi && cwc > 0\n");
7861 if (!UnSafepwc != !UnSafepgi)
7863 DPRINT1(
"UnSafepwc == %p, UnSafepgi = %p\n", UnSafepwc, UnSafepgi);
7874 pdcattr =
dc->pdcattr;
7888 if (!UnSafepwc && !UnSafepgi)
7903 DPRINT1(
"ExAllocatePoolWithTag\n");
7948 pwcSize = cwc *
sizeof(
WCHAR);
7976 for (
i = 0;
i < cwc;
i++)
7998 if (Safepwc !=
NULL)
NTSTATUS NTAPI MmUnmapViewInSystemSpace(IN PVOID MappedBase)
#define FILE_DIRECTORY_FILE
static VOID del(LPHIST_ENTRY item)
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
FORCEINLINE PMATRIX DC_pmxWorldToDevice(PDC pdc)
static BOOLEAN IntLPtoDP(DC *pdc, PPOINTL ppt, UINT count)
#define STATUS_INVALID_HANDLE
VOID FASTCALL DC_vPrepareDCsForBlit(PDC pdcDest, const RECT *rcDest, PDC pdcSrc, const RECT *rcSrc)
VOID FASTCALL DC_vFinishBlit(PDC pdc1, PDC pdc2)
FORCEINLINE VOID DC_UnlockDc(PDC pdc)
VOID FASTCALL DC_vUpdateTextBrush(PDC pdc)
VOID FASTCALL DC_vUpdateBackgroundBrush(PDC pdc)
FORCEINLINE PDC DC_LockDc(HDC hdc)
#define ERROR_NOT_ENOUGH_MEMORY
#define NT_SUCCESS(StatCode)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
#define ERROR_INVALID_PARAMETER
#define ERROR_INVALID_HANDLE
#define TT_MS_ID_UNICODE_CS
#define TT_PLATFORM_MICROSOFT
#define TT_MS_ID_SYMBOL_CS
#define TT_PLATFORM_APPLE_UNICODE
static void cleanup(void)
WCHAR *WINAPI PathFindFileNameW(const WCHAR *path)
BOOL WINAPI PathIsRelativeW(const WCHAR *path)
_ACRTIMP int __cdecl _wtoi(const wchar_t *)
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
_ACRTIMP __msvcrt_long __cdecl labs(__msvcrt_long)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
static void CharSet(RTF_Info *info)
struct png_info_def *typedef unsigned char **typedef struct png_info_def *typedef struct png_info_def *typedef struct png_info_def *typedef unsigned char ** row
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
static const WCHAR Cleanup[]
#define GDIToObj(ClipGDI, Type)
#define ObjToGDI(ClipObj, Type)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
#define RemoveTailList(ListHead)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define ExInitializePushLock
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
struct _FileName FileName
#define FLOATOBJ_Set1(fo)
#define FLOATOBJ_Equal1(pf)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
BOOL LoadFont(LPWSTR lpCmdLine)
VOID IntDeleteRegFontEntries(_In_ PCWSTR pszFileName, _In_ DWORD dwFlags)
BOOL FASTCALL TextIntUpdateSize(PDC dc, PTEXTOBJ TextObj, PFONTGDI FontGDI, BOOL bDoLock)
BOOL FASTCALL TextIntGetTextExtentPoint(_In_ PDC dc, _In_ PTEXTOBJ TextObj, _In_reads_(Count) PCWCH String, _In_ INT Count, _In_ ULONG MaxExtent, _Out_ PINT Fit, _Out_writes_to_opt_(Count, *Fit) PINT Dx, _Out_ PSIZE Size, _In_ FLONG fl)
static PFONT_LOOKUP_CACHE FontLookUp_LookUp(const LOGFONTW *pLogFont)
static FT_UInt FASTCALL get_glyph_index_flagged(FT_Face face, FT_ULong code, BOOL fCodeAsIndex)
static BOOLEAN FASTCALL GetFontFamilyInfoForList(const LOGFONTW *LogFont, PFONTFAMILYINFO Info, LPCWSTR NominalName, LONG *pCount, LONG MaxCount, PLIST_ENTRY Head)
static UINT FontLink_Chain_FindGlyph(_Inout_ PFONTLINK_CHAIN pChain, _Out_ PFONT_CACHE_ENTRY pCache, _Inout_ FT_Face *pFace, _In_ UINT code, _In_ BOOL fCodeAsIndex)
DWORD FASTCALL ftGdiGetKerningPairs(PFONTGDI Font, DWORD cPairs, LPKERNINGPAIR pKerningPair)
#define ASSERT_FREETYPE_LOCK_NOT_HELD()
static const CHARSETINFO g_FontTci[MAXTCIINDEX]
__kernel_entry W32KAPI DWORD APIENTRY NtGdiGetGlyphIndicesW(_In_ HDC hdc, _In_reads_opt_(cwc) PCWCH pwc, _In_ INT cwc, _Out_writes_opt_(cwc) PWORD pgi, _In_ DWORD iMode)
static WCHAR s_szDefFontLinkFileName[MAX_PATH]
static VOID FontLink_Chain_Free(_Inout_ PFONTLINK_CHAIN pChain)
LONG FASTCALL IntGetFontFamilyInfo(HDC Dc, const LOGFONTW *SafeLogFont, PFONTFAMILYINFO SafeInfo, LONG InfoCount)
static PFAST_MUTEX g_FreeTypeLock
VOID FASTCALL IntGdiCleanupMemEntry(PFONT_ENTRY_MEM Head)
static UINT GetFontPenalty(const LOGFONTW *LogFont, const OUTLINETEXTMETRICW *Otm, const char *style_name)
static const UNICODE_STRING DosPathPrefix
static BOOL face_has_symbol_charmap(FT_Face ft_face)
static DWORD IntGetHash(IN LPCVOID pv, IN DWORD cdw)
static BOOL FASTCALL IntGetFullFileName(POBJECT_NAME_INFORMATION NameInfo, ULONG Size, PUNICODE_STRING FileName)
static FT_Error IntRequestFontSize(PDC dc, PFONTGDI FontGDI, LONG lfWidth, LONG lfHeight)
static INT FASTCALL IntGdiAddFontResourceSingle(_In_ PCUNICODE_STRING FileName, _In_ DWORD Characteristics, _In_ DWORD dwFlags)
static BOOL s_fFontLinkUseAnsi
static void SharedMem_AddRef(PSHARED_MEM Ptr)
BOOL FASTCALL ftGdiGetTextMetricsW(HDC hDC, PTMW_INTERNAL ptmwi)
BOOL FASTCALL IntGdiRemoveFontResource(_In_ PCUNICODE_STRING FileName, _In_ DWORD cFiles, _In_ DWORD dwFlags)
static INT FASTCALL IntGdiLoadFontByIndexFromMemory(PGDI_LOAD_FONT pLoadFont, FT_Long FontIndex)
static BOOL FontLink_PrepareFontInfo(_Inout_ PFONTLINK pFontLink)
static PSHARED_FACE SharedFace_Create(FT_Face Face, PSHARED_MEM Memory)
static VOID FASTCALL IntFontType(PFONTGDI Font)
BOOL APIENTRY GreExtTextOutW(_In_ HDC hDC, _In_ INT XStart, _In_ INT YStart, _In_ UINT fuOptions, _In_opt_ PRECTL lprc, _In_reads_opt_(Count) PCWCH String, _In_ INT Count, _In_opt_ const INT *Dx, _In_ DWORD dwCodePage)
FT_Library g_FreeTypeLibrary
BOOL FASTCALL IntGdiGetFontResourceInfo(PUNICODE_STRING FileName, PVOID pBuffer, DWORD *pdwBytes, DWORD dwType)
static PWCHAR g_ElfScripts[32]
static PSHARED_MEM SharedMem_Create(PBYTE Buffer, ULONG BufferSize, BOOL IsMapping)
static BOOL EqualFamilyInfo(const FONTFAMILYINFO *pInfo1, const FONTFAMILYINFO *pInfo2)
static DWORD s_chFontLinkDefaultChar
BYTE FASTCALL IntCharSetFromCodePage(UINT uCodePage)
static PFONTLINK FontLink_Create(_Inout_ PFONTLINK_CHAIN pChain, _In_ const LOGFONTW *plfBase, _In_ LPCWSTR pszLink)
static void FontLookUp_Add(const LOGFONTW *LogFont, PSHARED_FACE SharedFace, FONTOBJ *pFontObj)
static void IntPopulateFontGdi(PFONTGDI FontGdi, const FONTOBJ *pFontObj, const LOGFONTW *pLogFont)
const MATRIX gmxWorldToPageDefault
UNICODE_STRING g_FontRegPath
VOID FASTCALL IntGdiCleanupPrivateFontsForProcess(VOID)
static void SharedFaceCache_Init(PSHARED_FACE_CACHE Cache)
static unsigned int get_bezier_glyph_outline(FT_Outline *outline, unsigned int buflen, char *buf)
BOOL FASTCALL InitFontSupport(VOID)
static FT_UInt FASTCALL get_glyph_index_symbol(FT_Face ft_face, UINT glyph)
static __inline VOID FindBestFontFromList(FONTOBJ **FontObj, ULONG *MatchPenalty, const LOGFONTW *LogFont, const PLIST_ENTRY Head)
PSHARED_FACE IntRealizeFont(const LOGFONTW *pLogFont, _Inout_opt_ PTEXTOBJ TextObj)
static const WCHAR s_szzDefFixedFontLink[]
static void FontLookUp_Destroy(PFONT_LOOKUP_CACHE pCache)
BOOL FASTCALL IntLoadFontSubstList(PLIST_ENTRY pHead)
static UINT g_FontCacheNumEntries
static WCHAR s_szDefFontLinkFontName[MAX_PATH]
static BOOL IntGetTextDisposition(_Out_ LONGLONG *pX64, _Out_ LONGLONG *pY64, _In_reads_(Count) PCWCH String, _In_ INT Count, _In_opt_ const INT *Dx, _Inout_ PFONT_CACHE_ENTRY Cache, _In_ UINT fuOptions, _In_ BOOL bNoTransform, _Inout_ PFONTLINK_CHAIN pChain)
VOID FASTCALL IntLoadSystemFonts(VOID)
DWORD FASTCALL ftGetFontUnicodeRanges(PFONTGDI Font, PGLYPHSET glyphset)
#define GOT_PENALTY(name, value)
static void SharedFace_AddRef(PSHARED_FACE Ptr)
BOOL FASTCALL ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS lprs)
static VOID FASTCALL UnlinkFontMemCollection(PFONT_ENTRY_COLL_MEM Collection)
INT FASTCALL IntGdiAddFontResourceEx(_In_ PCUNICODE_STRING FileName, _In_ DWORD cFiles, _In_ DWORD Characteristics, _In_ DWORD dwFlags)
static NTSTATUS FontLink_LoadDefaultCharset(VOID)
struct _FONTLINK_CHAIN FONTLINK_CHAIN
static VOID FontLink_Chain_Dump(_In_ PFONTLINK_CHAIN pChain)
static void FASTCALL FontFamilyFillInfo(PFONTFAMILYINFO Info, LPCWSTR FaceName, LPCWSTR FullName, PFONTGDI FontGDI)
static __inline void FASTCALL IntInitFontNames(FONT_NAMES *Names, PSHARED_FACE SharedFace)
static void RemoveCacheEntries(FT_Face Face)
#define FM_SEL_USE_TYPO_METRICS
BOOL FASTCALL ftGdiRealizationInfo(PFONTGDI Font, PREALIZATION_INFO Info)
static NTSTATUS FontLink_Chain_LoadReg(_Inout_ PFONTLINK_CHAIN pChain, _Inout_ PLOGFONTW pLF)
VOID FASTCALL FreeFontSupport(VOID)
VOID FASTCALL IntEnableFontRendering(BOOL Enable)
#define IntUnLockFreeType()
static BOOL s_fFontLinkUseOem
static INT FASTCALL IntGdiLoadFontsFromMemory(PGDI_LOAD_FONT pLoadFont, PSHARED_FACE SharedFace, FT_Long FontIndex, INT CharSetIndex)
static NTSTATUS FontLink_Chain_Populate(_Inout_ PFONTLINK_CHAIN pChain)
static NTSTATUS FontLink_LoadSettings(VOID)
static BOOL FontLink_Chain_IsPopulated(const FONTLINK_CHAIN *pChain)
PBYTE FASTCALL IntStoreFontNames(_In_ const FONT_NAMES *Names, _Out_ OUTLINETEXTMETRICW *Otm)
static unsigned int get_native_glyph_outline(FT_Outline *outline, unsigned int buflen, char *buf)
static VOID FASTCALL IntMatrixFromMx(FT_Matrix *pmat, const MATRIX *pmx)
static VOID FASTCALL IntEscapeMatrix(FT_Matrix *pmat, LONG lfEscapement)
ULONG FASTCALL ftGdiGetGlyphOutline(PDC dc, WCHAR wch, UINT iFormat, LPGLYPHMETRICS pgm, ULONG cjBuf, PVOID pvBuf, const MAT2 *pmat2, BOOL bIgnoreRotation)
static BOOL FASTCALL IntGdiRemoveFontResourceSingle(_In_ PCUNICODE_STRING FileName, _In_ DWORD dwFlags)
static VOID FontLink_CleanupCache(VOID)
struct _FONTLINK_CHAIN * PFONTLINK_CHAIN
static BOOLEAN IntTranslateCharsetInfo(PDWORD Src, LPCHARSETINFO Cs, DWORD Flags)
static void FontLookUp_Cleanup(_In_ BOOL bDoLock, _Inout_opt_ PSHARED_FACE SharedFace)
static VOID IntAddNameFromFamInfo(LPWSTR psz, FONTFAMILYINFO *FamInfo)
static void FASTCALL FillTM(TEXTMETRICW *TM, PFONTGDI FontGDI, TT_OS2 *pOS2, TT_HoriHeader *pHori, FT_WinFNT_HeaderRec *pFNT)
#define IntLockFreeType()
static FT_BitmapGlyph IntFindGlyphCache(IN const FONT_CACHE_ENTRY *pCache)
static FT_BitmapGlyph IntGetBitmapGlyphWithCache(IN OUT PFONT_CACHE_ENTRY Cache, IN FT_GlyphSlot GlyphSlot)
#define STACK_TEXT_BUFFER_SIZE
static __inline void FTVectorToPOINTFX(FT_Vector *vec, POINTFX *pt)
NTSTATUS FASTCALL TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont)
static void SharedFaceCache_Release(PSHARED_FACE_CACHE Cache)
static BOOL g_RenderingEnabled
BOOL FASTCALL IntGdiRemoveFontMemResource(HANDLE hMMFont)
LONG NTAPI NtGdiGetFontFamilyInfo(_In_ HDC Dc, _In_ const LOGFONTW *UnsafeLogFont, _Out_ PFONTFAMILYINFO UnsafeInfo, _Inout_ PLONG UnsafeInfoCount)
UINT FASTCALL IntGetCharSet(INT nIndex, FT_ULong CodePageRange1)
static NTSTATUS FontLink_LoadDefaultFonts(VOID)
#define EMUBOLD_NEEDED(original, request)
static __inline VOID FASTCALL CleanupFontEntry(PFONT_ENTRY FontEntry)
struct _FONTLINK FONTLINK
static VOID FontLink_AddCache(_In_ PFONTLINK_CACHE pCache)
NTSTATUS FASTCALL TextIntRealizeFont(HFONT FontHandle, PTEXTOBJ pTextObj)
static BOOL SubstituteFontByList(PLIST_ENTRY pHead, PUNICODE_STRING pOutputName, PUNICODE_STRING pInputName, BYTE RequestedCharSet, BYTE CharSetMap[FONTSUBST_FROM_AND_TO])
static FT_UInt FASTCALL get_glyph_index(FT_Face ft_face, UINT glyph)
static const FT_Matrix identityMat
HANDLE FASTCALL IntGdiAddFontMemResource(PVOID Buffer, DWORD dwSize, PDWORD pNumAdded)
static __inline FT_Fixed FT_FixedFromFIXED(FIXED f)
static BOOL MatchFontName(PSHARED_FACE SharedFace, PUNICODE_STRING Name1, FT_UShort NameID, FT_UShort LangID)
static SIZE_T FASTCALL IntStoreName(_In_ const UNICODE_STRING *pName, _Out_ PBYTE pb)
static BOOLEAN FASTCALL GetFontFamilyInfoForSubstitutes(const LOGFONTW *LogFont, PFONTFAMILYINFO Info, LONG *pCount, LONG MaxCount)
struct _FONTLINK_CACHE FONTLINK_CACHE
static void SharedFace_Release(PSHARED_FACE Ptr, BOOL bDoLock)
static BOOL MatchFontNames(PSHARED_FACE SharedFace, LPCWSTR lfFaceName)
#define ASSERT_FREETYPE_LOCK_HELD()
INT FASTCALL ftGdiGetTextCharsetInfo(PDC Dc, LPFONTSIGNATURE lpSig, DWORD dwFlags)
static FT_BitmapGlyph IntGetRealGlyph(IN OUT PFONT_CACHE_ENTRY Cache)
static void SharedMem_Release(PSHARED_MEM Ptr)
BOOL APIENTRY NtGdiExtTextOutW(_In_ HDC hDC, _In_ INT XStart, _In_ INT YStart, _In_ UINT fuOptions, _In_opt_ LPCRECT UnsafeRect, _In_reads_opt_(Count) PCWCH UnsafeString, _In_range_(0, 0xFFFF) UINT Count, _In_reads_opt_(_Inexpressible_(cwc)) const INT *UnsafeDx, _In_ DWORD dwCodePage)
BOOL FASTCALL IntLoadFontsInRegistry(VOID)
static ULONG s_FontLookupCacheCount
BOOL FASTCALL IntIsFontRenderingEnabled(VOID)
DWORD FASTCALL ftGdiGetFontData(PFONTGDI FontGdi, DWORD Table, DWORD Offset, PVOID Buffer, DWORD Size)
#define gmxWorldToDeviceDefault
struct FONT_NAMES * LPFONT_NAMES
#define MAX_FONT_LOOKUP_CACHE
static VOID FontLink_Chain_Finish(_Inout_ PFONTLINK_CHAIN pChain)
static NTSTATUS IntGetFontLocalizedName(PUNICODE_STRING pNameW, PSHARED_FACE SharedFace, FT_UShort NameID, FT_UShort LangID)
static VOID FontLink_Destroy(_Inout_ PFONTLINK pLink)
struct _FONTLINK * PFONTLINK
static VOID FontLink_Chain_Init(_Out_ PFONTLINK_CHAIN pChain, _Inout_ PTEXTOBJ pTextObj, _In_ FT_Face face)
FT_Render_Mode FASTCALL IntGetFontRenderMode(LOGFONTW *logfont)
static BOOL s_fFontLinkUseSymbol
static PFONTLINK FontLink_Chain_FindLink(PFONTLINK_CHAIN pChain, PLOGFONTW plf)
struct _FONT_LOOKUP_CACHE * PFONT_LOOKUP_CACHE
struct _FONT_LOOKUP_CACHE FONT_LOOKUP_CACHE
INT FASTCALL IntGetOutlineTextMetrics(PFONTGDI FontGDI, UINT Size, OUTLINETEXTMETRICW *Otm, BOOL bLocked)
static __inline void FASTCALL IntFreeFontNames(FONT_NAMES *Names)
static void RemoveCachedEntry(PFONT_CACHE_ENTRY Entry)
#define _TMPF_VARIABLE_PITCH
static PFONTLINK_CACHE FontLink_FindCache(_In_ const LOGFONTW *pLogFont)
#define FONTLINK_DEFAULT_CHAR
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 void IntPopulateTextObj(PTEXTOBJ TextObj, PFONTGDI FontGdi, FONTOBJ *pFontObj, const LOGFONTW *pLogFont, PLOGFONTW SubstitutedLogFont)
static BOOL SubstituteFontRecurse(PLOGFONTW pLogFont)
static LONG g_nFontLinkCacheCount
static const WCHAR s_szzDefFontLink[]
#define MAX_FONTLINK_CACHE
struct _FONTLINK_CACHE * PFONTLINK_CACHE
static VOID FASTCALL CleanupFontEntryEx(PFONT_ENTRY FontEntry, PFONTGDI FontGDI)
BOOL APIENTRY IntExtTextOutW(_In_ PDC dc, _In_ INT XStart, _In_ INT YStart, _In_ UINT fuOptions, _In_opt_ PRECTL lprc, _In_reads_opt_(Count) PCWCH String, _In_ INT Count, _In_opt_ const INT *Dx, _In_ DWORD dwCodePage)
BOOL APIENTRY NtGdiGetCharABCWidthsW(_In_ HDC hDC, _In_ UINT FirstChar, _In_ ULONG Count, _In_reads_opt_(Count) PCWCH UnSafepwch, _In_ FLONG fl, _Out_writes_bytes_(Count *sizeof(ABC)) PVOID Buffer)
FT_Load_Glyph(FT_Face face, FT_UInt glyph_index, FT_Int32 load_flags)
#define FT_LOAD_NO_BITMAP
FT_Set_Transform(FT_Face face, FT_Matrix *matrix, FT_Vector *delta)
@ FT_SIZE_REQUEST_TYPE_NOMINAL
FT_Done_Face(FT_Face face)
FT_Get_First_Char(FT_Face face, FT_UInt *agindex)
#define FT_HAS_MULTIPLE_MASTERS(face)
enum FT_Render_Mode_ FT_Render_Mode
#define FT_LOAD_NO_HINTING
FT_Get_Char_Index(FT_Face face, FT_ULong charcode)
#define FT_HAS_FIXED_SIZES(face)
#define FT_IS_SCALABLE(face)
#define FT_HAS_VERTICAL(face)
#define FT_IS_FIXED_WIDTH(face)
FT_Request_Size(FT_Face face, FT_Size_Request req)
FT_Get_Next_Char(FT_Face face, FT_ULong char_code, FT_UInt *agindex)
FT_Set_Charmap(FT_Face face, FT_CharMap charmap)
#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH
FT_Vector_Transform(FT_Vector *vector, const FT_Matrix *matrix)
FT_Get_Kerning(FT_Face face, FT_UInt left_glyph, FT_UInt right_glyph, FT_UInt kern_mode, FT_Vector *akerning)
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
FT_New_Memory_Face(FT_Library library, const FT_Byte *file_base, FT_Long file_size, FT_Long face_index, FT_Face *aface)
FT_MulFix(FT_Long a, FT_Long b)
#define FT_HAS_KERNING(face)
FT_Init_FreeType(FT_Library *alibrary)
@ FileDirectoryInformation
#define FILE_SYNCHRONOUS_IO_NONALERT
_Must_inspect_result_ _In_ PCUNICODE_STRING Name2
_Must_inspect_result_ _Outptr_ PVOID * SectionObject
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
FT_Bitmap_New(FT_Bitmap *abitmap)
FT_Bitmap_Done(FT_Library library, FT_Bitmap *bitmap)
FT_Done_Glyph(FT_Glyph glyph)
FT_Glyph_To_Bitmap(FT_Glyph *the_glyph, FT_Render_Mode render_mode, FT_Vector *origin, FT_Bool destroy)
FT_Get_Glyph(FT_GlyphSlot slot, FT_Glyph *aglyph)
struct FT_BitmapGlyphRec_ * FT_BitmapGlyph
FT_Matrix_Multiply(const FT_Matrix *a, FT_Matrix *b)
#define ft_glyph_format_bitmap
#define ft_glyph_format_outline
FT_Done_Library(FT_Library library)
FT_Outline_Translate(const FT_Outline *outline, FT_Pos xOffset, FT_Pos yOffset)
FT_Outline_Get_Bitmap(FT_Library library, FT_Outline *outline, const FT_Bitmap *abitmap)
FT_Outline_Transform(const FT_Outline *outline, const FT_Matrix *matrix)
FT_Get_Sfnt_Name_Count(FT_Face face)
FT_BEGIN_HEADER struct FT_SfntName_ FT_SfntName
FT_Get_Sfnt_Name(FT_Face face, FT_UInt idx, FT_SfntName *aname)
FT_BEGIN_HEADER FT_GlyphSlot_Embolden(FT_GlyphSlot slot)
FT_GlyphSlot_Oblique(FT_GlyphSlot slot)
FT_BEGIN_HEADER typedef FT_Fixed FT_Angle
FT_Vector_Unit(FT_Vector *vec, FT_Angle angle)
FT_Get_WinFNT_Header(FT_Face face, FT_WinFNT_HeaderRec *aheader)
#define FONTSUBST_FROM_AND_TO
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLdouble GLdouble GLdouble GLdouble top
GLenum GLuint GLint GLenum face
GLenum GLuint GLenum GLsizei const GLchar * buf
GLubyte GLubyte GLubyte GLubyte w
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
#define EXCEPTION_EXECUTE_HANDLER
struct _FILE_DIRECTORY_INFORMATION * PFILE_DIRECTORY_INFORMATION
#define RtlEqualMemory(dst, src, len)
static PWSTR PDWORD pdwBytes
#define MmCopyToCaller(x, y, z)
#define ExFreePoolWithTag(_P, _T)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
FORCEINLINE PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
#define TT_NAME_ID_FULL_NAME
#define TT_NAME_ID_UNIQUE_ID
static LPCSTR INT LPWORD pgi
#define TT_NAME_ID_FONT_FAMILY
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define TT_NAME_ID_FONT_SUBFAMILY
#define InitializeObjectAttributes(p, n, a, r, s)
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
NTSYSAPI NTSTATUS NTAPI ZwOpenFile(_Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_ ULONG ShareAccess, _In_ ULONG OpenOptions)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSYSAPI VOID NTAPI RtlGetDefaultCodePage(_Out_ PUSHORT AnsiCodePage, _Out_ PUSHORT OemCodePage)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define _Out_writes_to_opt_(s, c)
#define _Out_writes_opt_(s)
#define _In_reads_opt_(s)
#define _Out_writes_bytes_(s)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
@ KeyValueFullInformation
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
#define FILE_LIST_DIRECTORY
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
struct _OBJECT_NAME_INFORMATION OBJECT_NAME_INFORMATION
#define FILE_SHARE_DELETE
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define FILE_GENERIC_READ
struct _KEY_VALUE_FULL_INFORMATION * PKEY_VALUE_FULL_INFORMATION
#define STANDARD_RIGHTS_REQUIRED
_NullNull_terminated_ WCHAR * PZZWSTR
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
static OUT PIO_STATUS_BLOCK IoStatusBlock
struct tagFONTFAMILYINFO FONTFAMILYINFO
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
#define STATUS_INTERNAL_ERROR
NTSTRSAFEAPI RtlStringCbCopyW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEAPI RtlStringCchCopyNW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_reads_or_z_(cchToCopy) STRSAFE_LPCWSTR pszSrc, _In_ size_t cchToCopy)
NTSTRSAFEAPI RtlStringCchCopyW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEAPI RtlStringCchCatW(_Inout_updates_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
#define PATH_IsPathOpen(dclevel)
void * EngAllocMem(int zero, unsigned long size, int tag=0)
static const WCHAR szName[]
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
NTSTATUS NTAPI MmMapViewInSystemSpace(IN PVOID SectionObject, OUT PVOID *MappedBase, IN OUT PSIZE_T ViewSize)
NTSTATUS NTAPI MmCreateSection(OUT PVOID *Section, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize, IN ULONG SectionPageProtection, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL, IN PFILE_OBJECT FileObject OPTIONAL)
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
base for all directory entries
base of all file and directory entries
UNICODE_STRING FontNames[FONTSUBST_FROM_AND_TO]
BYTE CharSets[FONTSUBST_FROM_AND_TO]
UNICODE_STRING FamilyNameW
UNICODE_STRING StyleNameW
FT_Short max_advance_width
FT_Size_Request_Type type
PUNICODE_STRING pFileName
PFONT_ENTRY_MEM PrivateEntry
UNICODE_STRING RegValueName
WCHAR lfFaceName[LF_FACESIZE]
FT_ULong ulCodePageRange1
FT_UShort usLastCharIndex
FT_Short ySuperscriptYSize
FT_Short ySuperscriptXSize
FT_Short ySubscriptYOffset
FT_Short ySuperscriptYOffset
FT_Short ySubscriptXOffset
FT_Short yStrikeoutPosition
FT_ULong ulCodePageRange2
FT_Short ySuperscriptXOffset
FT_UShort usFirstCharIndex
FT_Short underlineThickness
FT_Short underlinePosition
FT_BitmapGlyph BitmapGlyph
WCHAR TextFace[LF_FACESIZE]
struct _LIST_ENTRY * Flink
POINT otmptSuperscriptOffset
POINT otmptSuperscriptSize
int otmsStrikeoutPosition
int otmsUnderscorePosition
TEXTMETRICW otmTextMetrics
POINT otmptSubscriptOffset
LIST_ENTRY PrivateMemFontListHead
UINT PrivateMemFontHandleCount
LIST_ENTRY PrivateFontListHead
SHARED_FACE_CACHE UserLanguage
SHARED_FACE_CACHE EnglishUS
struct _PALETTE *const ppal
ENUMLOGFONTEXW elfEnumLogfontEx
WCHAR elfStyle[LF_FACESIZE]
WCHAR elfFullName[LF_FULLFACESIZE]
ENUMLOGFONTEXW EnumLogFontEx
WCHAR lfFaceName[LF_FACESIZE]
FT_Get_PS_Font_Info(FT_Face face, PS_FontInfo afont_info)
FT_BEGIN_HEADER struct PS_FontInfoRec_ PS_FontInfoRec
T1_FIELD_DICT_FONTDICT family_name
T1_FIELD_DICT_FONTDICT T1_FIELD_DICT_FONTDICT T1_FIELD_DICT_FONTDICT underline_position
FT_Get_Sfnt_Table(FT_Face face, FT_Sfnt_Tag tag)
FT_Load_Sfnt_Table(FT_Face face, FT_ULong tag, FT_Long offset, FT_Byte *buffer, FT_ULong *length)
#define 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
WORD WORD PSZ PSZ pszFileName
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _Strict_type_match_ POOL_TYPE _In_opt_ ULONG _In_ _Out_ WDFMEMORY * Memory
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ WDFCOLLECTION Collection
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
NTSTATUS IntDuplicateUnicodeString(IN ULONG Flags, IN PCUNICODE_STRING SourceString, OUT PUNICODE_STRING DestinationString)
BOOL APIENTRY IntEngMaskBlt(_Inout_ SURFOBJ *psoDest, _In_ SURFOBJ *psoMask, _In_ CLIPOBJ *pco, _In_ XLATEOBJ *pxloDest, _In_ XLATEOBJ *pxloSource, _In_ RECTL *prclDest, _In_ POINTL *pptlMask, _In_ BRUSHOBJ *pbo, _In_ POINTL *pptlBrushOrg)
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
PTEXTOBJ FASTCALL RealizeFontInit(_In_ HFONT hFont)
BOOL FASTCALL PATH_ExtTextOut(PDC dc, INT x, INT y, UINT flags, const RECTL *lprc, LPCWSTR str, UINT count, const INT *dx)
#define AFRX_WRITE_REGISTRY
#define LFONT_UnlockFont(plfnt)
FORCEINLINE PTEXTOBJ TEXTOBJ_LockText(HFONT hfont)
#define AFRX_DOS_DEVICE_PATH
#define AFRX_ALTERNATIVE_PATH
#define IntLockProcessPrivateFonts(W32Process)
FORCEINLINE VOID TEXTOBJ_UnlockText(PLFONT plfnt)
#define IntUnLockProcessPrivateFonts(W32Process)
#define LFONT_AllocFontWithHandle()
VOID APIENTRY IntEngFillPolygon(IN OUT PDC dc, IN POINTL *pPoints, IN UINT cPoints, IN BRUSHOBJ *BrushObj)
VOID IntSwapEndian(_Inout_ LPVOID pvData, _In_ DWORD Size)
VOID IntRebaseList(_Inout_ PLIST_ENTRY pNewHead, _Inout_ PLIST_ENTRY pOldHead)
VOID IntUnicodeStringToBuffer(_Out_ LPWSTR pszBuffer, _In_ SIZE_T cbBuffer, _In_ const UNICODE_STRING *pString)
SIZE_T SZZ_GetSize(_In_ PCZZWSTR pszz)
LPCWSTR FASTCALL IntNameFromCharSet(_In_ BYTE CharSet)
BYTE IntCharSetFromLangID(_In_ LANGID LangID)
LONG IntNormalizeAngle(_In_ LONG nTenthsOfDegrees)
VOID FASTCALL IntEngFillBox(IN OUT PDC dc, IN INT X, IN INT Y, IN INT Width, IN INT Height, IN BRUSHOBJ *BrushObj)
static DWORD Utf32FromSurrogatePair(_In_ DWORD ch0, _In_ DWORD ch1)
#define FLOATOBJ_DivLong(pf, l)
ENGAPI BOOL APIENTRY EngDeleteSurface(_In_ _Post_ptr_invalid_ HSURF hsurf)
ENGAPI SURFOBJ *APIENTRY EngLockSurface(_In_ HSURF hsurf)
_In_ ULONG_PTR _In_ ULONG iFace
ENGAPI HBITMAP APIENTRY EngCreateBitmap(_In_ SIZEL sizl, _In_ LONG lWidth, _In_ ULONG iFormat, _In_ FLONG fl, _In_opt_ PVOID pvBits)
#define FLOATOBJ_Mul(pf, pf1)
ENGAPI VOID APIENTRY EngGetCurrentCodePage(_Out_ PUSHORT OemCodePage, _Out_ PUSHORT AnsiCodePage)
#define FLOATOBJ_MulLong(pf, l)
#define FLOATOBJ_GetLong(pf)
#define FLOATOBJ_SetFloat(pf, f)
typedef HSURF(APIENTRY FN_DrvEnableSurface)(_In_ DHPDEV dhpdev)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define FLOATOBJ_SetLong(pf, l)
#define FO_MULTIPLEMASTER
_In_ SIZEL _In_ ULONG iFormat
ENGAPI VOID APIENTRY EngUnlockSurface(_In_ _Post_ptr_invalid_ SURFOBJ *pso)
#define FLOATOBJ_AddLong(pf, l)
#define ERROR_GEN_FAILURE
struct _OUTLINETEXTMETRICW OUTLINETEXTMETRICW
struct _ABCFLOAT * LPABCFLOAT
#define PAN_FAMILY_TEXT_DISPLAY
#define PAN_PROP_MONOSPACED
#define ANTIALIASED_QUALITY
#define PAN_SERIFSTYLE_INDEX
#define PAN_SERIF_NORMAL_SANS
struct _RASTERIZER_STATUS RASTERIZER_STATUS
#define PAN_SERIF_OBTUSE_SANS
#define PAN_FAMILY_PICTORIAL
#define TRUETYPE_FONTTYPE
#define PAN_SERIF_TRIANGLE
#define OUT_DEVICE_PRECIS
#define PAN_PROPORTION_INDEX
#define PAN_SERIF_SQUARE_COVE
#define PAN_SERIF_OBTUSE_SQUARE_COVE
#define CHINESEBIG5_CHARSET
#define PAN_SERIF_EXAGGERATED
#define OUT_DEFAULT_PRECIS
#define PAN_SERIF_ROUNDED
#define PAN_FAMILYTYPE_INDEX
#define CLIP_DEFAULT_PRECIS
#define PAN_FAMILY_DECORATIVE
#define PAN_SERIF_PERP_SANS
#define VIETNAMESE_CHARSET
#define PAN_FAMILY_SCRIPT
#define CLEARTYPE_QUALITY
#define PAN_SERIF_OBTUSE_COVE
#define GGI_MARK_NONEXISTING_GLYPHS
#define EASTEUROPE_CHARSET
#define NONANTIALIASED_QUALITY
#define OUT_OUTLINE_PRECIS
#define IS_HIGH_SURROGATE(ch)
#define IS_LOW_SURROGATE(ch)
_In_ int _Inout_ LPRECT lprc
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_Must_inspect_result_ _In_ ULONG Flags
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
#define ObDereferenceObject
#define RTL_STATIC_LIST_HEAD(x)
VOID NTAPI EXLATEOBJ_vInitialize(_Out_ PEXLATEOBJ pexlo, _In_opt_ PALETTE *ppalSrc, _In_opt_ PALETTE *ppalDst, _In_ COLORREF crSrcBackColor, _In_ COLORREF crDstBackColor, _In_ COLORREF crDstForeColor)
VOID NTAPI EXLATEOBJ_vCleanup(_Inout_ PEXLATEOBJ pexlo)