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 303d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#ifndef FontPlatformData_h 313d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#define FontPlatformData_h 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 335144992c32630d3a9d1af0171204232d5d6eb442Russell Brenner#include "FontOrientation.h" 34295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho#include "TextOrientation.h" 355144992c32630d3a9d1af0171204232d5d6eb442Russell Brenner#include <wtf/text/StringImpl.h> 365144992c32630d3a9d1af0171204232d5d6eb442Russell Brenner 3706f1ecff0f609438be162b71b50a3be08983df23Patrick Scott#ifndef NDEBUG 3806f1ecff0f609438be162b71b50a3be08983df23Patrick Scott#include "PlatformString.h" 3906f1ecff0f609438be162b71b50a3be08983df23Patrick Scott#endif 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass SkPaint; 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass SkTypeface; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44c882e887207fecca865d26ab84fcc541c1b08fd9clairehostruct HB_FaceRec_; 45c882e887207fecca865d26ab84fcc541c1b08fd9claireho 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass FontPlatformData { 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static FontPlatformData Deleted() { 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return FontPlatformData(NULL, -1, false, false); 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FontPlatformData(); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FontPlatformData(const FontPlatformData&); 56295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho FontPlatformData(SkTypeface*, float textSize, bool fakeBold, bool fakeItalic, 57295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho FontOrientation = Horizontal, TextOrientation = TextOrientationVerticalRight); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FontPlatformData(const FontPlatformData& src, float textSize); 598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian FontPlatformData(float size, bool syntheticBold, bool syntheticOblique); 606afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner FontPlatformData(const FontPlatformData& src, SkTypeface* typeface); 618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ~FontPlatformData(); 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FontPlatformData(WTF::HashTableDeletedValueType) 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : mTypeface(hashTableDeletedFontValue()) { } 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isHashTableDeletedValue() const { 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return mTypeface == hashTableDeletedFontValue(); 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 70295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho FontOrientation orientation() const { return mOrientation; } 71295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho void setOrientation(FontOrientation orientation) { mOrientation = orientation; } 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FontPlatformData& operator=(const FontPlatformData&); 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool operator==(const FontPlatformData& a) const; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setupPaint(SkPaint*) const; 76c882e887207fecca865d26ab84fcc541c1b08fd9claireho 77c882e887207fecca865d26ab84fcc541c1b08fd9claireho // ------------------------------------------------------------------------- 78c882e887207fecca865d26ab84fcc541c1b08fd9claireho // Return Skia's unique id for this font. This encodes both the style and 79c882e887207fecca865d26ab84fcc541c1b08fd9claireho // the font's file name so refers to a single face. 80c882e887207fecca865d26ab84fcc541c1b08fd9claireho // ------------------------------------------------------------------------- 81c882e887207fecca865d26ab84fcc541c1b08fd9claireho uint32_t uniqueID() const; 82c882e887207fecca865d26ab84fcc541c1b08fd9claireho 8319fea7269332fafa8a7f432a571f7b3127df4004Cary Clark float size() const { return mTextSize; } 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned hash() const; 85af8f2e55f0a34a87ebc57a2a9c60092e2da89883Russell Brenner bool isFixedPitch() const; 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8706f1ecff0f609438be162b71b50a3be08983df23Patrick Scott#ifndef NDEBUG 8806f1ecff0f609438be162b71b50a3be08983df23Patrick Scott String description() const { return ""; } 8906f1ecff0f609438be162b71b50a3be08983df23Patrick Scott#endif 9006f1ecff0f609438be162b71b50a3be08983df23Patrick Scott 91c882e887207fecca865d26ab84fcc541c1b08fd9claireho HB_FaceRec_* harfbuzzFace() const; 926afb175cd4fceab68383533f7f8539100067c5c9Russell Brenner SkTypeface* typeface() const { return mTypeface; } 93c882e887207fecca865d26ab84fcc541c1b08fd9claireho 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 95c882e887207fecca865d26ab84fcc541c1b08fd9claireho class RefCountedHarfbuzzFace : public RefCounted<RefCountedHarfbuzzFace> { 96c882e887207fecca865d26ab84fcc541c1b08fd9claireho public: 97c882e887207fecca865d26ab84fcc541c1b08fd9claireho static PassRefPtr<RefCountedHarfbuzzFace> create(HB_FaceRec_* harfbuzzFace) 98c882e887207fecca865d26ab84fcc541c1b08fd9claireho { 99c882e887207fecca865d26ab84fcc541c1b08fd9claireho return adoptRef(new RefCountedHarfbuzzFace(harfbuzzFace)); 100c882e887207fecca865d26ab84fcc541c1b08fd9claireho } 101c882e887207fecca865d26ab84fcc541c1b08fd9claireho 102c882e887207fecca865d26ab84fcc541c1b08fd9claireho ~RefCountedHarfbuzzFace(); 103c882e887207fecca865d26ab84fcc541c1b08fd9claireho 104c882e887207fecca865d26ab84fcc541c1b08fd9claireho HB_FaceRec_* face() const { return m_harfbuzzFace; } 105c882e887207fecca865d26ab84fcc541c1b08fd9claireho 106c882e887207fecca865d26ab84fcc541c1b08fd9claireho private: 107c882e887207fecca865d26ab84fcc541c1b08fd9claireho RefCountedHarfbuzzFace(HB_FaceRec_* harfbuzzFace) : m_harfbuzzFace(harfbuzzFace) 108c882e887207fecca865d26ab84fcc541c1b08fd9claireho { 109c882e887207fecca865d26ab84fcc541c1b08fd9claireho } 110c882e887207fecca865d26ab84fcc541c1b08fd9claireho 111c882e887207fecca865d26ab84fcc541c1b08fd9claireho HB_FaceRec_* m_harfbuzzFace; 112c882e887207fecca865d26ab84fcc541c1b08fd9claireho }; 113c882e887207fecca865d26ab84fcc541c1b08fd9claireho 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SkTypeface* mTypeface; 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float mTextSize; 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool mFakeBold; 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool mFakeItalic; 118295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho FontOrientation mOrientation; 119295fd960c28a38cfa7a28d4b8f68f474394f7fb0claireho TextOrientation mTextOrientation; 120c882e887207fecca865d26ab84fcc541c1b08fd9claireho mutable RefPtr<RefCountedHarfbuzzFace> m_harfbuzzFace; 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static SkTypeface* hashTableDeletedFontValue() { 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return reinterpret_cast<SkTypeface*>(-1); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 126c882e887207fecca865d26ab84fcc541c1b08fd9claireho 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} /* namespace */ 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 130