Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update (flipping the default from false -> true) and deprecate Paint.enableDithering. #44705

Merged
Merged
29 changes: 13 additions & 16 deletions lib/ui/painting.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1487,22 +1487,19 @@ class Paint {
_data.setInt32(_kDitherOffset, value ? 1 : 0, _kFakeHostEndian);
}

/// Whether to dither the output when drawing images.
///
/// If false, the default value, dithering will be enabled when the input
/// color depth is higher than the output color depth. For example,
/// drawing an RGB8 image onto an RGB565 canvas.
///
/// This value also controls dithering of [shader]s, which can make
/// gradients appear smoother.
///
/// Whether or not dithering affects the output is implementation defined.
/// Some implementations may choose to ignore this completely, if they're
/// unable to control dithering.
///
/// To ensure that dithering is consistently enabled for your entire
/// application, set this to true before invoking any drawing related code.
static bool enableDithering = false;
/// 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.13.0-0.4.pre.'
)
static bool enableDithering = true;

@override
String toString() {
Expand Down
6 changes: 6 additions & 0 deletions testing/dart/canvas_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,10 @@ void main() {
}

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();
Expand All @@ -217,6 +221,8 @@ void main() {
}, 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();
Expand Down