11#include "third_party/skia/include/core/SkColorFilter.h"
12#include "third_party/skia/include/effects/SkGradientShader.h"
13#include "third_party/skia/include/effects/SkImageFilters.h"
14#include "third_party/skia/include/effects/SkRuntimeEffect.h"
43 invert_filter = invert_filter->makeComposed(color_filter);
45 color_filter = invert_filter;
47 sk_paint.setColorFilter(color_filter);
52 sk_paint.setDither(color_source->isGradient());
53 sk_paint.setShader(
ToSk(color_source));
64 return ToSk(stroked_paint);
68 DlPaint non_shader_paint = paint;
70 return ToSk(non_shader_paint);
78 static auto ToSkColors =
80 std::vector<SkColor> sk_colors;
81 sk_colors.reserve(gradient->stop_count());
82 for (
int i = 0;
i < gradient->stop_count(); ++
i) {
83 sk_colors.push_back(gradient->colors()[
i].argb());
87 switch (source->
type()) {
95 return image->skia_image()->makeShader(
107 std::vector<SkColor> skcolors = ToSkColors(linear_source);
108 return SkGradientShader::MakeLinear(
109 pts, skcolors.data(), linear_source->
stops(),
117 return SkGradientShader::MakeRadial(
119 ToSkColors(radial_source).
data(), radial_source->
stops(),
127 return SkGradientShader::MakeTwoPointConical(
131 ToSkColors(conical_source).
data(), conical_source->
stops(),
139 return SkGradientShader::MakeSweep(
141 ToSkColors(sweep_source).
data(), sweep_source->
stops(),
143 sweep_source->
start(), sweep_source->
end(), 0,
151 if (!runtime_effect || !runtime_effect->skia_runtime_effect()) {
155 auto samplers = runtime_source->
samplers();
156 std::vector<sk_sp<SkShader>> sk_samplers(samplers.size());
157 for (
size_t i = 0;
i < samplers.size();
i++) {
158 const auto& sampler = samplers[
i];
159 if (sampler ==
nullptr) {
162 sk_samplers[
i] =
ToSk(sampler);
166 auto ref =
new std::shared_ptr<std::vector<uint8_t>>(uniform_data);
167 auto sk_uniform_data = SkData::MakeWithProc(
168 uniform_data->data(), uniform_data->size(),
169 [](
const void* ptr,
void* context) {
170 delete reinterpret_cast<std::shared_ptr<std::vector<uint8_t>>*>(
175 return runtime_effect->skia_runtime_effect()->makeShader(
176 sk_uniform_data, sk_samplers.data(), sk_samplers.size());
185 switch (filter->
type()) {
189 return SkImageFilters::Blur(blur_filter->
sigma_x(),
196 return SkImageFilters::Dilate(dilate_filter->
radius_x(),
197 dilate_filter->
radius_y(),
nullptr);
202 return SkImageFilters::Erode(erode_filter->
radius_x(),
208 return SkImageFilters::MatrixTransform(
215 return SkImageFilters::Compose(
ToSk(compose_filter->
outer()),
248 switch (filter->
type()) {
260 return SkColorFilters::Matrix(matrix);
263 return SkColorFilters::SRGBToLinearGamma();
266 return SkColorFilters::LinearToSRGBGamma();
275 switch (filter->
type()) {
279 return SkMaskFilter::MakeBlur(
ToSk(blur_filter->
style()),
280 blur_filter->
sigma(),
286sk_sp<SkVertices>
ToSk(
const std::shared_ptr<DlVertices>& vertices) {
287 std::vector<SkColor> sk_colors;
288 const SkColor* sk_colors_ptr =
nullptr;
289 if (vertices->colors()) {
290 sk_colors.reserve(vertices->vertex_count());
291 for (
int i = 0;
i < vertices->vertex_count(); ++
i) {
292 sk_colors.push_back(vertices->colors()[
i].argb());
294 sk_colors_ptr = sk_colors.data();
296 return SkVertices::MakeCopy(
ToSk(vertices->mode()), vertices->vertex_count(),
298 ToSkPoints(vertices->texture_coordinate_data()),
299 sk_colors_ptr, vertices->index_count(),
300 vertices->indices());
virtual T type() const =0
DlTileMode tile_mode() const
DlBlurStyle style() const
virtual const DlBlendColorFilter * asBlend() const
virtual const DlMatrixColorFilter * asMatrix() const
const std::shared_ptr< const DlColorFilter > color_filter() const
virtual const DlRuntimeEffectColorSource * asRuntimeEffect() const
virtual const DlRadialGradientColorSource * asRadialGradient() const
virtual const DlLinearGradientColorSource * asLinearGradient() const
virtual const DlImageColorSource * asImage() const
virtual const DlSweepGradientColorSource * asSweepGradient() const
virtual const DlConicalGradientColorSource * asConicalGradient() const
std::shared_ptr< DlImageFilter > inner() const
std::shared_ptr< DlImageFilter > outer() const
DlScalar start_radius() const
DlPoint start_center() const
DlScalar end_radius() const
DlPoint end_center() const
DlScalar radius_x() const
DlScalar radius_y() const
DlScalar radius_y() const
DlScalar radius_x() const
DlTileMode tile_mode() const
const float * stops() const
DlImageSampling sampling() const
DlTileMode vertical_tile_mode() const
DlTileMode horizontal_tile_mode() const
sk_sp< const DlImage > image() const
virtual const DlLocalMatrixImageFilter * asLocalMatrix() const
virtual const DlColorFilterImageFilter * asColorFilter() const
virtual const DlMatrixImageFilter * asMatrix() const
virtual const DlComposeImageFilter * asCompose() const
virtual const DlBlurImageFilter * asBlur() const
virtual const DlDilateImageFilter * asDilate() const
virtual const DlErodeImageFilter * asErode() const
const DlPoint & end_point() const
const DlPoint & start_point() const
const DlMatrix & matrix() const
const std::shared_ptr< DlImageFilter > image_filter() const
virtual const DlBlurMaskFilter * asBlur() const
void get_matrix(float matrix[20]) const
const DlMatrix * matrix_ptr() const
DlImageSampling sampling() const
const DlMatrix & matrix() const
DlStrokeCap getStrokeCap() const
DlBlendMode getBlendMode() const
float getStrokeMiter() const
DlStrokeJoin getStrokeJoin() const
const DlColorSource * getColorSourcePtr() const
const DlMaskFilter * getMaskFilterPtr() const
const DlColorFilter * getColorFilterPtr() const
const DlImageFilter * getImageFilterPtr() const
DlDrawStyle getDrawStyle() const
float getStrokeWidth() const
DlPaint & setDrawStyle(DlDrawStyle style)
DlPaint & setColorSource(std::nullptr_t source)
bool isInvertColors() const
const std::shared_ptr< std::vector< uint8_t > > uniform_data() const
const sk_sp< DlRuntimeEffect > runtime_effect() const
const std::vector< std::shared_ptr< DlColorSource > > samplers() const
FlutterVulkanImage * image
#define FML_DCHECK(condition)
SkPaint ToSk(const DlPaint &paint)
const SkPoint & ToSkPoint(const DlPoint &point)
SkPaint ToStrokedSk(const DlPaint &paint)
SkColor4f ToSkColor4f(DlColor color)
SkPaint ToNonShaderSk(const DlPaint &paint)
@ kStroke
strokes boundary of shapes
constexpr float kInvertColorMatrix[20]
SkMatrix ToSkMatrix(const DlMatrix &matrix)
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
const SkPoint * ToSkPoints(const DlPoint *points)