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