Flutter Engine
 
Loading...
Searching...
No Matches
dl_paint_unittests.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
10#include "gtest/gtest.h"
11
12namespace flutter {
13namespace testing {
14
15TEST(DisplayListPaint, ConstructorDefaults) {
16 DlPaint paint;
17 EXPECT_FALSE(paint.isAntiAlias());
18 EXPECT_FALSE(paint.isInvertColors());
19 EXPECT_EQ(paint.getColor(), DlPaint::kDefaultColor);
20 EXPECT_EQ(paint.getAlpha(), 0xFF);
21 EXPECT_EQ(paint.getBlendMode(), DlBlendMode::kDefaultMode);
22 EXPECT_EQ(paint.getDrawStyle(), DlDrawStyle::kDefaultStyle);
23 EXPECT_EQ(paint.getStrokeCap(), DlStrokeCap::kDefaultCap);
24 EXPECT_EQ(paint.getStrokeJoin(), DlStrokeJoin::kDefaultJoin);
25 EXPECT_EQ(paint.getStrokeWidth(), DlPaint::kDefaultWidth);
26 EXPECT_EQ(paint.getStrokeMiter(), DlPaint::kDefaultMiter);
27 EXPECT_EQ(paint.getColorSource(), nullptr);
28 EXPECT_EQ(paint.getColorFilter(), nullptr);
29 EXPECT_EQ(paint.getImageFilter(), nullptr);
30 EXPECT_EQ(paint.getMaskFilter(), nullptr);
31 EXPECT_TRUE(paint.isDefault());
32 EXPECT_EQ(paint, DlPaint::kDefault);
33
34 EXPECT_EQ(DlBlendMode::kDefaultMode, DlBlendMode::kSrcOver);
38
40 EXPECT_EQ(DlPaint::kDefaultWidth, 0.0);
41 EXPECT_EQ(DlPaint::kDefaultMiter, 4.0);
42
43 EXPECT_EQ(paint, DlPaint());
44 EXPECT_EQ(paint, DlPaint(DlColor::kBlack()));
45 EXPECT_EQ(paint, DlPaint(DlColor(0xFF000000)));
46
47 EXPECT_NE(paint, DlPaint().setAntiAlias(true));
48 EXPECT_NE(paint, DlPaint().setInvertColors(true));
49 EXPECT_NE(paint, DlPaint().setColor(DlColor::kGreen()));
50 EXPECT_NE(paint, DlPaint(DlColor::kGreen()));
51 EXPECT_NE(paint, DlPaint(DlColor(0xFF00FF00)));
52 EXPECT_NE(paint, DlPaint().setAlpha(0x7f));
53 EXPECT_NE(paint, DlPaint().setBlendMode(DlBlendMode::kDstIn));
54 EXPECT_NE(paint, DlPaint().setDrawStyle(DlDrawStyle::kStrokeAndFill));
55 EXPECT_NE(paint, DlPaint().setStrokeCap(DlStrokeCap::kRound));
56 EXPECT_NE(paint, DlPaint().setStrokeJoin(DlStrokeJoin::kRound));
57 EXPECT_NE(paint, DlPaint().setStrokeWidth(6));
58 EXPECT_NE(paint, DlPaint().setStrokeMiter(7));
59
60 DlColor colors[2] = {
63 };
64 float stops[2] = {
65 0.0f,
66 1.0f,
67 };
68 auto color_source = DlColorSource::MakeLinear({0, 0}, {10, 10}, 2, colors,
69 stops, DlTileMode::kClamp);
70 EXPECT_NE(paint, DlPaint().setColorSource(color_source));
71
72 auto color_filter =
73 DlColorFilter::MakeBlend(DlColor::kYellow(), DlBlendMode::kDstATop);
74 EXPECT_NE(paint, DlPaint().setColorFilter(color_filter));
75
76 auto image_filter = DlImageFilter::MakeBlur(1.3, 4.7, DlTileMode::kClamp);
77 EXPECT_NE(paint, DlPaint().setImageFilter(image_filter));
78
79 DlBlurMaskFilter mask_filter(DlBlurStyle::kInner, 3.14);
80 EXPECT_NE(paint, DlPaint().setMaskFilter(mask_filter.shared()));
81}
82
83TEST(DisplayListPaint, NullPointerSetGet) {
84 DlColorSource* null_color_source = nullptr;
85 DlColorFilter* null_color_filter = nullptr;
86 DlImageFilter* null_image_filter = nullptr;
87 DlMaskFilter* null_mask_filter = nullptr;
88 DlPaint paint;
89 EXPECT_EQ(paint.setColorSource(null_color_source).getColorSource(), nullptr);
90 EXPECT_EQ(paint.setColorFilter(null_color_filter).getColorFilter(), nullptr);
91 EXPECT_EQ(paint.setImageFilter(null_image_filter).getImageFilter(), nullptr);
92 EXPECT_EQ(paint.setMaskFilter(null_mask_filter).getMaskFilter(), nullptr);
93}
94
95TEST(DisplayListPaint, NullSharedPointerSetGet) {
96 std::shared_ptr<DlColorSource> null_color_source;
97 std::shared_ptr<DlColorFilter> null_color_filter;
98 std::shared_ptr<DlImageFilter> null_image_filter;
99 std::shared_ptr<DlMaskFilter> null_mask_filter;
100 DlPaint paint;
101 EXPECT_EQ(paint.setColorSource(null_color_source).getColorSource(), nullptr);
102 EXPECT_EQ(paint.setColorFilter(null_color_filter).getColorFilter(), nullptr);
103 EXPECT_EQ(paint.setImageFilter(null_image_filter).getImageFilter(), nullptr);
104 EXPECT_EQ(paint.setMaskFilter(null_mask_filter).getMaskFilter(), nullptr);
105}
106
107TEST(DisplayListPaint, ChainingConstructor) {
108 DlColor colors[2] = {
111 };
112 float stops[2] = {
113 0.0f,
114 1.0f,
115 };
116 DlPaint paint =
117 DlPaint() //
118 .setAntiAlias(true) //
119 .setInvertColors(true) //
121 .setAlpha(0x7F) //
122 .setBlendMode(DlBlendMode::kLuminosity) //
126 .setStrokeWidth(42) //
127 .setStrokeMiter(1.5) //
129 {0, 0}, {10, 10}, 2, colors, stops, DlTileMode::kClamp)) //
131 DlColorFilter::MakeBlend(DlColor::kYellow(), DlBlendMode::kDstIn))
134 EXPECT_TRUE(paint.isAntiAlias());
135 EXPECT_TRUE(paint.isInvertColors());
136 EXPECT_EQ(paint.getColor(), DlColor::kGreen().withAlpha(0x7F));
137 EXPECT_EQ(paint.getAlpha(), 0x7F);
138 EXPECT_EQ(paint.getBlendMode(), DlBlendMode::kLuminosity);
139 EXPECT_EQ(paint.getDrawStyle(), DlDrawStyle::kStrokeAndFill);
140 EXPECT_EQ(paint.getStrokeCap(), DlStrokeCap::kSquare);
141 EXPECT_EQ(paint.getStrokeJoin(), DlStrokeJoin::kBevel);
142 EXPECT_EQ(paint.getStrokeWidth(), 42);
143 EXPECT_EQ(paint.getStrokeMiter(), 1.5);
144 EXPECT_TRUE(Equals(paint.getColorSource(),
145 DlColorSource::MakeLinear({0, 0}, {10, 10}, 2, colors,
146 stops, DlTileMode::kClamp)));
147 EXPECT_TRUE(Equals(
148 paint.getColorFilter(),
149 DlColorFilter::MakeBlend(DlColor::kYellow(), DlBlendMode::kDstIn)));
150 EXPECT_TRUE(Equals(paint.getImageFilter(),
152 EXPECT_EQ(*paint.getMaskFilter(),
154
155 EXPECT_NE(paint, DlPaint());
156}
157
158TEST(DisplayListPaint, PaintDetectsRuntimeEffects) {
159 auto color_source = DlColorSource::MakeRuntimeEffect(
160 kTestRuntimeEffect1, {}, std::make_shared<std::vector<uint8_t>>());
161 auto image_filter = DlImageFilter::MakeRuntimeEffect(
162 kTestRuntimeEffect1, {}, std::make_shared<std::vector<uint8_t>>());
163 DlPaint paint;
164
165 EXPECT_FALSE(paint.usesRuntimeEffect());
166 paint.setColorSource(color_source);
167 EXPECT_TRUE(paint.usesRuntimeEffect());
168 paint.setColorSource(nullptr);
169 EXPECT_FALSE(paint.usesRuntimeEffect());
170
171 EXPECT_FALSE(paint.usesRuntimeEffect());
172 paint.setImageFilter(image_filter);
173 EXPECT_TRUE(paint.usesRuntimeEffect());
174 paint.setImageFilter(nullptr);
175 EXPECT_FALSE(paint.usesRuntimeEffect());
176
177 EXPECT_FALSE(paint.usesRuntimeEffect());
178 paint.setColorSource(color_source);
179 EXPECT_TRUE(paint.usesRuntimeEffect());
180 paint.setImageFilter(image_filter);
181 EXPECT_TRUE(paint.usesRuntimeEffect());
182 paint.setImageFilter(nullptr);
183 EXPECT_TRUE(paint.usesRuntimeEffect());
184 paint.setColorSource(nullptr);
185 EXPECT_FALSE(paint.usesRuntimeEffect());
186
187 EXPECT_FALSE(paint.usesRuntimeEffect());
188 paint.setColorSource(color_source);
189 EXPECT_TRUE(paint.usesRuntimeEffect());
190 paint.setImageFilter(image_filter);
191 EXPECT_TRUE(paint.usesRuntimeEffect());
192 paint.setColorSource(nullptr);
193 EXPECT_TRUE(paint.usesRuntimeEffect());
194 paint.setImageFilter(nullptr);
195 EXPECT_FALSE(paint.usesRuntimeEffect());
196}
197
198} // namespace testing
199} // namespace flutter
std::shared_ptr< DlMaskFilter > shared() const override
static std::shared_ptr< const DlColorFilter > MakeBlend(DlColor color, DlBlendMode mode)
static std::shared_ptr< DlColorSource > MakeLinear(const DlPoint start_point, const DlPoint end_point, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeRuntimeEffect(sk_sp< DlRuntimeEffect > runtime_effect, std::vector< std::shared_ptr< DlColorSource > > samplers, std::shared_ptr< std::vector< uint8_t > > uniform_data)
static std::shared_ptr< DlImageFilter > MakeBlur(DlScalar sigma_x, DlScalar sigma_y, DlTileMode tile_mode)
static std::shared_ptr< DlImageFilter > MakeRuntimeEffect(sk_sp< DlRuntimeEffect > runtime_effect, std::vector< std::shared_ptr< DlColorSource > > samplers, std::shared_ptr< std::vector< uint8_t > > uniform_data)
bool isAntiAlias() const
Definition dl_paint.h:57
DlStrokeCap getStrokeCap() const
Definition dl_paint.h:98
bool isDefault() const
Definition dl_paint.h:198
DlColor getColor() const
Definition dl_paint.h:69
DlPaint & setColor(DlColor color)
Definition dl_paint.h:70
DlPaint & setAntiAlias(bool isAntiAlias)
Definition dl_paint.h:58
static const DlPaint kDefault
Definition dl_paint.h:52
DlPaint & setInvertColors(bool isInvertColors)
Definition dl_paint.h:64
DlBlendMode getBlendMode() const
Definition dl_paint.h:82
static constexpr float kDefaultWidth
Definition dl_paint.h:49
float getStrokeMiter() const
Definition dl_paint.h:120
DlStrokeJoin getStrokeJoin() const
Definition dl_paint.h:106
bool usesRuntimeEffect() const
Definition dl_paint.h:200
uint8_t getAlpha() const
Definition dl_paint.h:75
DlPaint & setStrokeCap(DlStrokeCap cap)
Definition dl_paint.h:101
DlPaint & setStrokeWidth(float width)
Definition dl_paint.h:115
DlPaint & setAlpha(uint8_t alpha)
Definition dl_paint.h:76
DlPaint & setStrokeMiter(float miter)
Definition dl_paint.h:121
DlPaint & setBlendMode(DlBlendMode mode)
Definition dl_paint.h:85
const std::shared_ptr< const DlMaskFilter > & getMaskFilter() const
Definition dl_paint.h:180
static constexpr float kDefaultMiter
Definition dl_paint.h:50
DlDrawStyle getDrawStyle() const
Definition dl_paint.h:90
DlPaint & setImageFilter(std::nullptr_t filter)
Definition dl_paint.h:167
const std::shared_ptr< const DlColorSource > & getColorSource() const
Definition dl_paint.h:126
const std::shared_ptr< DlImageFilter > & getImageFilter() const
Definition dl_paint.h:162
float getStrokeWidth() const
Definition dl_paint.h:114
const std::shared_ptr< const DlColorFilter > & getColorFilter() const
Definition dl_paint.h:144
DlPaint & setMaskFilter(std::nullptr_t filter)
Definition dl_paint.h:185
DlPaint & setDrawStyle(DlDrawStyle style)
Definition dl_paint.h:93
static constexpr DlColor kDefaultColor
Definition dl_paint.h:48
DlPaint & setStrokeJoin(DlStrokeJoin join)
Definition dl_paint.h:109
DlPaint & setColorFilter(std::nullptr_t filter)
Definition dl_paint.h:149
DlPaint & setColorSource(std::nullptr_t source)
Definition dl_paint.h:131
bool isInvertColors() const
Definition dl_paint.h:63
static const sk_sp< DlRuntimeEffect > kTestRuntimeEffect1
TEST(NativeAssetsManagerTest, NoAvailableAssets)
@ kMiter
extends to miter limit
@ kBevel
connects outside edges
@ kRound
adds circle
@ kButt
no stroke extension
@ kSquare
adds square
bool Equals(const T *a, const U *b)
@ kStrokeAndFill
both strokes and fills shapes
@ kFill
fills interior of shapes
@ kInner
fuzzy inside, nothing outside
static constexpr DlColor kBlue()
Definition dl_color.h:73
static constexpr DlColor kBlack()
Definition dl_color.h:69
static constexpr DlColor kYellow()
Definition dl_color.h:76
static constexpr DlColor kGreen()
Definition dl_color.h:72
DlColor withAlpha(uint8_t alpha) const
Definition dl_color.h:120