Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Side by Side Diff: ash/system/user/tray_user.cc

Issue 24883002: Uses and returns the fractional width in text eliding (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix round-down problems Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ash/system/user/tray_user.h" 5 #include "ash/system/user/tray_user.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <climits> 8 #include <climits>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 } 533 }
534 534
535 void PublicAccountUserDetails::CalculatePreferredSize(SystemTrayItem* owner, 535 void PublicAccountUserDetails::CalculatePreferredSize(SystemTrayItem* owner,
536 int used_width) { 536 int used_width) {
537 const gfx::Font font; 537 const gfx::Font font;
538 const gfx::Size link_size = learn_more_->GetPreferredSize(); 538 const gfx::Size link_size = learn_more_->GetPreferredSize();
539 const int space_width = font.GetStringWidth(ASCIIToUTF16(" ")); 539 const int space_width = font.GetStringWidth(ASCIIToUTF16(" "));
540 const gfx::Insets insets = GetInsets(); 540 const gfx::Insets insets = GetInsets();
541 views::TrayBubbleView* bubble_view = 541 views::TrayBubbleView* bubble_view =
542 owner->system_tray()->GetSystemBubble()->bubble_view(); 542 owner->system_tray()->GetSystemBubble()->bubble_view();
543 int min_width = std::max( 543 float min_width = std::max(
544 link_size.width(), 544 link_size.width(),
545 bubble_view->GetPreferredSize().width() - (used_width + insets.width())); 545 bubble_view->GetPreferredSize().width() - (used_width + insets.width()));
546 int max_width = std::min( 546 float max_width = std::min<float>(
547 font.GetStringWidth(text_) + space_width + link_size.width(), 547 font.GetStringWidth(text_) + space_width + link_size.width(),
548 bubble_view->GetMaximumSize().width() - (used_width + insets.width())); 548 bubble_view->GetMaximumSize().width() - (used_width + insets.width()));
549 // Do a binary search for the minimum width that ensures no more than three 549 // Do a binary search for the minimum width that ensures no more than three
550 // lines are needed. The lower bound is the minimum of the current bubble 550 // lines are needed. The lower bound is the minimum of the current bubble
551 // width and the width of the link (as no wrapping is permitted inside the 551 // width and the width of the link (as no wrapping is permitted inside the
552 // link). The upper bound is the maximum of the largest allowed bubble width 552 // link). The upper bound is the maximum of the largest allowed bubble width
553 // and the sum of the label text and link widths when put on a single line. 553 // and the sum of the label text and link widths when put on a single line.
554 std::vector<base::string16> lines; 554 std::vector<base::string16> lines;
555 while (min_width < max_width) { 555 while (min_width < max_width) {
556 lines.clear(); 556 lines.clear();
557 const int width = (min_width + max_width) / 2; 557 const float width = (min_width + max_width) / 2;
558 const bool too_narrow = gfx::ElideRectangleText( 558 const bool too_narrow = gfx::ElideRectangleText(
559 text_, font, width, INT_MAX, gfx::TRUNCATE_LONG_WORDS, &lines) != 0; 559 text_, font, width, FLT_MAX, gfx::TRUNCATE_LONG_WORDS, &lines) != 0;
560 int line_count = lines.size(); 560 int line_count = lines.size();
561 if (!too_narrow && line_count == 3 && 561 if (!too_narrow && line_count == 3 &&
562 width - font.GetStringWidth(lines.back()) <= 562 width - font.GetStringWidth(lines.back()) <=
563 space_width + link_size.width()) { 563 space_width + link_size.width()) {
564 ++line_count; 564 ++line_count;
565 } 565 }
566 if (too_narrow || line_count > 3) 566 if (too_narrow || line_count > 3)
567 min_width = width + 1; 567 min_width = width + 1;
568 else 568 else
569 max_width = width; 569 max_width = width;
570 } 570 }
571 571
572 // Calculate the corresponding height and set the preferred size. 572 // Calculate the corresponding height and set the preferred size.
573 lines.clear(); 573 lines.clear();
574 gfx::ElideRectangleText( 574 gfx::ElideRectangleText(
575 text_, font, min_width, INT_MAX, gfx::TRUNCATE_LONG_WORDS, &lines); 575 text_, font, min_width, FLT_MAX, gfx::TRUNCATE_LONG_WORDS, &lines);
576 int line_count = lines.size(); 576 int line_count = lines.size();
577 if (min_width - font.GetStringWidth(lines.back()) <= 577 if (min_width - font.GetStringWidth(lines.back()) <=
578 space_width + link_size.width()) { 578 space_width + link_size.width()) {
579 ++line_count; 579 ++line_count;
580 } 580 }
581 const int line_height = font.GetHeight(); 581 const int line_height = font.GetHeight();
582 const int link_extra_height = std::max( 582 const int link_extra_height = std::max(
583 link_size.height() - learn_more_->GetInsets().top() - line_height, 0); 583 link_size.height() - learn_more_->GetInsets().top() - line_height, 0);
584 preferred_size_ = gfx::Size( 584 preferred_size_ = gfx::Size(
585 min_width + insets.width(), 585 std::ceil(min_width + insets.width()),
586 line_count * line_height + link_extra_height + insets.height()); 586 line_count * line_height + link_extra_height + insets.height());
587 587
588 bubble_view->SetWidth(preferred_size_.width() + used_width); 588 bubble_view->SetWidth(preferred_size_.width() + used_width);
589 } 589 }
590 590
591 UserCard::UserCard(views::ButtonListener* listener, bool active_user) 591 UserCard::UserCard(views::ButtonListener* listener, bool active_user)
592 : CustomButton(listener), 592 : CustomButton(listener),
593 is_active_user_(active_user), 593 is_active_user_(active_user),
594 button_hovered_(false), 594 button_hovered_(false),
595 show_border_(false) { 595 show_border_(false) {
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 kUserIconLargeSize : kUserIconSize; 1295 kUserIconLargeSize : kUserIconSize;
1296 1296
1297 avatar_->SetImage( 1297 avatar_->SetImage(
1298 ash::Shell::GetInstance()->session_state_delegate()->GetUserImage( 1298 ash::Shell::GetInstance()->session_state_delegate()->GetUserImage(
1299 multiprofile_index_), 1299 multiprofile_index_),
1300 gfx::Size(icon_size, icon_size)); 1300 gfx::Size(icon_size, icon_size));
1301 } 1301 }
1302 1302
1303 } // namespace internal 1303 } // namespace internal
1304 } // namespace ash 1304 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698