From 51bf25c67030833d8da9edb23699b5963e2b39f6 Mon Sep 17 00:00:00 2001 From: alestiago Date: Wed, 4 May 2022 16:36:50 +0100 Subject: [PATCH] feat: defined HighFilterQualityCanvas --- lib/game/pinball_game.dart | 8 +++++ .../lib/src/z_canvas_component.dart | 29 ++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 0cd130ca..369e0d58 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -101,6 +101,14 @@ class PinballGame extends PinballForge2DGame super.onTapDown(pointerId, info); } + final HighFilterQualityCanvas _canvas = HighFilterQualityCanvas(); + + @override + void renderTree(Canvas canvas) { + _canvas.canvas = canvas; + super.renderTree(_canvas); + } + @override void onTapUp(int pointerId, TapUpInfo info) { _moveFlippersDown(); diff --git a/packages/pinball_flame/lib/src/z_canvas_component.dart b/packages/pinball_flame/lib/src/z_canvas_component.dart index 911c3e93..ea952042 100644 --- a/packages/pinball_flame/lib/src/z_canvas_component.dart +++ b/packages/pinball_flame/lib/src/z_canvas_component.dart @@ -52,12 +52,7 @@ mixin ZIndex on Component { /// The [ZCanvas] allows to postpone the rendering of [ZIndex] components. /// /// You should not use this class directly. -class ZCanvas implements Canvas { - /// The [Canvas] to render to. - /// - /// This is set by [ZCanvasComponent] when rendering. - late Canvas canvas; - +class ZCanvas extends _CanvasWrapper { final List _zBuffer = []; /// Postpones the rendering of [ZIndex] component and its children. @@ -79,6 +74,21 @@ class ZCanvas implements Canvas { ..clear(); void _render(Component component) => component.renderTree(canvas); +} + +// ignore: public_member_api_docs +class HighFilterQualityCanvas extends _CanvasWrapper { + @override + void drawImageRect(Image image, Rect src, Rect dst, Paint paint) { + if (paint.filterQuality != FilterQuality.high) { + paint.filterQuality = FilterQuality.high; + } + super.drawImageRect(image, src, dst, paint); + } +} + +class _CanvasWrapper implements Canvas { + late Canvas canvas; @override void clipPath(Path path, {bool doAntiAlias = true}) => @@ -151,7 +161,12 @@ class ZCanvas implements Canvas { @override void drawImageRect(Image image, Rect src, Rect dst, Paint paint) => - canvas.drawImageRect(image, src, dst, paint); + canvas.drawImageRect( + image, + src, + dst, + paint, + ); @override void drawLine(Offset p1, Offset p2, Paint paint) =>