Sync with trunk r43000
[reactos.git] / reactos / subsystems / win32 / win32k / include / text.h
1 #ifndef _WIN32K_TEXT_H
2 #define _WIN32K_TEXT_H
3
4 #include <include/engobjects.h>
5
6 #define TAG_FINF 'FNIF'
7 //
8 // EXSTROBJ flags.
9 //
10 #define TO_MEM_ALLOCATED 0x0001
11 #define TO_ALL_PTRS_VALID 0x0002
12 #define TO_VALID 0x0004
13 #define TO_ESC_NOT_ORIENT 0x0008
14 #define TO_PWSZ_ALLOCATED 0x0010
15 #define TSIM_UNDERLINE1 0x0020
16 #define TSIM_UNDERLINE2 0x0040
17 #define TSIM_STRIKEOUT 0x0080
18 #define TO_HIGHRESTEXT 0x0100
19 #define TO_BITMAPS 0x0200
20 #define TO_PARTITION_INIT 0x0400
21 #define TO_ALLOC_FACENAME 0x0800
22 #define TO_SYS_PARTITION 0x1000
23 //
24 // Extended STROBJ
25 //
26 typedef struct _STRGDI
27 {
28 STROBJ StrObj; // Text string object header.
29 FLONG flTO;
30 INT cgposCopied;
31 INT cgposPositionsEnumerated;
32 PVOID prfo; // PRFONT -> PFONTGDI
33 PGLYPHPOS pgpos;
34 POINTFIX ptfxRef;
35 POINTFIX ptfxUpdate;
36 POINTFIX ptfxEscapement;
37 RECTFX rcfx;
38 FIX fxExtent;
39 FIX fxExtra;
40 FIX fxBreakExtra;
41 DWORD dwCodePage;
42 INT cExtraRects;
43 RECTL arclExtra[3];
44 RECTL rclBackGroundSave;
45 PWCHAR pwcPartition;
46 PLONG plPartition;
47 PLONG plNext;
48 PGLYPHPOS pgpNext;
49 PLONG plCurrentFont;
50 POINTL ptlBaseLineAdjust;
51 INT cTTSysGlyphs;
52 INT cSysGlyphs;
53 INT cDefGlyphs;
54 INT cNumFaceNameGlyphs;
55 PVOID pacFaceNameGlyphs;
56 ULONG acFaceNameGlyphs[8];
57 } STRGDI, *PSTRGDI;
58
59 #define TEXTOBJECT_INIT 0x00010000
60
61 /* GDI logical font object */
62 typedef struct
63 {
64 /* Header for all gdi objects in the handle table.
65 Do not (re)move this. */
66 BASEOBJECT BaseObject;
67 LFTYPE lft;
68 FLONG fl;
69 FONTOBJ *Font;
70 WCHAR FullName[LF_FULLFACESIZE];
71 WCHAR Style[LF_FACESIZE];
72 WCHAR FaceName[LF_FACESIZE];
73 DWORD dwOffsetEndArray;
74 // Fixed:
75 ENUMLOGFONTEXDVW logfont;
76 } TEXTOBJ, *PTEXTOBJ;
77
78 /* Internal interface */
79
80 #define TEXTOBJ_AllocText() ((PTEXTOBJ) GDIOBJ_AllocObj(GDIObjType_LFONT_TYPE))
81 #define TEXTOBJ_AllocTextWithHandle() ((PTEXTOBJ) GDIOBJ_AllocObjWithHandle(GDI_OBJECT_TYPE_FONT))
82 #define TEXTOBJ_FreeText(pBMObj) GDIOBJ_FreeObj((POBJ) pBMObj, GDILoObjType_LO_FONT_TYPE)
83 #define TEXTOBJ_FreeTextByHandle(hBMObj) GDIOBJ_FreeObj((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_FONT)
84 #define TEXTOBJ_LockText(hBMObj) ((PTEXTOBJ) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_FONT))
85 #define TEXTOBJ_UnlockText(pBMObj) GDIOBJ_UnlockObjByPtr ((POBJ)pBMObj)
86
87 PTEXTOBJ FASTCALL RealizeFontInit(HFONT);
88 NTSTATUS FASTCALL TextIntRealizeFont(HFONT,PTEXTOBJ);
89 NTSTATUS FASTCALL TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont);
90 BOOL FASTCALL InitFontSupport(VOID);
91 BOOL FASTCALL IntIsFontRenderingEnabled(VOID);
92 BOOL FASTCALL IntIsFontRenderingEnabled(VOID);
93 VOID FASTCALL IntEnableFontRendering(BOOL Enable);
94 INT FASTCALL FontGetObject(PTEXTOBJ TextObj, INT Count, PVOID Buffer);
95 VOID FASTCALL IntLoadSystemFonts(VOID);
96 INT FASTCALL IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics);
97 ULONG FASTCALL ftGdiGetGlyphOutline(PDC,WCHAR,UINT,LPGLYPHMETRICS,ULONG,PVOID,LPMAT2,BOOL);
98 INT FASTCALL IntGetOutlineTextMetrics(PFONTGDI,UINT,OUTLINETEXTMETRICW *);
99 BOOL FASTCALL ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS);
100 BOOL FASTCALL TextIntGetTextExtentPoint(PDC,PTEXTOBJ,LPCWSTR,int,int,LPINT,LPINT,LPSIZE);
101 BOOL FASTCALL ftGdiGetTextMetricsW(HDC,PTMW_INTERNAL);
102 DWORD FASTCALL IntGetFontLanguageInfo(PDC);
103 INT FASTCALL ftGdiGetTextCharsetInfo(PDC,PFONTSIGNATURE,DWORD);
104 DWORD FASTCALL ftGetFontUnicodeRanges(PFONTGDI, PGLYPHSET);
105 DWORD FASTCALL ftGdiGetFontData(PFONTGDI,DWORD,DWORD,PVOID,DWORD);
106 BOOL FASTCALL IntGdiGetFontResourceInfo(PUNICODE_STRING,PVOID,DWORD*,DWORD);
107 BOOL FASTCALL ftGdiRealizationInfo(PFONTGDI,PREALIZATION_INFO);
108 DWORD FASTCALL ftGdiGetKerningPairs(PFONTGDI,DWORD,LPKERNINGPAIR);
109 BOOL NTAPI GreExtTextOutW(IN HDC,IN INT,IN INT,IN UINT,IN OPTIONAL RECTL*,
110 IN LPWSTR, IN INT, IN OPTIONAL LPINT, IN DWORD);
111 DWORD FASTCALL IntGetCharDimensions(HDC, PTEXTMETRICW, PDWORD);
112 BOOL FASTCALL GreGetTextExtentW(HDC,LPWSTR,INT,LPSIZE,UINT);
113 BOOL FASTCALL GreGetTextExtentExW(HDC,LPWSTR,ULONG,ULONG,PULONG,PULONG,LPSIZE,FLONG);
114
115 #define IntLockProcessPrivateFonts(W32Process) \
116 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&W32Process->PrivateFontListLock)
117
118 #define IntUnLockProcessPrivateFonts(W32Process) \
119 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&W32Process->PrivateFontListLock)
120
121 #define IntLockGlobalFonts \
122 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&FontListLock)
123
124 #define IntUnLockGlobalFonts \
125 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&FontListLock)
126
127 #define IntLockFreeType \
128 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&FreeTypeLock)
129
130 #define IntUnLockFreeType \
131 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&FreeTypeLock)
132
133 #endif /* _WIN32K_TEXT_H */