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

Side by Side Diff: chrome/browser/gtk/tabs/tab_renderer_gtk.cc

Issue 6154001: Move animation code to new ui/base/animation directory.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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
« no previous file with comments | « chrome/browser/gtk/tabs/tab_renderer_gtk.h ('k') | chrome/browser/gtk/tabs/tab_strip_gtk.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/gtk/tabs/tab_renderer_gtk.h" 5 #include "chrome/browser/gtk/tabs/tab_renderer_gtk.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "app/l10n_util.h" 10 #include "app/l10n_util.h"
11 #include "app/resource_bundle.h" 11 #include "app/resource_bundle.h"
12 #include "app/slide_animation.h"
13 #include "app/throb_animation.h"
14 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/defaults.h" 13 #include "chrome/browser/defaults.h"
16 #include "chrome/browser/gtk/bookmark_utils_gtk.h" 14 #include "chrome/browser/gtk/bookmark_utils_gtk.h"
17 #include "chrome/browser/gtk/custom_button.h" 15 #include "chrome/browser/gtk/custom_button.h"
18 #include "chrome/browser/gtk/gtk_theme_provider.h" 16 #include "chrome/browser/gtk/gtk_theme_provider.h"
19 #include "chrome/browser/gtk/gtk_util.h" 17 #include "chrome/browser/gtk/gtk_util.h"
20 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/browser/tab_contents/tab_contents.h" 19 #include "chrome/browser/tab_contents/tab_contents.h"
22 #include "chrome/browser/ui/browser.h" 20 #include "chrome/browser/ui/browser.h"
23 #include "chrome/common/notification_service.h" 21 #include "chrome/common/notification_service.h"
24 #include "gfx/canvas_skia_paint.h" 22 #include "gfx/canvas_skia_paint.h"
25 #include "gfx/favicon_size.h" 23 #include "gfx/favicon_size.h"
26 #include "gfx/platform_font_gtk.h" 24 #include "gfx/platform_font_gtk.h"
27 #include "gfx/skbitmap_operations.h" 25 #include "gfx/skbitmap_operations.h"
28 #include "grit/app_resources.h" 26 #include "grit/app_resources.h"
29 #include "grit/generated_resources.h" 27 #include "grit/generated_resources.h"
30 #include "grit/theme_resources.h" 28 #include "grit/theme_resources.h"
29 #include "ui/base/animation/slide_animation.h"
30 #include "ui/base/animation/throb_animation.h"
31 31
32 namespace { 32 namespace {
33 33
34 const int kLeftPadding = 16; 34 const int kLeftPadding = 16;
35 const int kTopPadding = 6; 35 const int kTopPadding = 6;
36 const int kRightPadding = 15; 36 const int kRightPadding = 15;
37 const int kBottomPadding = 5; 37 const int kBottomPadding = 5;
38 const int kDropShadowHeight = 2; 38 const int kDropShadowHeight = 2;
39 const int kFavIconTitleSpacing = 4; 39 const int kFavIconTitleSpacing = 4;
40 const int kTitleCloseButtonSpacing = 5; 40 const int kTitleCloseButtonSpacing = 5;
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 const NotificationSource& source, 198 const NotificationSource& source,
199 const NotificationDetails& details) { 199 const NotificationDetails& details) {
200 DCHECK(type == NotificationType::BROWSER_THEME_CHANGED); 200 DCHECK(type == NotificationType::BROWSER_THEME_CHANGED);
201 data_.reset(new Data(theme_provider_)); 201 data_.reset(new Data(theme_provider_));
202 } 202 }
203 203
204 //////////////////////////////////////////////////////////////////////////////// 204 ////////////////////////////////////////////////////////////////////////////////
205 // FaviconCrashAnimation 205 // FaviconCrashAnimation
206 // 206 //
207 // A custom animation subclass to manage the favicon crash animation. 207 // A custom animation subclass to manage the favicon crash animation.
208 class TabRendererGtk::FavIconCrashAnimation : public LinearAnimation, 208 class TabRendererGtk::FavIconCrashAnimation : public ui::LinearAnimation,
209 public AnimationDelegate { 209 public ui::AnimationDelegate {
210 public: 210 public:
211 explicit FavIconCrashAnimation(TabRendererGtk* target) 211 explicit FavIconCrashAnimation(TabRendererGtk* target)
212 : ALLOW_THIS_IN_INITIALIZER_LIST(LinearAnimation(1000, 25, this)), 212 : ALLOW_THIS_IN_INITIALIZER_LIST(ui::LinearAnimation(1000, 25, this)),
213 target_(target) { 213 target_(target) {
214 } 214 }
215 virtual ~FavIconCrashAnimation() {} 215 virtual ~FavIconCrashAnimation() {}
216 216
217 // Animation overrides: 217 // ui::Animation overrides:
218 virtual void AnimateToState(double state) { 218 virtual void AnimateToState(double state) {
219 const double kHidingOffset = 27; 219 const double kHidingOffset = 27;
220 220
221 if (state < .5) { 221 if (state < .5) {
222 target_->SetFavIconHidingOffset( 222 target_->SetFavIconHidingOffset(
223 static_cast<int>(floor(kHidingOffset * 2.0 * state))); 223 static_cast<int>(floor(kHidingOffset * 2.0 * state)));
224 } else { 224 } else {
225 target_->DisplayCrashedFavIcon(); 225 target_->DisplayCrashedFavIcon();
226 target_->SetFavIconHidingOffset( 226 target_->SetFavIconHidingOffset(
227 static_cast<int>( 227 static_cast<int>(
228 floor(kHidingOffset - ((state - .5) * 2.0 * kHidingOffset)))); 228 floor(kHidingOffset - ((state - .5) * 2.0 * kHidingOffset))));
229 } 229 }
230 } 230 }
231 231
232 // AnimationDelegate overrides: 232 // ui::AnimationDelegate overrides:
233 virtual void AnimationCanceled(const Animation* animation) { 233 virtual void AnimationCanceled(const ui::Animation* animation) {
234 target_->SetFavIconHidingOffset(0); 234 target_->SetFavIconHidingOffset(0);
235 } 235 }
236 236
237 private: 237 private:
238 TabRendererGtk* target_; 238 TabRendererGtk* target_;
239 239
240 DISALLOW_COPY_AND_ASSIGN(FavIconCrashAnimation); 240 DISALLOW_COPY_AND_ASSIGN(FavIconCrashAnimation);
241 }; 241 };
242 242
243 //////////////////////////////////////////////////////////////////////////////// 243 ////////////////////////////////////////////////////////////////////////////////
(...skipping 12 matching lines...) Expand all
256 256
257 tab_.Own(gtk_fixed_new()); 257 tab_.Own(gtk_fixed_new());
258 gtk_widget_set_app_paintable(tab_.get(), TRUE); 258 gtk_widget_set_app_paintable(tab_.get(), TRUE);
259 g_signal_connect(tab_.get(), "expose-event", 259 g_signal_connect(tab_.get(), "expose-event",
260 G_CALLBACK(OnExposeEventThunk), this); 260 G_CALLBACK(OnExposeEventThunk), this);
261 g_signal_connect(tab_.get(), "size-allocate", 261 g_signal_connect(tab_.get(), "size-allocate",
262 G_CALLBACK(OnSizeAllocateThunk), this); 262 G_CALLBACK(OnSizeAllocateThunk), this);
263 close_button_.reset(MakeCloseButton()); 263 close_button_.reset(MakeCloseButton());
264 gtk_widget_show(tab_.get()); 264 gtk_widget_show(tab_.get());
265 265
266 hover_animation_.reset(new SlideAnimation(this)); 266 hover_animation_.reset(new ui::SlideAnimation(this));
267 hover_animation_->SetSlideDuration(kHoverDurationMs); 267 hover_animation_->SetSlideDuration(kHoverDurationMs);
268 268
269 registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, 269 registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED,
270 NotificationService::AllSources()); 270 NotificationService::AllSources());
271 } 271 }
272 272
273 TabRendererGtk::~TabRendererGtk() { 273 TabRendererGtk::~TabRendererGtk() {
274 tab_.Destroy(); 274 tab_.Destroy();
275 for (BitmapCache::iterator it = cached_bitmaps_.begin(); 275 for (BitmapCache::iterator it = cached_bitmaps_.begin();
276 it != cached_bitmaps_.end(); ++it) { 276 it != cached_bitmaps_.end(); ++it) {
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 return bounds; 513 return bounds;
514 } 514 }
515 515
516 gfx::Rect TabRendererGtk::GetRequisition() const { 516 gfx::Rect TabRendererGtk::GetRequisition() const {
517 return gfx::Rect(requisition_.x(), requisition_.y(), 517 return gfx::Rect(requisition_.x(), requisition_.y(),
518 requisition_.width(), requisition_.height()); 518 requisition_.width(), requisition_.height());
519 } 519 }
520 520
521 void TabRendererGtk::StartMiniTabTitleAnimation() { 521 void TabRendererGtk::StartMiniTabTitleAnimation() {
522 if (!mini_title_animation_.get()) { 522 if (!mini_title_animation_.get()) {
523 mini_title_animation_.reset(new ThrobAnimation(this)); 523 mini_title_animation_.reset(new ui::ThrobAnimation(this));
524 mini_title_animation_->SetThrobDuration(kMiniTitleChangeThrobDuration); 524 mini_title_animation_->SetThrobDuration(kMiniTitleChangeThrobDuration);
525 } 525 }
526 526
527 if (!mini_title_animation_->is_animating()) { 527 if (!mini_title_animation_->is_animating()) {
528 mini_title_animation_->StartThrobbing(2); 528 mini_title_animation_->StartThrobbing(2);
529 } else if (mini_title_animation_->cycles_remaining() <= 2) { 529 } else if (mini_title_animation_->cycles_remaining() <= 2) {
530 // The title changed while we're already animating. Add at most one more 530 // The title changed while we're already animating. Add at most one more
531 // cycle. This is done in an attempt to smooth out pages that continuously 531 // cycle. This is done in an attempt to smooth out pages that continuously
532 // change the title. 532 // change the title.
533 mini_title_animation_->set_cycles_remaining( 533 mini_title_animation_->set_cycles_remaining(
(...skipping 26 matching lines...) Expand all
560 } 560 }
561 561
562 //////////////////////////////////////////////////////////////////////////////// 562 ////////////////////////////////////////////////////////////////////////////////
563 // TabRendererGtk, protected: 563 // TabRendererGtk, protected:
564 564
565 string16 TabRendererGtk::GetTitle() const { 565 string16 TabRendererGtk::GetTitle() const {
566 return data_.title; 566 return data_.title;
567 } 567 }
568 568
569 /////////////////////////////////////////////////////////////////////////////// 569 ///////////////////////////////////////////////////////////////////////////////
570 // TabRendererGtk, AnimationDelegate implementation: 570 // TabRendererGtk, ui::AnimationDelegate implementation:
571 571
572 void TabRendererGtk::AnimationProgressed(const Animation* animation) { 572 void TabRendererGtk::AnimationProgressed(const ui::Animation* animation) {
573 gtk_widget_queue_draw(tab_.get()); 573 gtk_widget_queue_draw(tab_.get());
574 } 574 }
575 575
576 void TabRendererGtk::AnimationCanceled(const Animation* animation) { 576 void TabRendererGtk::AnimationCanceled(const ui::Animation* animation) {
577 AnimationEnded(animation); 577 AnimationEnded(animation);
578 } 578 }
579 579
580 void TabRendererGtk::AnimationEnded(const Animation* animation) { 580 void TabRendererGtk::AnimationEnded(const ui::Animation* animation) {
581 gtk_widget_queue_draw(tab_.get()); 581 gtk_widget_queue_draw(tab_.get());
582 } 582 }
583 583
584 //////////////////////////////////////////////////////////////////////////////// 584 ////////////////////////////////////////////////////////////////////////////////
585 // TabRendererGtk, private: 585 // TabRendererGtk, private:
586 586
587 void TabRendererGtk::StartCrashAnimation() { 587 void TabRendererGtk::StartCrashAnimation() {
588 if (!crash_animation_.get()) 588 if (!crash_animation_.get())
589 crash_animation_.reset(new FavIconCrashAnimation(this)); 589 crash_animation_.reset(new FavIconCrashAnimation(this));
590 crash_animation_->Stop(); 590 crash_animation_->Stop();
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 // get an infinite loop of size-allocate signals. 1045 // get an infinite loop of size-allocate signals.
1046 if (bounds_ == bounds) 1046 if (bounds_ == bounds)
1047 return; 1047 return;
1048 1048
1049 bounds_ = bounds; 1049 bounds_ = bounds;
1050 Layout(); 1050 Layout();
1051 } 1051 }
1052 1052
1053 gboolean TabRendererGtk::OnEnterNotifyEvent(GtkWidget* widget, 1053 gboolean TabRendererGtk::OnEnterNotifyEvent(GtkWidget* widget,
1054 GdkEventCrossing* event) { 1054 GdkEventCrossing* event) {
1055 hover_animation_->SetTweenType(Tween::EASE_OUT); 1055 hover_animation_->SetTweenType(ui::Tween::EASE_OUT);
1056 hover_animation_->Show(); 1056 hover_animation_->Show();
1057 return FALSE; 1057 return FALSE;
1058 } 1058 }
1059 1059
1060 gboolean TabRendererGtk::OnLeaveNotifyEvent(GtkWidget* widget, 1060 gboolean TabRendererGtk::OnLeaveNotifyEvent(GtkWidget* widget,
1061 GdkEventCrossing* event) { 1061 GdkEventCrossing* event) {
1062 hover_animation_->SetTweenType(Tween::EASE_IN); 1062 hover_animation_->SetTweenType(ui::Tween::EASE_IN);
1063 hover_animation_->Hide(); 1063 hover_animation_->Hide();
1064 return FALSE; 1064 return FALSE;
1065 } 1065 }
1066 1066
1067 // static 1067 // static
1068 void TabRendererGtk::InitResources() { 1068 void TabRendererGtk::InitResources() {
1069 if (initialized_) 1069 if (initialized_)
1070 return; 1070 return;
1071 1071
1072 LoadTabImages(); 1072 LoadTabImages();
1073 1073
1074 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 1074 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
1075 const gfx::Font& base_font = rb.GetFont(ResourceBundle::BaseFont); 1075 const gfx::Font& base_font = rb.GetFont(ResourceBundle::BaseFont);
1076 // Dividing by the pango scale factor maintains an absolute pixel size across 1076 // Dividing by the pango scale factor maintains an absolute pixel size across
1077 // all DPIs. 1077 // all DPIs.
1078 int size = static_cast<int>(13 / gfx::PlatformFontGtk::GetPangoScaleFactor()); 1078 int size = static_cast<int>(13 / gfx::PlatformFontGtk::GetPangoScaleFactor());
1079 title_font_ = new gfx::Font(base_font.GetFontName(), size); 1079 title_font_ = new gfx::Font(base_font.GetFontName(), size);
1080 title_font_height_ = title_font_->GetHeight(); 1080 title_font_height_ = title_font_->GetHeight();
1081 1081
1082 crashed_fav_icon = rb.GetBitmapNamed(IDR_SAD_FAVICON); 1082 crashed_fav_icon = rb.GetBitmapNamed(IDR_SAD_FAVICON);
1083 1083
1084 initialized_ = true; 1084 initialized_ = true;
1085 } 1085 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/tabs/tab_renderer_gtk.h ('k') | chrome/browser/gtk/tabs/tab_strip_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698