Bug 1059498 - Use the inner dirty rect when initializing the visible rect of display items inside the SVG filter stacking context. r=roc

This commit is contained in:
Markus Stange 2014-09-02 11:13:44 +02:00
Родитель 0193598bf5
Коммит 8f22177f6f
4 изменённых файлов: 59 добавлений и 6 удалений

Просмотреть файл

@ -1959,9 +1959,14 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
inTransform = true;
}
bool usingSVGEffects = nsSVGIntegrationUtils::UsingEffectsForFrame(this);
if (usingSVGEffects) {
dirtyRect =
nsSVGIntegrationUtils::GetRequiredSourceForInvalidArea(this, dirtyRect);
}
bool useOpacity = HasVisualOpacity() && !nsSVGUtils::CanOptimizeOpacity(this);
bool useBlendMode = disp->mMixBlendMode != NS_STYLE_BLEND_NORMAL;
bool usingSVGEffects = nsSVGIntegrationUtils::UsingEffectsForFrame(this);
bool useStickyPosition = disp->mPosition == NS_STYLE_POSITION_STICKY &&
IsScrollFrameActive(nsLayoutUtils::GetNearestScrollableFrame(GetParent(),
nsLayoutUtils::SCROLLABLE_SAME_DOC |
@ -1987,11 +1992,6 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
inTransformSetter(aBuilder, inTransform);
CheckForTouchEventHandler(aBuilder, this);
if (usingSVGEffects) {
dirtyRect =
nsSVGIntegrationUtils::GetRequiredSourceForInvalidArea(this, dirtyRect);
}
nsRect clipPropClip;
if (ApplyClipPropClipping(aBuilder, this, disp, &clipPropClip,
nestedClipState)) {

Просмотреть файл

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>Test for bug 1059498 - Paint parts of the filter that are caused by parts of the source that are invisible</title>
<style>
body {
margin: 0;
}
#result {
width: 100px;
height: 30px;
background-color: lime;
}
</style>
<div id="result"></div>

Просмотреть файл

@ -0,0 +1,32 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>Test for bug 1059498 - Paint parts of the filter that are caused by parts of the source that are invisible</title>
<style>
body {
margin: 0;
}
#filtered {
margin-top: -110px;
width: 100px;
height: 100px;
background-color: white;
filter: url(#filter);
}
</style>
<div id="filtered"></div>
<svg height="0">
<defs>
<filter id="filter" filterUnits="objectBoundingBox"
x="0%" y="0%" width="100%" height="200%"
color-interpolation-filters="sRGB">
<feDropShadow stdDeviation="0" dx="0" dy="40" flood-color="lime"/>
</filter>
</defs>
</svg>

Просмотреть файл

@ -1830,3 +1830,4 @@ pref(browser.display.use_document_fonts,0) == 1022481-1.html 1022481-1-ref.html
== 1053035-1-flex.html 1053035-1-ref.html
test-pref(layout.css.grid.enabled,true) == 1053035-1-grid.html 1053035-1-ref.html
== 1059167-1.html 1059167-1-ref.html
== 1059498-1.html 1059498-1-ref.html