@@ -28,8 +28,6 @@ abstract class CkManagedSkImageFilterConvertible implements ui.ImageFilter {
2828}
2929
3030/// The CanvasKit implementation of [ui.ImageFilter] .
31- ///
32- /// Currently only supports `blur` , `matrix` , and ColorFilters.
3331abstract class CkImageFilter implements CkManagedSkImageFilterConvertible {
3432 factory CkImageFilter .blur (
3533 {required double sigmaX,
@@ -40,6 +38,9 @@ abstract class CkImageFilter implements CkManagedSkImageFilterConvertible {
4038 factory CkImageFilter .matrix (
4139 {required Float64List matrix,
4240 required ui.FilterQuality filterQuality}) = _CkMatrixImageFilter ;
41+ factory CkImageFilter .compose (
42+ {required CkImageFilter outer,
43+ required CkImageFilter inner}) = _CkComposeImageFilter ;
4344
4445 CkImageFilter ._();
4546
@@ -91,10 +92,9 @@ class _CkBlurImageFilter extends CkImageFilter {
9192 final SkImageFilter skImageFilter;
9293 if (sigmaX == 0 && sigmaY == 0 ) {
9394 skImageFilter = canvasKit.ImageFilter .MakeMatrixTransform (
94- toSkMatrixFromFloat32 (Matrix4 .identity ().storage),
95- toSkFilterOptions (ui.FilterQuality .none),
96- null
97- );
95+ toSkMatrixFromFloat32 (Matrix4 .identity ().storage),
96+ toSkFilterOptions (ui.FilterQuality .none),
97+ null );
9898 } else {
9999 skImageFilter = canvasKit.ImageFilter .MakeBlur (
100100 sigmaX,
@@ -156,7 +156,8 @@ class _CkMatrixImageFilter extends CkImageFilter {
156156 : matrix = Float64List .fromList (matrix),
157157 _transform = Matrix4 .fromFloat32List (toMatrix32 (matrix)),
158158 super ._() {
159- final SkImageFilter skImageFilter = canvasKit.ImageFilter .MakeMatrixTransform (
159+ final SkImageFilter skImageFilter =
160+ canvasKit.ImageFilter .MakeMatrixTransform (
160161 toSkMatrixFromFloat64 (matrix),
161162 toSkFilterOptions (filterQuality),
162163 null ,
@@ -194,3 +195,47 @@ class _CkMatrixImageFilter extends CkImageFilter {
194195 @override
195196 Matrix4 get transform => _transform;
196197}
198+
199+ class _CkComposeImageFilter extends CkImageFilter {
200+ _CkComposeImageFilter ({required this .outer, required this .inner})
201+ : super ._() {
202+ outer.imageFilter ((SkImageFilter outerFilter) {
203+ inner.imageFilter ((SkImageFilter innerFilter) {
204+ final SkImageFilter skImageFilter = canvasKit.ImageFilter .MakeCompose (
205+ outerFilter,
206+ innerFilter,
207+ );
208+ _ref = UniqueRef <SkImageFilter >(
209+ this , skImageFilter, 'ImageFilter.compose' );
210+ });
211+ });
212+ }
213+
214+ final CkImageFilter outer;
215+ final CkImageFilter inner;
216+
217+ late final UniqueRef <SkImageFilter > _ref;
218+
219+ @override
220+ void imageFilter (SkImageFilterBorrow borrow) {
221+ borrow (_ref.nativeObject);
222+ }
223+
224+ @override
225+ bool operator == (Object other) {
226+ if (runtimeType != other.runtimeType) {
227+ return false ;
228+ }
229+ return other is _CkComposeImageFilter &&
230+ other.outer == outer &&
231+ other.inner == inner;
232+ }
233+
234+ @override
235+ int get hashCode => Object .hash (outer, inner);
236+
237+ @override
238+ String toString () {
239+ return 'ImageFilter.compose($outer , $inner )' ;
240+ }
241+ }
0 commit comments