Unverified Commit 7e1e8409 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

[framework] revert removal of opacity (#111202)

parent 5f2d730f
...@@ -883,7 +883,7 @@ class RenderOpacity extends RenderProxyBox { ...@@ -883,7 +883,7 @@ class RenderOpacity extends RenderProxyBox {
super(child); super(child);
@override @override
bool get alwaysNeedsCompositing => child != null && (_alpha > 0 && _alpha < 255); bool get alwaysNeedsCompositing => child != null && _alpha > 0;
int _alpha; int _alpha;
...@@ -949,11 +949,6 @@ class RenderOpacity extends RenderProxyBox { ...@@ -949,11 +949,6 @@ class RenderOpacity extends RenderProxyBox {
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?);
...@@ -1060,7 +1055,7 @@ mixin RenderAnimatedOpacityMixin<T extends RenderObject> on RenderObjectWithChil ...@@ -1060,7 +1055,7 @@ mixin RenderAnimatedOpacityMixin<T extends RenderObject> on RenderObjectWithChil
_alpha = ui.Color.getAlphaFromOpacity(opacity.value); _alpha = ui.Color.getAlphaFromOpacity(opacity.value);
if (oldAlpha != _alpha) { if (oldAlpha != _alpha) {
final bool? wasRepaintBoundary = _currentlyIsRepaintBoundary; final bool? wasRepaintBoundary = _currentlyIsRepaintBoundary;
_currentlyIsRepaintBoundary = _alpha! > 0 && _alpha! < 255; _currentlyIsRepaintBoundary = _alpha! > 0;
if (child != null && wasRepaintBoundary != _currentlyIsRepaintBoundary) { if (child != null && wasRepaintBoundary != _currentlyIsRepaintBoundary) {
markNeedsCompositingBitsUpdate(); markNeedsCompositingBitsUpdate();
} }
......
...@@ -328,13 +328,13 @@ void main() { ...@@ -328,13 +328,13 @@ void main() {
expect(renderOpacity.needsCompositing, false); expect(renderOpacity.needsCompositing, false);
}); });
test('RenderOpacity does not composite if it is opaque', () { test('RenderOpacity does 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); layout(renderOpacity, phase: EnginePhase.composite);
expect(renderOpacity.needsCompositing, false); expect(renderOpacity.needsCompositing, true);
}); });
test('RenderOpacity does composite if it is partially opaque', () { test('RenderOpacity does composite if it is partially opaque', () {
...@@ -370,7 +370,7 @@ void main() { ...@@ -370,7 +370,7 @@ void main() {
expect(renderAnimatedOpacity.needsCompositing, false); expect(renderAnimatedOpacity.needsCompositing, false);
}); });
test('RenderAnimatedOpacity does not composite if it is opaque', () { test('RenderAnimatedOpacity does composite if it is opaque', () {
final Animation<double> opacityAnimation = AnimationController( final Animation<double> opacityAnimation = AnimationController(
vsync: FakeTickerProvider(), vsync: FakeTickerProvider(),
)..value = 1.0; )..value = 1.0;
...@@ -381,7 +381,7 @@ void main() { ...@@ -381,7 +381,7 @@ void main() {
); );
layout(renderAnimatedOpacity, phase: EnginePhase.composite); layout(renderAnimatedOpacity, phase: EnginePhase.composite);
expect(renderAnimatedOpacity.needsCompositing, false); expect(renderAnimatedOpacity.needsCompositing, true);
}); });
test('RenderAnimatedOpacity does composite if it is partially opaque', () { test('RenderAnimatedOpacity does composite if it is partially opaque', () {
......
...@@ -47,6 +47,7 @@ void main() { ...@@ -47,6 +47,7 @@ void main() {
layout(root, phase: EnginePhase.composite); layout(root, phase: EnginePhase.composite);
expect(renderSliverOpacity.needsCompositing, true); expect(renderSliverOpacity.needsCompositing, true);
}); });
test('RenderSliverOpacity reuses its layer', () { test('RenderSliverOpacity reuses its layer', () {
final RenderSliverOpacity renderSliverOpacity = RenderSliverOpacity( final RenderSliverOpacity renderSliverOpacity = RenderSliverOpacity(
opacity: 0.5, opacity: 0.5,
...@@ -121,7 +122,7 @@ void main() { ...@@ -121,7 +122,7 @@ void main() {
expect(renderSliverAnimatedOpacity.needsCompositing, true); expect(renderSliverAnimatedOpacity.needsCompositing, true);
}); });
test('RenderSliverAnimatedOpacity does not composite if it is opaque', () { test('RenderSliverAnimatedOpacity does composite if it is opaque', () {
final Animation<double> opacityAnimation = AnimationController( final Animation<double> opacityAnimation = AnimationController(
vsync: FakeTickerProvider(), vsync: FakeTickerProvider(),
)..value = 1.0; )..value = 1.0;
...@@ -141,7 +142,7 @@ void main() { ...@@ -141,7 +142,7 @@ void main() {
); );
layout(root, phase: EnginePhase.composite); layout(root, phase: EnginePhase.composite);
expect(renderSliverAnimatedOpacity.needsCompositing, false); expect(renderSliverAnimatedOpacity.needsCompositing, true);
}); });
test('RenderSliverAnimatedOpacity reuses its layer', () { test('RenderSliverAnimatedOpacity reuses its layer', () {
......
...@@ -7,7 +7,7 @@ import 'package:flutter/rendering.dart'; ...@@ -7,7 +7,7 @@ import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
void main() { void main() {
testWidgets('RenderAnimatedOpacityMixin drops layer when animating to 1', (WidgetTester tester) async { testWidgets('RenderAnimatedOpacityMixin does not drop layer when animating to 1', (WidgetTester tester) async {
RenderTestObject.paintCount = 0; RenderTestObject.paintCount = 0;
final AnimationController controller = AnimationController(vsync: const TestVSync(), duration: const Duration(seconds: 1)); final AnimationController controller = AnimationController(vsync: const TestVSync(), duration: const Duration(seconds: 1));
final Tween<double> opacityTween = Tween<double>(begin: 0, end: 1); final Tween<double> opacityTween = Tween<double>(begin: 0, end: 1);
...@@ -32,12 +32,12 @@ void main() { ...@@ -32,12 +32,12 @@ void main() {
await tester.pump(); await tester.pump();
await tester.pump(const Duration(milliseconds: 500)); await tester.pump(const Duration(milliseconds: 500));
expect(RenderTestObject.paintCount, 2); expect(RenderTestObject.paintCount, 1);
controller.stop(); controller.stop();
await tester.pump(); await tester.pump();
expect(RenderTestObject.paintCount, 2); expect(RenderTestObject.paintCount, 1);
}); });
testWidgets('RenderAnimatedOpacityMixin avoids repainting child as it animates', (WidgetTester tester) async { testWidgets('RenderAnimatedOpacityMixin avoids repainting child as it animates', (WidgetTester tester) async {
......
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