[DisplayList] Delete (publicly) unused DlColorColorSource (flutter/engine#56825)

While recently updating the DlColorSource sources I noticed some questionably implementation choices in the Color variant of the color sources.

I then realized that there was no public use of these classes (other than mostly their own unit tests) and so they should be deleted to focus on implementing the variants that are actually used by Flutter.
This commit is contained in:
Jim Graham 2024-11-26 16:13:22 -08:00 committed by GitHub
parent fb62aa5d47
commit 0c245ce56b
23 changed files with 89 additions and 236 deletions

View File

@ -42540,8 +42540,6 @@ ORIGIN: ../../../flutter/display_list/effects/color_filters/dl_matrix_color_filt
ORIGIN: ../../../flutter/display_list/effects/color_filters/dl_matrix_color_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_filters/dl_srgb_to_linear_gamma_color_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_filters/dl_srgb_to_linear_gamma_color_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_color_color_source.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_color_color_source.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h + ../../../flutter/LICENSE
@ -45467,8 +45465,6 @@ FILE: ../../../flutter/display_list/effects/color_filters/dl_matrix_color_filter
FILE: ../../../flutter/display_list/effects/color_filters/dl_matrix_color_filter.h
FILE: ../../../flutter/display_list/effects/color_filters/dl_srgb_to_linear_gamma_color_filter.cc
FILE: ../../../flutter/display_list/effects/color_filters/dl_srgb_to_linear_gamma_color_filter.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_color_color_source.cc
FILE: ../../../flutter/display_list/effects/color_sources/dl_color_color_source.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.cc
FILE: ../../../flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h

View File

@ -55,8 +55,6 @@ source_set("display_list") {
"effects/color_filters/dl_matrix_color_filter.h",
"effects/color_filters/dl_srgb_to_linear_gamma_color_filter.cc",
"effects/color_filters/dl_srgb_to_linear_gamma_color_filter.h",
"effects/color_sources/dl_color_color_source.cc",
"effects/color_sources/dl_color_color_source.h",
"effects/color_sources/dl_conical_gradient_color_source.cc",
"effects/color_sources/dl_conical_gradient_color_source.h",
"effects/color_sources/dl_image_color_source.cc",

View File

@ -201,12 +201,6 @@ void DisplayListBuilder::onSetColorSource(const DlColorSource* source) {
current_.setColorSource(source->shared());
is_ui_thread_safe_ = is_ui_thread_safe_ && source->isUIThreadSafe();
switch (source->type()) {
case DlColorSourceType::kColor: {
const DlColorColorSource* color_source = source->asColor();
current_.setColorSource(nullptr);
setColor(color_source->color());
break;
}
case DlColorSourceType::kImage: {
const DlImageColorSource* image_source = source->asImage();
FML_DCHECK(image_source);
@ -1953,11 +1947,9 @@ DlColor DisplayListBuilder::GetEffectiveColor(const DlPaint& paint,
if (flags.applies_color()) {
const DlColorSource* source = paint.getColorSourcePtr();
if (source) {
if (source->asColor()) {
color = source->asColor()->color();
} else {
// Suspecting that we need to modulate the ColorSource color by the
// color property, see https://github.com/flutter/flutter/issues/159507
color = source->is_opaque() ? DlColor::kBlack() : kAnyColor;
}
} else {
color = paint.getColor();
}

View File

@ -56,7 +56,16 @@ TEST(DisplayListPaint, ConstructorDefaults) {
EXPECT_NE(paint, DlPaint().setStrokeWidth(6));
EXPECT_NE(paint, DlPaint().setStrokeMiter(7));
auto color_source = DlColorSource::MakeColor(DlColor::kMagenta());
DlColor colors[2] = {
DlColor::kGreen(),
DlColor::kBlue(),
};
float stops[2] = {
0.0f,
1.0f,
};
auto color_source = DlColorSource::MakeLinear({0, 0}, {10, 10}, 2, colors,
stops, DlTileMode::kClamp);
EXPECT_NE(paint, DlPaint().setColorSource(color_source));
auto color_filter =
@ -95,6 +104,14 @@ TEST(DisplayListPaint, NullSharedPointerSetGet) {
}
TEST(DisplayListPaint, ChainingConstructor) {
DlColor colors[2] = {
DlColor::kGreen(),
DlColor::kBlue(),
};
float stops[2] = {
0.0f,
1.0f,
};
DlPaint paint =
DlPaint() //
.setAntiAlias(true) //
@ -107,7 +124,8 @@ TEST(DisplayListPaint, ChainingConstructor) {
.setStrokeJoin(DlStrokeJoin::kBevel) //
.setStrokeWidth(42) //
.setStrokeMiter(1.5) //
.setColorSource(DlColorSource::MakeColor(DlColor::kMagenta())) //
.setColorSource(DlColorSource::MakeLinear( //
{0, 0}, {10, 10}, 2, colors, stops, DlTileMode::kClamp)) //
.setColorFilter(
DlColorFilter::MakeBlend(DlColor::kYellow(), DlBlendMode::kDstIn))
.setImageFilter(DlImageFilter::MakeBlur(1.3, 4.7, DlTileMode::kClamp))
@ -123,7 +141,8 @@ TEST(DisplayListPaint, ChainingConstructor) {
EXPECT_EQ(paint.getStrokeWidth(), 42);
EXPECT_EQ(paint.getStrokeMiter(), 1.5);
EXPECT_TRUE(Equals(paint.getColorSource(),
DlColorSource::MakeColor(DlColor::kMagenta())));
DlColorSource::MakeLinear({0, 0}, {10, 10}, 2, colors,
stops, DlTileMode::kClamp)));
EXPECT_TRUE(Equals(
paint.getColorFilter(),
DlColorFilter::MakeBlend(DlColor::kYellow(), DlBlendMode::kDstIn)));

View File

@ -1,15 +0,0 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/display_list/effects/color_sources/dl_color_color_source.h"
namespace flutter {
bool DlColorColorSource::equals_(DlColorSource const& other) const {
FML_DCHECK(other.type() == DlColorSourceType::kColor);
auto that = static_cast<DlColorColorSource const*>(&other);
return color_ == that->color_;
}
} // namespace flutter

View File

@ -1,42 +0,0 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_COLOR_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_COLOR_COLOR_SOURCE_H_
#include "flutter/display_list/effects/dl_color_source.h"
namespace flutter {
class DlColorColorSource final : public DlColorSource {
public:
explicit DlColorColorSource(DlColor color) : color_(color) {}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override {
return std::make_shared<DlColorColorSource>(color_);
}
const DlColorColorSource* asColor() const override { return this; }
DlColorSourceType type() const override { return DlColorSourceType::kColor; }
size_t size() const override { return sizeof(*this); }
bool is_opaque() const override { return color_.getAlpha() == 255; }
DlColor color() const { return color_; }
protected:
bool equals_(DlColorSource const& other) const override;
private:
DlColor color_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlColorColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_COLOR_COLOR_SOURCE_H_

View File

@ -20,10 +20,6 @@ static void DlGradientDeleter(void* p) {
::operator delete(p);
}
std::shared_ptr<DlColorSource> DlColorSource::MakeColor(DlColor color) {
return std::make_shared<DlColorColorSource>(color);
}
std::shared_ptr<DlColorSource> DlColorSource::MakeImage(
const sk_sp<const DlImage>& image,
DlTileMode horizontal_tile_mode,

View File

@ -15,7 +15,6 @@
namespace flutter {
class DlColorColorSource;
class DlImageColorSource;
class DlLinearGradientColorSource;
class DlRadialGradientColorSource;
@ -34,7 +33,6 @@ class DlRuntimeEffectColorSource;
// attributes, and the final blend with the pixels in the destination.
enum class DlColorSourceType {
kColor,
kImage,
kLinearGradient,
kRadialGradient,
@ -45,8 +43,6 @@ enum class DlColorSourceType {
class DlColorSource : public DlAttribute<DlColorSource, DlColorSourceType> {
public:
static std::shared_ptr<DlColorSource> MakeColor(DlColor color);
static std::shared_ptr<DlColorSource> MakeImage(
const sk_sp<const DlImage>& image,
DlTileMode horizontal_tile_mode,
@ -120,10 +116,6 @@ class DlColorSource : public DlAttribute<DlColorSource, DlColorSourceType> {
///
virtual bool isGradient() const { return false; }
// Return a DlColorColorSource pointer to this object iff it is an Color
// type of ColorSource, otherwise return nullptr.
virtual const DlColorColorSource* asColor() const { return nullptr; }
// Return a DlImageColorSource pointer to this object iff it is an Image
// type of ColorSource, otherwise return nullptr.
virtual const DlImageColorSource* asImage() const { return nullptr; }

View File

@ -88,53 +88,6 @@ static constexpr DlPoint kTestPoints2[2] = {
DlPoint(107, 118),
};
TEST(DisplayListColorSource, ColorConstructor) {
DlColorColorSource source(DlColor::kRed());
}
TEST(DisplayListColorSource, ColorShared) {
DlColorColorSource source(DlColor::kRed());
ASSERT_NE(source.shared().get(), &source);
ASSERT_EQ(*source.shared(), source);
}
TEST(DisplayListColorSource, ColorAsColor) {
DlColorColorSource source(DlColor::kRed());
ASSERT_NE(source.asColor(), nullptr);
ASSERT_EQ(source.asColor(), &source);
ASSERT_EQ(source.asImage(), nullptr);
ASSERT_EQ(source.asLinearGradient(), nullptr);
ASSERT_EQ(source.asRadialGradient(), nullptr);
ASSERT_EQ(source.asConicalGradient(), nullptr);
ASSERT_EQ(source.asSweepGradient(), nullptr);
ASSERT_EQ(source.asRuntimeEffect(), nullptr);
}
TEST(DisplayListColorSource, ColorContents) {
DlColorColorSource source(DlColor::kRed());
ASSERT_EQ(source.color(), DlColor::kRed());
ASSERT_EQ(source.is_opaque(), true);
for (int i = 0; i < 255; i++) {
SkColor alpha_color = SkColorSetA(SK_ColorRED, i);
auto const alpha_source = DlColorColorSource(DlColor(alpha_color));
ASSERT_EQ(alpha_source.color(), alpha_color);
ASSERT_EQ(alpha_source.is_opaque(), false);
}
}
TEST(DisplayListColorSource, ColorEquals) {
DlColorColorSource source1(DlColor::kRed());
DlColorColorSource source2(DlColor::kRed());
TestEquals(source1, source2);
}
TEST(DisplayListColorSource, ColorNotEquals) {
DlColorColorSource source1(DlColor::kRed());
DlColorColorSource source2(DlColor::kBlue());
TestNotEquals(source1, source2, "Color differs");
}
TEST(DisplayListColorSource, ImageConstructor) {
DlImageColorSource source(kTestImage1, DlTileMode::kClamp, DlTileMode::kClamp,
DlImageSampling::kLinear, &kTestMatrix1);
@ -153,11 +106,11 @@ TEST(DisplayListColorSource, ImageAsImage) {
ASSERT_NE(source.asImage(), nullptr);
ASSERT_EQ(source.asImage(), &source);
ASSERT_EQ(source.asColor(), nullptr);
ASSERT_EQ(source.asLinearGradient(), nullptr);
ASSERT_EQ(source.asRadialGradient(), nullptr);
ASSERT_EQ(source.asConicalGradient(), nullptr);
ASSERT_EQ(source.asSweepGradient(), nullptr);
ASSERT_EQ(source.asRuntimeEffect(), nullptr);
}
TEST(DisplayListColorSource, ImageContents) {
@ -251,7 +204,6 @@ TEST(DisplayListColorSource, LinearGradientAsLinear) {
ASSERT_NE(source->asLinearGradient(), nullptr);
ASSERT_EQ(source->asLinearGradient(), source.get());
ASSERT_EQ(source->asColor(), nullptr);
ASSERT_EQ(source->asImage(), nullptr);
ASSERT_EQ(source->asRadialGradient(), nullptr);
ASSERT_EQ(source->asConicalGradient(), nullptr);
@ -370,7 +322,6 @@ TEST(DisplayListColorSource, RadialGradientAsRadial) {
ASSERT_NE(source->asRadialGradient(), nullptr);
ASSERT_EQ(source->asRadialGradient(), source.get());
ASSERT_EQ(source->asColor(), nullptr);
ASSERT_EQ(source->asImage(), nullptr);
ASSERT_EQ(source->asLinearGradient(), nullptr);
ASSERT_EQ(source->asConicalGradient(), nullptr);
@ -489,7 +440,6 @@ TEST(DisplayListColorSource, ConicalGradientAsConical) {
ASSERT_NE(source->asConicalGradient(), nullptr);
ASSERT_EQ(source->asConicalGradient(), source.get());
ASSERT_EQ(source->asColor(), nullptr);
ASSERT_EQ(source->asImage(), nullptr);
ASSERT_EQ(source->asLinearGradient(), nullptr);
ASSERT_EQ(source->asRadialGradient(), nullptr);
@ -624,7 +574,6 @@ TEST(DisplayListColorSource, SweepGradientAsSweep) {
ASSERT_NE(source->asSweepGradient(), nullptr);
ASSERT_EQ(source->asSweepGradient(), source.get());
ASSERT_EQ(source->asColor(), nullptr);
ASSERT_EQ(source->asImage(), nullptr);
ASSERT_EQ(source->asLinearGradient(), nullptr);
ASSERT_EQ(source->asRadialGradient(), nullptr);
@ -743,7 +692,6 @@ TEST(DisplayListColorSource, RuntimeEffect) {
ASSERT_NE(source2->asRuntimeEffect(), source1.get());
ASSERT_EQ(source1->asImage(), nullptr);
ASSERT_EQ(source1->asColor(), nullptr);
ASSERT_EQ(source1->asLinearGradient(), nullptr);
ASSERT_EQ(source1->asRadialGradient(), nullptr);
ASSERT_EQ(source1->asConicalGradient(), nullptr);

View File

@ -5,7 +5,6 @@
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCES_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCES_H_
#include "flutter/display_list/effects/color_sources/dl_color_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_image_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_linear_gradient_color_source.h"

View File

@ -83,11 +83,6 @@ sk_sp<SkShader> ToSk(const DlColorSource* source) {
return sk_colors;
};
switch (source->type()) {
case DlColorSourceType::kColor: {
const DlColorColorSource* color_source = source->asColor();
FML_DCHECK(color_source != nullptr);
return SkShaders::Color(ToSk(color_source->color()));
}
case DlColorSourceType::kImage: {
const DlImageColorSource* image_source = source->asImage();
FML_DCHECK(image_source != nullptr);

View File

@ -64,11 +64,6 @@ TEST(DisplayListUtils, SetColorSourceDoesNotDitherIfNotGradient) {
EXPECT_FALSE(helper.paint(true).isDither());
EXPECT_FALSE(helper.paint(false).isDither());
DlColorColorSource color_color_source(DlColor::kBlue());
helper.setColorSource(&color_color_source);
EXPECT_FALSE(helper.paint(true).isDither());
EXPECT_FALSE(helper.paint(false).isDither());
helper.setColorSource(kTestSource1.get());
EXPECT_FALSE(helper.paint(true).isDither());
EXPECT_FALSE(helper.paint(false).isDither());
@ -98,13 +93,6 @@ TEST(DisplayListUtils, SkDispatcherSetColorSourceDoesNotDitherIfNotGradient) {
EXPECT_FALSE(dispatcher.safe_paint(true)->isDither());
// Calling safe_paint(false) returns a nullptr
DlColorColorSource color_color_source(DlColor::kBlue());
dispatcher.setColorSource(&color_color_source);
EXPECT_FALSE(dispatcher.paint(true).isDither());
EXPECT_FALSE(dispatcher.paint(false).isDither());
EXPECT_FALSE(dispatcher.safe_paint(true)->isDither());
// Calling safe_paint(false) returns a nullptr
dispatcher.setColorSource(kTestSource1.get());
EXPECT_FALSE(dispatcher.paint(true).isDither());
EXPECT_FALSE(dispatcher.paint(false).isDither());

View File

@ -863,7 +863,7 @@ class TestParameters {
bool impeller_compatible(const DlPaint& paint) const {
if (is_draw_text_blob()) {
// Non-color text is rendered as paths
if (paint.getColorSourcePtr() && !paint.getColorSourcePtr()->asColor()) {
if (paint.getColorSourcePtr()) {
return false;
}
// Non-filled text (stroke or stroke and fill) is rendered as paths

View File

@ -54,9 +54,7 @@ static bool UseColorSourceContents(
if (vertices->HasVertexColors()) {
return false;
}
if (vertices->HasTextureCoordinates() &&
(!paint.color_source ||
paint.color_source->type() == flutter::DlColorSourceType::kColor)) {
if (vertices->HasTextureCoordinates() && !paint.color_source) {
return true;
}
return !vertices->HasTextureCoordinates();
@ -314,8 +312,7 @@ bool Canvas::AttemptDrawBlurredRRect(const Rect& rect,
return false;
}
if (paint.color_source &&
paint.color_source->type() != flutter::DlColorSourceType::kColor) {
if (paint.color_source) {
return false;
}
@ -736,8 +733,7 @@ void Canvas::DrawVertices(const std::shared_ptr<VerticesGeometry>& vertices,
// Override the blend mode with kDestination in order to match the behavior
// of Skia's SK_LEGACY_IGNORE_DRAW_VERTICES_BLEND_WITH_NO_SHADER flag, which
// is enabled when the Flutter engine builds Skia.
if (!paint.color_source ||
paint.color_source->type() == flutter::DlColorSourceType::kColor) {
if (!paint.color_source) {
blend_mode = BlendMode::kDestination;
}

View File

@ -222,12 +222,8 @@ void DlDispatcherBase::setStrokeJoin(flutter::DlStrokeJoin join) {
void DlDispatcherBase::setColorSource(const flutter::DlColorSource* source) {
AUTO_DEPTH_WATCHER(0u);
if (!source || source->type() == flutter::DlColorSourceType::kColor) {
paint_.color_source = nullptr;
} else {
paint_.color_source = source;
}
}
// |flutter::DlOpReceiver|
void DlDispatcherBase::setColorFilter(const flutter::DlColorFilter* filter) {

View File

@ -1256,30 +1256,41 @@ TEST_P(DisplayListTest, MaskBlursApplyCorrectlyToColorSources) {
std::array<flutter::DlColor, 2> colors = {flutter::DlColor::kBlue(),
flutter::DlColor::kGreen()};
std::array<float, 2> stops = {0, 1};
auto texture = CreateTextureForFixture("airplane.jpg");
auto matrix = flutter::DlMatrix::MakeTranslation({-300, -110});
std::array<std::shared_ptr<flutter::DlColorSource>, 2> color_sources = {
flutter::DlColorSource::MakeColor(flutter::DlColor::kWhite()),
flutter::DlColorSource::MakeImage(
DlImageImpeller::Make(texture), flutter::DlTileMode::kRepeat,
flutter::DlTileMode::kRepeat, flutter::DlImageSampling::kLinear,
&matrix),
flutter::DlColorSource::MakeLinear(
flutter::DlPoint(0, 0), flutter::DlPoint(100, 50), 2, colors.data(),
stops.data(), flutter::DlTileMode::kClamp)};
stops.data(), flutter::DlTileMode::kClamp),
};
int offset = 100;
builder.Save();
builder.Translate(0, 100);
for (const auto& color_source : color_sources) {
flutter::DlPaint paint;
paint.setColorSource(color_source);
paint.setMaskFilter(blur_filter);
builder.Save();
builder.Translate(100, 0);
paint.setDrawStyle(flutter::DlDrawStyle::kFill);
builder.DrawRRect(
SkRRect::MakeRectXY(SkRect::MakeXYWH(100, offset, 100, 50), 30, 30),
paint);
paint.setDrawStyle(flutter::DlDrawStyle::kStroke);
paint.setStrokeWidth(10);
builder.DrawRRect(
SkRRect::MakeRectXY(SkRect::MakeXYWH(300, offset, 100, 50), 30, 30),
builder.DrawRRect(SkRRect::MakeRectXY(SkRect::MakeWH(100, 50), 30, 30),
paint);
offset += 100;
paint.setDrawStyle(flutter::DlDrawStyle::kStroke);
paint.setStrokeWidth(10);
builder.Translate(200, 0);
builder.DrawRRect(SkRRect::MakeRectXY(SkRect::MakeWH(100, 50), 30, 30),
paint);
builder.Restore();
builder.Translate(0, 100);
}
builder.Restore();
ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
}

View File

@ -239,11 +239,6 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
contents->SetTextureInputs(std::move(texture_inputs));
return contents;
}
case flutter::DlColorSourceType::kColor: {
auto contents = std::make_shared<SolidColorContents>();
contents->SetColor(color);
return contents;
}
}
FML_UNREACHABLE();
}

View File

@ -4,8 +4,6 @@
#include "flutter/shell/common/dl_op_spy.h"
#include "flutter/display_list/effects/color_sources/dl_color_color_source.h"
namespace flutter {
bool DlOpSpy::did_draw() {
@ -13,6 +11,7 @@ bool DlOpSpy::did_draw() {
}
void DlOpSpy::setColor(DlColor color) {
color_ = color;
if (color.isTransparent()) {
will_draw_ = false;
} else {
@ -21,11 +20,8 @@ void DlOpSpy::setColor(DlColor color) {
}
void DlOpSpy::setColorSource(const DlColorSource* source) {
if (!source) {
return;
}
const DlColorColorSource* color_source = source->asColor();
if (color_source && color_source->color().isTransparent()) {
will_draw_ = false;
// Restore settings based on previously set color
setColor(color_);
return;
}
will_draw_ = true;

View File

@ -106,6 +106,9 @@ class DlOpSpy final : public virtual DlOpReceiver,
bool transparent_occluder,
DlScalar dpr) override;
// Most recently set color, used when color_source goes to null
DlColor color_;
// Indicates if the attributes are set to values that will modify the
// destination. For now, the test only checks if there is a non-transparent
// color set.

View File

@ -84,29 +84,26 @@ TEST(DlOpSpy, SetColorSource) {
dl->Dispatch(dl_op_spy);
ASSERT_DID_DRAW(dl_op_spy, dl);
}
{ // Set transparent color.
DisplayListBuilder builder;
DlPaint paint;
auto color = DlColor::kTransparent();
DlColorColorSource color_source_transparent(color);
paint.setColorSource(color_source_transparent.shared());
builder.DrawRect(SkRect::MakeWH(5, 5), paint);
sk_sp<DisplayList> dl = builder.Build();
{ // setColorSource(null) restores previous color visibility
DlOpSpy dl_op_spy;
dl->Dispatch(dl_op_spy);
ASSERT_NO_DRAW(dl_op_spy, dl);
}
{ // Set black color.
DisplayListBuilder builder;
DlPaint paint;
auto color = DlColor::kBlack();
DlColorColorSource color_source_transparent(color);
paint.setColorSource(color_source_transparent.shared());
builder.DrawRect(SkRect::MakeWH(5, 5), paint);
sk_sp<DisplayList> dl = builder.Build();
DlOpSpy dl_op_spy;
dl->Dispatch(dl_op_spy);
ASSERT_DID_DRAW(dl_op_spy, dl);
DlOpReceiver* receiver = &dl_op_spy;
receiver->setColor(DlColor::kTransparent());
receiver->drawRect(DlRect::MakeWH(5, 5));
ASSERT_FALSE(dl_op_spy.did_draw());
DlColor colors[2] = {
DlColor::kGreen(),
DlColor::kBlue(),
};
float stops[2] = {
0.0f,
1.0f,
};
auto color_source = DlColorSource::MakeLinear({0, 0}, {10, 10}, 2, colors,
stops, DlTileMode::kClamp);
receiver->setColorSource(color_source.get());
receiver->setColorSource(nullptr);
receiver->drawRect(DlRect::MakeWH(5, 5));
ASSERT_FALSE(dl_op_spy.did_draw());
}
}

View File

@ -444,12 +444,6 @@ void DisplayListStreamDispatcher::setColorSource(const DlColorSource* source) {
}
startl() << "setColorSource(";
switch (source->type()) {
case DlColorSourceType::kColor: {
const DlColorColorSource* color_src = source->asColor();
FML_DCHECK(color_src);
os_ << "DlColorColorSource(" << color_src->color() << ")";
break;
}
case DlColorSourceType::kImage: {
const DlImageColorSource* image_src = source->asImage();
FML_DCHECK(image_src);

View File

@ -263,7 +263,6 @@ class DisplayListGeneralReceiver : public DlOpReceiver {
case DlColorSourceType::kRuntimeEffect:
RecordByType(DisplayListOpType::kSetRuntimeEffectColorSource);
break;
case DlColorSourceType::kColor:
case DlColorSourceType::kLinearGradient:
case DlColorSourceType::kRadialGradient:
case DlColorSourceType::kConicalGradient:

View File

@ -191,7 +191,7 @@ class DisplayListParagraphPainter : public skt::ParagraphPainter {
// rendering will be faster as it avoids software rasterization. A stroke
// width of four was chosen by eyeballing the point at which the path
// text looks good enough, with some room for error.
return (paint.getColorSource() && !paint.getColorSource()->asColor()) ||
return paint.getColorSource() ||
(paint.getDrawStyle() == DlDrawStyle::kStroke &&
paint.getStrokeWidth() > 4);
}