64-bit build fix
[WebKit-https.git] / WebCore / platform / graphics / mac / FontCustomPlatformData.cpp
1 /*
2  * Copyright (C) 2007 Apple Computer, Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  *
19  */
20
21 #include "config.h"
22 #include "FontCustomPlatformData.h"
23
24 #include <ApplicationServices/ApplicationServices.h>
25 #include "SharedBuffer.h"
26 #include "FontPlatformData.h"
27
28 namespace WebCore {
29
30 FontCustomPlatformData::~FontCustomPlatformData()
31 {
32     ATSFontDeactivate(m_atsContainer, NULL, kATSOptionFlagsDefault);
33     CGFontRelease(m_cgFont);
34 }
35
36 FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic)
37 {
38     return FontPlatformData(m_cgFont, (ATSUFontID)m_atsFont, size, bold, italic);
39 }
40
41 FontCustomPlatformData* createFontCustomPlatformData(SharedBuffer* buffer)
42 {
43     // Use ATS to activate the font.
44     ATSFontContainerRef containerRef = 0;
45
46     // The value "3" means that the font is private and can't be seen by anyone else.
47     ATSFontActivateFromMemory((void*)buffer->data(), buffer->size(), 3, kATSFontFormatUnspecified, NULL, kATSOptionFlagsDefault, &containerRef);
48     if (!containerRef)
49         return 0;
50     ItemCount fontCount;
51     ATSFontFindFromContainer(containerRef, kATSOptionFlagsDefault, 0, NULL, &fontCount);
52     
53     // We just support the first font in the list.
54     if (fontCount == 0) {
55         ATSFontDeactivate(containerRef, NULL, kATSOptionFlagsDefault);
56         return 0;
57     }
58     
59     ATSFontRef fontRef = 0;
60     ATSFontFindFromContainer(containerRef, kATSOptionFlagsDefault, 1, &fontRef, NULL);
61     if (!fontRef) {
62         ATSFontDeactivate(containerRef, NULL, kATSOptionFlagsDefault);
63         return 0;
64     }
65     
66     CGFontRef cgFontRef = CGFontCreateWithPlatformFont(&fontRef);
67     if (!cgFontRef) {
68         ATSFontDeactivate(containerRef, NULL, kATSOptionFlagsDefault);
69         return 0;
70     }
71
72     return new FontCustomPlatformData(containerRef, fontRef, cgFontRef);
73 }
74
75 }