OLD | NEW |
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 30 matching lines...) Expand all Loading... |
41 #include "SVGPaint.h" | 41 #include "SVGPaint.h" |
42 #include "SVGRenderStyle.h" | 42 #include "SVGRenderStyle.h" |
43 #include "SVGRenderStyleDefs.h" | 43 #include "SVGRenderStyleDefs.h" |
44 #include "SVGStyledElement.h" | 44 #include "SVGStyledElement.h" |
45 #include "SVGURIReference.h" | 45 #include "SVGURIReference.h" |
46 #include <stdlib.h> | 46 #include <stdlib.h> |
47 #include <wtf/MathExtras.h> | 47 #include <wtf/MathExtras.h> |
48 | 48 |
49 #define HANDLE_INHERIT(prop, Prop) \ | 49 #define HANDLE_INHERIT(prop, Prop) \ |
50 if (isInherit) \ | 50 if (isInherit) \ |
51 {\ | 51 { \ |
52 svgstyle->set##Prop(m_parentStyle->svgStyle()->prop());\ | 52 svgstyle->set##Prop(m_parentStyle->svgStyle()->prop()); \ |
53 return;\ | 53 return; \ |
54 } | 54 } |
55 | 55 |
56 #define HANDLE_INHERIT_AND_INITIAL(prop, Prop) \ | 56 #define HANDLE_INHERIT_AND_INITIAL(prop, Prop) \ |
57 HANDLE_INHERIT(prop, Prop) \ | 57 HANDLE_INHERIT(prop, Prop) \ |
58 else if (isInitial) \ | 58 if (isInitial) { \ |
59 svgstyle->set##Prop(SVGRenderStyle::initial##Prop()); | 59 svgstyle->set##Prop(SVGRenderStyle::initial##Prop()); \ |
| 60 return; \ |
| 61 } |
60 | 62 |
61 namespace WebCore { | 63 namespace WebCore { |
62 | 64 |
63 static float roundToNearestGlyphOrientationAngle(float angle) | 65 static float roundToNearestGlyphOrientationAngle(float angle) |
64 { | 66 { |
65 angle = fabsf(fmodf(angle, 360.0f)); | 67 angle = fabsf(fmodf(angle, 360.0f)); |
66 | 68 |
67 if (angle <= 45.0f || angle > 315.0f) | 69 if (angle <= 45.0f || angle > 315.0f) |
68 return 0.0f; | 70 return 0.0f; |
69 else if (angle > 45.0f && angle <= 135.0f) | 71 else if (angle > 45.0f && angle <= 135.0f) |
(...skipping 13 matching lines...) Expand all Loading... |
83 else if (angle == 90.0f) | 85 else if (angle == 90.0f) |
84 return GO_90DEG; | 86 return GO_90DEG; |
85 else if (angle == 180.0f) | 87 else if (angle == 180.0f) |
86 return GO_180DEG; | 88 return GO_180DEG; |
87 else if (angle == 270.0f) | 89 else if (angle == 270.0f) |
88 return GO_270DEG; | 90 return GO_270DEG; |
89 | 91 |
90 return -1; | 92 return -1; |
91 } | 93 } |
92 | 94 |
93 static Color colorFromSVGColorCSSValue(CSSValue* value, const Color& fgColor) | 95 static Color colorFromSVGColorCSSValue(SVGColor* svgColor, const Color& fgColor) |
94 { | 96 { |
95 ASSERT(value->isSVGColor()); | |
96 SVGColor* c = static_cast<SVGColor*>(value); | |
97 Color color; | 97 Color color; |
98 if (c->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 = c->color(); | 101 color = svgColor->color(); |
102 return color; | 102 return color; |
103 } | 103 } |
104 | 104 |
105 void CSSStyleSelector::applySVGProperty(int id, CSSValue* value) | 105 void CSSStyleSelector::applySVGProperty(int id, CSSValue* value) |
106 { | 106 { |
107 ASSERT(value); | 107 ASSERT(value); |
108 CSSPrimitiveValue* primitiveValue = 0; | 108 CSSPrimitiveValue* primitiveValue = 0; |
109 if (value->isPrimitiveValue()) | 109 if (value->isPrimitiveValue()) |
110 primitiveValue = static_cast<CSSPrimitiveValue*>(value); | 110 primitiveValue = static_cast<CSSPrimitiveValue*>(value); |
111 | 111 |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 case CSSPropertyWritingMode: | 461 case CSSPropertyWritingMode: |
462 { | 462 { |
463 HANDLE_INHERIT_AND_INITIAL(writingMode, WritingMode) | 463 HANDLE_INHERIT_AND_INITIAL(writingMode, WritingMode) |
464 if (primitiveValue) | 464 if (primitiveValue) |
465 svgstyle->setWritingMode(*primitiveValue); | 465 svgstyle->setWritingMode(*primitiveValue); |
466 break; | 466 break; |
467 } | 467 } |
468 case CSSPropertyStopColor: | 468 case CSSPropertyStopColor: |
469 { | 469 { |
470 HANDLE_INHERIT_AND_INITIAL(stopColor, StopColor); | 470 HANDLE_INHERIT_AND_INITIAL(stopColor, StopColor); |
471 svgstyle->setStopColor(colorFromSVGColorCSSValue(value, m_style->col
or())); | 471 if (value->isSVGColor()) |
| 472 svgstyle->setStopColor(colorFromSVGColorCSSValue(static_cast<SVG
Color*>(value), m_style->color())); |
472 break; | 473 break; |
473 } | 474 } |
474 case CSSPropertyLightingColor: | 475 case CSSPropertyLightingColor: |
475 { | 476 { |
476 HANDLE_INHERIT_AND_INITIAL(lightingColor, LightingColor); | 477 HANDLE_INHERIT_AND_INITIAL(lightingColor, LightingColor); |
477 svgstyle->setLightingColor(colorFromSVGColorCSSValue(value, m_style-
>color())); | 478 if (value->isSVGColor()) |
| 479 svgstyle->setLightingColor(colorFromSVGColorCSSValue(static_cast
<SVGColor*>(value), m_style->color())); |
478 break; | 480 break; |
479 } | 481 } |
480 case CSSPropertyFloodOpacity: | 482 case CSSPropertyFloodOpacity: |
481 { | 483 { |
482 HANDLE_INHERIT_AND_INITIAL(floodOpacity, FloodOpacity) | 484 HANDLE_INHERIT_AND_INITIAL(floodOpacity, FloodOpacity) |
483 if (!primitiveValue) | 485 if (!primitiveValue) |
484 return; | 486 return; |
485 | 487 |
486 float f = 0.0f; | 488 float f = 0.0f; |
487 int type = primitiveValue->primitiveType(); | 489 int type = primitiveValue->primitiveType(); |
488 if (type == CSSPrimitiveValue::CSS_PERCENTAGE) | 490 if (type == CSSPrimitiveValue::CSS_PERCENTAGE) |
489 f = primitiveValue->getFloatValue() / 100.0f; | 491 f = primitiveValue->getFloatValue() / 100.0f; |
490 else if (type == CSSPrimitiveValue::CSS_NUMBER) | 492 else if (type == CSSPrimitiveValue::CSS_NUMBER) |
491 f = primitiveValue->getFloatValue(); | 493 f = primitiveValue->getFloatValue(); |
492 else | 494 else |
493 return; | 495 return; |
494 | 496 |
495 svgstyle->setFloodOpacity(f); | 497 svgstyle->setFloodOpacity(f); |
496 break; | 498 break; |
497 } | 499 } |
498 case CSSPropertyFloodColor: | 500 case CSSPropertyFloodColor: |
499 { | 501 { |
500 if (isInitial) { | 502 HANDLE_INHERIT_AND_INITIAL(floodColor, FloodColor); |
501 svgstyle->setFloodColor(SVGRenderStyle::initialFloodColor()); | 503 if (value->isSVGColor()) |
502 return; | 504 svgstyle->setFloodColor(colorFromSVGColorCSSValue(static_cast<SV
GColor*>(value), m_style->color())); |
503 } | |
504 svgstyle->setFloodColor(colorFromSVGColorCSSValue(value, m_style->co
lor())); | |
505 break; | 505 break; |
506 } | 506 } |
507 case CSSPropertyGlyphOrientationHorizontal: | 507 case CSSPropertyGlyphOrientationHorizontal: |
508 { | 508 { |
509 HANDLE_INHERIT_AND_INITIAL(glyphOrientationHorizontal, GlyphOrientat
ionHorizontal) | 509 HANDLE_INHERIT_AND_INITIAL(glyphOrientationHorizontal, GlyphOrientat
ionHorizontal) |
510 if (!primitiveValue) | 510 if (!primitiveValue) |
511 return; | 511 return; |
512 | 512 |
513 if (primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_DEG) { | 513 if (primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_DEG) { |
514 int orientation = angleToGlyphOrientation(primitiveValue->getFlo
atValue()); | 514 int orientation = angleToGlyphOrientation(primitiveValue->getFlo
atValue()); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
578 // If you crash here, it's because you added a css property and are
not handling it | 578 // If you crash here, it's because you added a css property and are
not handling it |
579 // in either this switch statement or the one in CSSStyleSelector::a
pplyProperty | 579 // in either this switch statement or the one in CSSStyleSelector::a
pplyProperty |
580 ASSERT_WITH_MESSAGE(0, "unimplemented propertyID: %d", id); | 580 ASSERT_WITH_MESSAGE(0, "unimplemented propertyID: %d", id); |
581 return; | 581 return; |
582 } | 582 } |
583 } | 583 } |
584 | 584 |
585 } | 585 } |
586 | 586 |
587 #endif | 587 #endif |
OLD | NEW |