mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1122526 patch 2 - Only do OMTA transform scale choosing for layers that are for transform display items. r=roc
This fixes the scaling choice when we have more than one layer for the same element, e.g., because it animates both transform and opacity.
This commit is contained in:
parent
41fbfbc01b
commit
0339c0adea
@ -4643,6 +4643,7 @@ static bool
|
||||
ChooseScaleAndSetTransform(FrameLayerBuilder* aLayerBuilder,
|
||||
nsDisplayListBuilder* aDisplayListBuilder,
|
||||
nsIFrame* aContainerFrame,
|
||||
nsDisplayItem* aContainerItem,
|
||||
const nsRect& aVisibleRect,
|
||||
const Matrix4x4* aTransform,
|
||||
const ContainerLayerParameters& aIncomingScale,
|
||||
@ -4698,6 +4699,8 @@ ChooseScaleAndSetTransform(FrameLayerBuilder* aLayerBuilder,
|
||||
// If the container's transform is animated off main thread, fix a suitable scale size
|
||||
// for animation
|
||||
if (aContainerFrame->GetContent() &&
|
||||
aContainerItem &&
|
||||
aContainerItem->GetType() == nsDisplayItem::TYPE_TRANSFORM &&
|
||||
nsLayoutUtils::HasAnimationsForCompositor(
|
||||
aContainerFrame->GetContent(), eCSSProperty_transform)) {
|
||||
// compute scale using the animation on the container (ignoring
|
||||
@ -4891,6 +4894,7 @@ FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder* aBuilder,
|
||||
aContainerItem ? aContainerItem->GetVisibleRectForChildren() :
|
||||
aContainerFrame->GetVisualOverflowRectRelativeToSelf();
|
||||
if (!ChooseScaleAndSetTransform(this, aBuilder, aContainerFrame,
|
||||
aContainerItem,
|
||||
bounds.Intersect(childrenVisible),
|
||||
aTransform, aParameters,
|
||||
containerLayer, state, scaleParameters)) {
|
||||
|
@ -0,0 +1,24 @@
|
||||
<!DOCTYPE HTML>
|
||||
<title>Testcase, bug 1122526</title>
|
||||
<style>
|
||||
|
||||
#outer, #inner {
|
||||
display: inline-block;
|
||||
background: white;
|
||||
color: black;
|
||||
}
|
||||
#inner {
|
||||
vertical-align: top;
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
background: repeating-linear-gradient(to top left, yellow, blue 10px);
|
||||
opacity: 0.6;
|
||||
will-change: transform, opacity;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="outer">
|
||||
<div id="inner">
|
||||
</div>
|
||||
</div>
|
31
layout/reftests/transform/animate-layer-scale-inherit-2.html
Normal file
31
layout/reftests/transform/animate-layer-scale-inherit-2.html
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE HTML>
|
||||
<title>Testcase, bug 1122526</title>
|
||||
<style>
|
||||
|
||||
#outer, #inner {
|
||||
display: inline-block;
|
||||
background: white;
|
||||
color: black;
|
||||
}
|
||||
#outer { transform: scale(5) }
|
||||
#inner { animation: HoldTransform linear infinite 1s,
|
||||
HoldOpacity linear infinite 1s; }
|
||||
#inner {
|
||||
vertical-align: top;
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
background: repeating-linear-gradient(to top left, yellow, blue 10px);
|
||||
}
|
||||
@keyframes HoldTransform {
|
||||
from, to { transform: scale(0.2) }
|
||||
}
|
||||
@keyframes HoldOpacity {
|
||||
from, to { opacity: 0.6 }
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="outer">
|
||||
<div id="inner">
|
||||
</div>
|
||||
</div>
|
@ -134,3 +134,4 @@ pref(svg.transform-origin.enabled,true) == transform-origin-svg-2a.svg transform
|
||||
pref(svg.transform-origin.enabled,true) == transform-origin-svg-2b.svg transform-origin-svg-2-ref.svg
|
||||
# Bug 1122526
|
||||
== animate-layer-scale-inherit-1.html animate-layer-scale-inherit-1-ref.html
|
||||
== animate-layer-scale-inherit-2.html animate-layer-scale-inherit-2-ref.html
|
||||
|
Loading…
Reference in New Issue
Block a user