• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006, 2007, 2008 Apple Inc.
3  * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com
4  * Copyright (C) 2007 Holger Hans Peter Freyther
5  * Copyright (C) 2007 Pioneer Research Center USA, Inc.
6  * All rights reserved.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public License
19  * along with this library; see the file COPYING.LIB.  If not, write to
20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  *
23  */
24 
25 #ifndef FontPlatformDataPango_h
26 #define FontPlatformDataPango_h
27 
28 #include "FontDescription.h"
29 #include "FontOrientation.h"
30 #include "GlyphBuffer.h"
31 #include <cairo.h>
32 #include <pango/pangocairo.h>
33 #include <wtf/Forward.h>
34 
35 namespace WebCore {
36 
37 class FontPlatformData {
38 public:
FontPlatformData(WTF::HashTableDeletedValueType)39     FontPlatformData(WTF::HashTableDeletedValueType)
40         : m_context(0)
41         , m_font(hashTableDeletedFontValue())
42         , m_size(0)
43         , m_syntheticBold(false)
44         , m_syntheticOblique(false)
45         , m_scaledFont(0)
46         { }
47 
FontPlatformData()48     FontPlatformData()
49         : m_context(0)
50         , m_font(0)
51         , m_size(0)
52         , m_syntheticBold(false)
53         , m_syntheticOblique(false)
54         , m_scaledFont(0)
55         { }
56 
57     FontPlatformData(const FontDescription&, const AtomicString& family);
58     FontPlatformData(cairo_font_face_t* fontFace, float size, bool bold, bool italic);
59     FontPlatformData(float size, bool bold, bool italic);
60     FontPlatformData(const FontPlatformData&);
61     ~FontPlatformData();
62 
63     static bool init();
64     bool isFixedPitch();
size()65     float size() const { return m_size; }
setSize(float size)66     void setSize(float size) { m_size = size; }
syntheticBold()67     bool syntheticBold() const { return m_syntheticBold; }
syntheticOblique()68     bool syntheticOblique() const { return m_syntheticOblique; }
69 
orientation()70     FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
setOrientation(FontOrientation)71     void setOrientation(FontOrientation) { } // FIXME: Implement.
72 
scaledFont()73     cairo_scaled_font_t* scaledFont() const { return m_scaledFont; }
74 
hash()75     unsigned hash() const
76     {
77         uintptr_t hashCodes[1] = { reinterpret_cast<uintptr_t>(m_scaledFont) };
78         return StringHasher::hashMemory<sizeof(hashCodes)>(hashCodes);
79     }
80 
81     bool operator==(const FontPlatformData&) const;
82     FontPlatformData& operator=(const FontPlatformData&);
isHashTableDeletedValue()83     bool isHashTableDeletedValue() const
84     {
85         return m_font == hashTableDeletedFontValue();
86     }
87 
88 #ifndef NDEBUG
89     String description() const;
90 #endif
91 
92     static PangoFontMap* m_fontMap;
93     static GHashTable* m_hashTable;
94     PangoContext* m_context;
95     PangoFont* m_font;
96     float m_size;
97     bool m_syntheticBold;
98     bool m_syntheticOblique;
99     cairo_scaled_font_t* m_scaledFont;
100 private:
hashTableDeletedFontValue()101     static PangoFont *hashTableDeletedFontValue() { return reinterpret_cast<PangoFont*>(-1); }
102 };
103 
104 }
105 
106 #endif // FontPlatformDataPango_h
107