36 friend void ::SkRegisterMergeImageFilterFlattenable();
57 if (
count <= 0 || !filters) {
85 const int inputCount = this->countInputs();
87 for (
int i = 0; i < inputCount; ++i) {
88 builder.add(this->getChildOutput(i, ctx));
97 const int inputCount = this->countInputs();
102 return this->getChildInputLayerBounds(i, mapping, desiredOutput, contentBounds);
106std::optional<skif::LayerSpace<SkIRect>> SkMergeImageFilter::onGetOutputLayerBounds(
109 const int inputCount = this->countInputs();
111 bool childIsUnbounded =
false;
115 auto o = this->getChildOutputLayerBounds(i, mapping, contentBounds);
119 childIsUnbounded =
true;
124 if (childIsUnbounded) {
131SkRect SkMergeImageFilter::computeFastBounds(
const SkRect& rect)
const {
#define SK_FLATTENABLE_HOOKS(type)
#define SK_REGISTER_FLATTENABLE(type)
void SkRegisterMergeImageFilterFlattenable()
static void Register(const char name[], Factory)
virtual skif::LayerSpace< SkIRect > onGetInputLayerBounds(const skif::Mapping &mapping, const skif::LayerSpace< SkIRect > &desiredOutput, std::optional< skif::LayerSpace< SkIRect > > contentBounds) const =0
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 > Merge(sk_sp< SkImageFilter > *const filters, int count, const CropRect &cropRect={})
static sk_sp< SkImageFilter > Empty()
static sk_sp< SkImageFilter > Crop(const SkRect &rect, SkTileMode tileMode, sk_sp< SkImageFilter > input)
static const uint8_t buffer[]