1 2 /* 3 ******************************************************************************* 4 * 5 * 2016 and later: Unicode, Inc. and others. 6 * License & terms of use: http://www.unicode.org/copyright.html#License 7 * 8 ******************************************************************************* 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 163