@@ -116,6 +116,10 @@ void FilterContents::SetInputs(FilterInput::Vector inputs) {
116116 inputs_ = std::move (inputs);
117117}
118118
119+ void FilterContents::SetCoverageCrop (std::optional<Rect> coverage_crop) {
120+ coverage_crop_ = coverage_crop;
121+ }
122+
119123bool FilterContents::Render (const ContentContext& renderer,
120124 const Entity& entity,
121125 RenderPass& pass) const {
@@ -146,11 +150,22 @@ bool FilterContents::Render(const ContentContext& renderer,
146150 return contents->Render (renderer, e, pass);
147151}
148152
153+ std::optional<Rect> FilterContents::GetLocalCoverage (
154+ const Entity& local_entity) const {
155+ auto coverage = GetFilterCoverage (inputs_, local_entity);
156+ if (coverage_crop_.has_value () && coverage.has_value ()) {
157+ coverage = coverage->Intersection (coverage_crop_.value ());
158+ }
159+
160+ return coverage;
161+ }
162+
149163std::optional<Rect> FilterContents::GetCoverage (const Entity& entity) const {
150164 Entity entity_with_local_transform = entity;
151165 entity_with_local_transform.SetTransformation (
152166 GetTransform (entity.GetTransformation ()));
153- return GetFilterCoverage (inputs_, entity_with_local_transform);
167+
168+ return GetLocalCoverage (entity_with_local_transform);
154169}
155170
156171std::optional<Rect> FilterContents::GetFilterCoverage (
@@ -186,7 +201,7 @@ std::optional<Snapshot> FilterContents::RenderToSnapshot(
186201 entity_with_local_transform.SetTransformation (
187202 GetTransform (entity.GetTransformation ()));
188203
189- auto coverage = GetFilterCoverage (inputs_, entity_with_local_transform);
204+ auto coverage = GetLocalCoverage ( entity_with_local_transform);
190205 if (!coverage.has_value () || coverage->IsEmpty ()) {
191206 return std::nullopt ;
192207 }
0 commit comments