author | Cameron McCormack <cam@mcc.id.au> |
Mon, 11 Feb 2013 17:22:17 +1100 | |
changeset 121491 | 53005a0154076fbad15da799ebaafb6f1f5bc5ca |
parent 121490 | 76dd3bdc30dfbb249c8d59fe694a2f64d76560cb |
child 121492 | 0e81334f73d1137a7d412e5216d80888ba42d03f |
push id | 24291 |
push user | ryanvm@gmail.com |
push date | Mon, 11 Feb 2013 19:12:51 +0000 |
treeherder | mozilla-central@93ba23f414ff [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jwatt |
bugs | 655877 |
milestone | 21.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
|
layout/svg/nsSVGIntegrationUtils.cpp | file | annotate | diff | comparison | revisions | |
layout/svg/nsSVGUtils.cpp | file | annotate | diff | comparison | revisions |
--- a/layout/svg/nsSVGIntegrationUtils.cpp +++ b/layout/svg/nsSVGIntegrationUtils.cpp @@ -460,17 +460,18 @@ nsSVGIntegrationUtils::PaintFramesWithEf gfxContext* gfx = aCtx->ThebesContext(); gfxContextMatrixAutoSaveRestore matrixAutoSaveRestore(gfx); nsPoint firstFrameOffset = GetOffsetToUserSpace(firstFrame); nsPoint offset = aBuilder->ToReferenceFrame(firstFrame) - firstFrameOffset; nsPoint offsetWithoutSVGGeomFramePos = offset; nsPoint svgGeomFramePos; - if (aFrame->IsFrameOfType(nsIFrame::eSVGGeometry)) { + if (aFrame->IsFrameOfType(nsIFrame::eSVGGeometry) || + aFrame->IsSVGText()) { // SVG leaf frames apply their offset themselves, we need to unapply it at // various points below to prevent it being double counted. svgGeomFramePos = aFrame->GetPosition(); offsetWithoutSVGGeomFramePos -= svgGeomFramePos; } aCtx->Translate(offsetWithoutSVGGeomFramePos);
--- a/layout/svg/nsSVGUtils.cpp +++ b/layout/svg/nsSVGUtils.cpp @@ -790,17 +790,18 @@ nsSVGUtils::PaintFrameWithEffects(nsRend if (aDirtyRect && !(aFrame->GetStateBits() & NS_STATE_SVG_NONDISPLAY_CHILD)) { // Here we convert aFrame's paint bounds to outer-<svg> device space, // compare it to aDirtyRect, and return early if they don't intersect. // We don't do this optimization for nondisplay SVG since nondisplay // SVG doesn't maintain bounds/overflow rects. nsRect overflowRect = aFrame->GetVisualOverflowRectRelativeToSelf(); - if (aFrame->IsFrameOfType(nsIFrame::eSVGGeometry)) { + if (aFrame->IsFrameOfType(nsIFrame::eSVGGeometry) || + aFrame->IsSVGText()) { // Unlike containers, leaf frames do not include GetPosition() in // GetCanvasTM(). overflowRect = overflowRect + aFrame->GetPosition(); } uint32_t appUnitsPerDevPx = aFrame->PresContext()->AppUnitsPerDevPixel(); gfxMatrix tm = GetCanvasTM(aFrame, nsISVGChildFrame::FOR_PAINTING); if (aFrame->IsFrameOfType(nsIFrame::eSVG | nsIFrame::eSVGContainer)) { gfxMatrix childrenOnlyTM; @@ -860,17 +861,18 @@ nsSVGUtils::PaintFrameWithEffects(nsRend complexEffects = true; gfx->Save(); if (!(aFrame->GetStateBits() & NS_STATE_SVG_NONDISPLAY_CHILD)) { // aFrame has a valid visual overflow rect, so clip to it before calling // PushGroup() to minimize the size of the surfaces we'll composite: gfxContextMatrixAutoSaveRestore matrixAutoSaveRestore(gfx); gfx->Multiply(GetCanvasTM(aFrame, nsISVGChildFrame::FOR_PAINTING)); nsRect overflowRect = aFrame->GetVisualOverflowRectRelativeToSelf(); - if (aFrame->IsFrameOfType(nsIFrame::eSVGGeometry)) { + if (aFrame->IsFrameOfType(nsIFrame::eSVGGeometry) || + aFrame->IsSVGText()) { // Unlike containers, leaf frames do not include GetPosition() in // GetCanvasTM(). overflowRect = overflowRect + aFrame->GetPosition(); } aContext->IntersectClip(overflowRect); } gfx->PushGroup(gfxASurface::CONTENT_COLOR_ALPHA); }