Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(741)

Unified Diff: Source/core/css/resolver/FontBuilder.cpp

Issue 602373003: Make style building for 'font-family' less custom. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Init genericFamily in all cases. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/css/resolver/FontBuilder.h ('k') | Source/core/css/resolver/StyleBuilderConverter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/resolver/FontBuilder.cpp
diff --git a/Source/core/css/resolver/FontBuilder.cpp b/Source/core/css/resolver/FontBuilder.cpp
index 2bc7804c038aaa935a804596e96a02cbd00a60d6..9a4422fd3fa2258c7a806115b26029c4b2e5d2eb 100644
--- a/Source/core/css/resolver/FontBuilder.cpp
+++ b/Source/core/css/resolver/FontBuilder.cpp
@@ -23,13 +23,13 @@
#include "config.h"
#include "core/css/resolver/FontBuilder.h"
-#include "core/css/CSSCalculationValue.h"
-#include "core/css/CSSToLengthConversionData.h"
+#include "core/CSSValueKeywords.h"
#include "core/frame/LocalFrame.h"
#include "core/frame/Settings.h"
#include "core/rendering/RenderTheme.h"
#include "core/rendering/RenderView.h"
#include "core/rendering/TextAutosizer.h"
+#include "platform/FontFamilyNames.h"
#include "platform/fonts/FontDescription.h"
#include "platform/text/LocaleToScriptMapping.h"
@@ -75,21 +75,6 @@ void FontBuilder::initForStyleResolve(const Document& document, RenderStyle* sty
m_fontDirty = false;
}
-inline static void setFontFamilyToStandard(FontDescription& fontDescription, const Document* document)
-{
- if (!document || !document->settings())
- return;
-
- fontDescription.setGenericFamily(FontDescription::StandardFamily);
- const AtomicString& standardFontFamily = document->settings()->genericFontFamilySettings().standard();
- if (standardFontFamily.isEmpty())
- return;
-
- fontDescription.firstFamily().setFamily(standardFontFamily);
- // FIXME: Why is this needed here?
- fontDescription.firstFamily().appendFamily(nullptr);
-}
-
void FontBuilder::setInitial(float effectiveZoom)
{
ASSERT(m_document && m_document->settings());
@@ -99,7 +84,7 @@ void FontBuilder::setInitial(float effectiveZoom)
FontDescriptionChangeScope scope(this);
scope.reset();
- setFontFamilyToStandard(scope.fontDescription(), m_document);
+ setFamilyDescription(scope.fontDescription(), FontBuilder::initialFamilyDescription());
setSize(scope.fontDescription(), FontBuilder::initialSize());
}
@@ -137,101 +122,51 @@ void FontBuilder::fromSystemFont(CSSValueID valueId, float effectiveZoom)
scope.set(fontDescription);
}
-void FontBuilder::setFontFamilyInitial()
+FontFamily FontBuilder::standardFontFamily() const
{
- FontDescriptionChangeScope scope(this);
-
- setFontFamilyToStandard(scope.fontDescription(), m_document);
+ FontFamily family;
+ family.setFamily(standardFontFamilyName());
+ return family;
}
-void FontBuilder::setFontFamilyInherit(const FontDescription& parentFontDescription)
+AtomicString FontBuilder::standardFontFamilyName() const
{
- FontDescriptionChangeScope scope(this);
-
- scope.fontDescription().setGenericFamily(parentFontDescription.genericFamily());
- scope.fontDescription().setFamily(parentFontDescription.family());
+ ASSERT(m_document);
+ Settings* settings = m_document->settings();
+ if (settings)
+ return settings->genericFontFamilySettings().standard();
+ return AtomicString();
}
-// FIXME: I am not convinced FontBuilder needs to know anything about CSSValues.
-void FontBuilder::setFontFamilyValue(CSSValue* value)
+AtomicString FontBuilder::genericFontFamilyName(FontDescription::GenericFamilyType genericFamily) const
{
- FontDescriptionChangeScope scope(this);
-
- if (!value->isValueList())
- return;
-
- FontFamily& firstFamily = scope.fontDescription().firstFamily();
- FontFamily* currFamily = 0;
-
- // Before mapping in a new font-family property, we should reset the generic family.
- FixedPitchFontType oldFixedPitchFontType = scope.fontDescription().fixedPitchFontType();
- scope.fontDescription().setGenericFamily(FontDescription::NoFamily);
-
- for (CSSValueListIterator i = value; i.hasMore(); i.advance()) {
- CSSValue* item = i.value();
- if (!item->isPrimitiveValue())
- continue;
- CSSPrimitiveValue* contentValue = toCSSPrimitiveValue(item);
- AtomicString face;
- Settings* settings = m_document->settings();
- if (contentValue->isString()) {
- face = AtomicString(contentValue->getStringValue());
- } else if (settings) {
- switch (contentValue->getValueID()) {
- case CSSValueWebkitBody:
- face = settings->genericFontFamilySettings().standard();
- break;
- case CSSValueSerif:
- face = FontFamilyNames::webkit_serif;
- scope.fontDescription().setGenericFamily(FontDescription::SerifFamily);
- break;
- case CSSValueSansSerif:
- face = FontFamilyNames::webkit_sans_serif;
- scope.fontDescription().setGenericFamily(FontDescription::SansSerifFamily);
- break;
- case CSSValueCursive:
- face = FontFamilyNames::webkit_cursive;
- scope.fontDescription().setGenericFamily(FontDescription::CursiveFamily);
- break;
- case CSSValueFantasy:
- face = FontFamilyNames::webkit_fantasy;
- scope.fontDescription().setGenericFamily(FontDescription::FantasyFamily);
- break;
- case CSSValueMonospace:
- face = FontFamilyNames::webkit_monospace;
- scope.fontDescription().setGenericFamily(FontDescription::MonospaceFamily);
- break;
- case CSSValueWebkitPictograph:
- face = FontFamilyNames::webkit_pictograph;
- scope.fontDescription().setGenericFamily(FontDescription::PictographFamily);
- break;
- default:
- break;
- }
- }
-
- if (!face.isEmpty()) {
- if (!currFamily) {
- // Filling in the first family.
- firstFamily.setFamily(face);
- firstFamily.appendFamily(nullptr); // Remove any inherited family-fallback list.
- currFamily = &firstFamily;
- } else {
- RefPtr<SharedFontFamily> newFamily = SharedFontFamily::create();
- newFamily->setFamily(face);
- currFamily->appendFamily(newFamily);
- currFamily = newFamily.get();
- }
- }
+ switch (genericFamily) {
+ default:
+ ASSERT_NOT_REACHED();
+ case FontDescription::NoFamily:
+ return AtomicString();
+ case FontDescription::StandardFamily:
+ return standardFontFamilyName();
+ case FontDescription::SerifFamily:
+ return FontFamilyNames::webkit_serif;
+ case FontDescription::SansSerifFamily:
+ return FontFamilyNames::webkit_sans_serif;
+ case FontDescription::MonospaceFamily:
+ return FontFamilyNames::webkit_monospace;
+ case FontDescription::CursiveFamily:
+ return FontFamilyNames::webkit_cursive;
+ case FontDescription::FantasyFamily:
+ return FontFamilyNames::webkit_fantasy;
+ case FontDescription::PictographFamily:
+ return FontFamilyNames::webkit_pictograph;
}
+}
- // We can't call useFixedDefaultSize() until all new font families have been added
- // If currFamily is non-zero then we set at least one family on this description.
- if (!currFamily)
- return;
+void FontBuilder::setFamilyDescription(const FontDescription::FamilyDescription& familyDescription)
+{
+ FontDescriptionChangeScope scope(this);
- if (scope.fontDescription().keywordSize() && scope.fontDescription().fixedPitchFontType() != oldFixedPitchFontType)
- setSize(scope.fontDescription(), FontDescription::Size(scope.fontDescription().keywordSize(), 0.0f, false));
+ setFamilyDescription(scope.fontDescription(), familyDescription);
}
void FontBuilder::setWeight(FontWeight fontWeight)
@@ -312,6 +247,19 @@ void FontBuilder::setFeatureSettings(PassRefPtr<FontFeatureSettings> settings)
scope.fontDescription().setFeatureSettings(settings);
}
+void FontBuilder::setFamilyDescription(FontDescription& fontDescription, const FontDescription::FamilyDescription& familyDescription)
+{
+ FixedPitchFontType oldFixedPitchFontType = fontDescription.fixedPitchFontType();
+
+ bool isInitial = familyDescription.genericFamily == FontDescription::StandardFamily && familyDescription.family.familyIsEmpty();
+
+ fontDescription.setGenericFamily(familyDescription.genericFamily);
+ fontDescription.setFamily(isInitial ? standardFontFamily() : familyDescription.family);
+
+ if (fontDescription.keywordSize() && fontDescription.fixedPitchFontType() != oldFixedPitchFontType)
+ setSize(fontDescription, FontDescription::Size(fontDescription.keywordSize(), 0.0f, false));
+}
+
void FontBuilder::setSize(FontDescription& fontDescription, const FontDescription::Size& size)
{
float specifiedSize = size.value;
@@ -465,8 +413,7 @@ void FontBuilder::createFontForDocument(PassRefPtrWillBeRawPtr<FontSelector> fon
FontDescription fontDescription = FontDescription();
fontDescription.setScript(localeToScriptCodeForFontSelection(documentStyle->locale()));
- setFontFamilyToStandard(fontDescription, m_document);
-
+ setFamilyDescription(fontDescription, FontBuilder::initialFamilyDescription());
setSize(fontDescription, FontDescription::Size(FontSize::initialKeywordSize(), 0.0f, false));
updateComputedSize(fontDescription, documentStyle);
« no previous file with comments | « Source/core/css/resolver/FontBuilder.h ('k') | Source/core/css/resolver/StyleBuilderConverter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698