gfxMatrix nsSVGInnerSVGFrame::GetCanvasTM() { if (!mCanvasTM) { NS_ASSERTION(GetParent(), "null parent"); nsSVGContainerFrame *parent = static_cast<nsSVGContainerFrame*>(GetParent()); SVGSVGElement *content = static_cast<SVGSVGElement*>(mContent); gfxMatrix tm = content->PrependLocalTransformsTo(parent->GetCanvasTM()); mCanvasTM = new gfxMatrix(tm); } return *mCanvasTM; }
gfxMatrix nsSVGOuterSVGFrame::GetCanvasTM() { if (!mCanvasTM) { SVGSVGElement *content = static_cast<SVGSVGElement*>(mContent); float devPxPerCSSPx = 1.0f / PresContext()->AppUnitsToFloatCSSPixels( PresContext()->AppUnitsPerDevPixel()); gfxMatrix tm = content->PrependLocalTransformsTo( gfxMatrix::Scaling(devPxPerCSSPx, devPxPerCSSPx)); mCanvasTM = new gfxMatrix(tm); } return *mCanvasTM; }
bool nsSVGOuterSVGAnonChildFrame::HasChildrenOnlyTransform(gfx::Matrix *aTransform) const { // We must claim our nsSVGOuterSVGFrame's children-only transforms as our own // so that the children we are used to wrap are transformed properly. SVGSVGElement *content = static_cast<SVGSVGElement*>(mContent); bool hasTransform = content->HasChildrenOnlyTransform(); if (hasTransform && aTransform) { // Outer-<svg> doesn't use x/y, so we can pass eChildToUserSpace here. gfxMatrix identity; *aTransform = gfx::ToMatrix( content->PrependLocalTransformsTo(identity, eChildToUserSpace)); } return hasTransform; }
gfxMatrix nsSVGInnerSVGFrame::GetCanvasTM(uint32_t aFor) { if (!(GetStateBits() & NS_STATE_SVG_NONDISPLAY_CHILD)) { if ((aFor == FOR_PAINTING && NS_SVGDisplayListPaintingEnabled()) || (aFor == FOR_HIT_TESTING && NS_SVGDisplayListHitTestingEnabled())) { return nsSVGIntegrationUtils::GetCSSPxToDevPxMatrix(this); } } if (!mCanvasTM) { NS_ASSERTION(mParent, "null parent"); nsSVGContainerFrame *parent = static_cast<nsSVGContainerFrame*>(mParent); SVGSVGElement *content = static_cast<SVGSVGElement*>(mContent); gfxMatrix tm = content->PrependLocalTransformsTo(parent->GetCanvasTM(aFor)); mCanvasTM = new gfxMatrix(tm); } return *mCanvasTM; }
gfxMatrix nsSVGOuterSVGFrame::GetCanvasTM(uint32_t aFor, nsIFrame* aTransformRoot) { if (!(GetStateBits() & NS_FRAME_IS_NONDISPLAY) && !aTransformRoot) { if (aFor == FOR_PAINTING && NS_SVGDisplayListPaintingEnabled()) { return nsSVGIntegrationUtils::GetCSSPxToDevPxMatrix(this); } } if (!mCanvasTM) { NS_ASSERTION(!aTransformRoot, "transform root will be ignored here"); SVGSVGElement *content = static_cast<SVGSVGElement*>(mContent); float devPxPerCSSPx = 1.0f / PresContext()->AppUnitsToFloatCSSPixels( PresContext()->AppUnitsPerDevPixel()); gfxMatrix tm = content->PrependLocalTransformsTo( gfxMatrix().Scale(devPxPerCSSPx, devPxPerCSSPx)); mCanvasTM = new gfxMatrix(tm); } return *mCanvasTM; }