1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
/*
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
* Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
* Copyright (C) 2013 Google Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
*/
#ifndef FontBuilder_h
#define FontBuilder_h
#include "core/CSSValueKeywords.h"
#include "platform/fonts/FontDescription.h"
#include "platform/heap/Handle.h"
#include "wtf/PassRefPtr.h"
namespace WebCore {
class CSSValue;
class FontSelector;
class RenderStyle;
class FontDescriptionChangeScope;
class FontBuilder {
WTF_MAKE_NONCOPYABLE(FontBuilder); WTF_MAKE_FAST_ALLOCATED;
public:
FontBuilder();
// FIXME: The name is probably wrong, but matches StyleResolverState callsite for consistency.
void initForStyleResolve(const Document&, RenderStyle*);
void setInitial(float effectiveZoom);
void didChangeFontParameters(bool);
void inheritFrom(const FontDescription&);
void fromSystemFont(CSSValueID, float effectiveZoom);
void setFontFamilyInitial();
void setFontFamilyInherit(const FontDescription&);
void setFontFamilyValue(CSSValue*);
void setFontSizeInitial();
void setFontSizeInherit(const FontDescription&);
void setFontSizeValue(CSSValue*, RenderStyle* parentStyle, const RenderStyle* rootElementStyle);
void setWeight(FontWeight);
void setWeightBolder();
void setWeightLighter();
void setFontVariantLigaturesInitial();
void setFontVariantLigaturesInherit(const FontDescription&);
void setFontVariantLigaturesValue(CSSValue*);
void setFeatureSettingsNormal();
void setFeatureSettingsValue(CSSValue*);
void setScript(const String& locale);
void setStyle(FontStyle);
void setVariant(FontVariant);
void setTextRendering(TextRenderingMode);
void setKerning(FontDescription::Kerning);
void setFontSmoothing(FontSmoothingMode);
// FIXME: These need to just vend a Font object eventually.
void createFont(PassRefPtrWillBeRawPtr<FontSelector>, const RenderStyle* parentStyle, RenderStyle*);
// FIXME: This is nearly static, should either made fully static or decomposed into
// FontBuilder calls at the callsite.
void createFontForDocument(PassRefPtrWillBeRawPtr<FontSelector>, RenderStyle*);
bool fontSizeHasViewportUnits() { return m_fontSizehasViewportUnits; }
// FIXME: These should not be necessary eventually.
void setFontDirty(bool fontDirty) { m_fontDirty = fontDirty; }
// FIXME: This is only used by an ASSERT in StyleResolver. Remove?
bool fontDirty() const { return m_fontDirty; }
static FontDescription::GenericFamilyType initialGenericFamily() { return FontDescription::NoFamily; }
static TextRenderingMode initialTextRendering() { return AutoTextRendering; }
static FontVariant initialVariant() { return FontVariantNormal; }
static FontStyle initialStyle() { return FontStyleNormal; }
static FontDescription::Kerning initialKerning() { return FontDescription::AutoKerning; }
static FontSmoothingMode initialFontSmoothing() { return AutoSmoothing; }
friend class FontDescriptionChangeScope;
private:
// FIXME: "size" arg should be first for consistency with other similar functions.
void setSize(FontDescription&, float effectiveZoom, float size);
void checkForOrientationChange(RenderStyle*);
// This function fixes up the default font size if it detects that the current generic font family has changed. -dwh
void checkForGenericFamilyChange(RenderStyle*, const RenderStyle* parentStyle);
void updateComputedSize(RenderStyle*, const RenderStyle* parentStyle);
float getComputedSizeFromSpecifiedSize(FontDescription&, float effectiveZoom, float specifiedSize);
const Document* m_document;
bool m_fontSizehasViewportUnits;
// FIXME: This member is here on a short-term lease. The plan is to remove
// any notion of RenderStyle from here, allowing FontBuilder to build Font objects
// directly, rather than as a byproduct of calling RenderStyle::setFontDescription.
// FontDescriptionChangeScope should be the only consumer of this member.
// If you're using it, U R DOIN IT WRONG.
RenderStyle* m_style;
// Fontbuilder is responsbile for creating the Font()
// object on RenderStyle from various other font-related
// properties on RenderStyle. Whenever one of those
// is changed, FontBuilder tracks the need to update
// style->font() with this bool.
bool m_fontDirty;
friend class FontBuilderTest;
};
}
#endif
|