Created
August 26, 2020 19:25
-
-
Save yjbanov/3400f02c2c8598f4f318ae06751d7c97 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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