12 return (std::abs(a.width -
b.width) /
b.width) < threshold &&
13 (std::abs(a.height -
b.height) /
b.height) < threshold;
16 static constexpr
Scalar kDefaultSizeThreshold = 0.3;
20 const Rect& content_coverage,
21 const Matrix& effect_transform,
22 const Rect& coverage_limit,
23 const std::shared_ptr<FilterContents>& image_filter,
24 bool flood_output_coverage,
25 bool flood_input_coverage) {
26 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(),
90 kDefaultSizeThreshold)) {
93 return transformed_coverage;
95 return intersected_coverage;
107 if (flood_output_coverage || coverage.
IsMaximum()) {
108 return coverage_limit;
114 std::optional<Rect> intersection =
116 if (!intersection.has_value()) {
121 Rect intersect_rect = intersection.value();
122 if (SizeDifferenceUnderThreshold(intersect_rect.
GetSize(),
124 kDefaultSizeThreshold)) {
125 return coverage_limit;
128 return intersect_rect;
std::optional< Rect > ComputeSaveLayerCoverage(const Rect &content_coverage, const Matrix &effect_transform, const Rect &coverage_limit, const std::shared_ptr< FilterContents > &image_filter, bool flood_output_coverage, bool flood_input_coverage)
Compute the coverage of a subpass in the global coordinate space.
A 4x4 matrix using column-major storage.
constexpr TRect TransformBounds(const Matrix &transform) const
Creates a new bounding box that contains this transformed rectangle.
constexpr bool IsMaximum() const
constexpr std::optional< TRect > Intersection(const TRect &o) const
constexpr TSize< Type > GetSize() const
Returns the size of the rectangle which may be negative in either width or height and may have been c...
constexpr static TRect MakeMaximum()