11 return (std::abs(a.width -
b.width) /
b.width) < threshold &&
12 (std::abs(a.height -
b.height) /
b.height) < threshold;
17 const Rect& content_coverage,
18 const Matrix& effect_transform,
19 const Rect& coverage_limit,
20 const std::shared_ptr<FilterContents>& image_filter,
21 bool flood_output_coverage,
22 bool flood_input_coverage) {
23 Rect coverage = content_coverage;
47 if (flood_input_coverage) {
59 std::optional<Rect> source_coverage_limit =
60 image_filter->GetSourceCoverage(effect_transform, coverage_limit);
61 if (!source_coverage_limit.has_value()) {
70 if (flood_output_coverage || coverage.
IsMaximum()) {
71 return source_coverage_limit;
85 auto intersected_coverage =
86 transformed_coverage.
Intersection(source_coverage_limit.value());
87 if (intersected_coverage.has_value() &&
88 SizeDifferenceUnderThreshold(transformed_coverage.GetSize(),
89 intersected_coverage->GetSize(), 0.2)) {
92 return transformed_coverage;
94 return intersected_coverage;
106 if (flood_output_coverage || coverage.
IsMaximum()) {
107 return coverage_limit;