From 25a3af4c1c127cae4eec4f7a89bc727a42abc764 Mon Sep 17 00:00:00 2001 From: Michael Reed Date: Tue, 26 Jan 2021 18:14:01 -0500 Subject: [PATCH] Pass sampling rather than rely on (deprecated) filter-quality (flutter/engine#23963) --- engine/src/flutter/lib/ui/painting/canvas.cc | 22 ++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/engine/src/flutter/lib/ui/painting/canvas.cc b/engine/src/flutter/lib/ui/painting/canvas.cc index 575e752eeee..fafb5ae3df0 100644 --- a/engine/src/flutter/lib/ui/painting/canvas.cc +++ b/engine/src/flutter/lib/ui/painting/canvas.cc @@ -352,6 +352,18 @@ void Canvas::drawImageRect(const CanvasImage* image, SkCanvas::kFast_SrcRectConstraint); } +static SkFilterMode paint_to_filter(const SkPaint* paint) { + return paint && (paint->getFilterQuality() != kNone_SkFilterQuality) + ? SkFilterMode::kLinear + : SkFilterMode::kNearest; +} + +static SkSamplingOptions paint_to_sampling(const SkPaint* paint) { + return SkSamplingOptions( + paint ? paint->getFilterQuality() : kNone_SkFilterQuality, + SkSamplingOptions::kMedium_asMipmapLinear); +} + void Canvas::drawImageNine(const CanvasImage* image, double center_left, double center_top, @@ -376,7 +388,10 @@ void Canvas::drawImageNine(const CanvasImage* image, SkIRect icenter; center.round(&icenter); SkRect dst = SkRect::MakeLTRB(dst_left, dst_top, dst_right, dst_bottom); - canvas_->drawImageNine(image->image(), icenter, dst, paint.paint()); + // TODO: add filtering to public API, since paint's quality is deprecated + SkFilterMode filter = paint_to_filter(paint.paint()); + canvas_->drawImageNine(image->image().get(), icenter, dst, filter, + paint.paint()); } void Canvas::drawPicture(Picture* picture) { @@ -448,12 +463,15 @@ void Canvas::drawAtlas(const Paint& paint, static_assert(sizeof(SkRect) == sizeof(float) * 4, "SkRect doesn't use floats."); + // TODO: add filtering to public API, since paint's quality is deprecated + SkSamplingOptions sampling = paint_to_sampling(paint.paint()); + canvas_->drawAtlas( skImage.get(), reinterpret_cast(transforms.data()), reinterpret_cast(rects.data()), reinterpret_cast(colors.data()), rects.num_elements() / 4, // SkRect have four floats. - blend_mode, reinterpret_cast(cull_rect.data()), + blend_mode, sampling, reinterpret_cast(cull_rect.data()), paint.paint()); }