void SVGMarkerElement::parseMappedAttribute(MappedAttribute *attr) { const AtomicString& value = attr->value(); if (attr->name() == SVGNames::markerUnitsAttr) { if (value == "userSpaceOnUse") markerUnits()->setBaseVal(SVG_MARKERUNITS_USERSPACEONUSE); } else if (attr->name() == SVGNames::refXAttr) refX()->baseVal()->setValueAsString(value.impl()); else if (attr->name() == SVGNames::refYAttr) refY()->baseVal()->setValueAsString(value.impl()); else if (attr->name() == SVGNames::markerWidthAttr) markerWidth()->baseVal()->setValueAsString(value.impl()); else if (attr->name() == SVGNames::markerHeightAttr) markerHeight()->baseVal()->setValueAsString(value.impl()); else if (attr->name() == SVGNames::orientAttr) { if (value == "auto") setOrientToAuto(); else { SVGAngle *angle = SVGSVGElement::createSVGAngle(); angle->setValueAsString(value.impl()); setOrientToAngle(angle); } } else { if(SVGLangSpace::parseMappedAttribute(attr)) return; if(SVGExternalResourcesRequired::parseMappedAttribute(attr)) return; if(SVGFitToViewBox::parseMappedAttribute(attr)) return; SVGStyledElement::parseMappedAttribute(attr); } }
KCanvasMarker *SVGMarkerElement::canvasResource() { if(!m_marker) m_marker = static_cast<KCanvasMarker *>(renderingDevice()->createResource(RS_MARKER)); m_marker->setMarker(renderer()); // Spec: If the attribute is not specified, the effect is as if a // value of "0" were specified. if(!m_orientType) { SVGAngle *angle = SVGSVGElement::createSVGAngle(); angle->setValueAsString(String("0").impl()); setOrientToAngle(angle); } if(orientType()->baseVal() == SVG_MARKER_ORIENT_ANGLE) m_marker->setAngle(orientAngle()->baseVal()->value()); else m_marker->setAutoAngle(); m_marker->setRef(refX()->baseVal()->value(), refY()->baseVal()->value()); m_marker->setUseStrokeWidth(markerUnits()->baseVal() == SVG_MARKERUNITS_STROKEWIDTH); double w = markerWidth()->baseVal()->value(); double h = markerHeight()->baseVal()->value(); RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(w, h); m_marker->setScale(viewBox->matrix().m11(), viewBox->matrix().m22()); return m_marker; }
void SVGMarkerElement::SetOrientToAngle(SVGAngle& angle, ErrorResult& rv) { float f = angle.Value(); if (!IsFinite(f)) { rv.Throw(NS_ERROR_DOM_SVG_WRONG_TYPE_ERR); return; } mAngleAttributes[ORIENT].SetBaseValue(f, this, true); }
float SVGAnimatedAngleAnimator::calculateDistance(const String& fromString, const String& toString) { SVGAngle from = SVGAngle(); from.setValueAsString(fromString, ASSERT_NO_EXCEPTION); SVGAngle to = SVGAngle(); to.setValueAsString(toString, ASSERT_NO_EXCEPTION); return fabsf(to.value() - from.value()); }
void SVGMarkerElement::parseMappedAttribute(Attribute* attr) { if (attr->name() == SVGNames::markerUnitsAttr) { if (attr->value() == "userSpaceOnUse") setMarkerUnitsBaseValue(SVG_MARKERUNITS_USERSPACEONUSE); else if (attr->value() == "strokeWidth") setMarkerUnitsBaseValue(SVG_MARKERUNITS_STROKEWIDTH); } else if (attr->name() == SVGNames::refXAttr) setRefXBaseValue(SVGLength(LengthModeWidth, attr->value())); else if (attr->name() == SVGNames::refYAttr) setRefYBaseValue(SVGLength(LengthModeHeight, attr->value())); else if (attr->name() == SVGNames::markerWidthAttr) setMarkerWidthBaseValue(SVGLength(LengthModeWidth, attr->value())); else if (attr->name() == SVGNames::markerHeightAttr) setMarkerHeightBaseValue(SVGLength(LengthModeHeight, attr->value())); else if (attr->name() == SVGNames::orientAttr) { SVGAngle angle; if (attr->value() == "auto") setOrientTypeBaseValue(SVG_MARKER_ORIENT_AUTO); else { ExceptionCode ec = 0; angle.setValueAsString(attr->value(), ec); setOrientTypeBaseValue(SVG_MARKER_ORIENT_ANGLE); } setOrientAngleBaseValue(angle); } else { if (SVGLangSpace::parseMappedAttribute(attr)) return; if (SVGExternalResourcesRequired::parseMappedAttribute(attr)) return; if (SVGFitToViewBox::parseMappedAttribute(document(), attr)) return; SVGStyledElement::parseMappedAttribute(attr); } }
void SVGMarkerElement::setOrientToAngle(SVGAngle& angle) { setOrient(SVGMarkerOrientAngle, angle.propertyReference()); }