Changeset 87362 in webkit
- Timestamp:
- May 25, 2011 11:46:18 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r87361 r87362 1 2011-05-25 Luke Macpherson <macpherson@chromium.org> 2 3 Reviewed by Dimitri Glazkov. 4 5 Implement various CSS font properties in CSSStyleApplyProperty. 6 https://bugs.webkit.org/show_bug.cgi?id=60603 7 8 No new tests - refactoring only. 9 10 * css/CSSStyleApplyProperty.cpp: 11 (WebCore::ApplyPropertyFont): 12 Added templated class to handle font properties 13 (WebCore::ApplyPropertyFontWeight): 14 Added class to handle font weight calculation 15 (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty): 16 Instantiate ApplyPropertyFont/ApplyPropertyFontWeight for appropriate properties. 17 * css/CSSStyleSelector.cpp: 18 (WebCore::CSSStyleSelector::applyProperty): 19 Remove properties that are now implemented in CSSStyleApplyProperty 20 * css/CSSStyleSelector.h: 21 (WebCore::CSSStyleSelector::fontDescription): 22 Added getter for m_style->fontDescription() 23 (WebCore::CSSStyleSelector::parentFontDescription): 24 Added getter for m_parentStyle->fontDescription() 25 (WebCore::CSSStyleSelector::setFontDescription): 26 Added setter for m_style->setFontDescription() that automatically sets m_fontDirty 27 1 28 2011-05-25 James Simonsen <simonjam@chromium.org> 2 29 -
trunk/Source/WebCore/css/CSSStyleApplyProperty.cpp
r86355 r87362 370 370 }; 371 371 372 template <typename T> 373 class ApplyPropertyFont : public ApplyPropertyBase { 374 public: 375 typedef T (FontDescription::*GetterFunction)() const; 376 typedef void (FontDescription::*SetterFunction)(T); 377 378 ApplyPropertyFont(GetterFunction getter, SetterFunction setter, T initial) 379 : m_getter(getter) 380 , m_setter(setter) 381 , m_initial(initial) 382 { 383 } 384 385 private: 386 virtual void applyInheritValue(CSSStyleSelector* selector) const 387 { 388 FontDescription fontDescription = selector->fontDescription(); 389 (fontDescription.*m_setter)((selector->parentFontDescription().*m_getter)()); 390 selector->setFontDescription(fontDescription); 391 } 392 393 virtual void applyInitialValue(CSSStyleSelector* selector) const 394 { 395 FontDescription fontDescription = selector->fontDescription(); 396 (fontDescription.*m_setter)(m_initial); 397 selector->setFontDescription(fontDescription); 398 } 399 400 virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const 401 { 402 if (!value->isPrimitiveValue()) 403 return; 404 CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value); 405 FontDescription fontDescription = selector->fontDescription(); 406 (fontDescription.*m_setter)(*primitiveValue); 407 selector->setFontDescription(fontDescription); 408 } 409 410 GetterFunction m_getter; 411 SetterFunction m_setter; 412 T m_initial; 413 }; 414 415 class ApplyPropertyFontWeight : public ApplyPropertyFont<FontWeight> { 416 public: 417 ApplyPropertyFontWeight() 418 : ApplyPropertyFont<FontWeight>(&FontDescription::weight, &FontDescription::setWeight, FontWeightNormal) 419 { 420 } 421 422 virtual void applyValue(CSSStyleSelector* selector, CSSValue* value) const 423 { 424 if (!value->isPrimitiveValue()) 425 return; 426 CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value); 427 FontDescription fontDescription = selector->fontDescription(); 428 switch (primitiveValue->getIdent()) { 429 case CSSValueInvalid: 430 ASSERT_NOT_REACHED(); 431 break; 432 case CSSValueBolder: 433 fontDescription.setWeight(fontDescription.bolderWeight()); 434 break; 435 case CSSValueLighter: 436 fontDescription.setWeight(fontDescription.lighterWeight()); 437 break; 438 default: 439 fontDescription.setWeight(*primitiveValue); 440 } 441 selector->setFontDescription(fontDescription); 442 } 443 }; 444 372 445 const CSSStyleApplyProperty& CSSStyleApplyProperty::sharedCSSStyleApplyProperty() 373 446 { … … 470 543 setPropertyHandler(CSSPropertyBorder, new ApplyPropertyExpanding<SuppressValue>(propertyHandler(CSSPropertyBorderStyle), propertyHandler(CSSPropertyBorderWidth), propertyHandler(CSSPropertyBorderColor))); 471 544 545 setPropertyHandler(CSSPropertyFontStyle, new ApplyPropertyFont<FontItalic>(&FontDescription::italic, &FontDescription::setItalic, FontItalicOff)); 546 setPropertyHandler(CSSPropertyFontVariant, new ApplyPropertyFont<FontSmallCaps>(&FontDescription::smallCaps, &FontDescription::setSmallCaps, FontSmallCapsOff)); 547 setPropertyHandler(CSSPropertyTextRendering, new ApplyPropertyFont<TextRenderingMode>(&FontDescription::textRenderingMode, &FontDescription::setTextRenderingMode, AutoTextRendering)); 548 setPropertyHandler(CSSPropertyWebkitFontSmoothing, new ApplyPropertyFont<FontSmoothingMode>(&FontDescription::fontSmoothing, &FontDescription::setFontSmoothing, AutoSmoothing)); 549 setPropertyHandler(CSSPropertyWebkitTextOrientation, new ApplyPropertyFont<TextOrientation>(&FontDescription::textOrientation, &FontDescription::setTextOrientation, RenderStyle::initialTextOrientation())); 550 setPropertyHandler(CSSPropertyFontWeight, new ApplyPropertyFontWeight()); 551 472 552 setPropertyHandler(CSSPropertyOutlineColor, new ApplyPropertyColor<InheritFromParent>(&RenderStyle::outlineColor, &RenderStyle::setOutlineColor, &RenderStyle::color)); 473 553 -
trunk/Source/WebCore/css/CSSStyleSelector.cpp
r87319 r87362 3702 3702 HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE(floating, Floating) 3703 3703 return; 3704 case CSSPropertyFontStyle:3705 {3706 FontDescription fontDescription = m_style->fontDescription();3707 if (isInherit)3708 fontDescription.setItalic(m_parentStyle->fontDescription().italic());3709 else if (isInitial)3710 fontDescription.setItalic(FontItalicOff);3711 else {3712 if (!primitiveValue)3713 return;3714 fontDescription.setItalic((FontItalic)*primitiveValue);3715 }3716 if (m_style->setFontDescription(fontDescription))3717 m_fontDirty = true;3718 return;3719 }3720 3721 case CSSPropertyFontVariant:3722 {3723 FontDescription fontDescription = m_style->fontDescription();3724 if (isInherit)3725 fontDescription.setSmallCaps(m_parentStyle->fontDescription().smallCaps());3726 else if (isInitial)3727 fontDescription.setSmallCaps(FontSmallCapsOff);3728 else {3729 if (!primitiveValue)3730 return;3731 fontDescription.setSmallCaps((FontSmallCaps)*primitiveValue);3732 }3733 if (m_style->setFontDescription(fontDescription))3734 m_fontDirty = true;3735 return;3736 }3737 3738 case CSSPropertyFontWeight:3739 {3740 FontDescription fontDescription = m_style->fontDescription();3741 if (isInherit)3742 fontDescription.setWeight(m_parentStyle->fontDescription().weight());3743 else if (isInitial)3744 fontDescription.setWeight(FontWeightNormal);3745 else {3746 if (!primitiveValue)3747 return;3748 switch (primitiveValue->getIdent()) {3749 case CSSValueInvalid:3750 ASSERT_NOT_REACHED();3751 break;3752 case CSSValueBolder:3753 fontDescription.setWeight(fontDescription.bolderWeight());3754 break;3755 case CSSValueLighter:3756 fontDescription.setWeight(fontDescription.lighterWeight());3757 break;3758 default:3759 fontDescription.setWeight(*primitiveValue);3760 }3761 }3762 if (m_style->setFontDescription(fontDescription))3763 m_fontDirty = true;3764 return;3765 }3766 3767 3704 case CSSPropertyListStylePosition: 3768 3705 HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE(listStylePosition, ListStylePosition) … … 3870 3807 return; 3871 3808 } 3872 3873 case CSSPropertyWebkitFontSmoothing: {3874 FontDescription fontDescription = m_style->fontDescription();3875 if (isInherit)3876 fontDescription.setFontSmoothing(m_parentStyle->fontDescription().fontSmoothing());3877 else if (isInitial)3878 fontDescription.setFontSmoothing(AutoSmoothing);3879 else {3880 if (!primitiveValue)3881 return;3882 fontDescription.setFontSmoothing(*primitiveValue);3883 }3884 if (m_style->setFontDescription(fontDescription))3885 m_fontDirty = true;3886 return;3887 }3888 3889 3809 case CSSPropertyLetterSpacing: 3890 3810 case CSSPropertyWordSpacing: … … 4718 4638 m_style->setImageRendering(*primitiveValue); 4719 4639 return; 4720 case CSSPropertyTextRendering: {4721 FontDescription fontDescription = m_style->fontDescription();4722 if (isInherit)4723 fontDescription.setTextRenderingMode(m_parentStyle->fontDescription().textRenderingMode());4724 else if (isInitial)4725 fontDescription.setTextRenderingMode(AutoTextRendering);4726 else {4727 if (!primitiveValue)4728 return;4729 fontDescription.setTextRenderingMode(*primitiveValue);4730 }4731 if (m_style->setFontDescription(fontDescription))4732 m_fontDirty = true;4733 return;4734 }4735 4640 case CSSPropertyTextShadow: 4736 4641 case CSSPropertyBoxShadow: … … 5483 5388 5484 5389 return; 5485 5486 case CSSPropertyWebkitTextOrientation: {5487 if (!isInherit && !isInitial && !primitiveValue)5488 return;5489 5490 TextOrientation result;5491 if (isInherit)5492 result = m_parentStyle->fontDescription().textOrientation();5493 else if (isInitial)5494 result = RenderStyle::initialTextOrientation();5495 else5496 result = *primitiveValue;5497 5498 FontDescription fontDescription = m_style->fontDescription();5499 if (fontDescription.textOrientation() != result) {5500 fontDescription.setTextOrientation(result);5501 if (m_style->setFontDescription(fontDescription))5502 m_fontDirty = true;5503 }5504 return;5505 }5506 5507 5390 case CSSPropertyWebkitLineBoxContain: { 5508 5391 HANDLE_INHERIT_AND_INITIAL(lineBoxContain, LineBoxContain) … … 5559 5442 case CSSPropertyBorderBottom: 5560 5443 case CSSPropertyBorderLeft: 5444 case CSSPropertyFontStyle: 5445 case CSSPropertyFontVariant: 5446 case CSSPropertyTextRendering: 5447 case CSSPropertyWebkitTextOrientation: 5448 case CSSPropertyWebkitFontSmoothing: 5449 case CSSPropertyFontWeight: 5561 5450 case CSSPropertyOutlineWidth: 5562 5451 case CSSPropertyWebkitColumnRuleWidth: -
trunk/Source/WebCore/css/CSSStyleSelector.h
r87319 r87362 112 112 RenderStyle* rootElementStyle() const { return m_rootElementStyle; } 113 113 Element* element() const { return m_element; } 114 FontDescription fontDescription() { return style()->fontDescription(); } 115 FontDescription parentFontDescription() {return parentStyle()->fontDescription(); } 116 void setFontDescription(FontDescription fontDescription) { m_fontDirty |= style()->setFontDescription(fontDescription); } 114 117 115 118 private:
Note: See TracChangeset
for help on using the changeset viewer.