OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/border.h" | 5 #include "ui/views/border.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <memory> | 8 #include <memory> |
9 #include <set> | 9 #include <set> |
10 #include <utility> | 10 #include <utility> |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
65 return std::vector<DrawRectCall>(draw_rect_calls_.begin(), | 65 return std::vector<DrawRectCall>(draw_rect_calls_.begin(), |
66 draw_rect_calls_.end()); | 66 draw_rect_calls_.end()); |
67 } | 67 } |
68 | 68 |
69 // Return calls in sorted order. | 69 // Return calls in sorted order. |
70 std::vector<DrawRRectCall> draw_rrect_calls() { | 70 std::vector<DrawRRectCall> draw_rrect_calls() { |
71 return std::vector<DrawRRectCall>(draw_rrect_calls_.begin(), | 71 return std::vector<DrawRRectCall>(draw_rrect_calls_.begin(), |
72 draw_rrect_calls_.end()); | 72 draw_rrect_calls_.end()); |
73 } | 73 } |
74 | 74 |
75 int draw_paint_call_count() const { return draw_paint_call_count_; } | |
76 | |
77 const SkRect& last_clip_bounds() const { return last_clip_bounds_; } | |
78 | |
75 // SkCanvas overrides: | 79 // SkCanvas overrides: |
76 void onDrawRect(const SkRect& rect, const SkPaint& paint) override { | 80 void onDrawRect(const SkRect& rect, const SkPaint& paint) override { |
77 draw_rect_calls_.insert(DrawRectCall(rect, paint)); | 81 draw_rect_calls_.insert(DrawRectCall(rect, paint)); |
78 } | 82 } |
79 | 83 |
80 void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override { | 84 void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override { |
81 draw_rrect_calls_.insert(DrawRRectCall(rrect, paint)); | 85 draw_rrect_calls_.insert(DrawRRectCall(rrect, paint)); |
82 } | 86 } |
83 | 87 |
88 void onDrawPaint(const SkPaint& paint) override { ++draw_paint_call_count_; } | |
Matt Giuca
2017/02/21 23:18:51
Can we record the SkPaint object into a set like d
Evan Stade
2017/02/22 01:34:55
done
| |
89 | |
90 void onClipRect(const SkRect& rect, | |
91 SkClipOp op, | |
92 ClipEdgeStyle edge_style) override { | |
93 last_clip_bounds_ = rect; | |
94 } | |
95 | |
84 private: | 96 private: |
85 // Stores all the calls for querying by the test, in sorted order. | 97 // Stores all the calls for querying by the test, in sorted order. |
86 std::set<DrawRectCall> draw_rect_calls_; | 98 std::set<DrawRectCall> draw_rect_calls_; |
87 std::set<DrawRRectCall> draw_rrect_calls_; | 99 std::set<DrawRRectCall> draw_rrect_calls_; |
100 int draw_paint_call_count_ = 0; | |
101 SkRect last_clip_bounds_; | |
88 | 102 |
89 DISALLOW_COPY_AND_ASSIGN(MockCanvas); | 103 DISALLOW_COPY_AND_ASSIGN(MockCanvas); |
90 }; | 104 }; |
91 | 105 |
92 // Simple Painter that will be used to test BorderPainter. | 106 // Simple Painter that will be used to test BorderPainter. |
93 class MockPainter : public views::Painter { | 107 class MockPainter : public views::Painter { |
94 public: | 108 public: |
95 MockPainter() {} | 109 MockPainter() {} |
96 | 110 |
97 // Gets the canvas given to the last call to Paint(). | 111 // Gets the canvas given to the last call to Paint(). |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
153 std::unique_ptr<Border> border(NullBorder()); | 167 std::unique_ptr<Border> border(NullBorder()); |
154 EXPECT_FALSE(border); | 168 EXPECT_FALSE(border); |
155 } | 169 } |
156 | 170 |
157 TEST_F(BorderTest, SolidBorder) { | 171 TEST_F(BorderTest, SolidBorder) { |
158 std::unique_ptr<Border> border(CreateSolidBorder(3, SK_ColorBLUE)); | 172 std::unique_ptr<Border> border(CreateSolidBorder(3, SK_ColorBLUE)); |
159 EXPECT_EQ(gfx::Size(6, 6), border->GetMinimumSize()); | 173 EXPECT_EQ(gfx::Size(6, 6), border->GetMinimumSize()); |
160 EXPECT_EQ(gfx::Insets(3, 3, 3, 3), border->GetInsets()); | 174 EXPECT_EQ(gfx::Insets(3, 3, 3, 3), border->GetInsets()); |
161 border->Paint(*view_, canvas_.get()); | 175 border->Paint(*view_, canvas_.get()); |
162 | 176 |
163 std::vector<MockCanvas::DrawRectCall> draw_rect_calls = | 177 gfx::Rect bounds = view_->GetLocalBounds(); |
164 sk_canvas_->draw_rect_calls(); | 178 bounds.Inset(border->GetInsets()); |
165 ASSERT_EQ(4u, draw_rect_calls.size()); | |
166 EXPECT_EQ(SkRect::MakeLTRB(0, 0, 100, 3), draw_rect_calls[0].rect); | |
167 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[0].paint.getColor()); | |
168 EXPECT_EQ(SkRect::MakeLTRB(0, 3, 3, 47), draw_rect_calls[1].rect); | |
169 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[1].paint.getColor()); | |
170 EXPECT_EQ(SkRect::MakeLTRB(0, 47, 100, 50), draw_rect_calls[2].rect); | |
171 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[2].paint.getColor()); | |
172 EXPECT_EQ(SkRect::MakeLTRB(97, 3, 100, 47), draw_rect_calls[3].rect); | |
173 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[3].paint.getColor()); | |
174 | 179 |
175 EXPECT_TRUE(sk_canvas_->draw_rrect_calls().empty()); | 180 EXPECT_EQ(1, sk_canvas_->draw_paint_call_count()); |
Matt Giuca
2017/02/21 23:18:51
Expect that the size of the draw_paint_calls set i
Evan Stade
2017/02/22 01:34:55
Done.
| |
181 EXPECT_EQ(gfx::RectF(bounds), | |
182 gfx::SkRectToRectF(sk_canvas_->last_clip_bounds())); | |
176 } | 183 } |
177 | 184 |
178 TEST_F(BorderTest, RoundedRectBorder) { | 185 TEST_F(BorderTest, RoundedRectBorder) { |
179 std::unique_ptr<Border> border(CreateRoundedRectBorder(3, 4, SK_ColorBLUE)); | 186 std::unique_ptr<Border> border(CreateRoundedRectBorder(3, 4, SK_ColorBLUE)); |
180 EXPECT_EQ(gfx::Size(6, 6), border->GetMinimumSize()); | 187 EXPECT_EQ(gfx::Size(6, 6), border->GetMinimumSize()); |
181 EXPECT_EQ(gfx::Insets(3, 3, 3, 3), border->GetInsets()); | 188 EXPECT_EQ(gfx::Insets(3, 3, 3, 3), border->GetInsets()); |
182 border->Paint(*view_, canvas_.get()); | 189 border->Paint(*view_, canvas_.get()); |
183 | 190 |
184 SkRRect expected_rrect; | 191 SkRRect expected_rrect; |
185 expected_rrect.setRectXY(SkRect::MakeLTRB(1.5, 1.5, 98.5, 48.5), 4, 4); | 192 expected_rrect.setRectXY(SkRect::MakeLTRB(1.5, 1.5, 98.5, 48.5), 4, 4); |
(...skipping 26 matching lines...) Expand all Loading... | |
212 TEST_F(BorderTest, SolidSidedBorder) { | 219 TEST_F(BorderTest, SolidSidedBorder) { |
213 const gfx::Insets kInsets(1, 2, 3, 4); | 220 const gfx::Insets kInsets(1, 2, 3, 4); |
214 | 221 |
215 std::unique_ptr<Border> border( | 222 std::unique_ptr<Border> border( |
216 CreateSolidSidedBorder(kInsets.top(), kInsets.left(), kInsets.bottom(), | 223 CreateSolidSidedBorder(kInsets.top(), kInsets.left(), kInsets.bottom(), |
217 kInsets.right(), SK_ColorBLUE)); | 224 kInsets.right(), SK_ColorBLUE)); |
218 EXPECT_EQ(gfx::Size(6, 4), border->GetMinimumSize()); | 225 EXPECT_EQ(gfx::Size(6, 4), border->GetMinimumSize()); |
219 EXPECT_EQ(kInsets, border->GetInsets()); | 226 EXPECT_EQ(kInsets, border->GetInsets()); |
220 border->Paint(*view_, canvas_.get()); | 227 border->Paint(*view_, canvas_.get()); |
221 | 228 |
222 std::vector<MockCanvas::DrawRectCall> draw_rect_calls = | 229 gfx::Rect bounds = view_->GetLocalBounds(); |
223 sk_canvas_->draw_rect_calls(); | 230 bounds.Inset(border->GetInsets()); |
224 ASSERT_EQ(4u, draw_rect_calls.size()); | |
225 EXPECT_EQ(SkRect::MakeLTRB(0, 0, 100, 1), draw_rect_calls[0].rect); | |
226 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[0].paint.getColor()); | |
227 EXPECT_EQ(SkRect::MakeLTRB(0, 1, 2, 47), draw_rect_calls[1].rect); | |
228 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[1].paint.getColor()); | |
229 EXPECT_EQ(SkRect::MakeLTRB(0, 47, 100, 50), draw_rect_calls[2].rect); | |
230 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[2].paint.getColor()); | |
231 EXPECT_EQ(SkRect::MakeLTRB(96, 1, 100, 47), draw_rect_calls[3].rect); | |
232 EXPECT_EQ(SK_ColorBLUE, draw_rect_calls[3].paint.getColor()); | |
233 | 231 |
234 EXPECT_TRUE(sk_canvas_->draw_rrect_calls().empty()); | 232 EXPECT_EQ(1, sk_canvas_->draw_paint_call_count()); |
233 EXPECT_EQ(gfx::RectF(bounds), | |
234 gfx::SkRectToRectF(sk_canvas_->last_clip_bounds())); | |
235 } | 235 } |
236 | 236 |
237 TEST_F(BorderTest, BorderPainter) { | 237 TEST_F(BorderTest, BorderPainter) { |
238 const gfx::Insets kInsets(1, 2, 3, 4); | 238 const gfx::Insets kInsets(1, 2, 3, 4); |
239 | 239 |
240 std::unique_ptr<MockPainter> painter(new MockPainter()); | 240 std::unique_ptr<MockPainter> painter(new MockPainter()); |
241 MockPainter* painter_ptr = painter.get(); | 241 MockPainter* painter_ptr = painter.get(); |
242 std::unique_ptr<Border> border( | 242 std::unique_ptr<Border> border( |
243 CreateBorderPainter(std::move(painter), kInsets)); | 243 CreateBorderPainter(std::move(painter), kInsets)); |
244 EXPECT_EQ(gfx::Size(60, 40), border->GetMinimumSize()); | 244 EXPECT_EQ(gfx::Size(60, 40), border->GetMinimumSize()); |
245 EXPECT_EQ(kInsets, border->GetInsets()); | 245 EXPECT_EQ(kInsets, border->GetInsets()); |
246 | 246 |
247 border->Paint(*view_, canvas_.get()); | 247 border->Paint(*view_, canvas_.get()); |
248 | 248 |
249 // Expect that the Painter was called with our canvas and the view's size. | 249 // Expect that the Painter was called with our canvas and the view's size. |
250 EXPECT_EQ(canvas_.get(), painter_ptr->given_canvas()); | 250 EXPECT_EQ(canvas_.get(), painter_ptr->given_canvas()); |
251 EXPECT_EQ(view_->size(), painter_ptr->given_size()); | 251 EXPECT_EQ(view_->size(), painter_ptr->given_size()); |
252 } | 252 } |
253 | 253 |
254 } // namespace views | 254 } // namespace views |
OLD | NEW |