Skip to content

Instantly share code, notes, and snippets.

@yjbanov
Created August 26, 2020 19:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yjbanov/3400f02c2c8598f4f318ae06751d7c97 to your computer and use it in GitHub Desktop.
Save yjbanov/3400f02c2c8598f4f318ae06751d7c97 to your computer and use it in GitHub Desktop.
// use-case
var colorFilter = CkColorFilter();
var imageFilter = colorFilter.toImageFilter();
var backdropFilter = CkBackdropFilter(imageFilter);
paint.colorFilter = colorFilter;
paint.imageFilter = imageFilter;
paint.imageFilter = colorFilter;
// ui
abstract class ImageFilter {}
abstract class ColorFilter extends ImageFilter {}
// engine
abstract class CkImageFilter<T> extends ManagedSkiaObject<T> implements ui.ImageFilter {
final bool isColorFilter;
SkImageFilter get imageFilter => skiaObject;
CkImageFilter(this.isColorFilter);
}
class CkPaint {
ui.ImageFilter get imageFilter => _imageFilter;
set imageFilter(ui.ImageFilter filter) {
_imageFilter = filter;
if (filter.isCkColorFilter) {
skPaint.SetImageFilter(filter.imageFilter);
} else {
skPaint.SetImageFilter(actualImageFilter.skiaObject);
}
}
}
abstract class CkColorFilter extend CkImageFilter<SkColorFilter> implements ui.ColorFilter {
SkImageFilter _imageFilter;
SkImageFilter get imageFilter => _imageFilter ?? (_imageFilter = convert(skiaObject));
@override
void delete() {
rawSkiaObject.delete();
_imageFilter?.delete();
_imageFilter = null;
}
}
class CkDeletableImageFilter extends CkImageFilter<SkImageFilter> {
@override
void delete() {
rawSkiaObject.delete();
}
}
class CkBlurImageFilter extends CkDeletableImageFilter {
}
class CkMatrixImageFilter extends CkDeletableImageFilter {
}
class CkLinearToSrgbGammaColorFilter extends CkColorFilter {
}
class CkMatrixColorFilter extends CkColorFilter {
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment