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

Side by Side 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, 7 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 Copyright (C) 2005 Apple Computer, Inc. 2 Copyright (C) 2005 Apple Computer, Inc.
3 Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> 3 Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
4 2004, 2005, 2008 Rob Buis <buis@kde.org> 4 2004, 2005, 2008 Rob Buis <buis@kde.org>
5 Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 5 Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
6 6
7 Based on khtml css code by: 7 Based on khtml css code by:
8 Copyright(C) 1999-2003 Lars Knoll(knoll@kde.org) 8 Copyright(C) 1999-2003 Lars Knoll(knoll@kde.org)
9 (C) 2003 Apple Computer, Inc. 9 (C) 2003 Apple Computer, Inc.
10 (C) 2004 Allan Sandfeld Jensen(kde@carewolf.com) 10 (C) 2004 Allan Sandfeld Jensen(kde@carewolf.com)
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 static Color colorFromSVGColorCSSValue(SVGColor* svgColor, const Color& fgColor) 95 static Color colorFromSVGColorCSSValue(SVGColor* svgColor, const Color& fgColor)
96 { 96 {
97 Color color; 97 Color color;
98 if (svgColor->colorType() == SVGColor::SVG_COLORTYPE_CURRENTCOLOR) 98 if (svgColor->colorType() == SVGColor::SVG_COLORTYPE_CURRENTCOLOR)
99 color = fgColor; 99 color = fgColor;
100 else 100 else
101 color = svgColor->color(); 101 color = svgColor->color();
102 return color; 102 return color;
103 } 103 }
104 104
105 static EPaintOrder paintOrderFlattened(CSSValue* list)
106 {
107 EPaintOrder paint_order = PO_NORMAL;
108 CSSValueListInspector iter(list);
109 CSSPrimitiveValue* value;
110 for (size_t i = 0; i < iter.length(); i++)
111 {
112 CSSValue* item = iter.item(i);
113 //if (item->isPrimitiveValue())
pdr. 2013/05/03 17:58:29 Oops :)
114 value = static_cast<CSSPrimitiveValue*>(item);
115
116 switch (paint_order)
117 {
118 case PO_NORMAL:
119 switch (value->getIdent()) {
120 case CSSValueFill:
121 paint_order = PO_FILL;
122 break;
123 case CSSValueStroke:
124 paint_order = PO_STROKE;
125 break;
126 case CSSValueMarkers:
127 paint_order = PO_MARKERS;
128 break;
129 }
130 break;
131 case PO_FILL:
132 switch (value->getIdent()) {
133 case CSSValueStroke:
134 paint_order = PO_FILL_STROKE;
135 break;
136 case CSSValueMarkers:
137 paint_order = PO_FILL_MARKERS;
138 break;
139 }
140 break;
141 case PO_STROKE:
142 switch (value->getIdent()) {
143 case CSSValueFill:
144 paint_order = PO_STROKE_FILL;
145 break;
146 case CSSValueMarkers:
147 paint_order = PO_STROKE_MARKERS;
148 break;
149 }
150 break;
151 case PO_MARKERS:
152 switch (value->getIdent()) {
153 case CSSValueFill:
154 paint_order = PO_MARKERS_FILL;
155 break;
156 case CSSValueStroke:
157 paint_order = PO_MARKERS_STROKE;
158 break;
159 }
160 break;
161 case PO_FILL_STROKE:
162 switch (value->getIdent()) {
163 case CSSValueMarkers:
164 paint_order = PO_NORMAL;
165 break;
166 }
167 break;
168 case PO_FILL_MARKERS:
169 switch (value->getIdent()) {
170 case CSSValueStroke:
171 paint_order = PO_FILL_MARKERS_STROKE;
172 break;
173 }
174 break;
175 case PO_STROKE_MARKERS:
176 switch (value->getIdent()) {
177 case CSSValueFill:
178 paint_order = PO_STROKE_MARKERS_FILL;
179 break;
180 }
181 break;
182 case PO_STROKE_FILL:
183 switch (value->getIdent()) {
184 case CSSValueMarkers:
185 paint_order = PO_STROKE_FILL_MARKERS;
186 break;
187 }
188 break;
189 case PO_MARKERS_FILL:
190 switch (value->getIdent()) {
191 case CSSValueStroke:
192 paint_order = PO_MARKERS_FILL_STROKE;
193 break;
194 }
195 break;
196 case PO_MARKERS_STROKE:
197 switch (value->getIdent()) {
198 case CSSValueFill:
199 paint_order = PO_MARKERS_STROKE_FILL;
200 break;
201 }
202 break;
203 default:
204 ASSERT_NOT_REACHED();
205 break;
206 }
207 }
208
209 return paint_order;
210 }
211
105 void StyleResolver::applySVGProperty(CSSPropertyID id, CSSValue* value) 212 void StyleResolver::applySVGProperty(CSSPropertyID id, CSSValue* value)
106 { 213 {
107 ASSERT(value); 214 ASSERT(value);
108 CSSPrimitiveValue* primitiveValue = 0; 215 CSSPrimitiveValue* primitiveValue = 0;
109 if (value->isPrimitiveValue()) 216 if (value->isPrimitiveValue())
110 primitiveValue = static_cast<CSSPrimitiveValue*>(value); 217 primitiveValue = static_cast<CSSPrimitiveValue*>(value);
111 218
112 const State& state = m_state; 219 const State& state = m_state;
113 SVGRenderStyle* svgstyle = state.style()->accessSVGStyle(); 220 SVGRenderStyle* svgstyle = state.style()->accessSVGStyle();
114 221
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 break; 704 break;
598 } 705 }
599 case CSSPropertyMaskType: { 706 case CSSPropertyMaskType: {
600 HANDLE_INHERIT_AND_INITIAL(maskType, MaskType) 707 HANDLE_INHERIT_AND_INITIAL(maskType, MaskType)
601 if (!primitiveValue) 708 if (!primitiveValue)
602 break; 709 break;
603 710
604 svgstyle->setMaskType(*primitiveValue); 711 svgstyle->setMaskType(*primitiveValue);
605 break; 712 break;
606 } 713 }
714 case CSSPropertyPaintOrder: {
715 HANDLE_INHERIT_AND_INITIAL(paintOrder, PaintOrder)
716
717 if (value->isValueList())
pdr. 2013/05/03 17:58:29 Style nit: no braces needed for single-line if/els
718 {
719 svgstyle->setPaintOrder(paintOrderFlattened(value));
720 }
721 else if (primitiveValue)
722 {
723 svgstyle->setPaintOrder(*primitiveValue);
724 }
725 break;
726 }
607 default: 727 default:
608 // If you crash here, it's because you added a css property and are not handling it 728 // If you crash here, it's because you added a css property and are not handling it
609 // in either this switch statement or the one in StyleResolver::appl yProperty 729 // in either this switch statement or the one in StyleResolver::appl yProperty
610 ASSERT_WITH_MESSAGE(0, "unimplemented propertyID: %d", id); 730 ASSERT_WITH_MESSAGE(0, "unimplemented propertyID: %d", id);
611 return; 731 return;
612 } 732 }
613 } 733 }
614 734
615 } 735 }
616 736
617 #endif 737 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698