• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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