]>
Commit | Line | Data |
---|---|---|
b75a7d8f A |
1 | |
2 | /* | |
f3c0d7a5 A |
3 | ******************************************************************************* |
4 | * | |
5 | * © 2016 and later: Unicode, Inc. and others. | |
6 | * License & terms of use: http://www.unicode.org/copyright.html#License | |
7 | * | |
8 | ******************************************************************************* | |
b75a7d8f A |
9 | ******************************************************************************* |
10 | * | |
11 | * Copyright (C) 1999-2003, International Business Machines | |
12 | * Corporation and others. All Rights Reserved. | |
13 | * | |
14 | ******************************************************************************* | |
15 | * file name: GDIFontInstance.h | |
16 | * | |
17 | * created on: 08/09/2000 | |
18 | * created by: Eric R. Mader | |
19 | */ | |
20 | ||
21 | #ifndef __GDIFONTINSTANCE_H | |
22 | #define __GDIFONTINSTANCE_H | |
23 | ||
24 | #include <windows.h> | |
25 | ||
26 | #include "layout/LETypes.h" | |
27 | #include "layout/LEFontInstance.h" | |
28 | #include "RenderingSurface.h" | |
29 | #include "FontTableCache.h" | |
30 | #include "cmaps.h" | |
31 | ||
32 | class GDIFontInstance; | |
33 | ||
34 | class GDISurface : public RenderingSurface | |
35 | { | |
36 | public: | |
37 | GDISurface(HDC theHDC); | |
38 | virtual ~GDISurface(); | |
39 | ||
40 | virtual void drawGlyphs(const LEFontInstance *font, const LEGlyphID *glyphs, le_int32 count, | |
41 | const float *positions, le_int32 x, le_int32 y, le_int32 width, le_int32 height); | |
42 | ||
43 | void setFont(const GDIFontInstance *font); | |
44 | HDC getHDC() const; | |
45 | void setHDC(HDC theHDC); | |
46 | ||
47 | private: | |
48 | HDC fHdc; | |
49 | const GDIFontInstance *fCurrentFont; | |
50 | }; | |
51 | ||
52 | inline HDC GDISurface::getHDC() const | |
53 | { | |
54 | return fHdc; | |
55 | } | |
56 | ||
57 | class GDIFontInstance : public LEFontInstance, protected FontTableCache | |
58 | { | |
59 | protected: | |
60 | GDISurface *fSurface; | |
61 | HFONT fFont; | |
62 | ||
63 | le_int32 fPointSize; | |
64 | le_int32 fUnitsPerEM; | |
65 | le_int32 fAscent; | |
66 | le_int32 fDescent; | |
67 | le_int32 fLeading; | |
68 | ||
69 | float fDeviceScaleX; | |
70 | float fDeviceScaleY; | |
71 | ||
72 | CMAPMapper *fMapper; | |
73 | ||
74 | virtual const void *readFontTable(LETag tableTag) const; | |
75 | ||
76 | virtual LEErrorCode initMapper(); | |
77 | ||
78 | public: | |
79 | GDIFontInstance(GDISurface *surface, TCHAR *faceName, le_int16 pointSize, LEErrorCode &status); | |
80 | GDIFontInstance(GDISurface *surface, const char *faceName, le_int16 pointSize, LEErrorCode &status); | |
81 | //GDIFontInstance(GDISurface *surface, le_int16 pointSize); | |
82 | ||
83 | virtual ~GDIFontInstance(); | |
84 | ||
85 | HFONT getFont() const; | |
86 | ||
87 | virtual const void *getFontTable(LETag tableTag) const; | |
88 | ||
89 | virtual le_int32 getUnitsPerEM() const; | |
90 | ||
91 | virtual le_int32 getAscent() const; | |
92 | ||
93 | virtual le_int32 getDescent() const; | |
94 | ||
95 | virtual le_int32 getLeading() const; | |
96 | ||
97 | virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const; | |
98 | ||
99 | virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const; | |
100 | ||
101 | virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const; | |
102 | ||
103 | float getXPixelsPerEm() const; | |
104 | ||
105 | float getYPixelsPerEm() const; | |
106 | ||
107 | float getScaleFactorX() const; | |
108 | ||
109 | float getScaleFactorY() const; | |
110 | }; | |
111 | ||
112 | inline HFONT GDIFontInstance::getFont() const | |
113 | { | |
114 | return fFont; | |
115 | } | |
116 | ||
117 | inline le_int32 GDIFontInstance::getUnitsPerEM() const | |
118 | { | |
119 | return fUnitsPerEM; | |
120 | } | |
121 | ||
122 | inline le_int32 GDIFontInstance::getAscent() const | |
123 | { | |
124 | return fAscent; | |
125 | } | |
126 | ||
127 | inline le_int32 GDIFontInstance::getDescent() const | |
128 | { | |
129 | return fDescent; | |
130 | } | |
131 | ||
132 | inline le_int32 GDIFontInstance::getLeading() const | |
133 | { | |
134 | return fLeading; | |
135 | } | |
136 | ||
137 | inline LEGlyphID GDIFontInstance::mapCharToGlyph(LEUnicode32 ch) const | |
138 | { | |
139 | return fMapper->unicodeToGlyph(ch); | |
140 | } | |
141 | ||
142 | inline float GDIFontInstance::getXPixelsPerEm() const | |
143 | { | |
144 | return (float) fPointSize; | |
145 | } | |
146 | ||
147 | inline float GDIFontInstance::getYPixelsPerEm() const | |
148 | { | |
149 | return (float) fPointSize; | |
150 | } | |
151 | ||
152 | inline float GDIFontInstance::getScaleFactorX() const | |
153 | { | |
154 | return fDeviceScaleX; | |
155 | } | |
156 | ||
157 | inline float GDIFontInstance::getScaleFactorY() const | |
158 | { | |
159 | return fDeviceScaleY; | |
160 | } | |
161 | ||
162 | #endif |