00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __LEFONTINSTANCE_H
00010 #define __LEFONTINSTANCE_H
00011
00012 #include "LETypes.h"
00013
00014 U_NAMESPACE_BEGIN
00015
00023 class LECharMapper
00024 {
00025 public:
00033 virtual LEUnicode32 mapChar(LEUnicode32 ch) const = 0;
00034 };
00035
00046 class LEFontInstance
00047 {
00048 public:
00049
00054 virtual ~LEFontInstance() { };
00055
00056
00057
00058
00059
00067 virtual const void *getFontTable(LETag tableTag) const = 0;
00068
00079 virtual le_bool canDisplay(LEUnicode32 ch) const = 0;
00080
00087 virtual le_int32 getUnitsPerEM() const = 0;
00088
00102 virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, const LECharMapper *mapper, LEGlyphID glyphs[]) const = 0;
00103
00115 virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const = 0;
00116
00128 virtual le_int32 getName(le_uint16 platformID, le_uint16 scriptID, le_uint16 languageID, le_uint16 nameID, LEUnicode *name) const = 0;
00129
00130
00131
00132
00133
00140 virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const = 0;
00141
00152 virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const = 0;
00153
00160 virtual float getXPixelsPerEm() const = 0;
00161
00168 virtual float getYPixelsPerEm() const = 0;
00169
00178 virtual float xUnitsToPoints(float xUnits) const = 0;
00179
00188 virtual float yUnitsToPoints(float yUunits) const = 0;
00189
00196 virtual void unitsToPoints(LEPoint &units, LEPoint &points) const = 0;
00197
00206 virtual float xPixelsToUnits(float xPixels) const = 0;
00207
00216 virtual float yPixelsToUnits(float yPixels) const = 0;
00217
00224 virtual void pixelsToUnits(LEPoint &pixels, LEPoint &units) const = 0;
00225
00234 virtual void transformFunits(float xFunits, float yFunits, LEPoint &pixels) const = 0;
00235
00244 static float fixedToFloat(le_int32 fixed)
00245 {
00246 return (float) (fixed / 65536.0);
00247 };
00248
00257 static le_int32 floatToFixed(float theFloat)
00258 {
00259 return (le_int32) (theFloat * 65536.0);
00260 };
00261 };
00262
00263 U_NAMESPACE_END
00264 #endif
00265
00266