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

Unified Diff: Source/core/css/SVGCSSStyleSelector.cpp

Issue 14907011: Support 'paint-order' from SVG2. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 8 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
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

Powered by Google App Engine
This is Rietveld 408576698