31 , fColorFilter(
std::move(cf)) {}
39 friend void ::SkRegisterColorFilterImageFilterFlattenable();
62 *filter =
SkRef(fColorFilter.get());
81 if (input && input->isColorFilterNode(&inputCF)) {
90 new SkColorFilterImageFilter(std::move(cf), std::move(filter)));
112 buffer.writeFlattenable(fColorFilter.get());
125 return this->getChildInputLayerBounds(0, mapping, desiredOutput, contentBounds);
128std::optional<skif::LayerSpace<SkIRect>> SkColorFilterImageFilter::onGetOutputLayerBounds(
134 if (
as_CFB(fColorFilter)->affectsTransparentBlack()) {
137 return this->getChildOutputLayerBounds(0, mapping, contentBounds);
141SkRect SkColorFilterImageFilter::computeFastBounds(
const SkRect& bounds)
const {
143 if (
as_CFB(fColorFilter)->affectsTransparentBlack()) {
145 }
else if (this->getInput(0)) {
146 return this->getInput(0)->computeFastBounds(bounds);
static SkColorFilterBase * as_CFB(SkColorFilter *filter)
void SkRegisterColorFilterImageFilterFlattenable()
#define SK_FLATTENABLE_HOOKS(type)
#define SK_REGISTER_FLATTENABLE(type)
#define SK_IMAGEFILTER_UNFLATTEN_COMMON(localVar, expectedCount)
sk_sp< T > sk_ref_sp(T *obj)
bool affectsTransparentBlack() const
static void Register(const char name[], Factory)
virtual bool onIsColorFilterNode(SkColorFilter **) const
virtual skif::LayerSpace< SkIRect > onGetInputLayerBounds(const skif::Mapping &mapping, const skif::LayerSpace< SkIRect > &desiredOutput, std::optional< skif::LayerSpace< SkIRect > > contentBounds) const =0
virtual bool onAffectsTransparentBlack() const
void flatten(SkWriteBuffer &) const override
virtual std::optional< skif::LayerSpace< SkIRect > > onGetOutputLayerBounds(const skif::Mapping &mapping, std::optional< skif::LayerSpace< SkIRect > > contentBounds) const =0
virtual skif::FilterResult onFilterImage(const skif::Context &context) const =0
virtual MatrixCapability onGetCTMCapability() const
virtual SkRect computeFastBounds(const SkRect &bounds) const
static sk_sp< SkImageFilter > ColorFilter(sk_sp< SkColorFilter > cf, sk_sp< SkImageFilter > input, const CropRect &cropRect={})
static sk_sp< SkImageFilter > Crop(const SkRect &rect, SkTileMode tileMode, sk_sp< SkImageFilter > input)
static SkRect MakeLargeS32()
FilterResult applyColorFilter(const Context &ctx, sk_sp< SkColorFilter > colorFilter) const
static const uint8_t buffer[]
Optional< SkRect > bounds