static void getElementCTM(SVGElement* element, AffineTransform& transform) { ASSERT(element); element->document()->updateLayoutIgnorePendingStylesheets(); SVGElement* stopAtElement = SVGLocatable::nearestViewportElement(element); ASSERT(stopAtElement); AffineTransform localTransform; Node* current = element; while (current && current->isSVGElement()) { SVGElement* currentElement = toSVGElement(current); if (currentElement->isSVGStyledElement()) { localTransform = currentElement->renderer()->localToParentTransform(); transform = localTransform.multiply(transform); } // For getCTM() computation, stop at the nearest viewport element if (currentElement == stopAtElement) break; current = current->parentOrShadowHostNode(); } }