[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:
parent
fb62aa5d47
commit
0c245ce56b
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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)));
|
||||
|
@ -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
|
@ -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_
|
@ -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,
|
||||
|
@ -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; }
|
||||
|
@ -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);
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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());
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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()));
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user