Modified: trunk/Source/WebCore/ChangeLog (87361 => 87362)
--- trunk/Source/WebCore/ChangeLog 2011-05-26 06:20:35 UTC (rev 87361)
+++ trunk/Source/WebCore/ChangeLog 2011-05-26 06:46:18 UTC (rev 87362)
@@ -1,3 +1,30 @@
+2011-05-25 Luke Macpherson <[email protected]>
+
+ Reviewed by Dimitri Glazkov.
+
+ Implement various CSS font properties in CSSStyleApplyProperty.
+ https://bugs.webkit.org/show_bug.cgi?id=60603
+
+ No new tests - refactoring only.
+
+ * css/CSSStyleApplyProperty.cpp:
+ (WebCore::ApplyPropertyFont):
+ Added templated class to handle font properties
+ (WebCore::ApplyPropertyFontWeight):
+ Added class to handle font weight calculation
+ (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
+ Instantiate ApplyPropertyFont/ApplyPropertyFontWeight for appropriate properties.
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::applyProperty):
+ Remove properties that are now implemented in CSSStyleApplyProperty
+ * css/CSSStyleSelector.h:
+ (WebCore::CSSStyleSelector::fontDescription):
+ Added getter for m_style->fontDescription()
+ (WebCore::CSSStyleSelector::parentFontDescription):
+ Added getter for m_parentStyle->fontDescription()
+ (WebCore::CSSStyleSelector::setFontDescription):
+ Added setter for m_style->setFontDescription() that automatically sets m_fontDirty
+
2011-05-25 James Simonsen <[email protected]>
Reviewed by Adam Barth.
Modified: trunk/Source/WebCore/css/CSSStyleApplyProperty.cpp (87361 => 87362)
--- trunk/Source/WebCore/css/CSSStyleApplyProperty.cpp 2011-05-26 06:20:35 UTC (rev 87361)
+++ trunk/Source/WebCore/css/CSSStyleApplyProperty.cpp 2011-05-26 06:46:18 UTC (rev 87362)
@@ -369,6 +369,79 @@
}
};
+template <typename T>
+class ApplyPropertyFont : public ApplyPropertyBase {
+public:
+ typedef T (FontDescription::*GetterFunction)() const;
+ typedef void (FontDescription::*SetterFunction)(T);
+
+ ApplyPropertyFont(GetterFunction getter, SetterFunction setter, T initial)
+ : m_getter(getter)
+ , m_setter(setter)
+ , m_initial(initial)
+ {
+ }
+
+private:
+ virtual void applyInheritValue(CSSStyleSelector* selector) const
+ {
+ FontDescription fontDescription = selector->fontDescription();
+ (fontDescription.*m_setter)((selector->parentFontDescription().*m_getter)());
+ selector->setFontDescription(fontDescription);
+ }
+
+ virtual void applyInitialValue(CSSStyleSelector* selector) const
+ {
+ FontDescription fontDescription = selector->fontDescription();
+ (fontDescription.*m_setter)(m_initial);
+ selector->setFontDescription(fontDescription);
+ }
+
+ virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const
+ {
+ if (!value->isPrimitiveValue())
+ return;
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ FontDescription fontDescription = selector->fontDescription();
+ (fontDescription.*m_setter)(*primitiveValue);
+ selector->setFontDescription(fontDescription);
+ }
+
+ GetterFunction m_getter;
+ SetterFunction m_setter;
+ T m_initial;
+};
+
+class ApplyPropertyFontWeight : public ApplyPropertyFont<FontWeight> {
+public:
+ ApplyPropertyFontWeight()
+ : ApplyPropertyFont<FontWeight>(&FontDescription::weight, &FontDescription::setWeight, FontWeightNormal)
+ {
+ }
+
+ virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const
+ {
+ if (!value->isPrimitiveValue())
+ return;
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ FontDescription fontDescription = selector->fontDescription();
+ switch (primitiveValue->getIdent()) {
+ case CSSValueInvalid:
+ ASSERT_NOT_REACHED();
+ break;
+ case CSSValueBolder:
+ fontDescription.setWeight(fontDescription.bolderWeight());
+ break;
+ case CSSValueLighter:
+ fontDescription.setWeight(fontDescription.lighterWeight());
+ break;
+ default:
+ fontDescription.setWeight(*primitiveValue);
+ }
+ selector->setFontDescription(fontDescription);
+ }
+};
+
const CSSStyleApplyProperty& CSSStyleApplyProperty::sharedCSSStyleApplyProperty()
{
DEFINE_STATIC_LOCAL(CSSStyleApplyProperty, cssStyleApplyPropertyInstance, ());
@@ -469,6 +542,13 @@
setPropertyHandler(CSSPropertyBorderColor, new ApplyPropertyExpanding<SuppressValue>(propertyHandler(CSSPropertyBorderTopColor), propertyHandler(CSSPropertyBorderRightColor), propertyHandler(CSSPropertyBorderBottomColor), propertyHandler(CSSPropertyBorderLeftColor)));
setPropertyHandler(CSSPropertyBorder, new ApplyPropertyExpanding<SuppressValue>(propertyHandler(CSSPropertyBorderStyle), propertyHandler(CSSPropertyBorderWidth), propertyHandler(CSSPropertyBorderColor)));
+ setPropertyHandler(CSSPropertyFontStyle, new ApplyPropertyFont<FontItalic>(&FontDescription::italic, &FontDescription::setItalic, FontItalicOff));
+ setPropertyHandler(CSSPropertyFontVariant, new ApplyPropertyFont<FontSmallCaps>(&FontDescription::smallCaps, &FontDescription::setSmallCaps, FontSmallCapsOff));
+ setPropertyHandler(CSSPropertyTextRendering, new ApplyPropertyFont<TextRenderingMode>(&FontDescription::textRenderingMode, &FontDescription::setTextRenderingMode, AutoTextRendering));
+ setPropertyHandler(CSSPropertyWebkitFontSmoothing, new ApplyPropertyFont<FontSmoothingMode>(&FontDescription::fontSmoothing, &FontDescription::setFontSmoothing, AutoSmoothing));
+ setPropertyHandler(CSSPropertyWebkitTextOrientation, new ApplyPropertyFont<TextOrientation>(&FontDescription::textOrientation, &FontDescription::setTextOrientation, RenderStyle::initialTextOrientation()));
+ setPropertyHandler(CSSPropertyFontWeight, new ApplyPropertyFontWeight());
+
setPropertyHandler(CSSPropertyOutlineColor, new ApplyPropertyColor<InheritFromParent>(&RenderStyle::outlineColor, &RenderStyle::setOutlineColor, &RenderStyle::color));
setPropertyHandler(CSSPropertyOverflowX, new ApplyPropertyDefault<EOverflow>(&RenderStyle::overflowX, &RenderStyle::setOverflowX, &RenderStyle::initialOverflowX));
Modified: trunk/Source/WebCore/css/CSSStyleSelector.cpp (87361 => 87362)
--- trunk/Source/WebCore/css/CSSStyleSelector.cpp 2011-05-26 06:20:35 UTC (rev 87361)
+++ trunk/Source/WebCore/css/CSSStyleSelector.cpp 2011-05-26 06:46:18 UTC (rev 87362)
@@ -3701,69 +3701,6 @@
case CSSPropertyFloat:
HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE(floating, Floating)
return;
- case CSSPropertyFontStyle:
- {
- FontDescription fontDescription = m_style->fontDescription();
- if (isInherit)
- fontDescription.setItalic(m_parentStyle->fontDescription().italic());
- else if (isInitial)
- fontDescription.setItalic(FontItalicOff);
- else {
- if (!primitiveValue)
- return;
- fontDescription.setItalic((FontItalic)*primitiveValue);
- }
- if (m_style->setFontDescription(fontDescription))
- m_fontDirty = true;
- return;
- }
-
- case CSSPropertyFontVariant:
- {
- FontDescription fontDescription = m_style->fontDescription();
- if (isInherit)
- fontDescription.setSmallCaps(m_parentStyle->fontDescription().smallCaps());
- else if (isInitial)
- fontDescription.setSmallCaps(FontSmallCapsOff);
- else {
- if (!primitiveValue)
- return;
- fontDescription.setSmallCaps((FontSmallCaps)*primitiveValue);
- }
- if (m_style->setFontDescription(fontDescription))
- m_fontDirty = true;
- return;
- }
-
- case CSSPropertyFontWeight:
- {
- FontDescription fontDescription = m_style->fontDescription();
- if (isInherit)
- fontDescription.setWeight(m_parentStyle->fontDescription().weight());
- else if (isInitial)
- fontDescription.setWeight(FontWeightNormal);
- else {
- if (!primitiveValue)
- return;
- switch (primitiveValue->getIdent()) {
- case CSSValueInvalid:
- ASSERT_NOT_REACHED();
- break;
- case CSSValueBolder:
- fontDescription.setWeight(fontDescription.bolderWeight());
- break;
- case CSSValueLighter:
- fontDescription.setWeight(fontDescription.lighterWeight());
- break;
- default:
- fontDescription.setWeight(*primitiveValue);
- }
- }
- if (m_style->setFontDescription(fontDescription))
- m_fontDirty = true;
- return;
- }
-
case CSSPropertyListStylePosition:
HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE(listStylePosition, ListStylePosition)
return;
@@ -3869,23 +3806,6 @@
m_style->setListStyleImage(styleImage(CSSPropertyListStyleImage, value));
return;
}
-
- case CSSPropertyWebkitFontSmoothing: {
- FontDescription fontDescription = m_style->fontDescription();
- if (isInherit)
- fontDescription.setFontSmoothing(m_parentStyle->fontDescription().fontSmoothing());
- else if (isInitial)
- fontDescription.setFontSmoothing(AutoSmoothing);
- else {
- if (!primitiveValue)
- return;
- fontDescription.setFontSmoothing(*primitiveValue);
- }
- if (m_style->setFontDescription(fontDescription))
- m_fontDirty = true;
- return;
- }
-
case CSSPropertyLetterSpacing:
case CSSPropertyWordSpacing:
{
@@ -4717,21 +4637,6 @@
return;
m_style->setImageRendering(*primitiveValue);
return;
- case CSSPropertyTextRendering: {
- FontDescription fontDescription = m_style->fontDescription();
- if (isInherit)
- fontDescription.setTextRenderingMode(m_parentStyle->fontDescription().textRenderingMode());
- else if (isInitial)
- fontDescription.setTextRenderingMode(AutoTextRendering);
- else {
- if (!primitiveValue)
- return;
- fontDescription.setTextRenderingMode(*primitiveValue);
- }
- if (m_style->setFontDescription(fontDescription))
- m_fontDirty = true;
- return;
- }
case CSSPropertyTextShadow:
case CSSPropertyBoxShadow:
case CSSPropertyWebkitBoxShadow: {
@@ -5482,28 +5387,6 @@
}
return;
-
- case CSSPropertyWebkitTextOrientation: {
- if (!isInherit && !isInitial && !primitiveValue)
- return;
-
- TextOrientation result;
- if (isInherit)
- result = m_parentStyle->fontDescription().textOrientation();
- else if (isInitial)
- result = RenderStyle::initialTextOrientation();
- else
- result = *primitiveValue;
-
- FontDescription fontDescription = m_style->fontDescription();
- if (fontDescription.textOrientation() != result) {
- fontDescription.setTextOrientation(result);
- if (m_style->setFontDescription(fontDescription))
- m_fontDirty = true;
- }
- return;
- }
-
case CSSPropertyWebkitLineBoxContain: {
HANDLE_INHERIT_AND_INITIAL(lineBoxContain, LineBoxContain)
if (primitiveValue && primitiveValue->getIdent() == CSSValueNone) {
@@ -5558,6 +5441,12 @@
case CSSPropertyBorderRight:
case CSSPropertyBorderBottom:
case CSSPropertyBorderLeft:
+ case CSSPropertyFontStyle:
+ case CSSPropertyFontVariant:
+ case CSSPropertyTextRendering:
+ case CSSPropertyWebkitTextOrientation:
+ case CSSPropertyWebkitFontSmoothing:
+ case CSSPropertyFontWeight:
case CSSPropertyOutlineWidth:
case CSSPropertyWebkitColumnRuleWidth:
case CSSPropertyOutlineColor:
Modified: trunk/Source/WebCore/css/CSSStyleSelector.h (87361 => 87362)
--- trunk/Source/WebCore/css/CSSStyleSelector.h 2011-05-26 06:20:35 UTC (rev 87361)
+++ trunk/Source/WebCore/css/CSSStyleSelector.h 2011-05-26 06:46:18 UTC (rev 87362)
@@ -111,6 +111,9 @@
RenderStyle* parentStyle() const { return m_parentStyle; }
RenderStyle* rootElementStyle() const { return m_rootElementStyle; }
Element* element() const { return m_element; }
+ FontDescription fontDescription() { return style()->fontDescription(); }
+ FontDescription parentFontDescription() {return parentStyle()->fontDescription(); }
+ void setFontDescription(FontDescription fontDescription) { m_fontDirty |= style()->setFontDescription(fontDescription); }
private:
void initForStyleResolve(Element*, RenderStyle* parentStyle = 0, PseudoId = NOPSEUDO);