2 * Copyright (C) 2008 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 #ifndef CSSSegmentedFontFace_h
27 #define CSSSegmentedFontFace_h
29 #include "platform/fonts/FontTraitsMask.h"
30 #include "wtf/HashMap.h"
31 #include "wtf/PassRefPtr.h"
32 #include "wtf/RefCounted.h"
33 #include "wtf/Vector.h"
34 #include "wtf/text/WTFString.h"
39 class CSSFontSelector;
41 class FontDescription;
43 class SegmentedFontData;
45 class CSSSegmentedFontFace : public RefCounted<CSSSegmentedFontFace> {
47 static PassRefPtr<CSSSegmentedFontFace> create(CSSFontSelector* selector, FontTraitsMask traitsMask, bool isLocalFallback) { return adoptRef(new CSSSegmentedFontFace(selector, traitsMask, isLocalFallback)); }
48 ~CSSSegmentedFontFace();
50 CSSFontSelector* fontSelector() const { return m_fontSelector; }
51 FontTraitsMask traitsMask() const { return m_traitsMask; }
52 bool isLocalFallback() const { return m_isLocalFallback; }
54 void fontLoaded(CSSFontFace*);
56 void appendFontFace(PassRefPtr<CSSFontFace>);
58 PassRefPtr<FontData> getFontData(const FontDescription&);
60 class LoadFontCallback : public RefCounted<LoadFontCallback> {
62 virtual ~LoadFontCallback() { }
63 virtual void notifyLoaded(CSSSegmentedFontFace*) = 0;
64 virtual void notifyError(CSSSegmentedFontFace*) = 0;
67 bool checkFont(const String&) const;
68 void loadFont(const FontDescription&, const String&, PassRefPtr<LoadFontCallback>);
69 Vector<RefPtr<FontFace> > fontFaces(const String& text) const;
70 void willUseFontData(const FontDescription&);
73 CSSSegmentedFontFace(CSSFontSelector*, FontTraitsMask, bool isLocalFallback);
77 bool isLoading() const;
78 bool isLoaded() const;
80 CSSFontSelector* m_fontSelector;
81 FontTraitsMask m_traitsMask;
82 bool m_isLocalFallback;
83 HashMap<unsigned, RefPtr<SegmentedFontData> > m_fontDataTable;
84 Vector<RefPtr<CSSFontFace>, 1> m_fontFaces;
85 Vector<RefPtr<LoadFontCallback> > m_callbacks;
88 } // namespace WebCore
90 #endif // CSSSegmentedFontFace_h