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

Side by Side Diff: chrome/browser/views/tabs/tab_renderer.cc

Issue 1961001: Refactors animation to allow for cleaner subclassing. I'm doing this (Closed)
Patch Set: Incorporated review feedback Created 10 years, 7 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
« no previous file with comments | « chrome/browser/views/tabs/side_tab.cc ('k') | chrome/browser/views/tabs/tab_strip.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/views/tabs/tab_renderer.h" 5 #include "chrome/browser/views/tabs/tab_renderer.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "app/animation_container.h" 9 #include "app/animation_container.h"
10 #include "app/l10n_util.h" 10 #include "app/l10n_util.h"
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 private: 215 private:
216 DISALLOW_COPY_AND_ASSIGN(TabCloseButton); 216 DISALLOW_COPY_AND_ASSIGN(TabCloseButton);
217 }; 217 };
218 218
219 } // namespace 219 } // namespace
220 220
221 //////////////////////////////////////////////////////////////////////////////// 221 ////////////////////////////////////////////////////////////////////////////////
222 // FaviconCrashAnimation 222 // FaviconCrashAnimation
223 // 223 //
224 // A custom animation subclass to manage the favicon crash animation. 224 // A custom animation subclass to manage the favicon crash animation.
225 class TabRenderer::FavIconCrashAnimation : public Animation, 225 class TabRenderer::FavIconCrashAnimation : public LinearAnimation,
226 public AnimationDelegate { 226 public AnimationDelegate {
227 public: 227 public:
228 explicit FavIconCrashAnimation(TabRenderer* target) 228 explicit FavIconCrashAnimation(TabRenderer* target)
229 : ALLOW_THIS_IN_INITIALIZER_LIST(Animation(1000, 25, this)), 229 : ALLOW_THIS_IN_INITIALIZER_LIST(LinearAnimation(1000, 25, this)),
230 target_(target) { 230 target_(target) {
231 } 231 }
232 virtual ~FavIconCrashAnimation() {} 232 virtual ~FavIconCrashAnimation() {}
233 233
234 // Animation overrides: 234 // Animation overrides:
235 virtual void AnimateToState(double state) { 235 virtual void AnimateToState(double state) {
236 const double kHidingOffset = 27; 236 const double kHidingOffset = 27;
237 237
238 if (state < .5) { 238 if (state < .5) {
239 target_->SetFavIconHidingOffset( 239 target_->SetFavIconHidingOffset(
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 387
388 SchedulePaint(); 388 SchedulePaint();
389 } 389 }
390 390
391 void TabRenderer::StartPulse() { 391 void TabRenderer::StartPulse() {
392 pulse_animation_->Reset(); 392 pulse_animation_->Reset();
393 pulse_animation_->StartThrobbing(std::numeric_limits<int>::max()); 393 pulse_animation_->StartThrobbing(std::numeric_limits<int>::max());
394 } 394 }
395 395
396 void TabRenderer::StopPulse() { 396 void TabRenderer::StopPulse() {
397 if (pulse_animation_->IsAnimating()) 397 pulse_animation_->Stop();
398 pulse_animation_->Stop();
399 } 398 }
400 399
401 void TabRenderer::StartMiniTabTitleAnimation() { 400 void TabRenderer::StartMiniTabTitleAnimation() {
402 if (!mini_title_animation_.get()) { 401 if (!mini_title_animation_.get()) {
403 mini_title_animation_.reset(new ThrobAnimation(this)); 402 mini_title_animation_.reset(new ThrobAnimation(this));
404 mini_title_animation_->SetThrobDuration(kMiniTitleChangeThrobDuration); 403 mini_title_animation_->SetThrobDuration(kMiniTitleChangeThrobDuration);
405 } 404 }
406 405
407 if (!mini_title_animation_->IsAnimating()) { 406 if (!mini_title_animation_->is_animating()) {
408 mini_title_animation_->StartThrobbing(2); 407 mini_title_animation_->StartThrobbing(2);
409 } else if (mini_title_animation_->cycles_remaining() <= 2) { 408 } else if (mini_title_animation_->cycles_remaining() <= 2) {
410 // The title changed while we're already animating. Add at most one more 409 // The title changed while we're already animating. Add at most one more
411 // cycle. This is done in an attempt to smooth out pages that continuously 410 // cycle. This is done in an attempt to smooth out pages that continuously
412 // change the title. 411 // change the title.
413 mini_title_animation_->set_cycles_remaining( 412 mini_title_animation_->set_cycles_remaining(
414 mini_title_animation_->cycles_remaining() + 2); 413 mini_title_animation_->cycles_remaining() + 2);
415 } 414 }
416 } 415 }
417 416
(...skipping 24 matching lines...) Expand all
442 } else { 441 } else {
443 if (!data_.favicon.isNull()) { 442 if (!data_.favicon.isNull()) {
444 // TODO(pkasting): Use code in tab_icon_view.cc:PaintIcon() (or switch 443 // TODO(pkasting): Use code in tab_icon_view.cc:PaintIcon() (or switch
445 // to using that class to render the favicon). 444 // to using that class to render the favicon).
446 int x = favicon_bounds_.x(); 445 int x = favicon_bounds_.x();
447 int y = favicon_bounds_.y() + fav_icon_hiding_offset_; 446 int y = favicon_bounds_.y() + fav_icon_hiding_offset_;
448 // TODO(sky): this isn't right for app tabs, but we're redoing this 447 // TODO(sky): this isn't right for app tabs, but we're redoing this
449 // effect separately. 448 // effect separately.
450 int size = data_.favicon.width(); 449 int size = data_.favicon.width();
451 if (mini() && mini_title_animation_.get() && 450 if (mini() && mini_title_animation_.get() &&
452 mini_title_animation_->IsAnimating()) { 451 mini_title_animation_->is_animating()) {
453 int throb_size = mini_title_animation_->CurrentValueBetween( 452 int throb_size = mini_title_animation_->CurrentValueBetween(
454 size, kMiniTitleChangeMaxFaviconSize); 453 size, kMiniTitleChangeMaxFaviconSize);
455 x -= (throb_size - size) / 2; 454 x -= (throb_size - size) / 2;
456 y -= (throb_size - size) / 2; 455 y -= (throb_size - size) / 2;
457 size = throb_size; 456 size = throb_size;
458 } 457 }
459 canvas->DrawBitmapInt(data_.favicon, 0, 0, 458 canvas->DrawBitmapInt(data_.favicon, 0, 0,
460 data_.favicon.width(), 459 data_.favicon.width(),
461 data_.favicon.height(), 460 data_.favicon.height(),
462 x, y, size, size, 461 x, y, size, size,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 } 499 }
501 500
502 //////////////////////////////////////////////////////////////////////////////// 501 ////////////////////////////////////////////////////////////////////////////////
503 // TabRenderer, protected: 502 // TabRenderer, protected:
504 503
505 std::wstring TabRenderer::GetTitle() const { 504 std::wstring TabRenderer::GetTitle() const {
506 return UTF16ToWideHack(data_.title); 505 return UTF16ToWideHack(data_.title);
507 } 506 }
508 507
509 void TabRenderer::OnMouseEntered(const views::MouseEvent& e) { 508 void TabRenderer::OnMouseEntered(const views::MouseEvent& e) {
510 hover_animation_->SetTweenType(SlideAnimation::EASE_OUT); 509 hover_animation_->SetTweenType(Tween::EASE_OUT);
511 hover_animation_->Show(); 510 hover_animation_->Show();
512 } 511 }
513 512
514 void TabRenderer::OnMouseExited(const views::MouseEvent& e) { 513 void TabRenderer::OnMouseExited(const views::MouseEvent& e) {
515 hover_animation_->SetTweenType(SlideAnimation::EASE_IN); 514 hover_animation_->SetTweenType(Tween::EASE_IN);
516 hover_animation_->Hide(); 515 hover_animation_->Hide();
517 } 516 }
518 517
519 //////////////////////////////////////////////////////////////////////////////// 518 ////////////////////////////////////////////////////////////////////////////////
520 // TabRenderer, views::View overrides: 519 // TabRenderer, views::View overrides:
521 520
522 void TabRenderer::Paint(gfx::Canvas* canvas) { 521 void TabRenderer::Paint(gfx::Canvas* canvas) {
523 if (data_.render_as_new_tab) { 522 if (data_.render_as_new_tab) {
524 if (UILayoutIsRightToLeft()) { 523 if (UILayoutIsRightToLeft()) {
525 canvas->TranslateInt(width(), 0); 524 canvas->TranslateInt(width(), 0);
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 922
924 bool TabRenderer::ShouldShowCloseBox() const { 923 bool TabRenderer::ShouldShowCloseBox() const {
925 // The selected tab never clips close button. 924 // The selected tab never clips close button.
926 return !mini() && (IsSelected() || IconCapacity() >= 3); 925 return !mini() && (IsSelected() || IconCapacity() >= 3);
927 } 926 }
928 927
929 double TabRenderer::GetThrobValue() { 928 double TabRenderer::GetThrobValue() {
930 if (data_.alpha != 1) 929 if (data_.alpha != 1)
931 return data_.alpha; 930 return data_.alpha;
932 931
933 if (pulse_animation_->IsAnimating()) 932 if (pulse_animation_->is_animating())
934 return pulse_animation_->GetCurrentValue() * kHoverOpacity; 933 return pulse_animation_->GetCurrentValue() * kHoverOpacity;
935 934
936 return hover_animation_.get() ? 935 return hover_animation_.get() ?
937 kHoverOpacity * hover_animation_->GetCurrentValue() : 0; 936 kHoverOpacity * hover_animation_->GetCurrentValue() : 0;
938 } 937 }
939 938
940 //////////////////////////////////////////////////////////////////////////////// 939 ////////////////////////////////////////////////////////////////////////////////
941 // TabRenderer, private: 940 // TabRenderer, private:
942 941
943 void TabRenderer::StartCrashAnimation() { 942 void TabRenderer::StartCrashAnimation() {
944 if (!crash_animation_) 943 if (!crash_animation_)
945 crash_animation_ = new FavIconCrashAnimation(this); 944 crash_animation_ = new FavIconCrashAnimation(this);
946 crash_animation_->Stop(); 945 crash_animation_->Stop();
947 crash_animation_->Start(); 946 crash_animation_->Start();
948 } 947 }
949 948
950 void TabRenderer::StopCrashAnimation() { 949 void TabRenderer::StopCrashAnimation() {
951 if (!crash_animation_) 950 if (!crash_animation_)
952 return; 951 return;
953 crash_animation_->Stop(); 952 crash_animation_->Stop();
954 } 953 }
955 954
956 bool TabRenderer::IsPerformingCrashAnimation() const { 955 bool TabRenderer::IsPerformingCrashAnimation() const {
957 return crash_animation_ && crash_animation_->IsAnimating(); 956 return crash_animation_ && crash_animation_->is_animating();
958 } 957 }
959 958
960 void TabRenderer::SetFavIconHidingOffset(int offset) { 959 void TabRenderer::SetFavIconHidingOffset(int offset) {
961 fav_icon_hiding_offset_ = offset; 960 fav_icon_hiding_offset_ = offset;
962 SchedulePaint(); 961 SchedulePaint();
963 } 962 }
964 963
965 void TabRenderer::DisplayCrashedFavIcon() { 964 void TabRenderer::DisplayCrashedFavIcon() {
966 should_display_crashed_favicon_ = true; 965 should_display_crashed_favicon_ = true;
967 } 966 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1021 1020
1022 void TabRenderer::SetBlocked(bool blocked) { 1021 void TabRenderer::SetBlocked(bool blocked) {
1023 if (data_.blocked == blocked) 1022 if (data_.blocked == blocked)
1024 return; 1023 return;
1025 data_.blocked = blocked; 1024 data_.blocked = blocked;
1026 if (blocked) 1025 if (blocked)
1027 StartPulse(); 1026 StartPulse();
1028 else 1027 else
1029 StopPulse(); 1028 StopPulse();
1030 } 1029 }
OLDNEW
« no previous file with comments | « chrome/browser/views/tabs/side_tab.cc ('k') | chrome/browser/views/tabs/tab_strip.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698