OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/controls/styled_label.h" | 5 #include "ui/views/controls/styled_label.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <string> | 10 #include <string> |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 EXPECT_EQ(label_preferred_size.height() * 2, | 222 EXPECT_EQ(label_preferred_size.height() * 2, |
223 pref_height - styled()->GetInsets().height()); | 223 pref_height - styled()->GetInsets().height()); |
224 | 224 |
225 styled()->SetBounds(0, 0, label_preferred_size.width(), pref_height); | 225 styled()->SetBounds(0, 0, label_preferred_size.width(), pref_height); |
226 styled()->Layout(); | 226 styled()->Layout(); |
227 ASSERT_EQ(2, styled()->child_count()); | 227 ASSERT_EQ(2, styled()->child_count()); |
228 EXPECT_EQ(0, styled()->child_at(0)->x()); | 228 EXPECT_EQ(0, styled()->child_at(0)->x()); |
229 EXPECT_EQ(0, styled()->child_at(1)->x()); | 229 EXPECT_EQ(0, styled()->child_at(1)->x()); |
230 } | 230 } |
231 | 231 |
232 TEST_F(StyledLabelTest, StyledRangeUnderlined) { | 232 // TODO(mboc): Linux has never supported UNDERLINE, only virtually. Fix this. |
| 233 #if defined(OS_LINUX) |
| 234 #define MAYBE_StyledRangeUnderlined DISABLED_StyledRangeUnderlined |
| 235 #else |
| 236 #define MAYBE_StyledRangeUnderlined StyledRangeUnderlined |
| 237 #endif |
| 238 TEST_F(StyledLabelTest, MAYBE_StyledRangeUnderlined) { |
233 const std::string text("This is a test block of text, "); | 239 const std::string text("This is a test block of text, "); |
234 const std::string underlined_text("and this should be undelined"); | 240 const std::string underlined_text("and this should be undelined"); |
235 InitStyledLabel(text + underlined_text); | 241 InitStyledLabel(text + underlined_text); |
236 StyledLabel::RangeStyleInfo style_info; | 242 StyledLabel::RangeStyleInfo style_info; |
237 style_info.font_style = gfx::Font::UNDERLINE; | 243 style_info.font_style = gfx::Font::UNDERLINE; |
238 styled()->AddStyleRange( | 244 styled()->AddStyleRange( |
239 gfx::Range(static_cast<uint32_t>(text.size()), | 245 gfx::Range(static_cast<uint32_t>(text.size()), |
240 static_cast<uint32_t>(text.size() + underlined_text.size())), | 246 static_cast<uint32_t>(text.size() + underlined_text.size())), |
241 style_info); | 247 style_info); |
242 | 248 |
243 styled()->SetBounds(0, 0, 1000, 1000); | 249 styled()->SetBounds(0, 0, 1000, 1000); |
244 styled()->Layout(); | 250 styled()->Layout(); |
245 | 251 |
246 ASSERT_EQ(2, styled()->child_count()); | 252 ASSERT_EQ(2, styled()->child_count()); |
247 ASSERT_EQ(std::string(Label::kViewClassName), | 253 ASSERT_EQ(std::string(Label::kViewClassName), |
248 styled()->child_at(1)->GetClassName()); | 254 styled()->child_at(1)->GetClassName()); |
249 EXPECT_EQ( | 255 EXPECT_EQ( |
250 gfx::Font::UNDERLINE, | 256 gfx::Font::UNDERLINE, |
251 static_cast<Label*>(styled()->child_at(1))->font_list().GetFontStyle()); | 257 static_cast<Label*>(styled()->child_at(1))->font_list().GetFontStyle()); |
252 } | 258 } |
253 | 259 |
254 TEST_F(StyledLabelTest, StyledRangeBold) { | 260 TEST_F(StyledLabelTest, StyledRangeBold) { |
255 const std::string bold_text( | 261 const std::string bold_text( |
256 "This is a block of text whose style will be set to BOLD in the test"); | 262 "This is a block of text whose style will be set to BOLD in the test"); |
257 const std::string text(" normal text"); | 263 const std::string text(" normal text"); |
258 InitStyledLabel(bold_text + text); | 264 InitStyledLabel(bold_text + text); |
259 | 265 |
260 StyledLabel::RangeStyleInfo style_info; | 266 StyledLabel::RangeStyleInfo style_info; |
261 style_info.font_style = gfx::Font::BOLD; | 267 style_info.weight = gfx::Font::Weight::BOLD; |
262 styled()->AddStyleRange( | 268 styled()->AddStyleRange( |
263 gfx::Range(0u, static_cast<uint32_t>(bold_text.size())), style_info); | 269 gfx::Range(0u, static_cast<uint32_t>(bold_text.size())), style_info); |
264 | 270 |
265 // Calculate the bold text width if it were a pure label view, both with bold | 271 // Calculate the bold text width if it were a pure label view, both with bold |
266 // and normal style. | 272 // and normal style. |
267 Label label(ASCIIToUTF16(bold_text)); | 273 Label label(ASCIIToUTF16(bold_text)); |
268 const gfx::Size normal_label_size = label.GetPreferredSize(); | 274 const gfx::Size normal_label_size = label.GetPreferredSize(); |
269 label.SetFontList(label.font_list().DeriveWithStyle(gfx::Font::BOLD)); | 275 label.SetFontList( |
| 276 label.font_list().DeriveWithWeight(gfx::Font::Weight::BOLD)); |
270 const gfx::Size bold_label_size = label.GetPreferredSize(); | 277 const gfx::Size bold_label_size = label.GetPreferredSize(); |
271 | 278 |
272 ASSERT_GE(bold_label_size.width(), normal_label_size.width()); | 279 ASSERT_GE(bold_label_size.width(), normal_label_size.width()); |
273 | 280 |
274 // Set the width so |bold_text| doesn't fit on a single line with bold style, | 281 // Set the width so |bold_text| doesn't fit on a single line with bold style, |
275 // but does with normal font style. | 282 // but does with normal font style. |
276 int styled_width = (normal_label_size.width() + bold_label_size.width()) / 2; | 283 int styled_width = (normal_label_size.width() + bold_label_size.width()) / 2; |
277 int pref_height = styled()->GetHeightForWidth(styled_width); | 284 int pref_height = styled()->GetHeightForWidth(styled_width); |
278 | 285 |
279 // Sanity check that |bold_text| with normal font style would fit on a single | 286 // Sanity check that |bold_text| with normal font style would fit on a single |
280 // line in a styled label with width |styled_width|. | 287 // line in a styled label with width |styled_width|. |
281 StyledLabel unstyled(ASCIIToUTF16(bold_text), this); | 288 StyledLabel unstyled(ASCIIToUTF16(bold_text), this); |
282 unstyled.SetBounds(0, 0, styled_width, pref_height); | 289 unstyled.SetBounds(0, 0, styled_width, pref_height); |
283 unstyled.Layout(); | 290 unstyled.Layout(); |
284 EXPECT_EQ(1, unstyled.child_count()); | 291 EXPECT_EQ(1, unstyled.child_count()); |
285 | 292 |
286 styled()->SetBounds(0, 0, styled_width, pref_height); | 293 styled()->SetBounds(0, 0, styled_width, pref_height); |
287 styled()->Layout(); | 294 styled()->Layout(); |
288 | 295 |
289 ASSERT_EQ(3, styled()->child_count()); | 296 ASSERT_EQ(3, styled()->child_count()); |
290 | 297 |
291 // The bold text should be broken up into two parts. | 298 // The bold text should be broken up into two parts. |
292 ASSERT_EQ(std::string(Label::kViewClassName), | 299 ASSERT_EQ(std::string(Label::kViewClassName), |
293 styled()->child_at(0)->GetClassName()); | 300 styled()->child_at(0)->GetClassName()); |
294 EXPECT_EQ( | 301 EXPECT_EQ( |
295 gfx::Font::BOLD, | 302 gfx::Font::Weight::BOLD, |
296 static_cast<Label*>(styled()->child_at(0))->font_list().GetFontStyle()); | 303 static_cast<Label*>(styled()->child_at(0))->font_list().GetFontWeight()); |
297 ASSERT_EQ(std::string(Label::kViewClassName), | 304 ASSERT_EQ(std::string(Label::kViewClassName), |
298 styled()->child_at(1)->GetClassName()); | 305 styled()->child_at(1)->GetClassName()); |
299 EXPECT_EQ( | 306 EXPECT_EQ( |
300 gfx::Font::BOLD, | 307 gfx::Font::Weight::BOLD, |
301 static_cast<Label*>(styled()->child_at(1))->font_list().GetFontStyle()); | 308 static_cast<Label*>(styled()->child_at(1))->font_list().GetFontWeight()); |
302 ASSERT_EQ(std::string(Label::kViewClassName), | 309 ASSERT_EQ(std::string(Label::kViewClassName), |
303 styled()->child_at(2)->GetClassName()); | 310 styled()->child_at(2)->GetClassName()); |
304 EXPECT_EQ( | 311 EXPECT_EQ( |
305 gfx::Font::NORMAL, | 312 gfx::Font::NORMAL, |
306 static_cast<Label*>(styled()->child_at(2))->font_list().GetFontStyle()); | 313 static_cast<Label*>(styled()->child_at(2))->font_list().GetFontStyle()); |
307 | 314 |
308 // The second bold part should start on a new line. | 315 // The second bold part should start on a new line. |
309 EXPECT_EQ(0, styled()->child_at(0)->x()); | 316 EXPECT_EQ(0, styled()->child_at(0)->x()); |
310 EXPECT_EQ(0, styled()->child_at(1)->x()); | 317 EXPECT_EQ(0, styled()->child_at(1)->x()); |
311 EXPECT_EQ(styled()->child_at(1)->bounds().right(), | 318 EXPECT_EQ(styled()->child_at(1)->bounds().right(), |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 // all controls should be recreated | 506 // all controls should be recreated |
500 styled()->SetText(another_text); | 507 styled()->SetText(another_text); |
501 int updated_height = styled()->GetHeightForWidth(styled()->width()); | 508 int updated_height = styled()->GetHeightForWidth(styled()->width()); |
502 EXPECT_NE(updated_height, real_height); | 509 EXPECT_NE(updated_height, real_height); |
503 View* first_child_after_text_update = styled()->has_children() ? | 510 View* first_child_after_text_update = styled()->has_children() ? |
504 styled()->child_at(0) : nullptr; | 511 styled()->child_at(0) : nullptr; |
505 EXPECT_NE(first_child_after_text_update, first_child_after_layout); | 512 EXPECT_NE(first_child_after_text_update, first_child_after_layout); |
506 } | 513 } |
507 | 514 |
508 } // namespace views | 515 } // namespace views |
OLD | NEW |