OLD | NEW |
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 "chrome/browser/ui/views/tabs/tab.h" | 5 #include "chrome/browser/ui/views/tabs/tab.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <limits> | 8 #include <limits> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
12 #include "base/debug/alias.h" | 12 #include "base/debug/alias.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/profiler/scoped_tracker.h" | 14 #include "base/profiler/scoped_tracker.h" |
15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
16 #include "build/build_config.h" | 16 #include "build/build_config.h" |
17 #include "chrome/browser/themes/theme_properties.h" | 17 #include "chrome/browser/themes/theme_properties.h" |
18 #include "chrome/browser/ui/browser.h" | 18 #include "chrome/browser/ui/browser.h" |
19 #include "chrome/browser/ui/layout_constants.h" | 19 #include "chrome/browser/ui/layout_constants.h" |
20 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" | 20 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" |
21 #include "chrome/browser/ui/tabs/tab_utils.h" | 21 #include "chrome/browser/ui/tabs/tab_utils.h" |
22 #include "chrome/browser/ui/view_ids.h" | 22 #include "chrome/browser/ui/view_ids.h" |
23 #include "chrome/browser/ui/views/tabs/media_indicator_button.h" | 23 #include "chrome/browser/ui/views/tabs/alert_indicator_button.h" |
24 #include "chrome/browser/ui/views/tabs/tab_controller.h" | 24 #include "chrome/browser/ui/views/tabs/tab_controller.h" |
25 #include "chrome/browser/ui/views/touch_uma/touch_uma.h" | 25 #include "chrome/browser/ui/views/touch_uma/touch_uma.h" |
26 #include "chrome/common/chrome_switches.h" | 26 #include "chrome/common/chrome_switches.h" |
27 #include "chrome/grit/generated_resources.h" | 27 #include "chrome/grit/generated_resources.h" |
28 #include "content/public/browser/user_metrics.h" | 28 #include "content/public/browser/user_metrics.h" |
29 #include "grit/components_scaled_resources.h" | 29 #include "grit/components_scaled_resources.h" |
30 #include "grit/components_strings.h" | 30 #include "grit/components_strings.h" |
31 #include "grit/theme_resources.h" | 31 #include "grit/theme_resources.h" |
32 #include "third_party/skia/include/effects/SkGradientShader.h" | 32 #include "third_party/skia/include/effects/SkGradientShader.h" |
33 #include "third_party/skia/include/pathops/SkPathOps.h" | 33 #include "third_party/skia/include/pathops/SkPathOps.h" |
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 closing_(false), | 487 closing_(false), |
488 dragging_(false), | 488 dragging_(false), |
489 detached_(false), | 489 detached_(false), |
490 favicon_hiding_offset_(0), | 490 favicon_hiding_offset_(0), |
491 immersive_loading_step_(0), | 491 immersive_loading_step_(0), |
492 should_display_crashed_favicon_(false), | 492 should_display_crashed_favicon_(false), |
493 pulse_animation_(new gfx::ThrobAnimation(this)), | 493 pulse_animation_(new gfx::ThrobAnimation(this)), |
494 crash_icon_animation_(new FaviconCrashAnimation(this)), | 494 crash_icon_animation_(new FaviconCrashAnimation(this)), |
495 animation_container_(container), | 495 animation_container_(container), |
496 throbber_(nullptr), | 496 throbber_(nullptr), |
497 media_indicator_button_(nullptr), | 497 alert_indicator_button_(nullptr), |
498 close_button_(nullptr), | 498 close_button_(nullptr), |
499 title_(new views::Label()), | 499 title_(new views::Label()), |
500 tab_activated_with_last_tap_down_(false), | 500 tab_activated_with_last_tap_down_(false), |
501 hover_controller_(this), | 501 hover_controller_(this), |
502 showing_icon_(false), | 502 showing_icon_(false), |
503 showing_media_indicator_(false), | 503 showing_alert_indicator_(false), |
504 showing_close_button_(false), | 504 showing_close_button_(false), |
505 button_color_(SK_ColorTRANSPARENT) { | 505 button_color_(SK_ColorTRANSPARENT) { |
506 DCHECK(controller); | 506 DCHECK(controller); |
507 InitTabResources(); | 507 InitTabResources(); |
508 | 508 |
509 // So we get don't get enter/exit on children and don't prematurely stop the | 509 // So we get don't get enter/exit on children and don't prematurely stop the |
510 // hover. | 510 // hover. |
511 set_notify_enter_exit_on_child(true); | 511 set_notify_enter_exit_on_child(true); |
512 | 512 |
513 set_id(VIEW_ID_TAB); | 513 set_id(VIEW_ID_TAB); |
514 | 514 |
515 SetBorder(views::Border::CreateEmptyBorder(GetLayoutInsets(TAB))); | 515 SetBorder(views::Border::CreateEmptyBorder(GetLayoutInsets(TAB))); |
516 | 516 |
517 title_->SetHorizontalAlignment(gfx::ALIGN_TO_HEAD); | 517 title_->SetHorizontalAlignment(gfx::ALIGN_TO_HEAD); |
518 title_->SetElideBehavior(gfx::FADE_TAIL); | 518 title_->SetElideBehavior(gfx::FADE_TAIL); |
519 title_->SetHandlesTooltips(false); | 519 title_->SetHandlesTooltips(false); |
520 title_->SetAutoColorReadabilityEnabled(false); | 520 title_->SetAutoColorReadabilityEnabled(false); |
521 title_->SetText(CoreTabHelper::GetDefaultTitle()); | 521 title_->SetText(CoreTabHelper::GetDefaultTitle()); |
522 AddChildView(title_); | 522 AddChildView(title_); |
523 | 523 |
524 SetEventTargeter( | 524 SetEventTargeter( |
525 scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this))); | 525 scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this))); |
526 | 526 |
527 throbber_ = new ThrobberView(this); | 527 throbber_ = new ThrobberView(this); |
528 throbber_->SetVisible(false); | 528 throbber_->SetVisible(false); |
529 AddChildView(throbber_); | 529 AddChildView(throbber_); |
530 | 530 |
531 media_indicator_button_ = new MediaIndicatorButton(this); | 531 alert_indicator_button_ = new AlertIndicatorButton(this); |
532 AddChildView(media_indicator_button_); | 532 AddChildView(alert_indicator_button_); |
533 | 533 |
534 close_button_ = new TabCloseButton(this); | 534 close_button_ = new TabCloseButton(this); |
535 close_button_->SetAccessibleName( | 535 close_button_->SetAccessibleName( |
536 l10n_util::GetStringUTF16(IDS_ACCNAME_CLOSE)); | 536 l10n_util::GetStringUTF16(IDS_ACCNAME_CLOSE)); |
537 // The normal image is set by OnButtonColorMaybeChanged() because it depends | 537 // The normal image is set by OnButtonColorMaybeChanged() because it depends |
538 // on the current theme and active state. The hovered and pressed images | 538 // on the current theme and active state. The hovered and pressed images |
539 // don't depend on the these, so we can set them here. | 539 // don't depend on the these, so we can set them here. |
540 const gfx::ImageSkia& hovered = gfx::CreateVectorIcon( | 540 const gfx::ImageSkia& hovered = gfx::CreateVectorIcon( |
541 gfx::VectorIconId::TAB_CLOSE_HOVERED_PRESSED, kTabCloseButtonSize, | 541 gfx::VectorIconId::TAB_CLOSE_HOVERED_PRESSED, kTabCloseButtonSize, |
542 SkColorSetRGB(0xDB, 0x44, 0x37)); | 542 SkColorSetRGB(0xDB, 0x44, 0x37)); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 | 590 |
591 Tab::~Tab() { | 591 Tab::~Tab() { |
592 } | 592 } |
593 | 593 |
594 bool Tab::IsActive() const { | 594 bool Tab::IsActive() const { |
595 return controller_->IsActiveTab(this); | 595 return controller_->IsActiveTab(this); |
596 } | 596 } |
597 | 597 |
598 void Tab::ActiveStateChanged() { | 598 void Tab::ActiveStateChanged() { |
599 OnButtonColorMaybeChanged(); | 599 OnButtonColorMaybeChanged(); |
600 media_indicator_button_->UpdateEnabledForMuteToggle(); | 600 alert_indicator_button_->UpdateEnabledForMuteToggle(); |
601 Layout(); | 601 Layout(); |
602 } | 602 } |
603 | 603 |
604 void Tab::MediaStateChanged() { | 604 void Tab::AlertStateChanged() { |
605 Layout(); | 605 Layout(); |
606 } | 606 } |
607 | 607 |
608 bool Tab::IsSelected() const { | 608 bool Tab::IsSelected() const { |
609 return controller_->IsTabSelected(this); | 609 return controller_->IsTabSelected(this); |
610 } | 610 } |
611 | 611 |
612 void Tab::SetData(const TabRendererData& data) { | 612 void Tab::SetData(const TabRendererData& data) { |
613 DCHECK(GetWidget()); | 613 DCHECK(GetWidget()); |
614 | 614 |
(...skipping 13 matching lines...) Expand all Loading... |
628 Browser::FormatTitleForDisplay(&title); | 628 Browser::FormatTitleForDisplay(&title); |
629 } | 629 } |
630 title_->SetText(title); | 630 title_->SetText(title); |
631 | 631 |
632 if (!data_.IsCrashed()) { | 632 if (!data_.IsCrashed()) { |
633 crash_icon_animation_->Stop(); | 633 crash_icon_animation_->Stop(); |
634 should_display_crashed_favicon_ = false; | 634 should_display_crashed_favicon_ = false; |
635 favicon_hiding_offset_ = 0; | 635 favicon_hiding_offset_ = 0; |
636 } else if (!should_display_crashed_favicon_ && | 636 } else if (!should_display_crashed_favicon_ && |
637 !crash_icon_animation_->is_animating()) { | 637 !crash_icon_animation_->is_animating()) { |
638 data_.media_state = TAB_MEDIA_STATE_NONE; | 638 data_.alert_state = TabAlertState::NONE; |
639 crash_icon_animation_->Start(); | 639 crash_icon_animation_->Start(); |
640 } | 640 } |
641 | 641 |
642 if (data_.media_state != old.media_state) | 642 if (data_.alert_state != old.alert_state) |
643 media_indicator_button_->TransitionToMediaState(data_.media_state); | 643 alert_indicator_button_->TransitionToAlertState(data_.alert_state); |
644 | 644 |
645 if (old.pinned != data_.pinned) | 645 if (old.pinned != data_.pinned) |
646 StopPinnedTabTitleAnimation(); | 646 StopPinnedTabTitleAnimation(); |
647 | 647 |
648 DataChanged(old); | 648 DataChanged(old); |
649 | 649 |
650 Layout(); | 650 Layout(); |
651 SchedulePaint(); | 651 SchedulePaint(); |
652 } | 652 } |
653 | 653 |
(...skipping 20 matching lines...) Expand all Loading... |
674 void Tab::StartPinnedTabTitleAnimation() { | 674 void Tab::StartPinnedTabTitleAnimation() { |
675 if (data().pinned) | 675 if (data().pinned) |
676 pinned_title_change_animation_->Start(); | 676 pinned_title_change_animation_->Start(); |
677 } | 677 } |
678 | 678 |
679 void Tab::StopPinnedTabTitleAnimation() { | 679 void Tab::StopPinnedTabTitleAnimation() { |
680 pinned_title_change_animation_->Stop(); | 680 pinned_title_change_animation_->Stop(); |
681 } | 681 } |
682 | 682 |
683 int Tab::GetWidthOfLargestSelectableRegion() const { | 683 int Tab::GetWidthOfLargestSelectableRegion() const { |
684 // Assume the entire region to the left of the media indicator and/or close | 684 // Assume the entire region to the left of the alert indicator and/or close |
685 // buttons is available for click-to-select. If neither are visible, the | 685 // buttons is available for click-to-select. If neither are visible, the |
686 // entire tab region is available. | 686 // entire tab region is available. |
687 const int indicator_left = showing_media_indicator_ ? | 687 const int indicator_left = |
688 media_indicator_button_->x() : width(); | 688 showing_alert_indicator_ ? alert_indicator_button_->x() : width(); |
689 const int close_button_left = showing_close_button_ ? | 689 const int close_button_left = showing_close_button_ ? |
690 close_button_->x() : width(); | 690 close_button_->x() : width(); |
691 return std::min(indicator_left, close_button_left); | 691 return std::min(indicator_left, close_button_left); |
692 } | 692 } |
693 | 693 |
694 // static | 694 // static |
695 gfx::Size Tab::GetMinimumInactiveSize() { | 695 gfx::Size Tab::GetMinimumInactiveSize() { |
696 return gfx::Size(GetLayoutInsets(TAB).width(), GetLayoutConstant(TAB_HEIGHT)); | 696 return gfx::Size(GetLayoutInsets(TAB).width(), GetLayoutConstant(TAB_HEIGHT)); |
697 } | 697 } |
698 | 698 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 } | 768 } |
769 | 769 |
770 void Tab::AnimationEnded(const gfx::Animation* animation) { | 770 void Tab::AnimationEnded(const gfx::Animation* animation) { |
771 SchedulePaint(); | 771 SchedulePaint(); |
772 } | 772 } |
773 | 773 |
774 //////////////////////////////////////////////////////////////////////////////// | 774 //////////////////////////////////////////////////////////////////////////////// |
775 // Tab, views::ButtonListener overrides: | 775 // Tab, views::ButtonListener overrides: |
776 | 776 |
777 void Tab::ButtonPressed(views::Button* sender, const ui::Event& event) { | 777 void Tab::ButtonPressed(views::Button* sender, const ui::Event& event) { |
778 if (!media_indicator_button_ || !media_indicator_button_->visible()) | 778 if (!alert_indicator_button_ || !alert_indicator_button_->visible()) |
779 content::RecordAction(UserMetricsAction("CloseTab_NoMediaIndicator")); | 779 content::RecordAction(UserMetricsAction("CloseTab_NoAlertIndicator")); |
780 else if (media_indicator_button_->enabled()) | 780 else if (alert_indicator_button_->enabled()) |
781 content::RecordAction(UserMetricsAction("CloseTab_MuteToggleAvailable")); | 781 content::RecordAction(UserMetricsAction("CloseTab_MuteToggleAvailable")); |
782 else if (data_.media_state == TAB_MEDIA_STATE_AUDIO_PLAYING) | 782 else if (data_.alert_state == TabAlertState::AUDIO_PLAYING) |
783 content::RecordAction(UserMetricsAction("CloseTab_AudioIndicator")); | 783 content::RecordAction(UserMetricsAction("CloseTab_AudioIndicator")); |
784 else | 784 else |
785 content::RecordAction(UserMetricsAction("CloseTab_RecordingIndicator")); | 785 content::RecordAction(UserMetricsAction("CloseTab_RecordingIndicator")); |
786 | 786 |
787 const CloseTabSource source = | 787 const CloseTabSource source = |
788 (event.type() == ui::ET_MOUSE_RELEASED && | 788 (event.type() == ui::ET_MOUSE_RELEASED && |
789 !(event.flags() & ui::EF_FROM_TOUCH)) ? CLOSE_TAB_FROM_MOUSE | 789 !(event.flags() & ui::EF_FROM_TOUCH)) ? CLOSE_TAB_FROM_MOUSE |
790 : CLOSE_TAB_FROM_TOUCH; | 790 : CLOSE_TAB_FROM_TOUCH; |
791 DCHECK_EQ(close_button_, sender); | 791 DCHECK_EQ(close_button_, sender); |
792 controller_->CloseTab(this, source); | 792 controller_->CloseTab(this, source); |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
954 close_button_->SetPosition( | 954 close_button_->SetPosition( |
955 gfx::Point(close_button_end - close_button_size.width() - left, 0)); | 955 gfx::Point(close_button_end - close_button_size.width() - left, 0)); |
956 const int bottom = height() - close_button_size.height() - top; | 956 const int bottom = height() - close_button_size.height() - top; |
957 const int right = width() - close_button_end; | 957 const int right = width() - close_button_end; |
958 close_button_->SetBorder( | 958 close_button_->SetBorder( |
959 views::Border::CreateEmptyBorder(top, left, bottom, right)); | 959 views::Border::CreateEmptyBorder(top, left, bottom, right)); |
960 close_button_->SizeToPreferredSize(); | 960 close_button_->SizeToPreferredSize(); |
961 } | 961 } |
962 close_button_->SetVisible(showing_close_button_); | 962 close_button_->SetVisible(showing_close_button_); |
963 | 963 |
964 showing_media_indicator_ = ShouldShowMediaIndicator(); | 964 showing_alert_indicator_ = ShouldShowAlertIndicator(); |
965 if (showing_media_indicator_) { | 965 if (showing_alert_indicator_) { |
966 const gfx::Size image_size(media_indicator_button_->GetPreferredSize()); | 966 const gfx::Size image_size(alert_indicator_button_->GetPreferredSize()); |
967 const int right = showing_close_button_ ? | 967 const int right = showing_close_button_ ? |
968 close_button_->x() + close_button_->GetInsets().left() : lb.right(); | 968 close_button_->x() + close_button_->GetInsets().left() : lb.right(); |
969 gfx::Rect bounds( | 969 gfx::Rect bounds( |
970 std::max(lb.x(), right - image_size.width()), | 970 std::max(lb.x(), right - image_size.width()), |
971 lb.y() + (lb.height() - image_size.height() + 1) / 2, | 971 lb.y() + (lb.height() - image_size.height() + 1) / 2, |
972 image_size.width(), | 972 image_size.width(), |
973 image_size.height()); | 973 image_size.height()); |
974 MaybeAdjustLeftForPinnedTab(&bounds); | 974 MaybeAdjustLeftForPinnedTab(&bounds); |
975 media_indicator_button_->SetBoundsRect(bounds); | 975 alert_indicator_button_->SetBoundsRect(bounds); |
976 } | 976 } |
977 media_indicator_button_->SetVisible(showing_media_indicator_); | 977 alert_indicator_button_->SetVisible(showing_alert_indicator_); |
978 | 978 |
979 // Size the title to fill the remaining width and use all available height. | 979 // Size the title to fill the remaining width and use all available height. |
980 const bool show_title = ShouldRenderAsNormalTab(); | 980 const bool show_title = ShouldRenderAsNormalTab(); |
981 if (show_title) { | 981 if (show_title) { |
982 const int title_spacing = GetLayoutConstant(TAB_FAVICON_TITLE_SPACING); | 982 const int title_spacing = GetLayoutConstant(TAB_FAVICON_TITLE_SPACING); |
983 int title_left = showing_icon_ ? | 983 int title_left = showing_icon_ ? |
984 (favicon_bounds_.right() + title_spacing) : start; | 984 (favicon_bounds_.right() + title_spacing) : start; |
985 int title_width = lb.right() - title_left; | 985 int title_width = lb.right() - title_left; |
986 if (showing_media_indicator_) { | 986 if (showing_alert_indicator_) { |
987 title_width = | 987 title_width = |
988 media_indicator_button_->x() - kAfterTitleSpacing - title_left; | 988 alert_indicator_button_->x() - kAfterTitleSpacing - title_left; |
989 } else if (close_button_->visible()) { | 989 } else if (close_button_->visible()) { |
990 // Allow the title to overlay the close button's empty border padding. | 990 // Allow the title to overlay the close button's empty border padding. |
991 title_width = close_button_->x() + close_button_->GetInsets().left() - | 991 title_width = close_button_->x() + close_button_->GetInsets().left() - |
992 kAfterTitleSpacing - title_left; | 992 kAfterTitleSpacing - title_left; |
993 } | 993 } |
994 // The Label will automatically center the font's cap height within the | 994 // The Label will automatically center the font's cap height within the |
995 // provided vertical space. | 995 // provided vertical space. |
996 title_->SetBoundsRect( | 996 title_->SetBoundsRect( |
997 gfx::Rect(title_left, lb.y(), std::max(title_width, 0), lb.height())); | 997 gfx::Rect(title_left, lb.y(), std::max(title_width, 0), lb.height())); |
998 } | 998 } |
999 title_->SetVisible(show_title); | 999 title_->SetVisible(show_title); |
1000 } | 1000 } |
1001 | 1001 |
1002 void Tab::OnThemeChanged() { | 1002 void Tab::OnThemeChanged() { |
1003 LoadTabImages(); | 1003 LoadTabImages(); |
1004 OnButtonColorMaybeChanged(); | 1004 OnButtonColorMaybeChanged(); |
1005 } | 1005 } |
1006 | 1006 |
1007 const char* Tab::GetClassName() const { | 1007 const char* Tab::GetClassName() const { |
1008 return kViewClassName; | 1008 return kViewClassName; |
1009 } | 1009 } |
1010 | 1010 |
1011 bool Tab::GetTooltipText(const gfx::Point& p, base::string16* tooltip) const { | 1011 bool Tab::GetTooltipText(const gfx::Point& p, base::string16* tooltip) const { |
1012 // Note: Anything that affects the tooltip text should be accounted for when | 1012 // Note: Anything that affects the tooltip text should be accounted for when |
1013 // calling TooltipTextChanged() from Tab::DataChanged(). | 1013 // calling TooltipTextChanged() from Tab::DataChanged(). |
1014 *tooltip = chrome::AssembleTabTooltipText(data_.title, data_.media_state); | 1014 *tooltip = chrome::AssembleTabTooltipText(data_.title, data_.alert_state); |
1015 return !tooltip->empty(); | 1015 return !tooltip->empty(); |
1016 } | 1016 } |
1017 | 1017 |
1018 bool Tab::GetTooltipTextOrigin(const gfx::Point& p, gfx::Point* origin) const { | 1018 bool Tab::GetTooltipTextOrigin(const gfx::Point& p, gfx::Point* origin) const { |
1019 origin->set_x(title_->x() + 10); | 1019 origin->set_x(title_->x() + 10); |
1020 origin->set_y(-4); | 1020 origin->set_y(-4); |
1021 return true; | 1021 return true; |
1022 } | 1022 } |
1023 | 1023 |
1024 bool Tab::OnMousePressed(const ui::MouseEvent& event) { | 1024 bool Tab::OnMousePressed(const ui::MouseEvent& event) { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1091 if (closest_tab) | 1091 if (closest_tab) |
1092 controller_->CloseTab(closest_tab, CLOSE_TAB_FROM_MOUSE); | 1092 controller_->CloseTab(closest_tab, CLOSE_TAB_FROM_MOUSE); |
1093 } | 1093 } |
1094 } else if (event.IsOnlyLeftMouseButton() && !event.IsShiftDown() && | 1094 } else if (event.IsOnlyLeftMouseButton() && !event.IsShiftDown() && |
1095 !event.IsControlDown()) { | 1095 !event.IsControlDown()) { |
1096 // If the tab was already selected mouse pressed doesn't change the | 1096 // If the tab was already selected mouse pressed doesn't change the |
1097 // selection. Reset it now to handle the case where multiple tabs were | 1097 // selection. Reset it now to handle the case where multiple tabs were |
1098 // selected. | 1098 // selected. |
1099 controller_->SelectTab(this); | 1099 controller_->SelectTab(this); |
1100 | 1100 |
1101 if (media_indicator_button_ && media_indicator_button_->visible() && | 1101 if (alert_indicator_button_ && alert_indicator_button_->visible() && |
1102 media_indicator_button_->bounds().Contains(event.location())) { | 1102 alert_indicator_button_->bounds().Contains(event.location())) { |
1103 content::RecordAction(UserMetricsAction("TabMediaIndicator_Clicked")); | 1103 content::RecordAction(UserMetricsAction("TabAlertIndicator_Clicked")); |
1104 } | 1104 } |
1105 } | 1105 } |
1106 } | 1106 } |
1107 | 1107 |
1108 void Tab::OnMouseCaptureLost() { | 1108 void Tab::OnMouseCaptureLost() { |
1109 controller_->EndDrag(END_DRAG_CAPTURE_LOST); | 1109 controller_->EndDrag(END_DRAG_CAPTURE_LOST); |
1110 } | 1110 } |
1111 | 1111 |
1112 void Tab::OnMouseEntered(const ui::MouseEvent& event) { | 1112 void Tab::OnMouseEntered(const ui::MouseEvent& event) { |
1113 hover_controller_.Show(views::GlowHoverController::SUBTLE); | 1113 hover_controller_.Show(views::GlowHoverController::SUBTLE); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1177 const int ideal_delta = width() - GetPinnedWidth(); | 1177 const int ideal_delta = width() - GetPinnedWidth(); |
1178 const int ideal_x = (GetPinnedWidth() - bounds->width()) / 2; | 1178 const int ideal_x = (GetPinnedWidth() - bounds->width()) / 2; |
1179 bounds->set_x( | 1179 bounds->set_x( |
1180 bounds->x() + static_cast<int>( | 1180 bounds->x() + static_cast<int>( |
1181 (1 - static_cast<float>(ideal_delta) / | 1181 (1 - static_cast<float>(ideal_delta) / |
1182 static_cast<float>(kPinnedTabExtraWidthToRenderAsNormal)) * | 1182 static_cast<float>(kPinnedTabExtraWidthToRenderAsNormal)) * |
1183 (ideal_x - bounds->x()))); | 1183 (ideal_x - bounds->x()))); |
1184 } | 1184 } |
1185 | 1185 |
1186 void Tab::DataChanged(const TabRendererData& old) { | 1186 void Tab::DataChanged(const TabRendererData& old) { |
1187 if (data().media_state != old.media_state || data().title != old.title) | 1187 if (data().alert_state != old.alert_state || data().title != old.title) |
1188 TooltipTextChanged(); | 1188 TooltipTextChanged(); |
1189 | 1189 |
1190 if (data().blocked == old.blocked) | 1190 if (data().blocked == old.blocked) |
1191 return; | 1191 return; |
1192 | 1192 |
1193 if (data().blocked) | 1193 if (data().blocked) |
1194 StartPulse(); | 1194 StartPulse(); |
1195 else | 1195 else |
1196 StopPulse(); | 1196 StopPulse(); |
1197 } | 1197 } |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1569 if (visible_icons < 3) | 1569 if (visible_icons < 3) |
1570 return visible_icons; | 1570 return visible_icons; |
1571 const int padding = controller_->ShouldHideCloseButtonForInactiveTabs() ? | 1571 const int padding = controller_->ShouldHideCloseButtonForInactiveTabs() ? |
1572 0 : kExtraLeftPaddingToBalanceCloseButtonPadding; | 1572 0 : kExtraLeftPaddingToBalanceCloseButtonPadding; |
1573 return (available_width - padding) / icon_width; | 1573 return (available_width - padding) / icon_width; |
1574 } | 1574 } |
1575 | 1575 |
1576 bool Tab::ShouldShowIcon() const { | 1576 bool Tab::ShouldShowIcon() const { |
1577 return chrome::ShouldTabShowFavicon( | 1577 return chrome::ShouldTabShowFavicon( |
1578 IconCapacity(), data().pinned, IsActive(), data().show_icon, | 1578 IconCapacity(), data().pinned, IsActive(), data().show_icon, |
1579 media_indicator_button_ ? media_indicator_button_->showing_media_state() : | 1579 alert_indicator_button_ ? alert_indicator_button_->showing_alert_state() |
1580 data_.media_state); | 1580 : data_.alert_state); |
1581 } | 1581 } |
1582 | 1582 |
1583 bool Tab::ShouldShowMediaIndicator() const { | 1583 bool Tab::ShouldShowAlertIndicator() const { |
1584 return chrome::ShouldTabShowMediaIndicator( | 1584 return chrome::ShouldTabShowAlertIndicator( |
1585 IconCapacity(), data().pinned, IsActive(), data().show_icon, | 1585 IconCapacity(), data().pinned, IsActive(), data().show_icon, |
1586 media_indicator_button_ ? media_indicator_button_->showing_media_state() : | 1586 alert_indicator_button_ ? alert_indicator_button_->showing_alert_state() |
1587 data_.media_state); | 1587 : data_.alert_state); |
1588 } | 1588 } |
1589 | 1589 |
1590 bool Tab::ShouldShowCloseBox() const { | 1590 bool Tab::ShouldShowCloseBox() const { |
1591 if (!IsActive() && controller_->ShouldHideCloseButtonForInactiveTabs()) | 1591 if (!IsActive() && controller_->ShouldHideCloseButtonForInactiveTabs()) |
1592 return false; | 1592 return false; |
1593 | 1593 |
1594 return chrome::ShouldTabShowCloseButton( | 1594 return chrome::ShouldTabShowCloseButton( |
1595 IconCapacity(), data().pinned, IsActive()); | 1595 IconCapacity(), data().pinned, IsActive()); |
1596 } | 1596 } |
1597 | 1597 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1629 if (!theme_provider) | 1629 if (!theme_provider) |
1630 return; | 1630 return; |
1631 | 1631 |
1632 const SkColor title_color = theme_provider->GetColor(IsActive() ? | 1632 const SkColor title_color = theme_provider->GetColor(IsActive() ? |
1633 ThemeProperties::COLOR_TAB_TEXT : | 1633 ThemeProperties::COLOR_TAB_TEXT : |
1634 ThemeProperties::COLOR_BACKGROUND_TAB_TEXT); | 1634 ThemeProperties::COLOR_BACKGROUND_TAB_TEXT); |
1635 const SkColor new_button_color = SkColorSetA(title_color, 0xA0); | 1635 const SkColor new_button_color = SkColorSetA(title_color, 0xA0); |
1636 if (button_color_ != new_button_color) { | 1636 if (button_color_ != new_button_color) { |
1637 button_color_ = new_button_color; | 1637 button_color_ = new_button_color; |
1638 title_->SetEnabledColor(title_color); | 1638 title_->SetEnabledColor(title_color); |
1639 media_indicator_button_->OnParentTabButtonColorChanged(); | 1639 alert_indicator_button_->OnParentTabButtonColorChanged(); |
1640 const gfx::ImageSkia& close_button_normal_image = gfx::CreateVectorIcon( | 1640 const gfx::ImageSkia& close_button_normal_image = gfx::CreateVectorIcon( |
1641 gfx::VectorIconId::TAB_CLOSE_NORMAL, kTabCloseButtonSize, | 1641 gfx::VectorIconId::TAB_CLOSE_NORMAL, kTabCloseButtonSize, |
1642 button_color_); | 1642 button_color_); |
1643 close_button_->SetImage(views::CustomButton::STATE_NORMAL, | 1643 close_button_->SetImage(views::CustomButton::STATE_NORMAL, |
1644 &close_button_normal_image); | 1644 &close_button_normal_image); |
1645 } | 1645 } |
1646 } | 1646 } |
1647 | 1647 |
1648 void Tab::ScheduleIconPaint() { | 1648 void Tab::ScheduleIconPaint() { |
1649 gfx::Rect bounds = favicon_bounds_; | 1649 gfx::Rect bounds = favicon_bounds_; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1763 inactive_images_.image_c = rb.GetImageSkiaNamed(IDR_TAB_INACTIVE_CENTER); | 1763 inactive_images_.image_c = rb.GetImageSkiaNamed(IDR_TAB_INACTIVE_CENTER); |
1764 inactive_images_.image_r = rb.GetImageSkiaNamed(IDR_TAB_INACTIVE_RIGHT); | 1764 inactive_images_.image_r = rb.GetImageSkiaNamed(IDR_TAB_INACTIVE_RIGHT); |
1765 inactive_images_.l_width = inactive_images_.image_l->width(); | 1765 inactive_images_.l_width = inactive_images_.image_l->width(); |
1766 inactive_images_.r_width = inactive_images_.image_r->width(); | 1766 inactive_images_.r_width = inactive_images_.image_r->width(); |
1767 | 1767 |
1768 mask_images_.image_l = rb.GetImageSkiaNamed(IDR_TAB_ALPHA_LEFT); | 1768 mask_images_.image_l = rb.GetImageSkiaNamed(IDR_TAB_ALPHA_LEFT); |
1769 mask_images_.image_r = rb.GetImageSkiaNamed(IDR_TAB_ALPHA_RIGHT); | 1769 mask_images_.image_r = rb.GetImageSkiaNamed(IDR_TAB_ALPHA_RIGHT); |
1770 mask_images_.l_width = mask_images_.image_l->width(); | 1770 mask_images_.l_width = mask_images_.image_l->width(); |
1771 mask_images_.r_width = mask_images_.image_r->width(); | 1771 mask_images_.r_width = mask_images_.image_r->width(); |
1772 } | 1772 } |
OLD | NEW |