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

Unified Diff: chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc

Issue 18486007: Fix the misalignment on CrOS of the tab background images (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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
Index: chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc
diff --git a/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc b/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc
index f8e98273d8facf3b0f05ec2de3abf1f446a660ed..7d16ab570d53e9b7ca2999330fa3d13062852aae 100644
--- a/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc
+++ b/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc
@@ -502,23 +502,8 @@ void TabRendererGtk::PaintFaviconArea(GtkWidget* widget, cairo_t* cr) {
cairo_matrix_init_translate(&cairo_matrix, x(), y());
cairo_set_matrix(cr, &cairo_matrix);
- // Which background should we be painting?
- int theme_id;
- int offset_y = 0;
- if (IsActive()) {
- theme_id = IDR_THEME_TOOLBAR;
- } else {
- theme_id = data_.incognito ? IDR_THEME_TAB_BACKGROUND_INCOGNITO :
- IDR_THEME_TAB_BACKGROUND;
-
- if (!theme_service_->HasCustomImage(theme_id))
- offset_y = background_offset_y_;
- }
-
// Paint the background behind the favicon.
- const gfx::Image tab_bg = theme_service_->GetImageNamed(theme_id);
- tab_bg.ToCairo()->SetSource(cr, widget, -x(), -offset_y);
- cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT);
+ SetTabBackgroundImageAsSource(cr, widget, favicon_bounds_);
cairo_rectangle(cr,
favicon_bounds_.x(), favicon_bounds_.y(),
favicon_bounds_.width(), favicon_bounds_.height());
@@ -957,17 +942,6 @@ void TabRendererGtk::PaintIcon(GtkWidget* widget, cairo_t* cr) {
cairo_paint(cr);
} else if (data_.capture_state == RECORDING) {
// Add mask around the recording overlay image (red dot).
- gfx::CairoCachedSurface* tab_bg;
- if (IsActive()) {
- tab_bg = theme_service_->GetImageNamed(IDR_THEME_TOOLBAR).ToCairo();
- } else {
- int theme_id = data_.incognito ?
- IDR_THEME_TAB_BACKGROUND_INCOGNITO : IDR_THEME_TAB_BACKGROUND;
- tab_bg = theme_service_->GetImageNamed(theme_id).ToCairo();
- }
- tab_bg->SetSource(cr, widget, -background_offset_x_, 0);
- cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT);
-
gfx::CairoCachedSurface* recording_mask =
theme_service_->GetImageNamed(IDR_TAB_RECORDING_MASK).ToCairo();
int offset_from_right = data_.cairo_overlay.Width() +
@@ -978,6 +952,9 @@ void TabRendererGtk::PaintIcon(GtkWidget* widget, cairo_t* cr) {
(recording_mask->Height() - data_.cairo_overlay.Height()) / 2;
int favicon_y = favicon_bounds_.y() + favicon_hiding_offset_ +
favicon_bounds_.height() - offset_from_bottom;
+ SetTabBackgroundImageAsSource(cr, widget,
+ gfx::Rect(favicon_x, favicon_y, recording_mask->Width(),
+ recording_mask->Height()));
recording_mask->MaskSource(cr, widget, favicon_x, favicon_y);
if (!IsActive()) {
@@ -1026,15 +1003,56 @@ void TabRendererGtk::PaintTabBackground(GtkWidget* widget, cairo_t* cr) {
}
}
-void TabRendererGtk::DrawTabBackground(
- cairo_t* cr,
- GtkWidget* widget,
- const gfx::Image& tab_bg,
- int offset_x,
- int offset_y) {
- tab_bg.ToCairo()->SetSource(cr, widget, -offset_x, -offset_y);
+void TabRendererGtk::SetTabBackgroundImageAsSource(cairo_t* cr,
+ GtkWidget* widget,
+ const gfx::Rect& bounds) {
+ int tab_bg_id = 0;
+ int tab_bg_offset_y = 0;
+ int tab_bg_overlay_id = 0;
+ if (IsActive()) {
+ tab_bg_id = IDR_THEME_TOOLBAR;
+
+ // The image at |tab_bg_id| is aligned with the top of the tab.
+ tab_bg_offset_y = 0;
+ } else {
+ tab_bg_id = data_.incognito ? IDR_THEME_TAB_BACKGROUND_INCOGNITO :
+ IDR_THEME_TAB_BACKGROUND;
+ // |tab_bg_id| is the tinted frame image. Set |tab_bg_offset_y_| so that
+ // the image is aligned with the top of the frame.
+ tab_bg_offset_y = background_offset_y_;
+
+ tab_bg_overlay_id = data_.incognito ?
+ IDR_THEME_TAB_BACKGROUND_INCOGNITO_OVERLAY :
+ IDR_THEME_TAB_BACKGROUND_OVERLAY;
+ }
+ gfx::Image tab_bg = theme_service_->GetImageNamed(tab_bg_id);
+ tab_bg.ToCairo()->SetSource(cr, widget, -background_offset_x_,
+ -tab_bg_offset_y);
cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT);
+ // The default theme does not provide overlay images.
+ if (tab_bg_overlay_id != 0 &&
+ theme_service_->HasCustomImage(tab_bg_overlay_id)) {
+ cairo_push_group(cr);
+ cairo_rectangle(cr, bounds.x(), bounds.y(), bounds.width(),
+ bounds.height());
+ cairo_fill_preserve(cr);
+
+ gfx::Image tab_bg_overlay =
+ theme_service_->GetImageNamed(tab_bg_overlay_id);
+ // |tab_bg_overlay| is aligned with the top of the tab.
+ tab_bg_overlay.ToCairo()->SetSource(cr, widget, -background_offset_x_, 0);
+ cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT);
+ cairo_fill(cr);
+
+ cairo_pop_group_to_source(cr);
+ }
+}
+
+void TabRendererGtk::DrawTabBackground(cairo_t* cr, GtkWidget* widget) {
+ SetTabBackgroundImageAsSource(cr, widget,
+ gfx::Rect(0, 0, width(), tab_inactive_l_height_));
+
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
// Draw left edge
@@ -1084,28 +1102,14 @@ void TabRendererGtk::DrawTabShadow(cairo_t* cr,
void TabRendererGtk::PaintInactiveTabBackground(GtkWidget* widget,
cairo_t* cr) {
- int theme_id = data_.incognito ?
- IDR_THEME_TAB_BACKGROUND_INCOGNITO : IDR_THEME_TAB_BACKGROUND;
-
- gfx::Image tab_bg = theme_service_->GetImageNamed(theme_id);
-
- // If the theme is providing a custom background image, then its top edge
- // should be at the top of the tab. Otherwise, we assume that the background
- // image is a composited foreground + frame image.
- int offset_y = theme_service_->HasCustomImage(theme_id) ?
- 0 : background_offset_y_;
-
- DrawTabBackground(cr, widget, tab_bg, background_offset_x_, offset_y);
-
+ DrawTabBackground(cr, widget);
DrawTabShadow(cr, widget, IDR_TAB_INACTIVE_LEFT, IDR_TAB_INACTIVE_CENTER,
IDR_TAB_INACTIVE_RIGHT);
}
void TabRendererGtk::PaintActiveTabBackground(GtkWidget* widget,
cairo_t* cr) {
- gfx::Image tab_bg = theme_service_->GetImageNamed(IDR_THEME_TOOLBAR);
-
- DrawTabBackground(cr, widget, tab_bg, background_offset_x_, 0);
+ DrawTabBackground(cr, widget);
DrawTabShadow(cr, widget, IDR_TAB_ACTIVE_LEFT, IDR_TAB_ACTIVE_CENTER,
IDR_TAB_ACTIVE_RIGHT);
}

Powered by Google App Engine
This is Rietveld 408576698