Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

[flutter roll] Revert "Remove support for Paint.enableDithering=false in dart:ui." #46782

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion flutter_frontend_server/test/to_string_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ Future<void> main(List<String> args) async {
]));
final ProcessResult runResult = Process.runSync(dart, <String>[regularDill]);
checkProcessResult(runResult);
String paintString = '"Paint.toString":"Paint(Color(0xffffffff))"';
// TODO(matanlurey): "dither: true" is now present by default, until it is
// remove entirely. See https://github.com/flutter/flutter/issues/112498.
String paintString = '"Paint.toString":"Paint(Color(0xffffffff); dither: true)"';
if (buildDir.contains('release')) {
paintString = '"Paint.toString":"Instance of \'Paint\'"';
}
Expand Down
30 changes: 25 additions & 5 deletions lib/ui/painting.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1091,8 +1091,9 @@ class Paint {
/// Constructs an empty [Paint] object with all fields initialized to
/// their defaults.
Paint() {
// TODO(matanlurey): Remove as part of https://github.com/flutter/flutter/issues/112498.
_enableDithering();
if (enableDithering) {
_dither = true;
}
}

// Paint objects are encoded in two buffers:
Expand Down Expand Up @@ -1478,11 +1479,27 @@ class Paint {
_data.setInt32(_kInvertColorOffset, value ? 1 : 0, _kFakeHostEndian);
}

// TODO(matanlurey): Remove as part of https://github.com/flutter/flutter/issues/112498.
void _enableDithering() {
_data.setInt32(_kDitherOffset, 1, _kFakeHostEndian);
bool get _dither {
return _data.getInt32(_kDitherOffset, _kFakeHostEndian) == 1;
}
set _dither(bool value) {
_data.setInt32(_kDitherOffset, value ? 1 : 0, _kFakeHostEndian);
}

/// Whether to dither the output when drawing some elements such as gradients.
///
/// It is not expected that this flag will be used in the future; please leave
/// feedback in <https://github.com/flutter/flutter/issues/112498> if there is
/// a use case for this flag to remain long term.
@Deprecated(
'Dithering is now enabled by default on some elements (such as gradients) '
'and further support for dithering is expected to be handled by custom '
'shaders, so this flag is being removed: '
'https://github.com/flutter/flutter/issues/112498.'
'This feature was deprecated after 3.14.0-0.1.pre.'
)
static bool enableDithering = true;

@override
String toString() {
if (const bool.fromEnvironment('dart.vm.product')) {
Expand Down Expand Up @@ -1545,6 +1562,9 @@ class Paint {
if (invertColors) {
result.write('${semicolon}invert: $invertColors');
}
if (_dither) {
result.write('${semicolon}dither: $_dither');
}
result.write(')');
return result.toString();
}
Expand Down
1 change: 1 addition & 0 deletions lib/web_ui/lib/painting.dart
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ enum Clip {

abstract class Paint {
factory Paint() => engine.renderer.createPaint();
static bool enableDithering = false;
BlendMode get blendMode;
set blendMode(BlendMode value);
PaintingStyle get style;
Expand Down
23 changes: 22 additions & 1 deletion testing/dart/canvas_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,28 @@ void main() {
);
}

test('Simple gradient, which is implicitly dithered', () async {
test('Simple gradient', () async {
// TODO(matanl): While deprecated, we still don't want to accidentally
// change the behavior of the old API,
// https://github.com/flutter/flutter/issues/112498.
// ignore: deprecated_member_use
Paint.enableDithering = false;
final Image image = await toImage((Canvas canvas) {
final Paint paint = Paint()..shader = makeGradient();
canvas.drawPaint(paint);
}, 100, 100);
expect(image.width, equals(100));
expect(image.height, equals(100));

final bool areEqual =
await fuzzyGoldenImageCompare(image, 'canvas_test_gradient.png');
expect(areEqual, true);
}, skip: !Platform.isLinux); // https://github.com/flutter/flutter/issues/53784

test('Simple dithered gradient', () async {
// TODO(matanl): Reword this test once we remove the deprecated API.
// ignore: deprecated_member_use
Paint.enableDithering = true;
final Image image = await toImage((Canvas canvas) {
final Paint paint = Paint()..shader = makeGradient();
canvas.drawPaint(paint);
Expand Down