summaryrefslogtreecommitdiffstats
path: root/WebCore/css/SVGCSSComputedStyleDeclaration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/css/SVGCSSComputedStyleDeclaration.cpp')
-rw-r--r--WebCore/css/SVGCSSComputedStyleDeclaration.cpp190
1 files changed, 190 insertions, 0 deletions
diff --git a/WebCore/css/SVGCSSComputedStyleDeclaration.cpp b/WebCore/css/SVGCSSComputedStyleDeclaration.cpp
new file mode 100644
index 0000000..7168e5d
--- /dev/null
+++ b/WebCore/css/SVGCSSComputedStyleDeclaration.cpp
@@ -0,0 +1,190 @@
+/*
+ Copyright (C) 2007 Eric Seidel <eric@webkit.org>
+ Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#if ENABLE(SVG)
+#include "CSSComputedStyleDeclaration.h"
+
+#include "CSSPrimitiveValueMappings.h"
+#include "CSSPropertyNames.h"
+#include "Document.h"
+
+namespace WebCore {
+
+static CSSPrimitiveValue* glyphOrientationToCSSPrimitiveValue(EGlyphOrientation orientation)
+{
+ switch (orientation) {
+ case GO_0DEG:
+ return new CSSPrimitiveValue(0.0f, CSSPrimitiveValue::CSS_DEG);
+ case GO_90DEG:
+ return new CSSPrimitiveValue(90.0f, CSSPrimitiveValue::CSS_DEG);
+ case GO_180DEG:
+ return new CSSPrimitiveValue(180.0f, CSSPrimitiveValue::CSS_DEG);
+ case GO_270DEG:
+ return new CSSPrimitiveValue(270.0f, CSSPrimitiveValue::CSS_DEG);
+ default:
+ return 0;
+ }
+}
+
+PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getSVGPropertyCSSValue(int propertyID, EUpdateLayout updateLayout) const
+{
+ Node* node = m_node.get();
+ if (!node)
+ return 0;
+
+ // Make sure our layout is up to date before we allow a query on these attributes.
+ if (updateLayout)
+ node->document()->updateLayout();
+
+ RenderStyle* style = node->computedStyle();
+ if (!style)
+ return 0;
+
+ const SVGRenderStyle* svgStyle = style->svgStyle();
+ if (!svgStyle)
+ return 0;
+
+ switch (static_cast<CSSPropertyID>(propertyID)) {
+ case CSS_PROP_CLIP_RULE:
+ return new CSSPrimitiveValue(svgStyle->clipRule());
+ case CSS_PROP_FLOOD_OPACITY:
+ return new CSSPrimitiveValue(svgStyle->floodOpacity(), CSSPrimitiveValue::CSS_NUMBER);
+ case CSS_PROP_STOP_OPACITY:
+ return new CSSPrimitiveValue(svgStyle->stopOpacity(), CSSPrimitiveValue::CSS_NUMBER);
+ case CSS_PROP_POINTER_EVENTS:
+ return new CSSPrimitiveValue(svgStyle->pointerEvents());
+ case CSS_PROP_COLOR_INTERPOLATION:
+ return new CSSPrimitiveValue(svgStyle->colorInterpolation());
+ case CSS_PROP_COLOR_INTERPOLATION_FILTERS:
+ return new CSSPrimitiveValue(svgStyle->colorInterpolationFilters());
+ case CSS_PROP_FILL_OPACITY:
+ return new CSSPrimitiveValue(svgStyle->fillOpacity(), CSSPrimitiveValue::CSS_NUMBER);
+ case CSS_PROP_FILL_RULE:
+ return new CSSPrimitiveValue(svgStyle->fillRule());
+ case CSS_PROP_COLOR_RENDERING:
+ return new CSSPrimitiveValue(svgStyle->colorRendering());
+ case CSS_PROP_IMAGE_RENDERING:
+ return new CSSPrimitiveValue(svgStyle->imageRendering());
+ case CSS_PROP_SHAPE_RENDERING:
+ return new CSSPrimitiveValue(svgStyle->shapeRendering());
+ case CSS_PROP_STROKE_LINECAP:
+ return new CSSPrimitiveValue(svgStyle->capStyle());
+ case CSS_PROP_STROKE_LINEJOIN:
+ return new CSSPrimitiveValue(svgStyle->joinStyle());
+ case CSS_PROP_STROKE_MITERLIMIT:
+ return new CSSPrimitiveValue(svgStyle->strokeMiterLimit(), CSSPrimitiveValue::CSS_NUMBER);
+ case CSS_PROP_STROKE_OPACITY:
+ return new CSSPrimitiveValue(svgStyle->strokeOpacity(), CSSPrimitiveValue::CSS_NUMBER);
+ case CSS_PROP_TEXT_RENDERING:
+ return new CSSPrimitiveValue(svgStyle->textRendering());
+ case CSS_PROP_ALIGNMENT_BASELINE:
+ return new CSSPrimitiveValue(svgStyle->alignmentBaseline());
+ case CSS_PROP_DOMINANT_BASELINE:
+ return new CSSPrimitiveValue(svgStyle->dominantBaseline());
+ case CSS_PROP_TEXT_ANCHOR:
+ return new CSSPrimitiveValue(svgStyle->textAnchor());
+ case CSS_PROP_WRITING_MODE:
+ return new CSSPrimitiveValue(svgStyle->writingMode());
+ case CSS_PROP_CLIP_PATH:
+ if (!svgStyle->clipPath().isEmpty())
+ return new CSSPrimitiveValue(svgStyle->clipPath(), CSSPrimitiveValue::CSS_URI);
+ return new CSSPrimitiveValue(CSS_VAL_NONE);
+ case CSS_PROP_MASK:
+ if (!svgStyle->maskElement().isEmpty())
+ return new CSSPrimitiveValue(svgStyle->maskElement(), CSSPrimitiveValue::CSS_URI);
+ return new CSSPrimitiveValue(CSS_VAL_NONE);
+ case CSS_PROP_FILTER:
+ if (!svgStyle->filter().isEmpty())
+ return new CSSPrimitiveValue(svgStyle->filter(), CSSPrimitiveValue::CSS_URI);
+ return new CSSPrimitiveValue(CSS_VAL_NONE);
+ case CSS_PROP_FLOOD_COLOR:
+ return new CSSPrimitiveValue(svgStyle->floodColor().rgb());
+ case CSS_PROP_LIGHTING_COLOR:
+ return new CSSPrimitiveValue(svgStyle->lightingColor().rgb());
+ case CSS_PROP_STOP_COLOR:
+ return new CSSPrimitiveValue(svgStyle->stopColor().rgb());
+ case CSS_PROP_FILL:
+ return svgStyle->fillPaint();
+ case CSS_PROP_KERNING:
+ return svgStyle->kerning();
+ case CSS_PROP_MARKER_END:
+ if (!svgStyle->endMarker().isEmpty())
+ return new CSSPrimitiveValue(svgStyle->endMarker(), CSSPrimitiveValue::CSS_URI);
+ return new CSSPrimitiveValue(CSS_VAL_NONE);
+ case CSS_PROP_MARKER_MID:
+ if (!svgStyle->midMarker().isEmpty())
+ return new CSSPrimitiveValue(svgStyle->midMarker(), CSSPrimitiveValue::CSS_URI);
+ return new CSSPrimitiveValue(CSS_VAL_NONE);
+ case CSS_PROP_MARKER_START:
+ if (!svgStyle->startMarker().isEmpty())
+ return new CSSPrimitiveValue(svgStyle->startMarker(), CSSPrimitiveValue::CSS_URI);
+ return new CSSPrimitiveValue(CSS_VAL_NONE);
+ case CSS_PROP_STROKE:
+ return svgStyle->strokePaint();
+ case CSS_PROP_STROKE_DASHARRAY:
+ return svgStyle->strokeDashArray();
+ case CSS_PROP_STROKE_DASHOFFSET:
+ return svgStyle->strokeDashOffset();
+ case CSS_PROP_STROKE_WIDTH:
+ return svgStyle->strokeWidth();
+ case CSS_PROP_BASELINE_SHIFT: {
+ switch (svgStyle->baselineShift()) {
+ case BS_BASELINE:
+ return new CSSPrimitiveValue(CSS_VAL_BASELINE);
+ case BS_SUPER:
+ return new CSSPrimitiveValue(CSS_VAL_SUPER);
+ case BS_SUB:
+ return new CSSPrimitiveValue(CSS_VAL_SUB);
+ case BS_LENGTH:
+ return svgStyle->baselineShiftValue();
+ }
+ }
+ case CSS_PROP_GLYPH_ORIENTATION_HORIZONTAL:
+ return glyphOrientationToCSSPrimitiveValue(svgStyle->glyphOrientationHorizontal());
+ case CSS_PROP_GLYPH_ORIENTATION_VERTICAL: {
+ if (CSSPrimitiveValue* value = glyphOrientationToCSSPrimitiveValue(svgStyle->glyphOrientationVertical()))
+ return value;
+
+ if (svgStyle->glyphOrientationVertical() == GO_AUTO)
+ return new CSSPrimitiveValue(CSS_VAL_AUTO);
+
+ return 0;
+ }
+ case CSS_PROP_MARKER:
+ case CSS_PROP_ENABLE_BACKGROUND:
+ case CSS_PROP_COLOR_PROFILE:
+ // the above properties are not yet implemented in the engine
+ 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 CSSComputedStyleDelcaration::getPropertyCSSValue
+ ASSERT_WITH_MESSAGE(0, "unimplemented propertyID: %d", propertyID);
+ }
+ LOG_ERROR("unimplemented propertyID: %d", propertyID);
+ return 0;
+}
+
+}
+
+#endif // ENABLE(SVG)
+
+// vim:ts=4:noet