26 static constexpr int kOuter = 0;
27 static constexpr int kInner = 1;
40 SkRect computeFastBounds(
const SkRect& src)
const override;
47 friend void ::SkRegisterComposeImageFilterFlattenable();
50 MatrixCapability onGetCTMCapability()
const override {
return MatrixCapability::kComplex; }
59 std::optional<skif::LayerSpace<SkIRect>> onGetOutputLayerBounds(
93 auto innerOutputBounds =
97 this->getChildInputLayerBounds(kOuter,
111 return this->getChildOutput(kOuter, ctx.
withNewSource(innerResult));
121 std::optional<skif::LayerSpace<SkIRect>> outerContentBounds;
123 outerContentBounds = this->getChildOutputLayerBounds(kInner, mapping, *contentBounds);
127 this->getChildInputLayerBounds(kOuter, mapping, desiredOutput, outerContentBounds);
128 return this->getChildInputLayerBounds(kInner, mapping, innerDesiredOutput, contentBounds);
131std::optional<skif::LayerSpace<SkIRect>> SkComposeImageFilter::onGetOutputLayerBounds(
136 auto innerBounds = this->getChildOutputLayerBounds(kInner, mapping, contentBounds);
139 return this->getChildOutputLayerBounds(kOuter, mapping, innerBounds);
142SkRect SkComposeImageFilter::computeFastBounds(
const SkRect& src)
const {
143 return this->getInput(kOuter)->computeFastBounds(
144 this->getInput(kInner)->computeFastBounds(src));
void SkRegisterComposeImageFilterFlattenable()
#define SK_FLATTENABLE_HOOKS(type)
#define SK_REGISTER_FLATTENABLE(type)
static SkImageFilter_Base * as_IFB(SkImageFilter *filter)
#define SK_IMAGEFILTER_UNFLATTEN_COMMON(localVar, expectedCount)
static void Register(const char name[], Factory)
static sk_sp< SkImageFilter > Compose(sk_sp< SkImageFilter > outer, sk_sp< SkImageFilter > inner)
const LayerSpace< SkIRect > & desiredOutput() const
const FilterResult & source() const
Context withNewDesiredOutput(const LayerSpace< SkIRect > &desiredOutput) const
const Mapping & mapping() const
Context withNewSource(const FilterResult &source) const
LayerSpace< SkIRect > layerBounds() const
static const uint8_t buffer[]
@ kOuter
nothing inside, fuzzy outside
@ kInner
fuzzy inside, nothing outside
const myers::Point & get(const myers::Segment &)