|
9 | 9 | #include "impeller/geometry/path_builder.h"
|
10 | 10 | #include "impeller/typographer/backends/skia/text_frame_skia.h"
|
11 | 11 | #include "third_party/skia/include/core/SkColor.h"
|
12 |
| -#include "third_party/skia/include/core/SkShader.h" |
13 | 12 |
|
14 | 13 | namespace impeller {
|
15 | 14 |
|
@@ -90,40 +89,41 @@ static Color ToColor(const SkColor& color) {
|
90 | 89 | }
|
91 | 90 |
|
92 | 91 | // |flutter::Dispatcher|
|
93 |
| -void DisplayListDispatcher::setShader(sk_sp<SkShader> shader) { |
94 |
| - if (!shader) { |
| 92 | +void DisplayListDispatcher::setColorSource(const flutter::DlColorSource* source) { |
| 93 | + if (!source) { |
| 94 | + paint_.contents = nullptr; |
95 | 95 | return;
|
96 | 96 | }
|
97 | 97 |
|
98 |
| - { |
99 |
| - SkShader::GradientInfo info = {}; |
100 |
| - constexpr auto kColorsArrayCount = 2u; |
101 |
| - info.fColorCount = kColorsArrayCount; |
102 |
| - SkColor sk_colors[kColorsArrayCount]; |
103 |
| - info.fColors = sk_colors; |
104 |
| - auto gradient_type = shader->asAGradient(&info); |
105 |
| - switch (gradient_type) { |
106 |
| - case SkShader::kLinear_GradientType: { |
107 |
| - auto contents = std::make_shared<LinearGradientContents>(); |
108 |
| - contents->SetEndPoints(ToPoint(info.fPoint[0]), |
109 |
| - ToPoint(info.fPoint[1])); |
110 |
| - std::vector<Color> colors; |
111 |
| - for (auto i = 0; i < info.fColorCount; i++) { |
112 |
| - colors.emplace_back(ToColor(sk_colors[i])); |
113 |
| - } |
114 |
| - contents->SetColors(std::move(colors)); |
115 |
| - paint_.contents = std::move(contents); |
116 |
| - return; |
117 |
| - } break; |
118 |
| - case SkShader::kNone_GradientType: |
119 |
| - case SkShader::kColor_GradientType: |
120 |
| - case SkShader::kRadial_GradientType: |
121 |
| - case SkShader::kSweep_GradientType: |
122 |
| - case SkShader::kConical_GradientType: |
123 |
| - default: |
124 |
| - UNIMPLEMENTED; |
125 |
| - break; |
| 98 | + switch(source->type()) { |
| 99 | + case flutter::DlColorSourceType::kColor: { |
| 100 | + const flutter::DlColorColorSource* color = source->asColor(); |
| 101 | + paint_.contents = nullptr; |
| 102 | + setColor(color->color()); |
| 103 | + FML_DCHECK(color); |
| 104 | + return; |
126 | 105 | }
|
| 106 | + case flutter::DlColorSourceType::kLinearGradient: { |
| 107 | + const flutter::DlLinearGradientColorSource* linear = source->asLinearGradient(); |
| 108 | + FML_DCHECK(linear); |
| 109 | + auto contents = std::make_shared<LinearGradientContents>(); |
| 110 | + contents->SetEndPoints(ToPoint(linear->p0()), |
| 111 | + ToPoint(linear->p1())); |
| 112 | + std::vector<Color> colors; |
| 113 | + for (auto i = 0; i < linear->stop_count(); i++) { |
| 114 | + colors.emplace_back(ToColor(linear->colors()[i])); |
| 115 | + } |
| 116 | + contents->SetColors(std::move(colors)); |
| 117 | + paint_.contents = std::move(contents); |
| 118 | + return; |
| 119 | + } |
| 120 | + case flutter::DlColorSourceType::kImage: |
| 121 | + case flutter::DlColorSourceType::kRadialGradient: |
| 122 | + case flutter::DlColorSourceType::kConicalGradient: |
| 123 | + case flutter::DlColorSourceType::kSweepGradient: |
| 124 | + case flutter::DlColorSourceType::kUnknown: |
| 125 | + UNIMPLEMENTED; |
| 126 | + break; |
127 | 127 | }
|
128 | 128 |
|
129 | 129 | // Needs https://github.com/flutter/flutter/issues/95434
|
|
0 commit comments