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 26class GDIFontInstance; 27 28class GDISurface : public RenderingSurface 29{ 30public: 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 41private: 42 HDC fHdc; 43 const GDIFontInstance *fCurrentFont; 44}; 45 46inline HDC GDISurface::getHDC() const 47{ 48 return fHdc; 49} 50 51class GDIFontInstance : public LEFontInstance, protected FontTableCache 52{ 53protected: 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 72public: 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 106inline HFONT GDIFontInstance::getFont() const 107{ 108 return fFont; 109} 110 111inline le_int32 GDIFontInstance::getUnitsPerEM() const 112{ 113 return fUnitsPerEM; 114} 115 116inline le_int32 GDIFontInstance::getAscent() const 117{ 118 return fAscent; 119} 120 121inline le_int32 GDIFontInstance::getDescent() const 122{ 123 return fDescent; 124} 125 126inline le_int32 GDIFontInstance::getLeading() const 127{ 128 return fLeading; 129} 130 131inline LEGlyphID GDIFontInstance::mapCharToGlyph(LEUnicode32 ch) const 132{ 133 return fMapper->unicodeToGlyph(ch); 134} 135 136inline float GDIFontInstance::getXPixelsPerEm() const 137{ 138 return (float) fPointSize; 139} 140 141inline float GDIFontInstance::getYPixelsPerEm() const 142{ 143 return (float) fPointSize; 144} 145 146inline float GDIFontInstance::getScaleFactorX() const 147{ 148 return fDeviceScaleX; 149} 150 151inline float GDIFontInstance::getScaleFactorY() const 152{ 153 return fDeviceScaleY; 154} 155 156#endif 157