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/gtk/tabs/tab_renderer_gtk.h" | 5 #include "chrome/browser/ui/gtk/tabs/tab_renderer_gtk.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "chrome/browser/ui/gtk/gtk_theme_service.h" | 21 #include "chrome/browser/ui/gtk/gtk_theme_service.h" |
22 #include "chrome/browser/ui/gtk/gtk_util.h" | 22 #include "chrome/browser/ui/gtk/gtk_util.h" |
23 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" | 23 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" |
24 #include "chrome/browser/ui/tabs/tab_utils.h" | 24 #include "chrome/browser/ui/tabs/tab_utils.h" |
25 #include "content/public/browser/notification_source.h" | 25 #include "content/public/browser/notification_source.h" |
26 #include "content/public/browser/web_contents.h" | 26 #include "content/public/browser/web_contents.h" |
27 #include "grit/generated_resources.h" | 27 #include "grit/generated_resources.h" |
28 #include "grit/theme_resources.h" | 28 #include "grit/theme_resources.h" |
29 #include "grit/ui_resources.h" | 29 #include "grit/ui_resources.h" |
30 #include "skia/ext/image_operations.h" | 30 #include "skia/ext/image_operations.h" |
31 #include "ui/base/animation/slide_animation.h" | |
32 #include "ui/base/animation/throb_animation.h" | |
33 #include "ui/base/gtk/gtk_screen_util.h" | 31 #include "ui/base/gtk/gtk_screen_util.h" |
34 #include "ui/base/l10n/l10n_util.h" | 32 #include "ui/base/l10n/l10n_util.h" |
35 #include "ui/base/resource/resource_bundle.h" | 33 #include "ui/base/resource/resource_bundle.h" |
| 34 #include "ui/gfx/animation/slide_animation.h" |
| 35 #include "ui/gfx/animation/throb_animation.h" |
36 #include "ui/gfx/canvas_skia_paint.h" | 36 #include "ui/gfx/canvas_skia_paint.h" |
37 #include "ui/gfx/favicon_size.h" | 37 #include "ui/gfx/favicon_size.h" |
38 #include "ui/gfx/gtk_compat.h" | 38 #include "ui/gfx/gtk_compat.h" |
39 #include "ui/gfx/gtk_util.h" | 39 #include "ui/gfx/gtk_util.h" |
40 #include "ui/gfx/image/cairo_cached_surface.h" | 40 #include "ui/gfx/image/cairo_cached_surface.h" |
41 #include "ui/gfx/image/image.h" | 41 #include "ui/gfx/image/image.h" |
42 #include "ui/gfx/pango_util.h" | 42 #include "ui/gfx/pango_util.h" |
43 #include "ui/gfx/platform_font_pango.h" | 43 #include "ui/gfx/platform_font_pango.h" |
44 #include "ui/gfx/skbitmap_operations.h" | 44 #include "ui/gfx/skbitmap_operations.h" |
45 | 45 |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 app(false), | 271 app(false), |
272 capture_state(NONE) { | 272 capture_state(NONE) { |
273 } | 273 } |
274 | 274 |
275 TabRendererGtk::TabData::~TabData() {} | 275 TabRendererGtk::TabData::~TabData() {} |
276 | 276 |
277 //////////////////////////////////////////////////////////////////////////////// | 277 //////////////////////////////////////////////////////////////////////////////// |
278 // FaviconCrashAnimation | 278 // FaviconCrashAnimation |
279 // | 279 // |
280 // A custom animation subclass to manage the favicon crash animation. | 280 // A custom animation subclass to manage the favicon crash animation. |
281 class TabRendererGtk::FaviconCrashAnimation : public ui::LinearAnimation, | 281 class TabRendererGtk::FaviconCrashAnimation : public gfx::LinearAnimation, |
282 public ui::AnimationDelegate { | 282 public gfx::AnimationDelegate { |
283 public: | 283 public: |
284 explicit FaviconCrashAnimation(TabRendererGtk* target) | 284 explicit FaviconCrashAnimation(TabRendererGtk* target) |
285 : ui::LinearAnimation(1000, 25, this), | 285 : gfx::LinearAnimation(1000, 25, this), |
286 target_(target) { | 286 target_(target) { |
287 } | 287 } |
288 virtual ~FaviconCrashAnimation() {} | 288 virtual ~FaviconCrashAnimation() {} |
289 | 289 |
290 // ui::Animation overrides: | 290 // gfx::Animation overrides: |
291 virtual void AnimateToState(double state) OVERRIDE { | 291 virtual void AnimateToState(double state) OVERRIDE { |
292 const double kHidingOffset = 27; | 292 const double kHidingOffset = 27; |
293 | 293 |
294 if (state < .5) { | 294 if (state < .5) { |
295 target_->SetFaviconHidingOffset( | 295 target_->SetFaviconHidingOffset( |
296 static_cast<int>(floor(kHidingOffset * 2.0 * state))); | 296 static_cast<int>(floor(kHidingOffset * 2.0 * state))); |
297 } else { | 297 } else { |
298 target_->DisplayCrashedFavicon(); | 298 target_->DisplayCrashedFavicon(); |
299 target_->SetFaviconHidingOffset( | 299 target_->SetFaviconHidingOffset( |
300 static_cast<int>( | 300 static_cast<int>( |
301 floor(kHidingOffset - ((state - .5) * 2.0 * kHidingOffset)))); | 301 floor(kHidingOffset - ((state - .5) * 2.0 * kHidingOffset)))); |
302 } | 302 } |
303 } | 303 } |
304 | 304 |
305 // ui::AnimationDelegate overrides: | 305 // gfx::AnimationDelegate overrides: |
306 virtual void AnimationCanceled(const ui::Animation* animation) OVERRIDE { | 306 virtual void AnimationCanceled(const gfx::Animation* animation) OVERRIDE { |
307 target_->SetFaviconHidingOffset(0); | 307 target_->SetFaviconHidingOffset(0); |
308 } | 308 } |
309 | 309 |
310 private: | 310 private: |
311 TabRendererGtk* target_; | 311 TabRendererGtk* target_; |
312 | 312 |
313 DISALLOW_COPY_AND_ASSIGN(FaviconCrashAnimation); | 313 DISALLOW_COPY_AND_ASSIGN(FaviconCrashAnimation); |
314 }; | 314 }; |
315 | 315 |
316 //////////////////////////////////////////////////////////////////////////////// | 316 //////////////////////////////////////////////////////////////////////////////// |
(...skipping 20 matching lines...) Expand all Loading... |
337 | 337 |
338 tab_.Own(gtk_fixed_new()); | 338 tab_.Own(gtk_fixed_new()); |
339 gtk_widget_set_app_paintable(tab_.get(), TRUE); | 339 gtk_widget_set_app_paintable(tab_.get(), TRUE); |
340 g_signal_connect(tab_.get(), "expose-event", | 340 g_signal_connect(tab_.get(), "expose-event", |
341 G_CALLBACK(OnExposeEventThunk), this); | 341 G_CALLBACK(OnExposeEventThunk), this); |
342 g_signal_connect(tab_.get(), "size-allocate", | 342 g_signal_connect(tab_.get(), "size-allocate", |
343 G_CALLBACK(OnSizeAllocateThunk), this); | 343 G_CALLBACK(OnSizeAllocateThunk), this); |
344 close_button_.reset(MakeCloseButton()); | 344 close_button_.reset(MakeCloseButton()); |
345 gtk_widget_show(tab_.get()); | 345 gtk_widget_show(tab_.get()); |
346 | 346 |
347 hover_animation_.reset(new ui::SlideAnimation(this)); | 347 hover_animation_.reset(new gfx::SlideAnimation(this)); |
348 hover_animation_->SetSlideDuration(kHoverDurationMs); | 348 hover_animation_->SetSlideDuration(kHoverDurationMs); |
349 } | 349 } |
350 | 350 |
351 TabRendererGtk::~TabRendererGtk() { | 351 TabRendererGtk::~TabRendererGtk() { |
352 tab_.Destroy(); | 352 tab_.Destroy(); |
353 } | 353 } |
354 | 354 |
355 void TabRendererGtk::Observe(int type, | 355 void TabRendererGtk::Observe(int type, |
356 const content::NotificationSource& source, | 356 const content::NotificationSource& source, |
357 const content::NotificationDetails& details) { | 357 const content::NotificationDetails& details) { |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 return bounds; | 607 return bounds; |
608 } | 608 } |
609 | 609 |
610 gfx::Rect TabRendererGtk::GetRequisition() const { | 610 gfx::Rect TabRendererGtk::GetRequisition() const { |
611 return gfx::Rect(requisition_.x(), requisition_.y(), | 611 return gfx::Rect(requisition_.x(), requisition_.y(), |
612 requisition_.width(), requisition_.height()); | 612 requisition_.width(), requisition_.height()); |
613 } | 613 } |
614 | 614 |
615 void TabRendererGtk::StartMiniTabTitleAnimation() { | 615 void TabRendererGtk::StartMiniTabTitleAnimation() { |
616 if (!mini_title_animation_.get()) { | 616 if (!mini_title_animation_.get()) { |
617 mini_title_animation_.reset(new ui::ThrobAnimation(this)); | 617 mini_title_animation_.reset(new gfx::ThrobAnimation(this)); |
618 mini_title_animation_->SetThrobDuration(kMiniTitleChangeThrobDuration); | 618 mini_title_animation_->SetThrobDuration(kMiniTitleChangeThrobDuration); |
619 } | 619 } |
620 | 620 |
621 if (!mini_title_animation_->is_animating()) | 621 if (!mini_title_animation_->is_animating()) |
622 mini_title_animation_->StartThrobbing(-1); | 622 mini_title_animation_->StartThrobbing(-1); |
623 } | 623 } |
624 | 624 |
625 void TabRendererGtk::StopMiniTabTitleAnimation() { | 625 void TabRendererGtk::StopMiniTabTitleAnimation() { |
626 if (mini_title_animation_.get()) | 626 if (mini_title_animation_.get()) |
627 mini_title_animation_->Stop(); | 627 mini_title_animation_->Stop(); |
(...skipping 11 matching lines...) Expand all Loading... |
639 if (gtk_button_get_event_window(GTK_BUTTON(close_button_->widget()))) | 639 if (gtk_button_get_event_window(GTK_BUTTON(close_button_->widget()))) |
640 gdk_window_raise(gtk_button_get_event_window( | 640 gdk_window_raise(gtk_button_get_event_window( |
641 GTK_BUTTON(close_button_->widget()))); | 641 GTK_BUTTON(close_button_->widget()))); |
642 } | 642 } |
643 | 643 |
644 string16 TabRendererGtk::GetTitle() const { | 644 string16 TabRendererGtk::GetTitle() const { |
645 return data_.title; | 645 return data_.title; |
646 } | 646 } |
647 | 647 |
648 /////////////////////////////////////////////////////////////////////////////// | 648 /////////////////////////////////////////////////////////////////////////////// |
649 // TabRendererGtk, ui::AnimationDelegate implementation: | 649 // TabRendererGtk, gfx::AnimationDelegate implementation: |
650 | 650 |
651 void TabRendererGtk::AnimationProgressed(const ui::Animation* animation) { | 651 void TabRendererGtk::AnimationProgressed(const gfx::Animation* animation) { |
652 gtk_widget_queue_draw(tab_.get()); | 652 gtk_widget_queue_draw(tab_.get()); |
653 } | 653 } |
654 | 654 |
655 void TabRendererGtk::AnimationCanceled(const ui::Animation* animation) { | 655 void TabRendererGtk::AnimationCanceled(const gfx::Animation* animation) { |
656 AnimationEnded(animation); | 656 AnimationEnded(animation); |
657 } | 657 } |
658 | 658 |
659 void TabRendererGtk::AnimationEnded(const ui::Animation* animation) { | 659 void TabRendererGtk::AnimationEnded(const gfx::Animation* animation) { |
660 gtk_widget_queue_draw(tab_.get()); | 660 gtk_widget_queue_draw(tab_.get()); |
661 } | 661 } |
662 | 662 |
663 //////////////////////////////////////////////////////////////////////////////// | 663 //////////////////////////////////////////////////////////////////////////////// |
664 // TabRendererGtk, private: | 664 // TabRendererGtk, private: |
665 | 665 |
666 void TabRendererGtk::StartCrashAnimation() { | 666 void TabRendererGtk::StartCrashAnimation() { |
667 if (!crash_animation_.get()) | 667 if (!crash_animation_.get()) |
668 crash_animation_.reset(new FaviconCrashAnimation(this)); | 668 crash_animation_.reset(new FaviconCrashAnimation(this)); |
669 crash_animation_->Stop(); | 669 crash_animation_->Stop(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 recording.ToImageSkia()->width(); | 704 recording.ToImageSkia()->width(); |
705 | 705 |
706 GdkPixbuf* pixbuf = data_.favicon.isNull() ? | 706 GdkPixbuf* pixbuf = data_.favicon.isNull() ? |
707 gfx::GdkPixbufFromSkBitmap(*recording.ToSkBitmap()) : | 707 gfx::GdkPixbufFromSkBitmap(*recording.ToSkBitmap()) : |
708 GetResizedGdkPixbufFromSkBitmap(*recording.ToSkBitmap(), | 708 GetResizedGdkPixbufFromSkBitmap(*recording.ToSkBitmap(), |
709 icon_size, icon_size); | 709 icon_size, icon_size); |
710 data_.cairo_overlay.UsePixbuf(pixbuf); | 710 data_.cairo_overlay.UsePixbuf(pixbuf); |
711 g_object_unref(pixbuf); | 711 g_object_unref(pixbuf); |
712 | 712 |
713 if (!favicon_overlay_animation_.get()) { | 713 if (!favicon_overlay_animation_.get()) { |
714 favicon_overlay_animation_.reset(new ui::ThrobAnimation(this)); | 714 favicon_overlay_animation_.reset(new gfx::ThrobAnimation(this)); |
715 favicon_overlay_animation_->SetThrobDuration(kRecordingDurationMs); | 715 favicon_overlay_animation_->SetThrobDuration(kRecordingDurationMs); |
716 } | 716 } |
717 if (!favicon_overlay_animation_->is_animating()) | 717 if (!favicon_overlay_animation_->is_animating()) |
718 favicon_overlay_animation_->StartThrobbing(-1); | 718 favicon_overlay_animation_->StartThrobbing(-1); |
719 } else { | 719 } else { |
720 data_.cairo_overlay.Reset(); | 720 data_.cairo_overlay.Reset(); |
721 if (favicon_overlay_animation_.get()) | 721 if (favicon_overlay_animation_.get()) |
722 favicon_overlay_animation_->Stop(); | 722 favicon_overlay_animation_->Stop(); |
723 } | 723 } |
724 } | 724 } |
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1210 // get an infinite loop of size-allocate signals. | 1210 // get an infinite loop of size-allocate signals. |
1211 if (bounds_ == bounds) | 1211 if (bounds_ == bounds) |
1212 return; | 1212 return; |
1213 | 1213 |
1214 bounds_ = bounds; | 1214 bounds_ = bounds; |
1215 Layout(); | 1215 Layout(); |
1216 } | 1216 } |
1217 | 1217 |
1218 gboolean TabRendererGtk::OnEnterNotifyEvent(GtkWidget* widget, | 1218 gboolean TabRendererGtk::OnEnterNotifyEvent(GtkWidget* widget, |
1219 GdkEventCrossing* event) { | 1219 GdkEventCrossing* event) { |
1220 hover_animation_->SetTweenType(ui::Tween::EASE_OUT); | 1220 hover_animation_->SetTweenType(gfx::Tween::EASE_OUT); |
1221 hover_animation_->Show(); | 1221 hover_animation_->Show(); |
1222 return FALSE; | 1222 return FALSE; |
1223 } | 1223 } |
1224 | 1224 |
1225 gboolean TabRendererGtk::OnLeaveNotifyEvent(GtkWidget* widget, | 1225 gboolean TabRendererGtk::OnLeaveNotifyEvent(GtkWidget* widget, |
1226 GdkEventCrossing* event) { | 1226 GdkEventCrossing* event) { |
1227 hover_animation_->SetTweenType(ui::Tween::EASE_IN); | 1227 hover_animation_->SetTweenType(gfx::Tween::EASE_IN); |
1228 hover_animation_->Hide(); | 1228 hover_animation_->Hide(); |
1229 return FALSE; | 1229 return FALSE; |
1230 } | 1230 } |
1231 | 1231 |
1232 // static | 1232 // static |
1233 void TabRendererGtk::InitResources() { | 1233 void TabRendererGtk::InitResources() { |
1234 if (initialized_) | 1234 if (initialized_) |
1235 return; | 1235 return; |
1236 | 1236 |
1237 // Grab the pixel sizes of our masking images. | 1237 // Grab the pixel sizes of our masking images. |
(...skipping 10 matching lines...) Expand all Loading... |
1248 GdkPixbuf* tab_close = rb.GetNativeImageNamed(IDR_CLOSE_1).ToGdkPixbuf(); | 1248 GdkPixbuf* tab_close = rb.GetNativeImageNamed(IDR_CLOSE_1).ToGdkPixbuf(); |
1249 close_button_width_ = gdk_pixbuf_get_width(tab_close); | 1249 close_button_width_ = gdk_pixbuf_get_width(tab_close); |
1250 close_button_height_ = gdk_pixbuf_get_height(tab_close); | 1250 close_button_height_ = gdk_pixbuf_get_height(tab_close); |
1251 | 1251 |
1252 const gfx::Font& base_font = rb.GetFont(ui::ResourceBundle::BaseFont); | 1252 const gfx::Font& base_font = rb.GetFont(ui::ResourceBundle::BaseFont); |
1253 title_font_ = new gfx::Font(base_font.GetFontName(), kFontPixelSize); | 1253 title_font_ = new gfx::Font(base_font.GetFontName(), kFontPixelSize); |
1254 title_font_height_ = title_font_->GetHeight(); | 1254 title_font_height_ = title_font_->GetHeight(); |
1255 | 1255 |
1256 initialized_ = true; | 1256 initialized_ = true; |
1257 } | 1257 } |
OLD | NEW |