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 157