зеркало из https://github.com/mozilla/gecko-dev.git
Backout 99a2125bd365 (bug 779971) for reftest failures
This commit is contained in:
Родитель
e057906f3d
Коммит
812bc7697e
|
@ -116,7 +116,6 @@
|
||||||
#include "nsIDOMSVGFilters.h"
|
#include "nsIDOMSVGFilters.h"
|
||||||
#include "DOMSVGTests.h"
|
#include "DOMSVGTests.h"
|
||||||
#include "nsSVGEffects.h"
|
#include "nsSVGEffects.h"
|
||||||
#include "nsSVGTextPathFrame.h"
|
|
||||||
#include "nsSVGUtils.h"
|
#include "nsSVGUtils.h"
|
||||||
|
|
||||||
#include "nsRefreshDriver.h"
|
#include "nsRefreshDriver.h"
|
||||||
|
@ -7788,12 +7787,6 @@ DoApplyRenderingChangeToTree(nsIFrame* aFrame,
|
||||||
needInvalidatingPaint = true;
|
needInvalidatingPaint = true;
|
||||||
// Invalidate and update our area:
|
// Invalidate and update our area:
|
||||||
nsSVGUtils::InvalidateAndScheduleReflowSVG(aFrame);
|
nsSVGUtils::InvalidateAndScheduleReflowSVG(aFrame);
|
||||||
} else if (aChange & nsChangeHint_UpdateTextPath) {
|
|
||||||
NS_ABORT_IF_FALSE(aFrame->GetType() == nsGkAtoms::svgTextPathFrame,
|
|
||||||
"textPath frame expected");
|
|
||||||
needInvalidatingPaint = true;
|
|
||||||
// Invalidate and update our area:
|
|
||||||
static_cast<nsSVGTextPathFrame*>(aFrame)->NotifyGlyphMetricsChange();
|
|
||||||
} else {
|
} else {
|
||||||
needInvalidatingPaint = true;
|
needInvalidatingPaint = true;
|
||||||
// Just invalidate our area:
|
// Just invalidate our area:
|
||||||
|
|
|
@ -111,13 +111,7 @@ enum nsChangeHint {
|
||||||
* changes, and it's inherited by a child, that might require a reflow
|
* changes, and it's inherited by a child, that might require a reflow
|
||||||
* due to the border-width change on the child.
|
* due to the border-width change on the child.
|
||||||
*/
|
*/
|
||||||
nsChangeHint_BorderStyleNoneChange = 0x8000,
|
nsChangeHint_BorderStyleNoneChange = 0x8000
|
||||||
|
|
||||||
/**
|
|
||||||
* SVG textPath needs to be recomputed because the path has changed.
|
|
||||||
* This means that the glyph positions of the text need to be recomputed.
|
|
||||||
*/
|
|
||||||
nsChangeHint_UpdateTextPath = 0x10000
|
|
||||||
|
|
||||||
// IMPORTANT NOTE: When adding new hints, consider whether you need to
|
// IMPORTANT NOTE: When adding new hints, consider whether you need to
|
||||||
// add them to NS_HintsNotHandledForDescendantsIn() below.
|
// add them to NS_HintsNotHandledForDescendantsIn() below.
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="r" class="reftest-wait">
|
|
||||||
<text id="t"><textPath xlink:href="#r">x</textPath>1</text>
|
|
||||||
<script>
|
|
||||||
|
|
||||||
window.addEventListener("load", function() {
|
|
||||||
setTimeout(function() {
|
|
||||||
document.getElementById("t").lastChild.data = "2";
|
|
||||||
|
|
||||||
document.documentElement.removeAttribute("class");
|
|
||||||
}, 200);
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</svg>
|
|
До Ширина: | Высота: | Размер: 416 B |
|
@ -136,7 +136,6 @@ load 767056-1.svg
|
||||||
load 768351.svg
|
load 768351.svg
|
||||||
load 780963-1.html
|
load 780963-1.html
|
||||||
load 757751-1.svg
|
load 757751-1.svg
|
||||||
load 779971-1.svg
|
|
||||||
load 782141-1.svg
|
load 782141-1.svg
|
||||||
load 784061-1.svg
|
load 784061-1.svg
|
||||||
load 790072.svg
|
load 790072.svg
|
||||||
|
|
|
@ -286,6 +286,32 @@ nsSVGMarkerProperty::DoUpdate()
|
||||||
mFrame->GetContent()->AsElement(), nsRestyleHint(0), changeHint);
|
mFrame->GetContent()->AsElement(), nsRestyleHint(0), changeHint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class nsAsyncNotifyGlyphMetricsChange MOZ_FINAL : public nsIReflowCallback
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
nsAsyncNotifyGlyphMetricsChange(nsIFrame* aFrame) : mWeakFrame(aFrame)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool ReflowFinished()
|
||||||
|
{
|
||||||
|
nsSVGTextPathFrame* frame =
|
||||||
|
static_cast<nsSVGTextPathFrame*>(mWeakFrame.GetFrame());
|
||||||
|
if (frame) {
|
||||||
|
frame->NotifyGlyphMetricsChange();
|
||||||
|
}
|
||||||
|
delete this;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void ReflowCallbackCanceled()
|
||||||
|
{
|
||||||
|
delete this;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsWeakFrame mWeakFrame;
|
||||||
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
nsSVGTextPathProperty::DoUpdate()
|
nsSVGTextPathProperty::DoUpdate()
|
||||||
{
|
{
|
||||||
|
@ -296,11 +322,13 @@ nsSVGTextPathProperty::DoUpdate()
|
||||||
NS_ASSERTION(mFrame->IsFrameOfType(nsIFrame::eSVG), "SVG frame expected");
|
NS_ASSERTION(mFrame->IsFrameOfType(nsIFrame::eSVG), "SVG frame expected");
|
||||||
|
|
||||||
if (mFrame->GetType() == nsGkAtoms::svgTextPathFrame) {
|
if (mFrame->GetType() == nsGkAtoms::svgTextPathFrame) {
|
||||||
// Repaint asynchronously in case the path frame is being torn down
|
if (mFrame->PresContext()->PresShell()->IsReflowLocked()) {
|
||||||
nsChangeHint changeHint =
|
nsIReflowCallback* cb = new nsAsyncNotifyGlyphMetricsChange(mFrame);
|
||||||
nsChangeHint(nsChangeHint_RepaintFrame | nsChangeHint_UpdateTextPath);
|
mFrame->PresContext()->PresShell()->PostReflowCallback(cb);
|
||||||
mFramePresShell->FrameConstructor()->PostRestyleEvent(
|
} else {
|
||||||
mFrame->GetContent()->AsElement(), nsRestyleHint(0), changeHint);
|
nsSVGTextPathFrame* textPathFrame = static_cast<nsSVGTextPathFrame*>(mFrame);
|
||||||
|
textPathFrame->NotifyGlyphMetricsChange();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче