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

Side by Side Diff: Source/core/css/SVGCSSParser.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) 2008 Eric Seidel <eric@webkit.org> 2 Copyright (C) 2008 Eric Seidel <eric@webkit.org>
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, 2007, 2010 Rob Buis <buis@kde.org> 4 2004, 2005, 2007, 2010 Rob Buis <buis@kde.org>
5 Copyright (C) 2005, 2006 Apple Computer, Inc. 5 Copyright (C) 2005, 2006 Apple Computer, Inc.
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 else if (id == CSSValueCurrentcolor) 214 else if (id == CSSValueCurrentcolor)
215 parsedValue = SVGColor::createCurrentColor(); 215 parsedValue = SVGColor::createCurrentColor();
216 else // TODO : svgcolor (iccColor) 216 else // TODO : svgcolor (iccColor)
217 parsedValue = parseSVGColor(); 217 parsedValue = parseSVGColor();
218 218
219 if (parsedValue) 219 if (parsedValue)
220 m_valueList->next(); 220 m_valueList->next();
221 221
222 break; 222 break;
223 223
224 case CSSPropertyPaintOrder:
pdr. 2013/05/03 17:58:29 When adding a property, you need to add an entry t
Erik Dahlström (inactive) 2013/06/03 15:58:24 is that really useful? it's a new feature, and Use
225 if (m_valueList->size() == 1 && id == CSSValueNormal)
226 valid_primitive = true;
227 else if (parsedValue = parsePaintOrder())
pdr. 2013/05/03 17:58:29 You'll need to use extra parenthesis here to make
228 m_valueList->next();
229 break;
230
224 case CSSPropertyVectorEffect: // none | non-scaling-stroke | inherit 231 case CSSPropertyVectorEffect: // none | non-scaling-stroke | inherit
225 if (id == CSSValueNone || id == CSSValueNonScalingStroke) 232 if (id == CSSValueNone || id == CSSValueNonScalingStroke)
226 valid_primitive = true; 233 valid_primitive = true;
227 break; 234 break;
228 235
229 case CSSPropertyWritingMode: 236 case CSSPropertyWritingMode:
230 // lr-tb | rl_tb | tb-rl | lr | rl | tb | inherit 237 // lr-tb | rl_tb | tb-rl | lr | rl | tb | inherit
231 if (id == CSSValueLrTb || id == CSSValueRlTb || id == CSSValueTbRl || id == CSSValueLr || id == CSSValueRl || id == CSSValueTb) 238 if (id == CSSValueLrTb || id == CSSValueRlTb || id == CSSValueTbRl || id == CSSValueLr || id == CSSValueRl || id == CSSValueTb)
232 valid_primitive = true; 239 valid_primitive = true;
233 break; 240 break;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 } 365 }
359 366
360 PassRefPtr<CSSValue> CSSParser::parseSVGColor() 367 PassRefPtr<CSSValue> CSSParser::parseSVGColor()
361 { 368 {
362 RGBA32 c = Color::transparent; 369 RGBA32 c = Color::transparent;
363 if (!parseColorFromValue(m_valueList->current(), c)) 370 if (!parseColorFromValue(m_valueList->current(), c))
364 return 0; 371 return 0;
365 return SVGColor::createFromColor(Color(c)); 372 return SVGColor::createFromColor(Color(c));
366 } 373 }
367 374
375 // normal | [ fill || stroke || markers ]
376 PassRefPtr<CSSValue> CSSParser::parsePaintOrder()
377 {
378 if (m_valueList->size() > 3)
379 return 0;
380
381 CSSParserValue* value = m_valueList->current();
382 if (!value)
383 return 0;
384
385 RefPtr<CSSValueList> parsedValues = CSSValueList::createSpaceSeparated();
386
387 PaintOrderState paint_order = NORMAL;
388 bool valid = true;
389
390 for ( ; valid && value; value = m_valueList->next())
pdr. 2013/05/03 17:58:29 Style nit (here, and elsewhere): paintOrder instea
391 {
392 valid = parsePaintOrderParameter(parsedValues.get(), value, paint_order) ;
393 if (valid)
394 parsedValues->append(CSSPrimitiveValue::createIdentifier(value->id)) ;
395 }
396
397 return valid ? parsedValues : 0;
398 }
399
400 bool CSSParser::parsePaintOrderParameter(CSSValueList* parsedValues, CSSParserVa lue* value, PaintOrderState& paint_order)
401 {
402 switch (paint_order)
403 {
404 case NORMAL:
405 switch (value->id) {
406 case CSSValueFill:
407 paint_order = FILL;
408 return true;
409 case CSSValueStroke:
410 paint_order = STROKE;
411 return true;
412 case CSSValueMarkers:
413 paint_order = MARKERS;
414 return true;
415 default:
416 return false;
417 }
418 case FILL:
419 switch (value->id) {
420 case CSSValueStroke:
421 paint_order = FILL_STROKE;
422 return true;
423 case CSSValueMarkers:
424 paint_order = FILL_MARKERS;
425 return true;
426 default:
427 return false;
428 }
429 case STROKE:
430 switch (value->id) {
431 case CSSValueFill:
432 paint_order = STROKE_FILL;
433 return true;
434 case CSSValueMarkers:
435 paint_order = STROKE_MARKERS;
436 return true;
437 default:
438 return false;
439 }
440 case MARKERS:
441 switch (value->id) {
442 case CSSValueFill:
443 paint_order = MARKERS_FILL;
444 return true;
445 case CSSValueStroke:
446 paint_order = MARKERS_STROKE;
447 return true;
448 default:
449 return false;
450 }
451 case FILL_STROKE:
452 switch (value->id) {
453 case CSSValueMarkers:
454 paint_order = NORMAL;
455 return true;
456 default:
457 return false;
458 }
459 case FILL_MARKERS:
460 switch (value->id) {
461 case CSSValueStroke:
462 paint_order = FILL_MARKERS_STROKE;
463 return true;
464 default:
465 return false;
466 }
467 case STROKE_MARKERS:
468 switch (value->id) {
469 case CSSValueFill:
470 paint_order = STROKE_MARKERS_FILL;
471 return true;
472 default:
473 return false;
474 }
475 case STROKE_FILL:
476 switch (value->id) {
477 case CSSValueMarkers:
478 paint_order = STROKE_FILL_MARKERS;
479 return true;
480 default:
481 return false;
482 }
483 case MARKERS_FILL:
484 switch (value->id) {
485 case CSSValueStroke:
486 paint_order = MARKERS_FILL_STROKE;
487 return true;
488 default:
489 return false;
490 }
491 case MARKERS_STROKE:
492 switch (value->id) {
493 case CSSValueFill:
494 paint_order = MARKERS_STROKE_FILL;
495 return true;
496 default:
497 return false;
498 }
499 default:
500 ASSERT_NOT_REACHED();
501 return false;
502 }
503 }
504
368 } 505 }
369 506
370 #endif // ENABLE(SVG) 507 #endif // ENABLE(SVG)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698