1/*
2 * Copyright 2009, The Android Open Source Project
3 * Copyright (C) 2006 Apple Computer, Inc.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *  * Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 *  * Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27// This file is part of the internal font implementation.  It should not be included by anyone other than
28// FontMac.cpp, FontWin.cpp and Font.cpp.
29
30#ifndef FontPlatformData_H
31#define FontPlatformData_H
32
33#ifndef NDEBUG
34#include "PlatformString.h"
35#endif
36
37#include "StringImpl.h"
38
39class SkPaint;
40class SkTypeface;
41
42namespace WebCore {
43
44class FontPlatformData {
45public:
46    static FontPlatformData Deleted() {
47        return FontPlatformData(NULL, -1, false, false);
48    }
49
50    FontPlatformData();
51    FontPlatformData(const FontPlatformData&);
52    FontPlatformData(SkTypeface*, float textSize, bool fakeBold, bool fakeItalic);
53    FontPlatformData(const FontPlatformData& src, float textSize);
54    FontPlatformData(float size, bool syntheticBold, bool syntheticOblique);
55
56    ~FontPlatformData();
57
58    FontPlatformData(WTF::HashTableDeletedValueType)
59        : mTypeface(hashTableDeletedFontValue()) { }
60    bool isHashTableDeletedValue() const {
61        return mTypeface == hashTableDeletedFontValue();
62    }
63
64    FontPlatformData& operator=(const FontPlatformData&);
65    bool operator==(const FontPlatformData& a) const;
66
67    void     setupPaint(SkPaint*) const;
68    float size() const { return mTextSize; }
69    unsigned hash() const;
70
71#ifndef NDEBUG
72    String description() const { return ""; }
73#endif
74
75private:
76    SkTypeface* mTypeface;
77    float       mTextSize;
78    bool        mFakeBold;
79    bool        mFakeItalic;
80
81    static SkTypeface* hashTableDeletedFontValue() {
82        return reinterpret_cast<SkTypeface*>(-1);
83    }
84};
85
86} /* namespace */
87
88#endif
89