17d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod/* 27d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod ******************************************************************************* 37d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod * 47d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod * Copyright (C) 1999-2008, International Business Machines 57d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod * Corporation and others. All Rights Reserved. 67d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod * 77d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod ******************************************************************************* 87d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod * file name: PortableFontInstance.cpp 97d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod * 107d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod * created on: 11/22/1999 117d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod * created by: Eric R. Mader 127d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod */ 137d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 147d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include <stdio.h> 157d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 167d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "layout/LETypes.h" 177d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "layout/LEFontInstance.h" 187d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "layout/LESwaps.h" 197d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 207d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "PortableFontInstance.h" 217d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 227d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "letest.h" 237d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "sfnt.h" 247d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 257d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include <string.h> 267d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 277d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 28ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad EsfahbodPortableFontInstance::PortableFontInstance(hb_face_t *face, float xScale, float yScale, LEErrorCode &status) 29ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod : fFace(face), fXScale(xScale), fYScale(yScale), fUnitsPerEM(0), fAscent(0), fDescent(0), fLeading(0), 30ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod fNAMETable(NULL), fNameCount(0), fNameStringOffset(0), fCMAPMapper(NULL), fHMTXTable(NULL), fNumGlyphs(0), fNumLongHorMetrics(0) 317d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 327d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (LE_FAILURE(status)) { 337d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return; 347d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 357d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 367d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod const LETag hheaTag = LE_HHEA_TABLE_TAG; 377d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod const HHEATable *hheaTable = NULL; 387d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 39ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod fUnitsPerEM = hb_face_get_upem (face); 407d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 41e96bb36995b2a5321b4d32bb11906e1701aaf115Behdad Esfahbod hheaTable = (HHEATable *) getFontTable(hheaTag); 427d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 437d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (hheaTable == NULL) { 447d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod status = LE_MISSING_FONT_TABLE_ERROR; 45ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod return; 467d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 477d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 487d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod fAscent = (le_int32) yUnitsToPoints((float) SWAPW(hheaTable->ascent)); 497d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod fDescent = (le_int32) yUnitsToPoints((float) SWAPW(hheaTable->descent)); 507d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod fLeading = (le_int32) yUnitsToPoints((float) SWAPW(hheaTable->lineGap)); 517d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 527d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod fNumLongHorMetrics = SWAPW(hheaTable->numOfLongHorMetrics); 537d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 547d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod fCMAPMapper = findUnicodeMapper(); 557d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 567d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (fCMAPMapper == NULL) { 577d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod status = LE_MISSING_FONT_TABLE_ERROR; 58ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod return; 597d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 607d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 617d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 627d242364ea647f655a7092bda25f9a10774c57f5Behdad EsfahbodPortableFontInstance::~PortableFontInstance() 637d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 64ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod if (fCMAPMapper) 657d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod delete fCMAPMapper; 667d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 677d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 687d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodconst void *PortableFontInstance::getFontTable(LETag tableTag) const 697d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 707d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return FontTableCache::find(tableTag); 717d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 727d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 73ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbodhb_blob_t *PortableFontInstance::readFontTable(LETag tableTag) const 747d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 75ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod return hb_face_reference_table(fFace, tableTag); 767d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 777d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 787d242364ea647f655a7092bda25f9a10774c57f5Behdad EsfahbodCMAPMapper *PortableFontInstance::findUnicodeMapper() 797d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 807d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod LETag cmapTag = LE_CMAP_TABLE_TAG; 81e96bb36995b2a5321b4d32bb11906e1701aaf115Behdad Esfahbod const CMAPTable *cmap = (CMAPTable *) getFontTable(cmapTag); 827d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 837d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (cmap == NULL) { 847d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return NULL; 857d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 867d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 877d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return CMAPMapper::createUnicodeMapper(cmap); 887d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 897d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 907d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodconst char *PortableFontInstance::getNameString(le_uint16 nameID, le_uint16 platformID, le_uint16 encodingID, le_uint16 languageID) const 917d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 927d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (fNAMETable == NULL) { 937d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod LETag nameTag = LE_NAME_TABLE_TAG; 947d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod PortableFontInstance *realThis = (PortableFontInstance *) this; 957d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 96e96bb36995b2a5321b4d32bb11906e1701aaf115Behdad Esfahbod realThis->fNAMETable = (const NAMETable *) getFontTable(nameTag); 977d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 987d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (realThis->fNAMETable != NULL) { 997d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod realThis->fNameCount = SWAPW(realThis->fNAMETable->count); 1007d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod realThis->fNameStringOffset = SWAPW(realThis->fNAMETable->stringOffset); 1017d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1027d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1037d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1047d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod for(le_int32 i = 0; i < fNameCount; i += 1) { 1057d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod const NameRecord *nameRecord = &fNAMETable->nameRecords[i]; 1067d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1077d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (SWAPW(nameRecord->platformID) == platformID && SWAPW(nameRecord->encodingID) == encodingID && 1087d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) { 1097d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod char *name = ((char *) fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset); 1107d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 length = SWAPW(nameRecord->length); 1117d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod char *result = NEW_ARRAY(char, length + 2); 1127d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1137d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod ARRAY_COPY(result, name, length); 1147d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod result[length] = result[length + 1] = 0; 1157d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1167d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return result; 1177d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1187d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1197d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1207d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return NULL; 1217d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 1227d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1237d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodconst LEUnicode16 *PortableFontInstance::getUnicodeNameString(le_uint16 nameID, le_uint16 platformID, le_uint16 encodingID, le_uint16 languageID) const 1247d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1257d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (fNAMETable == NULL) { 1267d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod LETag nameTag = LE_NAME_TABLE_TAG; 1277d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod PortableFontInstance *realThis = (PortableFontInstance *) this; 1287d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 129e96bb36995b2a5321b4d32bb11906e1701aaf115Behdad Esfahbod realThis->fNAMETable = (const NAMETable *) getFontTable(nameTag); 1307d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1317d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (realThis->fNAMETable != NULL) { 1327d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod realThis->fNameCount = SWAPW(realThis->fNAMETable->count); 1337d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod realThis->fNameStringOffset = SWAPW(realThis->fNAMETable->stringOffset); 1347d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1357d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1367d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1377d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod for(le_int32 i = 0; i < fNameCount; i += 1) { 1387d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod const NameRecord *nameRecord = &fNAMETable->nameRecords[i]; 1397d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1407d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (SWAPW(nameRecord->platformID) == platformID && SWAPW(nameRecord->encodingID) == encodingID && 1417d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) { 1427d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod LEUnicode16 *name = (LEUnicode16 *) (((char *) fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset)); 1437d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 length = SWAPW(nameRecord->length) / 2; 1447d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod LEUnicode16 *result = NEW_ARRAY(LEUnicode16, length + 2); 1457d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1467d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod for (le_int32 c = 0; c < length; c += 1) { 1477d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod result[c] = SWAPW(name[c]); 1487d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1497d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1507d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod result[length] = 0; 1517d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1527d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return result; 1537d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1547d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1557d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1567d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return NULL; 1577d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 1587d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1597d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodvoid PortableFontInstance::deleteNameString(const char *name) const 1607d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1617d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod DELETE_ARRAY(name); 1627d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 1637d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1647d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodvoid PortableFontInstance::deleteNameString(const LEUnicode16 *name) const 1657d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1667d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod DELETE_ARRAY(name); 1677d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 1687d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1697d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodvoid PortableFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const 1707d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1717d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph); 1727d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1737d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (fHMTXTable == NULL) { 1747d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod LETag maxpTag = LE_MAXP_TABLE_TAG; 1757d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod LETag hmtxTag = LE_HMTX_TABLE_TAG; 176e96bb36995b2a5321b4d32bb11906e1701aaf115Behdad Esfahbod const MAXPTable *maxpTable = (MAXPTable *) getFontTable(maxpTag); 1777d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod PortableFontInstance *realThis = (PortableFontInstance *) this; 1787d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1797d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (maxpTable != NULL) { 1807d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod realThis->fNumGlyphs = SWAPW(maxpTable->numGlyphs); 1817d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1827d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 183e96bb36995b2a5321b4d32bb11906e1701aaf115Behdad Esfahbod realThis->fHMTXTable = (const HMTXTable *) getFontTable(hmtxTag); 1847d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1857d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1867d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 index = ttGlyph; 1877d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1887d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (ttGlyph >= fNumGlyphs || fHMTXTable == NULL) { 1897d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod advance.fX = advance.fY = 0; 1907d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return; 1917d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1927d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1937d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod if (ttGlyph >= fNumLongHorMetrics) { 1947d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod index = fNumLongHorMetrics - 1; 1957d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod } 1967d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1977d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod advance.fX = xUnitsToPoints(SWAPW(fHMTXTable->hMetrics[index].advanceWidth)); 1987d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod advance.fY = 0; 1997d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2007d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2017d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodle_bool PortableFontInstance::getGlyphPoint(LEGlyphID /*glyph*/, le_int32 /*pointNumber*/, LEPoint &/*point*/) const 2027d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2037d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return FALSE; 2047d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2057d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2067d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodle_int32 PortableFontInstance::getUnitsPerEM() const 2077d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2087d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return fUnitsPerEM; 2097d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2107d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2117d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodle_uint32 PortableFontInstance::getFontChecksum() const 2127d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 213ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod return 0; 2147d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2157d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2167d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodle_int32 PortableFontInstance::getAscent() const 2177d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2187d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return fAscent; 2197d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2207d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2217d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodle_int32 PortableFontInstance::getDescent() const 2227d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2237d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return fDescent; 2247d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2257d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2267d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodle_int32 PortableFontInstance::getLeading() const 2277d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2287d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return fLeading; 2297d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2307d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2317d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// We really want to inherit this method from the superclass, but some compilers 2327d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// issue a warning if we don't implement it... 2337d242364ea647f655a7092bda25f9a10774c57f5Behdad EsfahbodLEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const 2347d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2357d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return LEFontInstance::mapCharToGlyph(ch, mapper, filterZeroWidth); 2367d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2377d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2387d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// We really want to inherit this method from the superclass, but some compilers 2397d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// issue a warning if we don't implement it... 2407d242364ea647f655a7092bda25f9a10774c57f5Behdad EsfahbodLEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const 2417d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2427d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return LEFontInstance::mapCharToGlyph(ch, mapper); 2437d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2447d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2457d242364ea647f655a7092bda25f9a10774c57f5Behdad EsfahbodLEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch) const 2467d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2477d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return fCMAPMapper->unicodeToGlyph(ch); 2487d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2497d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2507d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodfloat PortableFontInstance::getXPixelsPerEm() const 2517d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 252ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod return fXScale; 2537d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2547d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2557d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodfloat PortableFontInstance::getYPixelsPerEm() const 2567d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 257ba7f6c3797e5b440557bacd9b666bf09713dca76Behdad Esfahbod return fYScale; 2587d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2597d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2607d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodfloat PortableFontInstance::getScaleFactorX() const 2617d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2627d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return 1.0; 2637d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 2647d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2657d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodfloat PortableFontInstance::getScaleFactorY() const 2667d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2677d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod return 1.0; 2687d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod} 269