16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (C) 1999-2013, International Business Machines 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Corporation and others. All Rights Reserved. 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ******************************************************************************* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * file name: SimpleFontInstance.cpp 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * created on: 03/30/2006 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * created by: Eric R. Mader 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uchar.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "layout/LETypes.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "layout/LEFontInstance.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "layout/CanonShaping.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "SimpleFontInstance.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgSimpleFontInstance::SimpleFontInstance(float pointSize, LEErrorCode &status) 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : fPointSize(pointSize), fAscent(0), fDescent(0) 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (LE_FAILURE(status)) { 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fAscent = (le_int32) yUnitsToPoints(2000.0); 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fDescent = (le_int32) yUnitsToPoints(600.0); 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgSimpleFontInstance::~SimpleFontInstance() 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // nothing to do... 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst void *SimpleFontInstance::getFontTable(LETag tableTag) const 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (tableTag == LE_GSUB_TABLE_TAG) { 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return CanonShaping::glyphSubstitutionTable; 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (tableTag == LE_GDEF_TABLE_TAG) { 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return CanonShaping::glyphDefinitionTable; 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return NULL; 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid SimpleFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if 0 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (u_getCombiningClass((UChar32) glyph) == 0) { 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org advance.fX = xUnitsToPoints(2048); 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org advance.fX = 0; 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org advance.fX = xUnitsToPoints(2048); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org advance.fY = 0; 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgle_int32 SimpleFontInstance::getUnitsPerEM() const 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 2048; 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgle_int32 SimpleFontInstance::getAscent() const 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return fAscent; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgle_int32 SimpleFontInstance::getDescent() const 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return fDescent; 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgle_int32 SimpleFontInstance::getLeading() const 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// We really want to inherit this method from the superclass, but some compilers 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// issue a warning if we don't implement it... 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgLEGlyphID SimpleFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return LEFontInstance::mapCharToGlyph(ch, mapper, filterZeroWidth); 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// We really want to inherit this method from the superclass, but some compilers 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// issue a warning if we don't implement it... 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgLEGlyphID SimpleFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return LEFontInstance::mapCharToGlyph(ch, mapper); 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgLEGlyphID SimpleFontInstance::mapCharToGlyph(LEUnicode32 ch) const 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return (LEGlyphID) ch; 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgfloat SimpleFontInstance::getXPixelsPerEm() const 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return fPointSize; 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgfloat SimpleFontInstance::getYPixelsPerEm() const 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return fPointSize; 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgfloat SimpleFontInstance::getScaleFactorX() const 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 1.0; 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgfloat SimpleFontInstance::getScaleFactorY() const 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 1.0; 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgle_bool SimpleFontInstance::getGlyphPoint(LEGlyphID /*glyph*/, le_int32 /*pointNumber*/, LEPoint &/*point*/) const 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 133