WebCore:
[WebKit-https.git] / WebCore / platform / graphics / win / FontPlatformData.h
1 /*
2  * This file is part of the internal font implementation.  It should not be included by anyone other than
3  * FontMac.cpp, FontWin.cpp and Font.cpp.
4  *
5  * Copyright (C) 2006, 2007 Apple Inc.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  *
22  */
23
24 #ifndef FontPlatformData_H
25 #define FontPlatformData_H
26
27 #include "StringImpl.h"
28
29 typedef struct HFONT__ *HFONT;
30 typedef struct CGFont *CGFontRef;
31
32 namespace WebCore {
33
34 class FontDescription;
35
36 class FontPlatformData
37 {
38 public:
39     class Deleted {};
40
41     // Used for deleted values in the font cache's hash tables.
42     FontPlatformData(Deleted)
43     : m_font((HFONT)-1)
44     , m_cgFont(NULL)
45     , m_size(0)
46     , m_syntheticBold(false)
47     , m_syntheticOblique(false)
48     {}
49
50     FontPlatformData()
51     : m_font(0)
52     , m_cgFont(NULL)
53     , m_size(0)
54     , m_syntheticBold(false)
55     , m_syntheticOblique(false)
56     {}
57
58     FontPlatformData(HFONT, float size, bool bold, bool oblique);
59     FontPlatformData(CGFontRef, float size, bool bold, bool oblique);
60     ~FontPlatformData();
61
62     HFONT hfont() const { return m_font; }
63     CGFontRef cgFont() const { return m_cgFont; }
64
65     float size() const { return m_size; }
66     void setSize(float size) { m_size = size; }
67     bool syntheticBold() const { return m_syntheticBold; }
68     bool syntheticOblique() const { return m_syntheticOblique; }
69
70     unsigned hash() const
71     {
72         return StringImpl::computeHash((UChar*)(&m_font), sizeof(HFONT) / sizeof(UChar));
73     }
74
75     bool operator==(const FontPlatformData& other) const
76     { 
77         return m_font == other.m_font && m_cgFont ==other.m_cgFont && m_size == other.m_size &&
78                m_syntheticBold == other.m_syntheticBold && m_syntheticOblique == other.m_syntheticOblique;
79     }
80
81 private:
82     HFONT m_font;
83     CGFontRef m_cgFont;
84
85     float m_size;
86     bool m_syntheticBold;
87     bool m_syntheticOblique;
88 };
89
90 }
91
92 #endif