18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2009, The Android Open Source Project 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Apple Computer, Inc. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 5e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * Redistribution and use in source and binary forms, with or without 6e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * modification, are permitted provided that the following conditions 7e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * are met: 8e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * * Redistributions of source code must retain the above copyright 9e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * notice, this list of conditions and the following disclaimer. 10e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * * Redistributions in binary form must reproduce the above copyright 11e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * notice, this list of conditions and the following disclaimer in the 12e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 14e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 15e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 18e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 21e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 22e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 27e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block//This file is part of the internal font implementation. It should not be included by anyone other than 28e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block// FontMac.cpp, FontWin.cpp and Font.cpp. 29e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FontPlatformData.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33c882e887207fecca865d26ab84fcc541c1b08fd9claireho#ifdef SUPPORT_COMPLEX_SCRIPTS 34c882e887207fecca865d26ab84fcc541c1b08fd9claireho#include "HarfbuzzSkia.h" 35c882e887207fecca865d26ab84fcc541c1b08fd9claireho#endif 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkPaint.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkTypeface.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//#define TRACE_FONTPLATFORMDATA_LIFE 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//#define COUNT_FONTPLATFORMDATA_LIFE 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef COUNT_FONTPLATFORMDATA_LIFE 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic int gCount; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic int gMaxCount; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void inc_count() 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (++gCount > gMaxCount) 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gMaxCount = gCount; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SkDebugf("---------- FontPlatformData %d\n", gMaxCount); 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void dec_count() { --gCount; } 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #define inc_count() 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #define dec_count() 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef TRACE_FONTPLATFORMDATA_LIFE 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #define trace(num) SkDebugf("FontPlatformData%d %p %g %d %d\n", num, mTypeface, mTextSize, mFakeBold, mFakeItalic) 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #define trace(num) 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 69c882e887207fecca865d26ab84fcc541c1b08fd9clairehoFontPlatformData::RefCountedHarfbuzzFace::~RefCountedHarfbuzzFace() 70c882e887207fecca865d26ab84fcc541c1b08fd9claireho{ 71c882e887207fecca865d26ab84fcc541c1b08fd9claireho#ifdef SUPPORT_COMPLEX_SCRIPTS 72c882e887207fecca865d26ab84fcc541c1b08fd9claireho HB_FreeFace(m_harfbuzzFace); 73c882e887207fecca865d26ab84fcc541c1b08fd9claireho#endif 74c882e887207fecca865d26ab84fcc541c1b08fd9claireho} 75c882e887207fecca865d26ab84fcc541c1b08fd9claireho 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFontPlatformData::FontPlatformData() 77295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho : mTypeface(NULL), mTextSize(0), mFakeBold(false), mFakeItalic(false), 78295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mOrientation(Horizontal), mTextOrientation(TextOrientationVerticalRight) 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inc_count(); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project trace(1); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFontPlatformData::FontPlatformData(const FontPlatformData& src) 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hashTableDeletedFontValue() != src.mTypeface) { 87b33016812afef21c69df5ab3d5b85eab5fef7c5cDerek Sollenberger SkSafeRef(src.mTypeface); 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mTypeface = src.mTypeface; 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mTextSize = src.mTextSize; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mFakeBold = src.mFakeBold; 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mFakeItalic = src.mFakeItalic; 95c882e887207fecca865d26ab84fcc541c1b08fd9claireho m_harfbuzzFace = src.m_harfbuzzFace; 96295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mOrientation = src.mOrientation; 97295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mTextOrientation = src.mTextOrientation; 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inc_count(); 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project trace(2); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 103295fd960c28a38cfa7a28d4b8f68f474394f7fb0clairehoFontPlatformData::FontPlatformData(SkTypeface* tf, float textSize, bool fakeBold, bool fakeItalic, 104295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho FontOrientation orientation, TextOrientation textOrientation) 105295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho : mTypeface(tf), mTextSize(textSize), mFakeBold(fakeBold), mFakeItalic(fakeItalic), 106295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mOrientation(orientation), mTextOrientation(textOrientation) 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hashTableDeletedFontValue() != mTypeface) { 109b33016812afef21c69df5ab3d5b85eab5fef7c5cDerek Sollenberger SkSafeRef(mTypeface); 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 111c882e887207fecca865d26ab84fcc541c1b08fd9claireho 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inc_count(); 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project trace(3); 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFontPlatformData::FontPlatformData(const FontPlatformData& src, float textSize) 117c882e887207fecca865d26ab84fcc541c1b08fd9claireho : mTypeface(src.mTypeface), mTextSize(textSize), mFakeBold(src.mFakeBold), mFakeItalic(src.mFakeItalic), 118295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho m_harfbuzzFace(src.m_harfbuzzFace), mOrientation(src.mOrientation), mTextOrientation(src.mTextOrientation) 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hashTableDeletedFontValue() != mTypeface) { 121b33016812afef21c69df5ab3d5b85eab5fef7c5cDerek Sollenberger SkSafeRef(mTypeface); 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project inc_count(); 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project trace(4); 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 127c882e887207fecca865d26ab84fcc541c1b08fd9claireho 1288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng QianFontPlatformData::FontPlatformData(float size, bool bold, bool oblique) 129295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho : mTypeface(NULL), mTextSize(size), mFakeBold(bold), mFakeItalic(oblique), 130295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mOrientation(Horizontal), mTextOrientation(TextOrientationVerticalRight) 1318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 1328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian inc_count(); 1338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian trace(5); 1348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 1358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1366afb175cd4fceab68383533f7f8539100067c5c9Russell BrennerFontPlatformData::FontPlatformData(const FontPlatformData& src, SkTypeface* tf) 1376afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner : mTypeface(tf), mTextSize(src.mTextSize), mFakeBold(src.mFakeBold), 138295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mFakeItalic(src.mFakeItalic), mOrientation(src.mOrientation), 139295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mTextOrientation(src.mTextOrientation) 1406afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner{ 1416afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner if (hashTableDeletedFontValue() != mTypeface) { 1426afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner SkSafeRef(mTypeface); 1436afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner } 1446afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner 1456afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner inc_count(); 1466afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner trace(6); 1476afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner} 1486afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFontPlatformData::~FontPlatformData() 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project dec_count(); 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef TRACE_FONTPLATFORMDATA_LIFE 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SkDebugf("----------- ~FontPlatformData\n"); 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hashTableDeletedFontValue() != mTypeface) { 157b33016812afef21c69df5ab3d5b85eab5fef7c5cDerek Sollenberger SkSafeUnref(mTypeface); 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFontPlatformData& FontPlatformData::operator=(const FontPlatformData& src) 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hashTableDeletedFontValue() != src.mTypeface) { 164b33016812afef21c69df5ab3d5b85eab5fef7c5cDerek Sollenberger SkSafeRef(src.mTypeface); 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hashTableDeletedFontValue() != mTypeface) { 167b33016812afef21c69df5ab3d5b85eab5fef7c5cDerek Sollenberger SkSafeUnref(mTypeface); 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mTypeface = src.mTypeface; 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mTextSize = src.mTextSize; 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mFakeBold = src.mFakeBold; 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mFakeItalic = src.mFakeItalic; 174c882e887207fecca865d26ab84fcc541c1b08fd9claireho m_harfbuzzFace = src.m_harfbuzzFace; 175295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mOrientation = src.mOrientation; 176295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mTextOrientation = src.mTextOrientation; 177c882e887207fecca865d26ab84fcc541c1b08fd9claireho 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return *this; 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FontPlatformData::setupPaint(SkPaint* paint) const 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float ts = mTextSize; 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!(ts > 0)) 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ts = 12; 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 187dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner if (hashTableDeletedFontValue() == mTypeface) 188dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner paint->setTypeface(0); 189dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner else 190dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner paint->setTypeface(mTypeface); 191dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paint->setAntiAlias(true); 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paint->setSubpixelText(true); 194efcd15d5b86039cd8ccdc5ce6777a56132677550Mike Reed paint->setHinting(SkPaint::kSlight_Hinting); 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paint->setTextSize(SkFloatToScalar(ts)); 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paint->setFakeBoldText(mFakeBold); 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paint->setTextSkewX(mFakeItalic ? -SK_Scalar1/4 : 0); 198c882e887207fecca865d26ab84fcc541c1b08fd9claireho#ifndef SUPPORT_COMPLEX_SCRIPTS 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paint->setTextEncoding(SkPaint::kUTF16_TextEncoding); 200c882e887207fecca865d26ab84fcc541c1b08fd9claireho#endif 201c882e887207fecca865d26ab84fcc541c1b08fd9claireho} 202c882e887207fecca865d26ab84fcc541c1b08fd9claireho 203c882e887207fecca865d26ab84fcc541c1b08fd9clairehouint32_t FontPlatformData::uniqueID() const 204c882e887207fecca865d26ab84fcc541c1b08fd9claireho{ 205dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner if (hashTableDeletedFontValue() == mTypeface) 206dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner return SkTypeface::UniqueID(0); 207dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner else 208dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner return SkTypeface::UniqueID(mTypeface); 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FontPlatformData::operator==(const FontPlatformData& a) const 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return mTypeface == a.mTypeface && 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mTextSize == a.mTextSize && 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mFakeBold == a.mFakeBold && 216295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mFakeItalic == a.mFakeItalic && 217295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mOrientation == a.mOrientation && 218295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho mTextOrientation == a.mTextOrientation; 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectunsigned FontPlatformData::hash() const 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned h; 224c882e887207fecca865d26ab84fcc541c1b08fd9claireho 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hashTableDeletedFontValue() == mTypeface) { 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project h = reinterpret_cast<unsigned>(mTypeface); 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project h = SkTypeface::UniqueID(mTypeface); 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 230c882e887207fecca865d26ab84fcc541c1b08fd9claireho 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uint32_t sizeAsInt = *reinterpret_cast<const uint32_t*>(&mTextSize); 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 233295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho h ^= 0x01010101 * ((static_cast<int>(mTextOrientation) << 3) | (static_cast<int>(mOrientation) << 2) | 234295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho ((int)mFakeBold << 1) | (int)mFakeItalic); 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project h ^= sizeAsInt; 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return h; 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 239af8f2e55f0a34a87ebc57a2a9c60092e2da89883Russell Brennerbool FontPlatformData::isFixedPitch() const 240af8f2e55f0a34a87ebc57a2a9c60092e2da89883Russell Brenner{ 241dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner if (mTypeface && (mTypeface != hashTableDeletedFontValue())) 242dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner return mTypeface->isFixedWidth(); 243dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner else 244dd816e39169b0fd3390257c1b43fb96f9b87577bRussell Brenner return false; 245af8f2e55f0a34a87ebc57a2a9c60092e2da89883Russell Brenner} 246af8f2e55f0a34a87ebc57a2a9c60092e2da89883Russell Brenner 247c882e887207fecca865d26ab84fcc541c1b08fd9clairehoHB_FaceRec_* FontPlatformData::harfbuzzFace() const 248c882e887207fecca865d26ab84fcc541c1b08fd9claireho{ 249c882e887207fecca865d26ab84fcc541c1b08fd9claireho#ifdef SUPPORT_COMPLEX_SCRIPTS 250c882e887207fecca865d26ab84fcc541c1b08fd9claireho if (!m_harfbuzzFace) 251c882e887207fecca865d26ab84fcc541c1b08fd9claireho m_harfbuzzFace = RefCountedHarfbuzzFace::create( 252c882e887207fecca865d26ab84fcc541c1b08fd9claireho HB_NewFace(const_cast<FontPlatformData*>(this), harfbuzzSkiaGetTable)); 253c882e887207fecca865d26ab84fcc541c1b08fd9claireho 254c882e887207fecca865d26ab84fcc541c1b08fd9claireho return m_harfbuzzFace->face(); 255c882e887207fecca865d26ab84fcc541c1b08fd9claireho#else 256c882e887207fecca865d26ab84fcc541c1b08fd9claireho return NULL; 257c882e887207fecca865d26ab84fcc541c1b08fd9claireho#endif 258c882e887207fecca865d26ab84fcc541c1b08fd9claireho} 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 260