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

Unified Diff: chrome/browser/ui/views/tabs/tab.cc

Issue 1710253003: Misc. Tab-related cleanup. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Better structure for #ifdefs Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/views/tabs/tab.h ('k') | chrome/browser/ui/views/tabs/tab_strip.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/tabs/tab.cc
diff --git a/chrome/browser/ui/views/tabs/tab.cc b/chrome/browser/ui/views/tabs/tab.cc
index 61f2e228fa4c2841013549a1c439ece3db95885f..e816481bce39ad135eba96c39f61538085efdb72 100644
--- a/chrome/browser/ui/views/tabs/tab.cc
+++ b/chrome/browser/ui/views/tabs/tab.cc
@@ -68,9 +68,6 @@ using base::UserMetricsAction;
namespace {
-// How long the pulse throb takes.
-const int kPulseDurationMs = 200;
-
// Width of touch tabs.
const int kTouchWidth = 120;
@@ -93,16 +90,6 @@ const double kSelectedTabOpacity = 0.3;
// Inactive selected tabs have their throb value scaled by this.
const double kSelectedTabThrobScale = 0.95 - kSelectedTabOpacity;
-// Durations for the various parts of the pinned tab title animation.
-const int kPinnedTitleChangeAnimationDuration1MS = 1600;
-const int kPinnedTitleChangeAnimationStart1MS = 0;
-const int kPinnedTitleChangeAnimationEnd1MS = 1900;
-const int kPinnedTitleChangeAnimationDuration2MS = 0;
-const int kPinnedTitleChangeAnimationDuration3MS = 550;
-const int kPinnedTitleChangeAnimationStart3MS = 150;
-const int kPinnedTitleChangeAnimationEnd3MS = 800;
-const int kPinnedTitleChangeAnimationIntervalMS = 40;
-
// Offset from the right edge for the start of the pinned title change
// animation.
const int kPinnedTitleChangeInitialXOffset = 6;
@@ -142,13 +129,6 @@ float GetUnscaledEndcapWidth() {
return GetLayoutInsets(TAB).left() - 0.5f;
}
-// Stop()s |animation| and then deletes it. We do this rather than just deleting
-// so that the delegate is notified before the destruction.
-void StopAndDeleteAnimation(scoped_ptr<gfx::Animation> animation) {
- if (animation)
- animation->Stop();
-}
-
void DrawHighlight(gfx::Canvas* canvas,
const SkPoint& p,
SkScalar radius,
@@ -504,7 +484,7 @@ Tab::ImageCache* Tab::image_cache_ = NULL;
////////////////////////////////////////////////////////////////////////////////
// Tab, public:
-Tab::Tab(TabController* controller)
+Tab::Tab(TabController* controller, gfx::AnimationContainer* container)
: controller_(controller),
closing_(false),
dragging_(false),
@@ -512,6 +492,9 @@ Tab::Tab(TabController* controller)
favicon_hiding_offset_(0),
immersive_loading_step_(0),
should_display_crashed_favicon_(false),
+ pulse_animation_(new gfx::ThrobAnimation(this)),
+ crash_icon_animation_(new FaviconCrashAnimation(this)),
+ animation_container_(container),
throbber_(nullptr),
media_indicator_button_(nullptr),
close_button_(nullptr),
@@ -571,14 +554,43 @@ Tab::Tab(TabController* controller)
AddChildView(close_button_);
set_context_menu_controller(this);
-}
-Tab::~Tab() {
+ const int kPulseDurationMs = 200;
+ pulse_animation_->SetSlideDuration(kPulseDurationMs);
+ pulse_animation_->SetContainer(animation_container_.get());
+
+ const int kPinnedTitleChangeAnimationDuration1MS = 1600;
+ const int kPinnedTitleChangeAnimationStart1MS = 0;
+ const int kPinnedTitleChangeAnimationEnd1MS = 1900;
+ const int kPinnedTitleChangeAnimationDuration2MS = 0;
+ const int kPinnedTitleChangeAnimationDuration3MS = 550;
+ const int kPinnedTitleChangeAnimationStart3MS = 150;
+ const int kPinnedTitleChangeAnimationEnd3MS = 800;
+ const int kPinnedTitleChangeAnimationIntervalMS = 40;
+ gfx::MultiAnimation::Parts parts;
+ parts.push_back(gfx::MultiAnimation::Part(
+ kPinnedTitleChangeAnimationDuration1MS,
+ kPinnedTitleChangeAnimationStart1MS,
+ kPinnedTitleChangeAnimationEnd1MS,
+ gfx::Tween::EASE_OUT));
+ parts.push_back(gfx::MultiAnimation::Part(
+ kPinnedTitleChangeAnimationDuration2MS,
+ gfx::Tween::ZERO));
+ parts.push_back(gfx::MultiAnimation::Part(
+ kPinnedTitleChangeAnimationDuration3MS,
+ kPinnedTitleChangeAnimationStart3MS,
+ kPinnedTitleChangeAnimationEnd3MS,
+ gfx::Tween::EASE_IN));
+ const base::TimeDelta timeout =
+ base::TimeDelta::FromMilliseconds(kPinnedTitleChangeAnimationIntervalMS);
+ pinned_title_change_animation_.reset(new gfx::MultiAnimation(parts, timeout));
+ pinned_title_change_animation_->SetContainer(animation_container_.get());
+ pinned_title_change_animation_->set_delegate(this);
+
+ hover_controller_.SetAnimationContainer(animation_container_.get());
}
-void Tab::SetAnimationContainer(gfx::AnimationContainer* container) {
- animation_container_ = container;
- hover_controller_.SetAnimationContainer(container);
+Tab::~Tab() {
}
bool Tab::IsActive() const {
@@ -619,17 +631,14 @@ void Tab::SetData(const TabRendererData& data) {
}
title_->SetText(title);
- if (data_.IsCrashed()) {
- if (!should_display_crashed_favicon_ && !crash_icon_animation_) {
- data_.media_state = TAB_MEDIA_STATE_NONE;
- crash_icon_animation_.reset(new FaviconCrashAnimation(this));
- crash_icon_animation_->Start();
- }
- } else {
- if (crash_icon_animation_)
- crash_icon_animation_.reset();
+ if (!data_.IsCrashed()) {
+ crash_icon_animation_->Stop();
should_display_crashed_favicon_ = false;
favicon_hiding_offset_ = 0;
+ } else if (!should_display_crashed_favicon_ &&
+ !crash_icon_animation_->is_animating()) {
+ data_.media_state = TAB_MEDIA_STATE_NONE;
+ crash_icon_animation_->Start();
}
if (data_.media_state != old.media_state)
@@ -657,48 +666,20 @@ void Tab::UpdateLoadingAnimation(TabRendererData::NetworkState state) {
}
void Tab::StartPulse() {
- pulse_animation_.reset(new gfx::ThrobAnimation(this));
- pulse_animation_->SetSlideDuration(kPulseDurationMs);
- if (animation_container_.get())
- pulse_animation_->SetContainer(animation_container_.get());
pulse_animation_->StartThrobbing(std::numeric_limits<int>::max());
}
void Tab::StopPulse() {
- StopAndDeleteAnimation(std::move(pulse_animation_));
+ pulse_animation_->Stop();
}
void Tab::StartPinnedTabTitleAnimation() {
- if (!data().pinned)
- return;
- if (!pinned_title_change_animation_) {
- gfx::MultiAnimation::Parts parts;
- parts.push_back(
- gfx::MultiAnimation::Part(kPinnedTitleChangeAnimationDuration1MS,
- gfx::Tween::EASE_OUT));
- parts.push_back(
- gfx::MultiAnimation::Part(kPinnedTitleChangeAnimationDuration2MS,
- gfx::Tween::ZERO));
- parts.push_back(
- gfx::MultiAnimation::Part(kPinnedTitleChangeAnimationDuration3MS,
- gfx::Tween::EASE_IN));
- parts[0].start_time_ms = kPinnedTitleChangeAnimationStart1MS;
- parts[0].end_time_ms = kPinnedTitleChangeAnimationEnd1MS;
- parts[2].start_time_ms = kPinnedTitleChangeAnimationStart3MS;
- parts[2].end_time_ms = kPinnedTitleChangeAnimationEnd3MS;
- base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(
- kPinnedTitleChangeAnimationIntervalMS);
- pinned_title_change_animation_.reset(
- new gfx::MultiAnimation(parts, timeout));
- if (animation_container_.get())
- pinned_title_change_animation_->SetContainer(animation_container_.get());
- pinned_title_change_animation_->set_delegate(this);
- }
- pinned_title_change_animation_->Start();
+ if (data().pinned)
+ pinned_title_change_animation_->Start();
}
void Tab::StopPinnedTabTitleAnimation() {
- StopAndDeleteAnimation(std::move(pinned_title_change_animation_));
+ pinned_title_change_animation_->Stop();
}
int Tab::GetWidthOfLargestSelectableRegion() const {
@@ -780,9 +761,8 @@ float Tab::GetInverseDiagonalSlope() {
void Tab::AnimationProgressed(const gfx::Animation* animation) {
// Ignore if the pulse animation is being performed on active tab because
// it repaints the same image. See |Tab::PaintTabBackground()|.
- if (animation == pulse_animation_.get() && IsActive())
- return;
- SchedulePaint();
+ if ((animation != pulse_animation_.get()) || !IsActive())
+ SchedulePaint();
}
void Tab::AnimationCanceled(const gfx::Animation* animation) {
@@ -797,21 +777,19 @@ void Tab::AnimationEnded(const gfx::Animation* animation) {
// Tab, views::ButtonListener overrides:
void Tab::ButtonPressed(views::Button* sender, const ui::Event& event) {
- if (media_indicator_button_ && media_indicator_button_->visible()) {
- if (media_indicator_button_->enabled())
- content::RecordAction(UserMetricsAction("CloseTab_MuteToggleAvailable"));
- else if (data_.media_state == TAB_MEDIA_STATE_AUDIO_PLAYING)
- content::RecordAction(UserMetricsAction("CloseTab_AudioIndicator"));
- else
- content::RecordAction(UserMetricsAction("CloseTab_RecordingIndicator"));
- } else {
+ if (!media_indicator_button_ || !media_indicator_button_->visible())
content::RecordAction(UserMetricsAction("CloseTab_NoMediaIndicator"));
- }
+ else if (media_indicator_button_->enabled())
+ content::RecordAction(UserMetricsAction("CloseTab_MuteToggleAvailable"));
+ else if (data_.media_state == TAB_MEDIA_STATE_AUDIO_PLAYING)
+ content::RecordAction(UserMetricsAction("CloseTab_AudioIndicator"));
+ else
+ content::RecordAction(UserMetricsAction("CloseTab_RecordingIndicator"));
const CloseTabSource source =
(event.type() == ui::ET_MOUSE_RELEASED &&
- (event.flags() & ui::EF_FROM_TOUCH) == 0) ? CLOSE_TAB_FROM_MOUSE :
- CLOSE_TAB_FROM_TOUCH;
+ !(event.flags() & ui::EF_FROM_TOUCH)) ? CLOSE_TAB_FROM_MOUSE
+ : CLOSE_TAB_FROM_TOUCH;
DCHECK_EQ(close_button_, sender);
controller_->CloseTab(this, source);
if (event.type() == ui::ET_GESTURE_TAP)
@@ -1230,9 +1208,9 @@ void Tab::PaintTab(gfx::Canvas* canvas) {
void Tab::PaintImmersiveTab(gfx::Canvas* canvas) {
// Use transparency for the draw-attention animation.
int alpha = 255;
- if (pulse_animation_ && pulse_animation_->is_animating() && !data().pinned) {
+ if (pulse_animation_->is_animating() && !data().pinned) {
alpha = pulse_animation_->CurrentValueBetween(
- 255, static_cast<int>(255 * kImmersiveTabMinThrobOpacity));
+ 255, gfx::ToRoundedInt(255 * kImmersiveTabMinThrobOpacity));
}
// Draw a gray rectangle to represent the tab. This works for pinned tabs as
@@ -1280,8 +1258,7 @@ void Tab::PaintTabBackground(gfx::Canvas* canvas) {
PaintTabBackgroundUsingFillId(canvas, true, kActiveTabFillId,
has_custom_image, y_offset);
} else {
- if (pinned_title_change_animation_ &&
- pinned_title_change_animation_->is_animating())
+ if (pinned_title_change_animation_->is_animating())
PaintInactiveTabBackgroundWithTitleChange(canvas);
else
PaintInactiveTabBackground(canvas);
@@ -1626,9 +1603,8 @@ double Tab::GetThrobValue() {
// Showing both the pulse and title change animation at the same time is too
// much.
- if (pulse_animation_ && pulse_animation_->is_animating() &&
- (!pinned_title_change_animation_ ||
- !pinned_title_change_animation_->is_animating())) {
+ if (pulse_animation_->is_animating() &&
+ !pinned_title_change_animation_->is_animating()) {
val += pulse_animation_->GetCurrentValue() * offset;
} else if (hover_controller_.ShouldDraw()) {
val += hover_controller_.GetAnimationValue() * offset;
@@ -1670,7 +1646,7 @@ void Tab::ScheduleIconPaint() {
return;
// Extends the area to the bottom when the crash animation is in progress.
- if (crash_icon_animation_)
+ if (crash_icon_animation_->is_animating())
bounds.set_height(height() - bounds.y());
bounds.set_x(GetMirroredXForRect(bounds));
SchedulePaintInRect(bounds);
« no previous file with comments | « chrome/browser/ui/views/tabs/tab.h ('k') | chrome/browser/ui/views/tabs/tab_strip.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698