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

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

Issue 6879013: skia::PlatformCanvas is being deprecated. Going forward we will use gfx::Canvas wherever we need ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
11 #include "chrome/browser/defaults.h" 11 #include "chrome/browser/defaults.h"
12 #include "chrome/browser/extensions/extension_tab_helper.h" 12 #include "chrome/browser/extensions/extension_tab_helper.h"
13 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/ui/browser.h" 14 #include "chrome/browser/ui/browser.h"
15 #include "chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.h" 15 #include "chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.h"
16 #include "chrome/browser/ui/gtk/custom_button.h" 16 #include "chrome/browser/ui/gtk/custom_button.h"
17 #include "chrome/browser/ui/gtk/gtk_theme_service.h" 17 #include "chrome/browser/ui/gtk/gtk_theme_service.h"
18 #include "chrome/browser/ui/gtk/gtk_util.h" 18 #include "chrome/browser/ui/gtk/gtk_util.h"
19 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 19 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
20 #include "content/browser/tab_contents/tab_contents.h" 20 #include "content/browser/tab_contents/tab_contents.h"
21 #include "content/common/notification_service.h" 21 #include "content/common/notification_service.h"
22 #include "grit/app_resources.h" 22 #include "grit/app_resources.h"
23 #include "grit/generated_resources.h" 23 #include "grit/generated_resources.h"
24 #include "grit/theme_resources.h" 24 #include "grit/theme_resources.h"
25 #include "ui/base/animation/slide_animation.h" 25 #include "ui/base/animation/slide_animation.h"
26 #include "ui/base/animation/throb_animation.h" 26 #include "ui/base/animation/throb_animation.h"
27 #include "ui/base/l10n/l10n_util.h" 27 #include "ui/base/l10n/l10n_util.h"
28 #include "ui/base/resource/resource_bundle.h" 28 #include "ui/base/resource/resource_bundle.h"
29 #include "ui/gfx/canvas_skia.h"
29 #include "ui/gfx/canvas_skia_paint.h" 30 #include "ui/gfx/canvas_skia_paint.h"
30 #include "ui/gfx/favicon_size.h" 31 #include "ui/gfx/favicon_size.h"
31 #include "ui/gfx/platform_font_gtk.h" 32 #include "ui/gfx/platform_font_gtk.h"
32 #include "ui/gfx/skbitmap_operations.h" 33 #include "ui/gfx/skbitmap_operations.h"
33 34
34 namespace { 35 namespace {
35 36
36 const int kFontPixelSize = 12; 37 const int kFontPixelSize = 12;
37 const int kLeftPadding = 16; 38 const int kLeftPadding = 16;
38 const int kTopPadding = 6; 39 const int kTopPadding = 6;
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 void TabRendererGtk::PaintFaviconArea(GdkEventExpose* event) { 371 void TabRendererGtk::PaintFaviconArea(GdkEventExpose* event) {
371 DCHECK(ShouldShowIcon()); 372 DCHECK(ShouldShowIcon());
372 373
373 // The paint area is the favicon bounds, but we're painting into the gdk 374 // The paint area is the favicon bounds, but we're painting into the gdk
374 // window belonging to the tabstrip. So the coordinates are relative to the 375 // window belonging to the tabstrip. So the coordinates are relative to the
375 // top left of the tab strip. 376 // top left of the tab strip.
376 event->area.x = x() + favicon_bounds_.x(); 377 event->area.x = x() + favicon_bounds_.x();
377 event->area.y = y() + favicon_bounds_.y(); 378 event->area.y = y() + favicon_bounds_.y();
378 event->area.width = favicon_bounds_.width(); 379 event->area.width = favicon_bounds_.width();
379 event->area.height = favicon_bounds_.height(); 380 event->area.height = favicon_bounds_.height();
380 gfx::CanvasSkiaPaint canvas(event, false); 381 gfx::CanvasSkiaPaint canvas_paint(event, false);
382 gfx::CanvasSkia* canvas = canvas_paint.AsCanvas()->AsCanvasSkia();
381 383
382 // The actual paint methods expect 0, 0 to be the tab top left (see 384 // The actual paint methods expect 0, 0 to be the tab top left (see
383 // PaintTab). 385 // PaintTab).
384 canvas.TranslateInt(x(), y()); 386 canvas->TranslateInt(x(), y());
385 387
386 // Paint the background behind the favicon. 388 // Paint the background behind the favicon.
387 int theme_id; 389 int theme_id;
388 int offset_y = 0; 390 int offset_y = 0;
389 if (IsSelected()) { 391 if (IsSelected()) {
390 theme_id = IDR_THEME_TOOLBAR; 392 theme_id = IDR_THEME_TOOLBAR;
391 } else { 393 } else {
392 if (!data_.incognito) { 394 if (!data_.incognito) {
393 theme_id = IDR_THEME_TAB_BACKGROUND; 395 theme_id = IDR_THEME_TAB_BACKGROUND;
394 } else { 396 } else {
395 theme_id = IDR_THEME_TAB_BACKGROUND_INCOGNITO; 397 theme_id = IDR_THEME_TAB_BACKGROUND_INCOGNITO;
396 } 398 }
397 if (!theme_service_->HasCustomImage(theme_id)) 399 if (!theme_service_->HasCustomImage(theme_id))
398 offset_y = background_offset_y_; 400 offset_y = background_offset_y_;
399 } 401 }
400 SkBitmap* tab_bg = theme_service_->GetBitmapNamed(theme_id); 402 SkBitmap* tab_bg = theme_service_->GetBitmapNamed(theme_id);
401 canvas.TileImageInt(*tab_bg, 403 canvas->TileImageInt(*tab_bg,
402 x() + favicon_bounds_.x(), offset_y + favicon_bounds_.y(), 404 x() + favicon_bounds_.x(), offset_y + favicon_bounds_.y(),
403 favicon_bounds_.x(), favicon_bounds_.y(), 405 favicon_bounds_.x(), favicon_bounds_.y(),
404 favicon_bounds_.width(), favicon_bounds_.height()); 406 favicon_bounds_.width(), favicon_bounds_.height());
405 407
406 if (!IsSelected()) { 408 if (!IsSelected()) {
407 double throb_value = GetThrobValue(); 409 double throb_value = GetThrobValue();
408 if (throb_value > 0) { 410 if (throb_value > 0) {
409 SkRect bounds; 411 SkRect bounds;
410 bounds.set(favicon_bounds_.x(), favicon_bounds_.y(), 412 bounds.set(favicon_bounds_.x(), favicon_bounds_.y(),
411 favicon_bounds_.right(), favicon_bounds_.bottom()); 413 favicon_bounds_.right(), favicon_bounds_.bottom());
412 canvas.saveLayerAlpha(&bounds, static_cast<int>(throb_value * 0xff), 414 canvas->skia_canvas()->saveLayerAlpha(&bounds,
413 SkCanvas::kARGB_ClipLayer_SaveFlag); 415 static_cast<int>(throb_value * 0xff),
414 canvas.drawARGB(0, 255, 255, 255, SkXfermode::kClear_Mode); 416 SkCanvas::kARGB_ClipLayer_SaveFlag);
417 canvas->skia_canvas()->drawARGB(
418 0, 255, 255, 255, SkXfermode::kClear_Mode);
415 SkBitmap* active_bg = theme_service_->GetBitmapNamed(IDR_THEME_TOOLBAR); 419 SkBitmap* active_bg = theme_service_->GetBitmapNamed(IDR_THEME_TOOLBAR);
416 canvas.TileImageInt(*active_bg, 420 canvas->TileImageInt(*active_bg,
417 x() + favicon_bounds_.x(), favicon_bounds_.y(), 421 x() + favicon_bounds_.x(), favicon_bounds_.y(),
418 favicon_bounds_.x(), favicon_bounds_.y(), 422 favicon_bounds_.x(), favicon_bounds_.y(),
419 favicon_bounds_.width(), favicon_bounds_.height()); 423 favicon_bounds_.width(), favicon_bounds_.height());
420 canvas.restore(); 424 canvas->Restore();
421 } 425 }
422 } 426 }
423 427
424 // Now paint the icon. 428 // Now paint the icon.
425 PaintIcon(&canvas); 429 PaintIcon(canvas);
426 } 430 }
427 431
428 bool TabRendererGtk::ShouldShowIcon() const { 432 bool TabRendererGtk::ShouldShowIcon() const {
429 if (mini() && height() >= GetMinimumUnselectedSize().height()) { 433 if (mini() && height() >= GetMinimumUnselectedSize().height()) {
430 return true; 434 return true;
431 } else if (!data_.show_icon) { 435 } else if (!data_.show_icon) {
432 return false; 436 return false;
433 } else if (IsSelected()) { 437 } else if (IsSelected()) {
434 // The selected tab clips favicon before close button. 438 // The selected tab clips favicon before close button.
435 return IconCapacity() >= 2; 439 return IconCapacity() >= 2;
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 PaintTabBackground(canvas); 640 PaintTabBackground(canvas);
637 641
638 if (!mini() || width() > kMiniTabRendererAsNormalTabWidth) 642 if (!mini() || width() > kMiniTabRendererAsNormalTabWidth)
639 PaintTitle(canvas); 643 PaintTitle(canvas);
640 644
641 if (show_icon) 645 if (show_icon)
642 PaintIcon(canvas); 646 PaintIcon(canvas);
643 } 647 }
644 648
645 SkBitmap TabRendererGtk::PaintBitmap() { 649 SkBitmap TabRendererGtk::PaintBitmap() {
646 gfx::CanvasSkia canvas(width(), height(), false); 650 gfx::CanvasSkia canvas;
651 canvas.Init(width(), height(), false);
647 Paint(&canvas); 652 Paint(&canvas);
648 return canvas.ExtractBitmap(); 653 return canvas.ExtractBitmap();
649 } 654 }
650 655
651 cairo_surface_t* TabRendererGtk::PaintToSurface() { 656 cairo_surface_t* TabRendererGtk::PaintToSurface() {
652 gfx::CanvasSkia canvas(width(), height(), false); 657 gfx::CanvasSkia canvas;
658 canvas.Init(width(), height(), false);
653 Paint(&canvas); 659 Paint(&canvas);
654 return cairo_surface_reference(cairo_get_target(canvas.beginPlatformPaint())); 660 return cairo_surface_reference(cairo_get_target(canvas.BeginPlatformPaint()));
655 } 661 }
656 662
657 void TabRendererGtk::SchedulePaint() { 663 void TabRendererGtk::SchedulePaint() {
658 gtk_widget_queue_draw(tab_.get()); 664 gtk_widget_queue_draw(tab_.get());
659 } 665 }
660 666
661 gfx::Rect TabRendererGtk::GetLocalBounds() { 667 gfx::Rect TabRendererGtk::GetLocalBounds() {
662 return gfx::Rect(0, 0, bounds_.width(), bounds_.height()); 668 return gfx::Rect(0, 0, bounds_.width(), bounds_.height());
663 } 669 }
664 670
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 CachedBitmap bitmap = { 790 CachedBitmap bitmap = {
785 bg_offset_x, 791 bg_offset_x,
786 bg_offset_y, 792 bg_offset_y,
787 new SkBitmap(SkBitmapOperations::CreateMaskedBitmap(image, *mask)) 793 new SkBitmap(SkBitmapOperations::CreateMaskedBitmap(image, *mask))
788 }; 794 };
789 cached_bitmaps_[std::make_pair(mask, background)] = bitmap; 795 cached_bitmaps_[std::make_pair(mask, background)] = bitmap;
790 return bitmap.bitmap; 796 return bitmap.bitmap;
791 } 797 }
792 798
793 void TabRendererGtk::PaintTab(GdkEventExpose* event) { 799 void TabRendererGtk::PaintTab(GdkEventExpose* event) {
794 gfx::CanvasSkiaPaint canvas(event, false); 800 gfx::CanvasSkiaPaint canvas_paint(event, false);
795 if (canvas.is_empty()) 801 if (canvas_paint.IsValid())
796 return; 802 return;
797 803
804 gfx::Canvas* canvas = canvas_paint.AsCanvas();
798 // The tab is rendered into a windowless widget whose offset is at the 805 // The tab is rendered into a windowless widget whose offset is at the
799 // coordinate event->area. Translate by these offsets so we can render at 806 // coordinate event->area. Translate by these offsets so we can render at
800 // (0,0) to match Windows' rendering metrics. 807 // (0,0) to match Windows' rendering metrics.
801 canvas.TranslateInt(event->area.x, event->area.y); 808 canvas->TranslateInt(event->area.x, event->area.y);
802 809
803 // Save the original x offset so we can position background images properly. 810 // Save the original x offset so we can position background images properly.
804 background_offset_x_ = event->area.x; 811 background_offset_x_ = event->area.x;
805 812
806 Paint(&canvas); 813 Paint(canvas);
807 } 814 }
808 815
809 void TabRendererGtk::PaintTitle(gfx::Canvas* canvas) { 816 void TabRendererGtk::PaintTitle(gfx::Canvas* canvas) {
810 // Paint the Title. 817 // Paint the Title.
811 string16 title = data_.title; 818 string16 title = data_.title;
812 if (title.empty()) { 819 if (title.empty()) {
813 title = data_.loading ? 820 title = data_.loading ?
814 l10n_util::GetStringUTF16(IDS_TAB_LOADING_TITLE) : 821 l10n_util::GetStringUTF16(IDS_TAB_LOADING_TITLE) :
815 TabContentsWrapper::GetDefaultTitle(); 822 TabContentsWrapper::GetDefaultTitle();
816 } else { 823 } else {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 void TabRendererGtk::PaintTabBackground(gfx::Canvas* canvas) { 883 void TabRendererGtk::PaintTabBackground(gfx::Canvas* canvas) {
877 if (IsSelected()) { 884 if (IsSelected()) {
878 PaintActiveTabBackground(canvas); 885 PaintActiveTabBackground(canvas);
879 } else { 886 } else {
880 PaintInactiveTabBackground(canvas); 887 PaintInactiveTabBackground(canvas);
881 888
882 double throb_value = GetThrobValue(); 889 double throb_value = GetThrobValue();
883 if (throb_value > 0) { 890 if (throb_value > 0) {
884 canvas->SaveLayerAlpha(static_cast<int>(throb_value * 0xff), 891 canvas->SaveLayerAlpha(static_cast<int>(throb_value * 0xff),
885 gfx::Rect(width(), height())); 892 gfx::Rect(width(), height()));
886 canvas->AsCanvasSkia()->drawARGB(0, 255, 255, 255, 893 canvas->AsCanvasSkia()->skia_canvas()->drawARGB(
887 SkXfermode::kClear_Mode); 894 0, 255, 255, 255, SkXfermode::kClear_Mode);
888 PaintActiveTabBackground(canvas); 895 PaintActiveTabBackground(canvas);
889 canvas->Restore(); 896 canvas->Restore();
890 } 897 }
891 } 898 }
892 } 899 }
893 900
894 void TabRendererGtk::PaintInactiveTabBackground(gfx::Canvas* canvas) { 901 void TabRendererGtk::PaintInactiveTabBackground(gfx::Canvas* canvas) {
895 902
896 // The tab image needs to be lined up with the background image 903 // The tab image needs to be lined up with the background image
897 // so that it feels partially transparent. 904 // so that it feels partially transparent.
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
1083 1090
1084 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 1091 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
1085 const gfx::Font& base_font = rb.GetFont(ResourceBundle::BaseFont); 1092 const gfx::Font& base_font = rb.GetFont(ResourceBundle::BaseFont);
1086 title_font_ = new gfx::Font(base_font.GetFontName(), kFontPixelSize); 1093 title_font_ = new gfx::Font(base_font.GetFontName(), kFontPixelSize);
1087 title_font_height_ = title_font_->GetHeight(); 1094 title_font_height_ = title_font_->GetHeight();
1088 1095
1089 crashed_favicon = rb.GetBitmapNamed(IDR_SAD_FAVICON); 1096 crashed_favicon = rb.GetBitmapNamed(IDR_SAD_FAVICON);
1090 1097
1091 initialized_ = true; 1098 initialized_ = true;
1092 } 1099 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698