KCanvasClipper *SVGClipPathElement::canvasResource() { if (!view()) return 0; if (!m_clipper) m_clipper = static_cast<KCanvasClipper *>(renderingDevice()->createResource(RS_CLIPPER)); else m_clipper->resetClipData(); bool bbox = clipPathUnits()->baseVal() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX; RenderStyle *clipPathStyle = styleForRenderer(parent()->renderer()); // FIXME: Manual style resolution is a hack for (Node *n = firstChild(); n != 0; n = n->nextSibling()) { SVGElement *e = svg_dynamic_cast(n); if (e && e->isStyled()) { SVGStyledElement *styled = static_cast<SVGStyledElement *>(e); RenderStyle *pathStyle = document()->styleSelector()->styleForElement(styled, clipPathStyle); if (KCanvasPath* pathData = styled->toPathData()) m_clipper->addClipData(pathData, (KCWindRule) pathStyle->svgStyle()->clipRule(), bbox); pathStyle->deref(view()->renderArena()); } } clipPathStyle->deref(view()->renderArena()); return m_clipper; }