Unverified Commit d36ecec5 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

[framework] partial removal of forced compositing from opacity (#106989)

parent efd006e1
...@@ -883,15 +883,7 @@ class RenderOpacity extends RenderProxyBox { ...@@ -883,15 +883,7 @@ class RenderOpacity extends RenderProxyBox {
super(child); super(child);
@override @override
bool get alwaysNeedsCompositing => child != null && (_alpha > 0); bool get alwaysNeedsCompositing => child != null && (_alpha > 0 && _alpha < 255);
@override
OffsetLayer updateCompositedLayer({required covariant OpacityLayer? oldLayer}) {
assert(_alpha != 255);
final OpacityLayer updatedLayer = oldLayer ?? OpacityLayer();
updatedLayer.alpha = _alpha;
return updatedLayer;
}
int _alpha; int _alpha;
...@@ -949,12 +941,20 @@ class RenderOpacity extends RenderProxyBox { ...@@ -949,12 +941,20 @@ class RenderOpacity extends RenderProxyBox {
@override @override
void paint(PaintingContext context, Offset offset) { void paint(PaintingContext context, Offset offset) {
if (child != null) { if (child == null) {
return;
}
if (_alpha == 0) { if (_alpha == 0) {
// No need to keep the layer. We'll create a new one if necessary. // No need to keep the layer. We'll create a new one if necessary.
layer = null; layer = null;
return; return;
} }
if (_alpha == 255) {
// No need to keep the layer. We'll create a new one if necessary.
layer = null;
return super.paint(context, offset);
}
assert(needsCompositing); assert(needsCompositing);
layer = context.pushOpacity(offset, _alpha, super.paint, oldLayer: layer as OpacityLayer?); layer = context.pushOpacity(offset, _alpha, super.paint, oldLayer: layer as OpacityLayer?);
assert(() { assert(() {
...@@ -962,7 +962,6 @@ class RenderOpacity extends RenderProxyBox { ...@@ -962,7 +962,6 @@ class RenderOpacity extends RenderProxyBox {
return true; return true;
}()); }());
} }
}
@override @override
void visitChildrenForSemantics(RenderObjectVisitor visitor) { void visitChildrenForSemantics(RenderObjectVisitor visitor) {
......
...@@ -240,11 +240,21 @@ void main() { ...@@ -240,11 +240,21 @@ void main() {
expect(renderOpacity.needsCompositing, false); expect(renderOpacity.needsCompositing, false);
}); });
test('RenderOpacity does composite if it is opaque', () { test('RenderOpacity does not composite if it is opaque', () {
final RenderOpacity renderOpacity = RenderOpacity( final RenderOpacity renderOpacity = RenderOpacity(
child: RenderSizedBox(const Size(1.0, 1.0)), // size doesn't matter child: RenderSizedBox(const Size(1.0, 1.0)), // size doesn't matter
); );
layout(renderOpacity, phase: EnginePhase.composite);
expect(renderOpacity.needsCompositing, false);
});
test('RenderOpacity does composite if it is partially opaque', () {
final RenderOpacity renderOpacity = RenderOpacity(
opacity: 0.1,
child: RenderSizedBox(const Size(1.0, 1.0)), // size doesn't matter
);
layout(renderOpacity, phase: EnginePhase.composite); layout(renderOpacity, phase: EnginePhase.composite);
expect(renderOpacity.needsCompositing, true); expect(renderOpacity.needsCompositing, true);
}); });
......
...@@ -285,7 +285,7 @@ void main() { ...@@ -285,7 +285,7 @@ void main() {
child: Placeholder(), child: Placeholder(),
), ),
const Opacity( const Opacity(
opacity: 1.0, opacity: 0.9,
child: Placeholder(), child: Placeholder(),
), ),
ImageFiltered( ImageFiltered(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment