35 sk_sp<DlRuntimeEffect> runtime_effect,
36 std::vector<std::shared_ptr<DlColorSource>> samplers,
37 std::shared_ptr<std::vector<uint8_t>> uniform_data) {
39 std::move(runtime_effect), std::move(samplers), std::move(uniform_data));
43 const std::shared_ptr<const DlColorFilter>& filter) {
48 const std::shared_ptr<DlImageFilter>& outer,
49 const std::shared_ptr<DlImageFilter>& inner) {
80 return {
x * abs(ctm.
m[0]) +
y * abs(ctm.
m[4]),
81 x * abs(ctm.
m[1]) +
y * abs(ctm.
m[5])};
95 SkIRect sk_input_bounds =
96 SkIRect::MakeLTRB(input_bounds.
GetLeft(), input_bounds.
GetTop(),
100 if (sk_ctm.invert(&inverse)) {
101 SkRect local_bounds = inverse.mapRect(SkRect::Make(sk_input_bounds));
102 local_bounds.inset(radius_x, radius_y);
103 output_bounds =
ToDlIRect(sk_ctm.mapRect(local_bounds).roundOut());
104 return &output_bounds;
109 input_bounds.
Expand(-floor(device_radius.
x), -floor(device_radius.
y));
110 return &output_bounds;
113 output_bounds = input_bounds;
128 SkIRect sk_input_bounds =
129 SkIRect::MakeLTRB(input_bounds.
GetLeft(), input_bounds.
GetTop(),
133 if (sk_ctm.invert(&inverse)) {
134 SkRect local_bounds = inverse.mapRect(SkRect::Make(sk_input_bounds));
135 local_bounds.outset(radius_x, radius_y);
136 output_bounds =
ToDlIRect(sk_ctm.mapRect(local_bounds).roundOut());
137 return &output_bounds;
142 input_bounds.
Expand(ceil(device_radius.
x), ceil(device_radius.
y));
143 return &output_bounds;
146 output_bounds = input_bounds;
virtual std::shared_ptr< DlImageFilter > shared() const=0
static std::shared_ptr< DlImageFilter > Make(DlScalar sigma_x, DlScalar sigma_y, DlTileMode tile_mode)
static std::shared_ptr< DlImageFilter > Make(const std::shared_ptr< const DlColorFilter > &filter)
static std::shared_ptr< DlImageFilter > Make(const std::shared_ptr< DlImageFilter > &outer, const std::shared_ptr< DlImageFilter > &inner)
static std::shared_ptr< DlImageFilter > Make(DlScalar radius_x, DlScalar radius_y)
static std::shared_ptr< DlImageFilter > Make(DlScalar radius_x, DlScalar radius_y)
static std::shared_ptr< DlImageFilter > MakeDilate(DlScalar radius_x, DlScalar radius_y)
virtual std::shared_ptr< DlImageFilter > makeWithLocalMatrix(const DlMatrix &matrix) const
static std::shared_ptr< DlImageFilter > MakeBlur(DlScalar sigma_x, DlScalar sigma_y, DlTileMode tile_mode)
static DlIRect * outset_device_bounds(const DlIRect &input_bounds, DlScalar radius_x, DlScalar radius_y, const DlMatrix &ctm, DlIRect &output_bounds)
static std::shared_ptr< DlImageFilter > MakeRuntimeEffect(sk_sp< DlRuntimeEffect > runtime_effect, std::vector< std::shared_ptr< DlColorSource > > samplers, std::shared_ptr< std::vector< uint8_t > > uniform_data)
static std::shared_ptr< DlImageFilter > MakeColorFilter(const std::shared_ptr< const DlColorFilter > &filter)
static DlVector2 map_vectors_affine(const DlMatrix &ctm, DlScalar x, DlScalar y)
static DlIRect * inset_device_bounds(const DlIRect &input_bounds, DlScalar radius_x, DlScalar radius_y, const DlMatrix &ctm, DlIRect &output_bounds)
static std::shared_ptr< DlImageFilter > MakeMatrix(const DlMatrix &matrix, DlImageSampling sampling)
static std::shared_ptr< DlImageFilter > MakeCompose(const std::shared_ptr< DlImageFilter > &outer, const std::shared_ptr< DlImageFilter > &inner)
virtual MatrixCapability matrix_capability() const
static std::shared_ptr< DlImageFilter > MakeErode(DlScalar radius_x, DlScalar radius_y)
static std::shared_ptr< DlImageFilter > Make(const DlMatrix &matrix, const std::shared_ptr< DlImageFilter > &filter)
static std::shared_ptr< DlImageFilter > Make(const DlMatrix &matrix, DlImageSampling sampling)
static std::shared_ptr< DlImageFilter > Make(sk_sp< DlRuntimeEffect > runtime_effect, std::vector< std::shared_ptr< DlColorSource > > samplers, std::shared_ptr< std::vector< uint8_t > > uniform_data)
#define FML_DCHECK(condition)
impeller::Scalar DlScalar
SkMatrix ToSkMatrix(const DlMatrix &matrix)
const DlIRect & ToDlIRect(const SkIRect &rect)
A 4x4 matrix using column-major storage.
constexpr bool IsTranslationOnly() const
Returns true if the matrix has no entries other than translation components. Note that an identity ma...
constexpr bool IsIdentity() const
constexpr bool IsTranslationScaleOnly() const
Returns true if the matrix has a scale-only basis and is non-projective. Note that an identity matrix...
bool IsInvertible() const
constexpr bool HasPerspective2D() const
constexpr auto GetBottom() const
constexpr auto GetTop() const
constexpr auto GetLeft() const
constexpr auto GetRight() const
constexpr TRect< T > Expand(T left, T top, T right, T bottom) const
Returns a rectangle with expanded edges. Negative expansion results in shrinking.