5#ifndef FLUTTER_DISPLAY_LIST_UTILS_DL_BOUNDS_ACCUMULATOR_H_
6#define FLUTTER_DISPLAY_LIST_UTILS_DL_BOUNDS_ACCUMULATOR_H_
10#include "flutter/display_list/geometry/dl_rtree.h"
11#include "flutter/fml/logging.h"
82 std::function<
bool(
const SkRect& original,
SkRect& modified)> map,
98 bool is_empty()
const {
return rect_.is_empty(); }
101 void save()
override;
108 return rect_.bounds();
118 class AccumulationRect {
124 bool is_empty()
const {
return min_x_ >= max_x_ || min_y_ >= max_y_; }
125 bool is_not_empty()
const {
return min_x_ < max_x_ && min_y_ < max_y_; }
138 AccumulationRect rect_;
139 std::vector<AccumulationRect> saved_rects_;
145 void save()
override;
149 std::function<
bool(
const SkRect& original,
SkRect& modified)> map,
161 std::vector<SkRect> rects_;
162 std::vector<int> rect_indices_;
163 std::vector<size_t> saved_offsets_;
static SkPath clip(const SkPath &path, const SkHalfPlane &plane)
virtual ~BoundsAccumulator()=default
bool BoundsModifier(const SkRect &original, SkRect *dest)
virtual SkRect bounds() const =0
virtual void accumulate(const SkRect &r, int index=0)=0
virtual bool restore(std::function< bool(const SkRect &original, SkRect &modified)> map, const SkRect *clip=nullptr)=0
virtual sk_sp< DlRTree > rtree() const =0
virtual BoundsAccumulatorType type() const =0
BoundsAccumulatorType type() const override
SkRect bounds() const override
void accumulate(const SkRect &r, int index) override
sk_sp< DlRTree > rtree() const override
sk_sp< DlRTree > rtree() const override
SkRect bounds() const override
void accumulate(SkScalar x, SkScalar y)
bool is_not_empty() const
BoundsAccumulatorType type() const override
void accumulate(const SkPoint &p)
#define FML_DCHECK(condition)
Optional< SkRect > bounds