Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / icu / source / samples / layout / GDIFontInstance.h
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
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
106 inline HFONT GDIFontInstance::getFont() const
107 {
108     return fFont;
109 }
110
111 inline le_int32 GDIFontInstance::getUnitsPerEM() const
112 {
113     return fUnitsPerEM;
114 }
115
116 inline le_int32 GDIFontInstance::getAscent() const
117 {
118     return fAscent;
119 }
120
121 inline le_int32 GDIFontInstance::getDescent() const
122 {
123     return fDescent;
124 }
125
126 inline le_int32 GDIFontInstance::getLeading() const
127 {
128     return fLeading;
129 }
130
131 inline LEGlyphID GDIFontInstance::mapCharToGlyph(LEUnicode32 ch) const
132 {
133     return fMapper->unicodeToGlyph(ch);
134 }
135
136 inline float GDIFontInstance::getXPixelsPerEm() const
137 {
138     return (float) fPointSize;
139 }
140
141 inline float GDIFontInstance::getYPixelsPerEm() const
142 {
143     return  (float) fPointSize;
144 }
145
146 inline float GDIFontInstance::getScaleFactorX() const
147 {
148     return fDeviceScaleX;
149 }
150
151 inline float GDIFontInstance::getScaleFactorY() const
152 {
153     return fDeviceScaleY;
154 }
155
156 #endif