author | Jonathan Watt <jwatt@jwatt.org> |
Fri, 31 Oct 2014 20:08:54 +0000 | |
changeset 213384 | ddc50e4998ca4c49a5bf96c9c2c5c378b56025b8 |
parent 213383 | 3313505b1b0ebdeea0c615bae0e14a7167137498 |
child 213385 | 67f94bf87c7cf571d6a8f2139b3d91596b735c67 |
push id | 51228 |
push user | jwatt@jwatt.org |
push date | Fri, 31 Oct 2014 20:07:52 +0000 |
treeherder | mozilla-inbound@544fe2d91fcd [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | longsonr |
bugs | 1091321 |
milestone | 36.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/layout/svg/SVGTextFrame.cpp +++ b/layout/svg/SVGTextFrame.cpp @@ -3711,17 +3711,17 @@ SVGTextFrame::PaintSVG(gfxContext& aCont gfxMatrix runTransform = run.GetTransformFromUserSpaceForPainting(presContext, item) * currentMatrix; aContext.SetMatrix(runTransform); if (drawMode != DrawMode(0)) { nsRect frameRect = frame->GetVisualOverflowRect(); bool paintSVGGlyphs; - if (ShouldRenderAsPath(&rendCtx, frame, paintSVGGlyphs)) { + if (ShouldRenderAsPath(frame, paintSVGGlyphs)) { SVGTextDrawPathCallbacks callbacks(&rendCtx, frame, matrixForPaintServers, paintSVGGlyphs); frame->PaintText(&rendCtx, nsPoint(), frameRect, item, &contextPaint, &callbacks); } else { frame->PaintText(&rendCtx, nsPoint(), frameRect, item, &contextPaint, nullptr); @@ -5123,18 +5123,17 @@ SVGTextFrame::DoGlyphPositioning() AdjustChunksForLineBreaks(); AdjustPositionsForClusters(); DoAnchoring(); DoTextPathLayout(); } bool -SVGTextFrame::ShouldRenderAsPath(nsRenderingContext* aContext, - nsTextFrame* aFrame, +SVGTextFrame::ShouldRenderAsPath(nsTextFrame* aFrame, bool& aShouldPaintSVGGlyphs) { // Rendering to a clip path. if (aFrame->GetParent()->GetParent()->GetStateBits() & NS_STATE_SVG_CLIPPATH_CHILD) { aShouldPaintSVGGlyphs = false; return true; }
--- a/layout/svg/SVGTextFrame.h +++ b/layout/svg/SVGTextFrame.h @@ -587,18 +587,17 @@ private: /** * Returns whether we need to render the text using * nsTextFrame::DrawPathCallbacks rather than directly painting * the text frames. * * @param aShouldPaintSVGGlyphs (out) Whether SVG glyphs in the text * should be painted. */ - bool ShouldRenderAsPath(nsRenderingContext* aContext, nsTextFrame* aFrame, - bool& aShouldPaintSVGGlyphs); + bool ShouldRenderAsPath(nsTextFrame* aFrame, bool& aShouldPaintSVGGlyphs); // Methods to get information for a <textPath> frame. nsIFrame* GetTextPathPathFrame(nsIFrame* aTextPathFrame); mozilla::TemporaryRef<Path> GetTextPath(nsIFrame* aTextPathFrame); gfxFloat GetOffsetScale(nsIFrame* aTextPathFrame); gfxFloat GetStartOffset(nsIFrame* aTextPathFrame); DrawMode SetupContextPaint(const DrawTarget* aDrawTarget,
--- a/layout/svg/nsSVGMarkerFrame.cpp +++ b/layout/svg/nsSVGMarkerFrame.cpp @@ -3,17 +3,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // Main header first: #include "nsSVGMarkerFrame.h" // Keep others in (case-insensitive) order: #include "gfxContext.h" -#include "nsRenderingContext.h" #include "nsSVGEffects.h" #include "mozilla/dom/SVGMarkerElement.h" #include "nsSVGPathGeometryElement.h" #include "nsSVGPathGeometryFrame.h" using namespace mozilla::dom; using namespace mozilla::gfx; @@ -98,17 +97,17 @@ GetAnonymousChildFrame(nsIFrame* aFrame) { nsIFrame* kid = aFrame->GetFirstPrincipalChild(); MOZ_ASSERT(kid && kid->GetType() == nsGkAtoms::svgMarkerAnonChildFrame, "expected to find anonymous child of marker frame"); return kid; } nsresult -nsSVGMarkerFrame::PaintMark(nsRenderingContext *aContext, +nsSVGMarkerFrame::PaintMark(gfxContext& aContext, const gfxMatrix& aToMarkedFrameUserSpace, nsSVGPathGeometryFrame *aMarkedFrame, nsSVGMark *aMark, float aStrokeWidth) { // If the flag is set when we get here, it means this marker frame // has already been used painting the current mark, and the document // has a marker reference loop. if (mInUse) @@ -137,35 +136,33 @@ nsSVGMarkerFrame::PaintMark(nsRenderingC Matrix viewBoxTM = marker->GetViewBoxTransform(); Matrix markerTM = marker->GetMarkerTransform(mStrokeWidth, mX, mY, mAutoAngle, mIsStart); gfxMatrix markTM = ThebesMatrix(viewBoxTM) * ThebesMatrix(markerTM) * aToMarkedFrameUserSpace; - gfxContext *gfx = aContext->ThebesContext(); - if (StyleDisplay()->IsScrollableOverflow()) { - gfx->Save(); + aContext.Save(); gfxRect clipRect = nsSVGUtils::GetClipRectForFrame(this, viewBox.x, viewBox.y, viewBox.width, viewBox.height); - nsSVGUtils::SetClipRect(gfx, markTM, clipRect); + nsSVGUtils::SetClipRect(&aContext, markTM, clipRect); } nsIFrame* kid = GetAnonymousChildFrame(this); nsISVGChildFrame* SVGFrame = do_QueryFrame(kid); // The CTM of each frame referencing us may be different. SVGFrame->NotifySVGChanged(nsISVGChildFrame::TRANSFORM_CHANGED); - nsSVGUtils::PaintFrameWithEffects(kid, *gfx, markTM); + nsSVGUtils::PaintFrameWithEffects(kid, aContext, markTM); if (StyleDisplay()->IsScrollableOverflow()) - gfx->Restore(); + aContext.Restore(); return NS_OK; } SVGBBox nsSVGMarkerFrame::GetMarkBBoxContribution(const Matrix &aToBBoxUserspace, uint32_t aFlags, nsSVGPathGeometryFrame *aMarkedFrame,
--- a/layout/svg/nsSVGMarkerFrame.h +++ b/layout/svg/nsSVGMarkerFrame.h @@ -10,17 +10,17 @@ #include "gfxMatrix.h" #include "gfxRect.h" #include "nsFrame.h" #include "nsLiteralString.h" #include "nsQueryFrame.h" #include "nsSVGContainerFrame.h" #include "nsSVGUtils.h" -class nsRenderingContext; +class gfxContext; class nsSVGPathGeometryFrame; namespace mozilla { namespace dom { class SVGSVGElement; } } @@ -79,17 +79,17 @@ public: NS_ABORT_IF_FALSE(GetFirstPrincipalChild() && GetFirstPrincipalChild()->GetType() == nsGkAtoms::svgMarkerAnonChildFrame, "Where is our anonymous child?"); return GetFirstPrincipalChild()->GetContentInsertionFrame(); } // nsSVGMarkerFrame methods: - nsresult PaintMark(nsRenderingContext *aContext, + nsresult PaintMark(gfxContext& aContext, const gfxMatrix& aToMarkedFrameUserSpace, nsSVGPathGeometryFrame *aMarkedFrame, nsSVGMark *aMark, float aStrokeWidth); SVGBBox GetMarkBBoxContribution(const Matrix &aToBBoxUserspace, uint32_t aFlags, nsSVGPathGeometryFrame *aMarkedFrame,
--- a/layout/svg/nsSVGMaskFrame.cpp +++ b/layout/svg/nsSVGMaskFrame.cpp @@ -6,17 +6,16 @@ // Main header first: #include "nsSVGMaskFrame.h" // Keep others in (case-insensitive) order: #include "gfx2DGlue.h" #include "gfxContext.h" #include "mozilla/gfx/2D.h" #include "mozilla/RefPtr.h" -#include "nsRenderingContext.h" #include "nsSVGEffects.h" #include "mozilla/dom/SVGMaskElement.h" using namespace mozilla; using namespace mozilla::dom; using namespace mozilla::gfx; /** @@ -221,34 +220,34 @@ nsSVGMaskFrame::GetMaskForMaskedFrame(gf SurfaceFormat::B8G8R8A8); if (!maskDT) { return nullptr; } gfxMatrix maskSurfaceMatrix = aContext->CurrentMatrix() * gfxMatrix::Translation(-maskSurfaceRect.TopLeft()); - nsRenderingContext tmpCtx(maskDT); - tmpCtx.ThebesContext()->SetMatrix(maskSurfaceMatrix); + nsRefPtr<gfxContext> tmpCtx = new gfxContext(maskDT); + tmpCtx->SetMatrix(maskSurfaceMatrix); mMatrixForChildren = GetMaskTransform(aMaskedFrame) * aMatrix; for (nsIFrame* kid = mFrames.FirstChild(); kid; kid = kid->GetNextSibling()) { // The CTM of each frame referencing us can be different nsISVGChildFrame* SVGFrame = do_QueryFrame(kid); if (SVGFrame) { SVGFrame->NotifySVGChanged(nsISVGChildFrame::TRANSFORM_CHANGED); } gfxMatrix m = mMatrixForChildren; if (kid->GetContent()->IsSVG()) { m = static_cast<nsSVGElement*>(kid->GetContent())-> PrependLocalTransformsTo(m); } - nsSVGUtils::PaintFrameWithEffects(kid, *tmpCtx.ThebesContext(), mMatrixForChildren); + nsSVGUtils::PaintFrameWithEffects(kid, *tmpCtx, mMatrixForChildren); } RefPtr<SourceSurface> maskSnapshot = maskDT->Snapshot(); if (!maskSnapshot) { return nullptr; } RefPtr<DataSourceSurface> maskSurface = maskSnapshot->GetDataSurface(); DataSourceSurface::MappedSurface map;
--- a/layout/svg/nsSVGMaskFrame.h +++ b/layout/svg/nsSVGMaskFrame.h @@ -10,17 +10,16 @@ #include "mozilla/gfx/2D.h" #include "mozilla/RefPtr.h" #include "gfxPattern.h" #include "gfxMatrix.h" #include "nsSVGContainerFrame.h" #include "nsSVGUtils.h" class gfxContext; -class nsRenderingContext; typedef nsSVGContainerFrame nsSVGMaskFrameBase; class nsSVGMaskFrame MOZ_FINAL : public nsSVGMaskFrameBase { friend nsIFrame* NS_NewSVGMaskFrame(nsIPresShell* aPresShell, nsStyleContext* aContext);
--- a/layout/svg/nsSVGPathGeometryFrame.cpp +++ b/layout/svg/nsSVGPathGeometryFrame.cpp @@ -816,31 +816,29 @@ nsSVGPathGeometryFrame::PaintMarkers(gfx float strokeWidth = nsSVGUtils::GetStrokeWidth(this, contextPaint); nsTArray<nsSVGMark> marks; static_cast<nsSVGPathGeometryElement*> (mContent)->GetMarkPoints(&marks); uint32_t num = marks.Length(); if (num) { - nsRenderingContext rendCtx(&aContext); - // These are in the same order as the nsSVGMark::Type constants. nsSVGMarkerFrame* markerFrames[] = { properties.GetMarkerStartFrame(), properties.GetMarkerMidFrame(), properties.GetMarkerEndFrame(), }; PR_STATIC_ASSERT(MOZ_ARRAY_LENGTH(markerFrames) == nsSVGMark::eTypeCount); for (uint32_t i = 0; i < num; i++) { nsSVGMark& mark = marks[i]; nsSVGMarkerFrame* frame = markerFrames[mark.type]; if (frame) { - frame->PaintMark(&rendCtx, aTransform, this, &mark, strokeWidth); + frame->PaintMark(aContext, aTransform, this, &mark, strokeWidth); } } } } } } uint16_t