6 #include "display_list/dl_color.h"
7 #include "third_party/skia/modules/skparagraph/include/Paragraph.h"
10 namespace skia_conversions {
22 auto [xa, ya] = rr.radii(SkRRect::kUpperLeft_Corner);
23 auto [xb, yb] = rr.radii(SkRRect::kLowerLeft_Corner);
24 auto [xc, yc] = rr.radii(SkRRect::kUpperRight_Corner);
25 auto [xd, yd] = rr.radii(SkRRect::kLowerRight_Corner);
31 return Rect::MakeLTRB(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
34 std::optional<Rect>
ToRect(
const SkRect* rect) {
35 if (rect ==
nullptr) {
38 return Rect::MakeLTRB(rect->fLeft, rect->fTop, rect->fRight, rect->fBottom);
42 if (rect ==
nullptr) {
48 std::vector<Rect>
ToRects(
const SkRect tex[],
int count) {
49 auto result = std::vector<Rect>();
50 for (
int i = 0; i < count; i++) {
51 result.push_back(
ToRect(tex[i]));
57 auto result = std::vector<Rect>();
58 for (
int i = 0; i < count; i++) {
59 result.push_back(tex[i]);
64 std::vector<Point>
ToPoints(
const SkPoint points[],
int count) {
65 std::vector<Point> result(count);
66 for (
auto i = 0; i < count; i++) {
73 std::vector<Point> result(count);
74 for (
auto i = 0; i < count; i++) {
75 result[i] = points[i];
81 using Corner = SkRRect::Corner;
103 return Size(point.fX, point.fY);
107 FML_DCHECK(
color.getColorSpace() == flutter::DlColorSpace::kExtendedSRGB ||
108 color.getColorSpace() == flutter::DlColorSpace::kSRGB);
120 form.fSCos, form.fSSin, 0, 0,
121 -form.fSSin, form.fSCos, 0, 0,
123 form.fTx, form.fTy, 0, 1
130 case kRGBA_8888_SkColorType:
132 case kBGRA_8888_SkColorType:
134 case kRGBA_F16_SkColorType:
136 case kBGR_101010x_XR_SkColorType:
145 std::vector<Color>& colors,
146 std::vector<float>& stops) {
147 FML_DCHECK(gradient->stop_count() >= 2)
148 <<
"stop_count:" << gradient->stop_count();
150 auto* dl_colors = gradient->colors();
151 auto* dl_stops = gradient->stops();
152 if (dl_stops[0] != 0.0) {
154 stops.emplace_back(0);
156 for (
auto i = 0; i < gradient->stop_count(); i++) {
158 stops.emplace_back(std::clamp(dl_stops[i], 0.0f, 1.0f));
160 if (dl_stops[gradient->stop_count() - 1] != 1.0) {
161 colors.emplace_back(colors.back());
162 stops.emplace_back(1.0);
164 for (
auto i = 1; i < gradient->stop_count(); i++) {
165 stops[i] = std::clamp(stops[i], stops[i - 1], stops[i]);
170 const flutter::DlImageSampling options) {
173 case flutter::DlImageSampling::kNearestNeighbor:
176 desc.
label =
"Nearest Sampler";
178 case flutter::DlImageSampling::kLinear:
181 desc.
label =
"Linear Sampler";
183 case flutter::DlImageSampling::kCubic:
184 case flutter::DlImageSampling::kMipmapLinear:
187 desc.
label =
"Mipmap Linear Sampler";
206 case flutter::DlBlendMode::kClear:
208 case flutter::DlBlendMode::kSrc:
210 case flutter::DlBlendMode::kDst:
212 case flutter::DlBlendMode::kSrcOver:
214 case flutter::DlBlendMode::kDstOver:
216 case flutter::DlBlendMode::kSrcIn:
218 case flutter::DlBlendMode::kDstIn:
220 case flutter::DlBlendMode::kSrcOut:
222 case flutter::DlBlendMode::kDstOut:
224 case flutter::DlBlendMode::kSrcATop:
226 case flutter::DlBlendMode::kDstATop:
228 case flutter::DlBlendMode::kXor:
230 case flutter::DlBlendMode::kPlus:
232 case flutter::DlBlendMode::kModulate:
234 case flutter::DlBlendMode::kScreen:
236 case flutter::DlBlendMode::kOverlay:
238 case flutter::DlBlendMode::kDarken:
240 case flutter::DlBlendMode::kLighten:
242 case flutter::DlBlendMode::kColorDodge:
244 case flutter::DlBlendMode::kColorBurn:
246 case flutter::DlBlendMode::kHardLight:
248 case flutter::DlBlendMode::kSoftLight:
250 case flutter::DlBlendMode::kDifference:
252 case flutter::DlBlendMode::kExclusion:
254 case flutter::DlBlendMode::kMultiply:
256 case flutter::DlBlendMode::kHue:
258 case flutter::DlBlendMode::kSaturation:
260 case flutter::DlBlendMode::kColor:
262 case flutter::DlBlendMode::kLuminosity: