Chromium Code Reviews| Index: Source/core/css/SVGCSSStyleSelector.cpp |
| diff --git a/Source/core/css/SVGCSSStyleSelector.cpp b/Source/core/css/SVGCSSStyleSelector.cpp |
| index 70d1ca4f9cfdcdae893573f0ac88de052c704768..3fd70a57718b7542d62fab6f10dc8a26d2eea612 100644 |
| --- a/Source/core/css/SVGCSSStyleSelector.cpp |
| +++ b/Source/core/css/SVGCSSStyleSelector.cpp |
| @@ -102,6 +102,113 @@ static Color colorFromSVGColorCSSValue(SVGColor* svgColor, const Color& fgColor) |
| return color; |
| } |
| +static EPaintOrder paintOrderFlattened(CSSValue* list) |
| +{ |
| + EPaintOrder paint_order = PO_NORMAL; |
| + CSSValueListInspector iter(list); |
| + CSSPrimitiveValue* value; |
| + for (size_t i = 0; i < iter.length(); i++) |
| + { |
| + CSSValue* item = iter.item(i); |
| + //if (item->isPrimitiveValue()) |
|
pdr.
2013/05/03 17:58:29
Oops :)
|
| + value = static_cast<CSSPrimitiveValue*>(item); |
| + |
| + switch (paint_order) |
| + { |
| + case PO_NORMAL: |
| + switch (value->getIdent()) { |
| + case CSSValueFill: |
| + paint_order = PO_FILL; |
| + break; |
| + case CSSValueStroke: |
| + paint_order = PO_STROKE; |
| + break; |
| + case CSSValueMarkers: |
| + paint_order = PO_MARKERS; |
| + break; |
| + } |
| + break; |
| + case PO_FILL: |
| + switch (value->getIdent()) { |
| + case CSSValueStroke: |
| + paint_order = PO_FILL_STROKE; |
| + break; |
| + case CSSValueMarkers: |
| + paint_order = PO_FILL_MARKERS; |
| + break; |
| + } |
| + break; |
| + case PO_STROKE: |
| + switch (value->getIdent()) { |
| + case CSSValueFill: |
| + paint_order = PO_STROKE_FILL; |
| + break; |
| + case CSSValueMarkers: |
| + paint_order = PO_STROKE_MARKERS; |
| + break; |
| + } |
| + break; |
| + case PO_MARKERS: |
| + switch (value->getIdent()) { |
| + case CSSValueFill: |
| + paint_order = PO_MARKERS_FILL; |
| + break; |
| + case CSSValueStroke: |
| + paint_order = PO_MARKERS_STROKE; |
| + break; |
| + } |
| + break; |
| + case PO_FILL_STROKE: |
| + switch (value->getIdent()) { |
| + case CSSValueMarkers: |
| + paint_order = PO_NORMAL; |
| + break; |
| + } |
| + break; |
| + case PO_FILL_MARKERS: |
| + switch (value->getIdent()) { |
| + case CSSValueStroke: |
| + paint_order = PO_FILL_MARKERS_STROKE; |
| + break; |
| + } |
| + break; |
| + case PO_STROKE_MARKERS: |
| + switch (value->getIdent()) { |
| + case CSSValueFill: |
| + paint_order = PO_STROKE_MARKERS_FILL; |
| + break; |
| + } |
| + break; |
| + case PO_STROKE_FILL: |
| + switch (value->getIdent()) { |
| + case CSSValueMarkers: |
| + paint_order = PO_STROKE_FILL_MARKERS; |
| + break; |
| + } |
| + break; |
| + case PO_MARKERS_FILL: |
| + switch (value->getIdent()) { |
| + case CSSValueStroke: |
| + paint_order = PO_MARKERS_FILL_STROKE; |
| + break; |
| + } |
| + break; |
| + case PO_MARKERS_STROKE: |
| + switch (value->getIdent()) { |
| + case CSSValueFill: |
| + paint_order = PO_MARKERS_STROKE_FILL; |
| + break; |
| + } |
| + break; |
| + default: |
| + ASSERT_NOT_REACHED(); |
| + break; |
| + } |
| + } |
| + |
| + return paint_order; |
| +} |
| + |
| void StyleResolver::applySVGProperty(CSSPropertyID id, CSSValue* value) |
| { |
| ASSERT(value); |
| @@ -604,6 +711,19 @@ void StyleResolver::applySVGProperty(CSSPropertyID id, CSSValue* value) |
| svgstyle->setMaskType(*primitiveValue); |
| break; |
| } |
| + case CSSPropertyPaintOrder: { |
| + HANDLE_INHERIT_AND_INITIAL(paintOrder, PaintOrder) |
| + |
| + if (value->isValueList()) |
|
pdr.
2013/05/03 17:58:29
Style nit: no braces needed for single-line if/els
|
| + { |
| + svgstyle->setPaintOrder(paintOrderFlattened(value)); |
| + } |
| + else if (primitiveValue) |
| + { |
| + svgstyle->setPaintOrder(*primitiveValue); |
| + } |
| + break; |
| + } |
| default: |
| // If you crash here, it's because you added a css property and are not handling it |
| // in either this switch statement or the one in StyleResolver::applyProperty |