10019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch/* 20019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 30019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 40019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * Copyright (C) 2013 Google Inc. All rights reserved. 50019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * 60019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * This library is free software; you can redistribute it and/or 70019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * modify it under the terms of the GNU Library General Public 80019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * License as published by the Free Software Foundation; either 90019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * version 2 of the License, or (at your option) any later version. 100019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * 110019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * This library is distributed in the hope that it will be useful, 120019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of 130019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 140019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * Library General Public License for more details. 150019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * 160019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * You should have received a copy of the GNU Library General Public License 170019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * along with this library; see the file COPYING.LIB. If not, write to 180019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 190019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * Boston, MA 02110-1301, USA. 200019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch * 210019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch */ 220019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 230019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#ifndef FontBuilder_h 240019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#define FontBuilder_h 250019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/CSSValueKeywords.h" 277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/css/FontSize.h" 28f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "platform/fonts/FontDescription.h" 296f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch#include "platform/heap/Handle.h" 300019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#include "wtf/PassRefPtr.h" 310019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 32c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 330019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 340019e4eead4d990e4304c54a9028aca9122fb256Ben Murdochclass CSSValue; 350019e4eead4d990e4304c54a9028aca9122fb256Ben Murdochclass FontSelector; 360019e4eead4d990e4304c54a9028aca9122fb256Ben Murdochclass RenderStyle; 370019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 380019e4eead4d990e4304c54a9028aca9122fb256Ben Murdochclass FontDescriptionChangeScope; 390019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 400019e4eead4d990e4304c54a9028aca9122fb256Ben Murdochclass FontBuilder { 41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) STACK_ALLOCATED(); 42c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(FontBuilder); 430019e4eead4d990e4304c54a9028aca9122fb256Ben Murdochpublic: 440019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch FontBuilder(); 450019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 460019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // FIXME: The name is probably wrong, but matches StyleResolverState callsite for consistency. 47f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) void initForStyleResolve(const Document&, RenderStyle*); 480019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 490019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void setInitial(float effectiveZoom); 500019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 510019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void didChangeFontParameters(bool); 520019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 530019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void inheritFrom(const FontDescription&); 540019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void fromSystemFont(CSSValueID, float effectiveZoom); 550019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 56d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setFontFamilyInitial(); 570019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void setFontFamilyInherit(const FontDescription&); 58d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setFontFamilyValue(CSSValue*); 590019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 600019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void setWeight(FontWeight); 617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void setSize(const FontDescription::Size&); 62c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void setStretch(FontStretch); 63e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) void setFeatureSettings(PassRefPtr<FontFeatureSettings>); 640019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void setScript(const String& locale); 65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setStyle(FontStyle); 66d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setVariant(FontVariant); 67c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) void setVariantLigatures(const FontDescription::VariantLigatures&); 68d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void setTextRendering(TextRenderingMode); 690019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void setKerning(FontDescription::Kerning); 700019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void setFontSmoothing(FontSmoothingMode); 710019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 720019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // FIXME: These need to just vend a Font object eventually. 736f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch void createFont(PassRefPtrWillBeRawPtr<FontSelector>, const RenderStyle* parentStyle, RenderStyle*); 740019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void createFontForDocument(PassRefPtrWillBeRawPtr<FontSelector>, RenderStyle*); 7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 770019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // FIXME: These should not be necessary eventually. 780019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void setFontDirty(bool fontDirty) { m_fontDirty = fontDirty; } 790019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // FIXME: This is only used by an ASSERT in StyleResolver. Remove? 800019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch bool fontDirty() const { return m_fontDirty; } 810019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 82e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) static FontFeatureSettings* initialFeatureSettings() { return nullptr; } 8343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) static FontDescription::GenericFamilyType initialGenericFamily() { return FontDescription::NoFamily; } 847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static FontDescription::Size initialSize() { return FontDescription::Size(FontSize::initialKeywordSize(), 0.0f, false); } 85d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static TextRenderingMode initialTextRendering() { return AutoTextRendering; } 86d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static FontVariant initialVariant() { return FontVariantNormal; } 87c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) static FontDescription::VariantLigatures initialVariantLigatures() { return FontDescription::VariantLigatures(); } 88d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static FontStyle initialStyle() { return FontStyleNormal; } 89d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static FontDescription::Kerning initialKerning() { return FontDescription::AutoKerning; } 90d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static FontSmoothingMode initialFontSmoothing() { return AutoSmoothing; } 91c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) static FontStretch initialStretch() { return FontStretchNormal; } 92e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) static FontWeight initialWeight() { return FontWeightNormal; } 93d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 940019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch friend class FontDescriptionChangeScope; 95d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 960019e4eead4d990e4304c54a9028aca9122fb256Ben Murdochprivate: 970019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 980019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // FIXME: "size" arg should be first for consistency with other similar functions. 997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void setSize(FontDescription&, const FontDescription::Size&); 1000019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void checkForOrientationChange(RenderStyle*); 1010019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // This function fixes up the default font size if it detects that the current generic font family has changed. -dwh 1020019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch void checkForGenericFamilyChange(RenderStyle*, const RenderStyle* parentStyle); 103d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void updateComputedSize(RenderStyle*, const RenderStyle* parentStyle); 1047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void updateComputedSize(FontDescription&, RenderStyle*); 1050019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 1060019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch float getComputedSizeFromSpecifiedSize(FontDescription&, float effectiveZoom, float specifiedSize); 1070019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 108c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) RawPtrWillBeMember<const Document> m_document; 1090019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // FIXME: This member is here on a short-term lease. The plan is to remove 1100019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // any notion of RenderStyle from here, allowing FontBuilder to build Font objects 1110019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // directly, rather than as a byproduct of calling RenderStyle::setFontDescription. 1120019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // FontDescriptionChangeScope should be the only consumer of this member. 1130019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // If you're using it, U R DOIN IT WRONG. 1140019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch RenderStyle* m_style; 1150019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 1160019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // Fontbuilder is responsbile for creating the Font() 1170019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // object on RenderStyle from various other font-related 1180019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // properties on RenderStyle. Whenever one of those 1190019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // is changed, FontBuilder tracks the need to update 1200019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch // style->font() with this bool. 1210019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch bool m_fontDirty; 12243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 12343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) friend class FontBuilderTest; 1240019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch}; 1250019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 1260019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch} 1270019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch 1280019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#endif 129