[framework] revert removal of opacity (#111202)
This commit is contained in:
parent
5f2d730f1f
commit
7e1e840999
@ -883,7 +883,7 @@ class RenderOpacity extends RenderProxyBox {
|
||||
super(child);
|
||||
|
||||
@override
|
||||
bool get alwaysNeedsCompositing => child != null && (_alpha > 0 && _alpha < 255);
|
||||
bool get alwaysNeedsCompositing => child != null && _alpha > 0;
|
||||
|
||||
int _alpha;
|
||||
|
||||
@ -949,11 +949,6 @@ class RenderOpacity extends RenderProxyBox {
|
||||
layer = null;
|
||||
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);
|
||||
layer = context.pushOpacity(offset, _alpha, super.paint, oldLayer: layer as OpacityLayer?);
|
||||
@ -1060,7 +1055,7 @@ mixin RenderAnimatedOpacityMixin<T extends RenderObject> on RenderObjectWithChil
|
||||
_alpha = ui.Color.getAlphaFromOpacity(opacity.value);
|
||||
if (oldAlpha != _alpha) {
|
||||
final bool? wasRepaintBoundary = _currentlyIsRepaintBoundary;
|
||||
_currentlyIsRepaintBoundary = _alpha! > 0 && _alpha! < 255;
|
||||
_currentlyIsRepaintBoundary = _alpha! > 0;
|
||||
if (child != null && wasRepaintBoundary != _currentlyIsRepaintBoundary) {
|
||||
markNeedsCompositingBitsUpdate();
|
||||
}
|
||||
|
@ -328,13 +328,13 @@ void main() {
|
||||
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(
|
||||
child: RenderSizedBox(const Size(1.0, 1.0)), // size doesn't matter
|
||||
);
|
||||
|
||||
layout(renderOpacity, phase: EnginePhase.composite);
|
||||
expect(renderOpacity.needsCompositing, false);
|
||||
expect(renderOpacity.needsCompositing, true);
|
||||
});
|
||||
|
||||
test('RenderOpacity does composite if it is partially opaque', () {
|
||||
@ -370,7 +370,7 @@ void main() {
|
||||
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(
|
||||
vsync: FakeTickerProvider(),
|
||||
)..value = 1.0;
|
||||
@ -381,7 +381,7 @@ void main() {
|
||||
);
|
||||
|
||||
layout(renderAnimatedOpacity, phase: EnginePhase.composite);
|
||||
expect(renderAnimatedOpacity.needsCompositing, false);
|
||||
expect(renderAnimatedOpacity.needsCompositing, true);
|
||||
});
|
||||
|
||||
test('RenderAnimatedOpacity does composite if it is partially opaque', () {
|
||||
|
@ -47,6 +47,7 @@ void main() {
|
||||
layout(root, phase: EnginePhase.composite);
|
||||
expect(renderSliverOpacity.needsCompositing, true);
|
||||
});
|
||||
|
||||
test('RenderSliverOpacity reuses its layer', () {
|
||||
final RenderSliverOpacity renderSliverOpacity = RenderSliverOpacity(
|
||||
opacity: 0.5,
|
||||
@ -121,7 +122,7 @@ void main() {
|
||||
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(
|
||||
vsync: FakeTickerProvider(),
|
||||
)..value = 1.0;
|
||||
@ -141,7 +142,7 @@ void main() {
|
||||
);
|
||||
|
||||
layout(root, phase: EnginePhase.composite);
|
||||
expect(renderSliverAnimatedOpacity.needsCompositing, false);
|
||||
expect(renderSliverAnimatedOpacity.needsCompositing, true);
|
||||
});
|
||||
|
||||
test('RenderSliverAnimatedOpacity reuses its layer', () {
|
||||
|
@ -7,7 +7,7 @@ import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
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;
|
||||
final AnimationController controller = AnimationController(vsync: const TestVSync(), duration: const Duration(seconds: 1));
|
||||
final Tween<double> opacityTween = Tween<double>(begin: 0, end: 1);
|
||||
@ -32,12 +32,12 @@ void main() {
|
||||
await tester.pump();
|
||||
await tester.pump(const Duration(milliseconds: 500));
|
||||
|
||||
expect(RenderTestObject.paintCount, 2);
|
||||
expect(RenderTestObject.paintCount, 1);
|
||||
|
||||
controller.stop();
|
||||
await tester.pump();
|
||||
|
||||
expect(RenderTestObject.paintCount, 2);
|
||||
expect(RenderTestObject.paintCount, 1);
|
||||
});
|
||||
|
||||
testWidgets('RenderAnimatedOpacityMixin avoids repainting child as it animates', (WidgetTester tester) async {
|
||||
|
Loading…
x
Reference in New Issue
Block a user