1/*
2 * Copyright (C) 2013 Google, 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#ifndef CSSCustomFontData_h
22#define CSSCustomFontData_h
23
24#include "core/css/CSSFontFaceSource.h"
25#include "platform/fonts/CustomFontData.h"
26
27namespace blink {
28
29class CSSCustomFontData FINAL : public CustomFontData {
30public:
31    enum FallbackVisibility { InvisibleFallback, VisibleFallback };
32
33    static PassRefPtr<CSSCustomFontData> create(RemoteFontFaceSource* source, FallbackVisibility visibility)
34    {
35        return adoptRef(new CSSCustomFontData(source, visibility));
36    }
37
38    virtual ~CSSCustomFontData() { }
39
40    virtual bool shouldSkipDrawing() const OVERRIDE
41    {
42        if (m_fontFaceSource)
43            m_fontFaceSource->paintRequested();
44        return m_fallbackVisibility == InvisibleFallback && m_isLoading;
45    }
46
47    virtual void beginLoadIfNeeded() const OVERRIDE
48    {
49        if (!m_isLoading && m_fontFaceSource) {
50            m_isLoading = true;
51            m_fontFaceSource->beginLoadIfNeeded();
52        }
53    }
54
55    virtual bool isLoading() const OVERRIDE { return m_isLoading; }
56    virtual bool isLoadingFallback() const OVERRIDE { return true; }
57    virtual void clearFontFaceSource() OVERRIDE { m_fontFaceSource = 0; }
58
59private:
60    CSSCustomFontData(RemoteFontFaceSource* source, FallbackVisibility visibility)
61        : m_fontFaceSource(source)
62        , m_fallbackVisibility(visibility)
63        , m_isLoading(false)
64    {
65        if (source)
66            m_isLoading = source->isLoading();
67    }
68
69    RemoteFontFaceSource* m_fontFaceSource;
70    FallbackVisibility m_fallbackVisibility;
71    mutable bool m_isLoading;
72};
73
74}
75
76#endif // CSSCustomFontData_h
77