Skip to content

Commit f5db75a

Browse files
flardnfield
authored andcommitted
Use new DlColorSource objects (flutter#73)
1 parent 47cb97c commit f5db75a

File tree

2 files changed

+32
-32
lines changed

2 files changed

+32
-32
lines changed

impeller/display_list/display_list_dispatcher.cc

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include "impeller/geometry/path_builder.h"
1010
#include "impeller/typographer/backends/skia/text_frame_skia.h"
1111
#include "third_party/skia/include/core/SkColor.h"
12-
#include "third_party/skia/include/core/SkShader.h"
1312

1413
namespace impeller {
1514

@@ -90,40 +89,41 @@ static Color ToColor(const SkColor& color) {
9089
}
9190

9291
// |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;
9595
return;
9696
}
9797

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;
126105
}
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;
127127
}
128128

129129
// Needs https://github.com/flutter/flutter/issues/95434

impeller/display_list/display_list_dispatcher.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class DisplayListDispatcher final : public flutter::Dispatcher {
4545
void setStrokeJoin(SkPaint::Join join) override;
4646

4747
// |flutter::Dispatcher|
48-
void setShader(sk_sp<SkShader> shader) override;
48+
void setColorSource(const flutter::DlColorSource* source) override;
4949

5050
// |flutter::Dispatcher|
5151
void setColorFilter(const flutter::DlColorFilter* filter) override;

0 commit comments

Comments
 (0)