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