Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
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
7#include "gtest/gtest.h"
8
13
14namespace impeller {
15namespace testing {
16
17TEST(PaintTest, OptionalStrokeWithFill) {
18 Paint paint;
20 paint.stroke.cap = Cap::kRound;
21 paint.stroke.join = Join::kRound;
22 paint.stroke.width = 20.0f;
23 paint.stroke.miter_limit = 100.0f;
24
25 EXPECT_FALSE(paint.GetStroke().has_value());
26 // Even though optional stroke wasn't returned, the underlying values
27 // are still in the Paint.
28 EXPECT_EQ(paint.stroke.cap, Cap::kRound);
29 EXPECT_EQ(paint.stroke.join, Join::kRound);
30 EXPECT_EQ(paint.stroke.width, 20.0f);
31 EXPECT_EQ(paint.stroke.miter_limit, 100.0f);
32}
33
34TEST(PaintTest, OptionalStrokeWithStroke) {
35 Paint paint;
37 paint.stroke.cap = Cap::kRound;
38 paint.stroke.join = Join::kRound;
39 paint.stroke.width = 20.0f;
40 paint.stroke.miter_limit = 100.0f;
41
42 std::optional<StrokeParameters> optional_stroke = paint.GetStroke();
43 EXPECT_TRUE(optional_stroke.has_value());
44 if (optional_stroke.has_value()) { // Test to keep clang-tidy happy.
45 EXPECT_EQ(optional_stroke->cap, Cap::kRound);
46 EXPECT_EQ(optional_stroke->join, Join::kRound);
47 EXPECT_EQ(optional_stroke->width, 20.0f);
48 EXPECT_EQ(optional_stroke->miter_limit, 100.0f);
49 }
50}
51
52TEST(PaintTest, GradientStopConversion) {
53 // Typical gradient.
54 std::vector<flutter::DlColor> colors = {flutter::DlColor::kBlue(),
57 std::vector<float> stops = {0.0, 0.5, 1.0};
58 const auto gradient =
60 flutter::DlPoint(1.0, 1.0), //
61 3, //
62 colors.data(), //
63 stops.data(), //
65 nullptr //
66 );
67
68 std::vector<Color> converted_colors;
69 std::vector<Scalar> converted_stops;
70 Paint::ConvertStops(gradient->asLinearGradient(), converted_colors,
71 converted_stops);
72
73 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[0], 0.0f));
74 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[1], 0.5f));
75 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[2], 1.0f));
76}
77
78TEST(PaintTest, GradientMissing0) {
79 std::vector<flutter::DlColor> colors = {flutter::DlColor::kBlue(),
81 std::vector<float> stops = {0.5, 1.0};
82 const auto gradient =
84 flutter::DlPoint(1.0, 1.0), //
85 2, //
86 colors.data(), //
87 stops.data(), //
89 nullptr //
90 );
91
92 std::vector<Color> converted_colors;
93 std::vector<Scalar> converted_stops;
94 Paint::ConvertStops(gradient->asLinearGradient(), converted_colors,
95 converted_stops);
96
97 // First color is inserted as blue.
98 ASSERT_TRUE(ScalarNearlyEqual(converted_colors[0].blue, 1.0f));
99 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[0], 0.0f));
100 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[1], 0.5f));
101 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[2], 1.0f));
102}
103
104TEST(PaintTest, GradientMissingLastValue) {
105 std::vector<flutter::DlColor> colors = {flutter::DlColor::kBlue(),
107 std::vector<float> stops = {0.0, .5};
108 const auto gradient =
110 flutter::DlPoint(1.0, 1.0), //
111 2, //
112 colors.data(), //
113 stops.data(), //
115 nullptr //
116 );
117
118 std::vector<Color> converted_colors;
119 std::vector<Scalar> converted_stops;
120 Paint::ConvertStops(gradient->asLinearGradient(), converted_colors,
121 converted_stops);
122
123 // Last color is inserted as red.
124 ASSERT_TRUE(ScalarNearlyEqual(converted_colors[2].red, 1.0f));
125 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[0], 0.0f));
126 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[1], 0.5f));
127 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[2], 1.0f));
128}
129
130TEST(PaintTest, GradientStopGreaterThan1) {
131 std::vector<flutter::DlColor> colors = {flutter::DlColor::kBlue(),
134 std::vector<float> stops = {0.0, 100, 1.0};
135 const auto gradient =
137 flutter::DlPoint(1.0, 1.0), //
138 3, //
139 colors.data(), //
140 stops.data(), //
142 nullptr //
143 );
144
145 std::vector<Color> converted_colors;
146 std::vector<Scalar> converted_stops;
147 Paint::ConvertStops(gradient->asLinearGradient(), converted_colors,
148 converted_stops);
149
150 // Value is clamped to 1.0
151 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[0], 0.0f));
152 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[1], 1.0f));
153 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[2], 1.0f));
154}
155
156TEST(PaintTest, GradientConversionNonMonotonic) {
157 std::vector<flutter::DlColor> colors = {
160 std::vector<float> stops = {0.0, 0.5, 0.4, 1.0};
161 const auto gradient =
163 flutter::DlPoint(1.0, 1.0), //
164 4, //
165 colors.data(), //
166 stops.data(), //
168 nullptr //
169 );
170
171 std::vector<Color> converted_colors;
172 std::vector<Scalar> converted_stops;
173 Paint::ConvertStops(gradient->asLinearGradient(), converted_colors,
174 converted_stops);
175
176 // Value is clamped to 0.5
177 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[0], 0.0f));
178 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[1], 0.5f));
179 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[2], 0.5f));
180 ASSERT_TRUE(ScalarNearlyEqual(converted_stops[3], 1.0f));
181}
182
183} // namespace testing
184} // namespace impeller
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)
TEST(FrameTimingsRecorderTest, RecordVsync)
constexpr bool ScalarNearlyEqual(Scalar x, Scalar y, Scalar tolerance=kEhCloseEnough)
Definition scalar.h:36
static constexpr DlColor kBlue()
Definition dl_color.h:73
static constexpr DlColor kRed()
Definition dl_color.h:71
static constexpr DlColor kGreen()
Definition dl_color.h:72
static void ConvertStops(const flutter::DlGradientColorSourceBase *gradient, std::vector< Color > &colors, std::vector< float > &stops)
Convert display list colors + stops into impeller colors and stops, taking care to ensure that the st...
Definition paint.cc:39
Style style
Definition paint.h:85
std::optional< StrokeParameters > GetStroke() const
Return an optional StrokeParameters if this Paint is a stroked Paint, otherwise return a nullopt.
Definition paint.h:95
StrokeParameters stroke
Definition paint.h:84