void SVGSVGElement::setupInitialView(const String& fragmentIdentifier, Element* anchorNode) { bool hadUseCurrentView = m_useCurrentView; if (fragmentIdentifier.startsWith("xpointer(")) { // FIXME: XPointer references are ignored (https://bugs.webkit.org/show_bug.cgi?id=17491) setUseCurrentView(false); } else if (fragmentIdentifier.startsWith("svgView(")) { if (currentView()->parseViewSpec(fragmentIdentifier)) setUseCurrentView(true); } else if (anchorNode && anchorNode->hasTagName(SVGNames::viewTag)) { if (SVGViewElement* viewElement = anchorNode->hasTagName(SVGNames::viewTag) ? static_cast<SVGViewElement*>(anchorNode) : 0) { SVGElement* element = SVGLocatable::nearestViewportElement(viewElement); if (element->hasTagName(SVGNames::svgTag)) { SVGSVGElement* svg = static_cast<SVGSVGElement*>(element); svg->inheritViewAttributes(viewElement); setUseCurrentView(true); } } } if (!hadUseCurrentView) { if (!m_useCurrentView) return; } else if (!m_useCurrentView) currentView()->setTransform(emptyString()); // Force a layout, otherwise RenderSVGRoots localToBorderBoxTransform won't be rebuild. if (RenderObject* object = renderer()) RenderSVGResource::markForLayoutAndParentResourceInvalidation(object); // FIXME: We need to decide which <svg> to focus on, and zoom to it. // FIXME: We need to actually "highlight" the viewTarget(s). }
void SVGSVGElement::inheritViewAttributes(SVGViewElement* viewElement) { setUseCurrentView(true); if (viewElement->hasAttribute(SVGNames::viewBoxAttr)) currentView()->setViewBox(viewElement->viewBox()); else currentView()->setViewBox(viewBox()); if (viewElement->hasAttribute(SVGNames::preserveAspectRatioAttr)) { currentView()->preserveAspectRatio()->setAlign(viewElement->preserveAspectRatio()->align()); currentView()->preserveAspectRatio()->setMeetOrSlice(viewElement->preserveAspectRatio()->meetOrSlice()); } else { currentView()->preserveAspectRatio()->setAlign(preserveAspectRatio()->align()); currentView()->preserveAspectRatio()->setMeetOrSlice(preserveAspectRatio()->meetOrSlice()); } if (viewElement->hasAttribute(SVGNames::zoomAndPanAttr)) currentView()->setZoomAndPan(viewElement->zoomAndPan()); renderer()->setNeedsLayout(true); }
void SVGSVGElement::inheritViewAttributes(SVGViewElement* viewElement) { setUseCurrentView(true); if (viewElement->hasAttribute(SVGNames::viewBoxAttr)) currentView()->setViewBox(viewElement->viewBox()); else currentView()->setViewBox(viewBox()); SVGPreserveAspectRatio aspectRatio; if (viewElement->hasAttribute(SVGNames::preserveAspectRatioAttr)) aspectRatio = viewElement->preserveAspectRatioBaseValue(); else aspectRatio = preserveAspectRatioBaseValue(); currentView()->setPreserveAspectRatioBaseValue(aspectRatio); if (viewElement->hasAttribute(SVGNames::zoomAndPanAttr)) currentView()->setZoomAndPan(viewElement->zoomAndPan()); renderer()->setNeedsLayout(true); }
void SVGSVGElement::inheritViewAttributes(SVGViewElement* viewElement) { setUseCurrentView(true); if (viewElement->hasAttribute(SVGNames::viewBoxAttr)) currentView()->setViewBox(viewElement->viewBox()); else currentView()->setViewBox(viewBox()); SVGPreserveAspectRatio aspectRatio; if (viewElement->hasAttribute(SVGNames::preserveAspectRatioAttr)) aspectRatio = viewElement->preserveAspectRatioBaseValue(); else aspectRatio = preserveAspectRatioBaseValue(); currentView()->setPreserveAspectRatioBaseValue(aspectRatio); if (viewElement->hasAttribute(SVGNames::zoomAndPanAttr)) currentView()->setZoomAndPan(viewElement->zoomAndPan()); if (RenderObject* object = renderer()) RenderSVGResource::markForLayoutAndParentResourceInvalidation(object); }