diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-20 18:17:04 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-20 18:17:04 +0000 |
commit | d4832d6632e6b509c87f65affcd23cd9c013eabf (patch) | |
tree | b79ce0076c56138a1dbe942f39af20a1bd62631c /chrome/browser/gtk | |
parent | 3a9cd87bbd2d628342eea460e27d0ef65ed7d953 (diff) | |
download | chromium_src-d4832d6632e6b509c87f65affcd23cd9c013eabf.zip chromium_src-d4832d6632e6b509c87f65affcd23cd9c013eabf.tar.gz chromium_src-d4832d6632e6b509c87f65affcd23cd9c013eabf.tar.bz2 |
Translate the canvas used to render gtk tabs by the tab bounds in order to render at (0,0) to match windows metrics. This helps eliminate differences between the two tab rendering implementations.
TEST=Open multiple tabs. Make sure the tabs are rendered correctly (close button, elided title text, favicon, sad tab crash animation).
Review URL: http://codereview.chromium.org/113623
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16495 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r-- | chrome/browser/gtk/tabs/tab_renderer_gtk.cc | 45 | ||||
-rw-r--r-- | chrome/browser/gtk/tabs/tab_renderer_gtk.h | 4 |
2 files changed, 28 insertions, 21 deletions
diff --git a/chrome/browser/gtk/tabs/tab_renderer_gtk.cc b/chrome/browser/gtk/tabs/tab_renderer_gtk.cc index 6bcc6fc..b222002 100644 --- a/chrome/browser/gtk/tabs/tab_renderer_gtk.cc +++ b/chrome/browser/gtk/tabs/tab_renderer_gtk.cc @@ -451,8 +451,12 @@ void TabRendererGtk::SchedulePaint() { gtk_widget_queue_draw(tab_.get()); } +gfx::Rect TabRendererGtk::GetLocalBounds() { + return gfx::Rect(0, 0, bounds_.width(), bounds_.height()); +} + void TabRendererGtk::Layout() { - gfx::Rect local_bounds = bounds_; + gfx::Rect local_bounds = GetLocalBounds(); if (local_bounds.IsEmpty()) return; local_bounds.Inset(kLeftPadding, kTopPadding, kRightPadding, kBottomPadding); @@ -508,7 +512,7 @@ void TabRendererGtk::Layout() { int title_width; if (close_button_bounds_.width() && close_button_bounds_.height()) { - title_width = std::max(bounds_.x() + close_button_bounds_.x() - + title_width = std::max(close_button_bounds_.x() - kTitleCloseButtonSpacing - title_left, 0); } else { title_width = std::max(local_bounds.width() - title_left, 0); @@ -535,6 +539,10 @@ void TabRendererGtk::PaintTab(GdkEventExpose* event) { if (canvas.isEmpty()) return; + // The tab is rendered into a windowless widget whose offset is at the + // coordinate [x(), y()]. Translate by that offset so we can render at (0,0) + // to match windows rendering metrics. + canvas.TranslateInt(x(), y()); Paint(&canvas); } @@ -588,7 +596,7 @@ void TabRendererGtk::PaintInactiveTabBackground(gfx::Canvas* canvas) { tab_l, *tab_alpha.image_l); canvas->DrawBitmapInt(theme_l, 0, 0, theme_l.width(), theme_l.height() - 1, - bounds_.x(), bounds_.y(), theme_l.width(), theme_l.height() - 1, + 0, 0, theme_l.width(), theme_l.height() - 1, false); // Draw right edge. @@ -600,22 +608,20 @@ void TabRendererGtk::PaintInactiveTabBackground(gfx::Canvas* canvas) { tab_r, *tab_alpha.image_r); canvas->DrawBitmapInt(theme_r, 0, 0, theme_r.width(), theme_r.height() - 1, - bounds_.x() + width() - theme_r.width(), bounds_.y(), - theme_r.width(), theme_r.height() - 1, + width() - theme_r.width(), 0, theme_r.width(), theme_r.height() - 1, false); // Draw center. canvas->TileImageInt(*tab_bg, offset + tab_active_.l_width, kDropShadowOffset + offset_y, - bounds_.x() + tab_active_.l_width, bounds_.y() + 2, + tab_active_.l_width, 2, width() - tab_active_.l_width - tab_active_.r_width, height() - 3); - canvas->DrawBitmapInt(*tab_inactive_.image_l, bounds_.x(), bounds_.y()); + canvas->DrawBitmapInt(*tab_inactive_.image_l, 0, 0); canvas->TileImageInt(*tab_inactive_.image_c, tab_inactive_.l_width, 0, - bounds_.x() + width() - tab_inactive_.l_width - tab_inactive_.r_width, - bounds_.y() + height()); + width() - tab_inactive_.l_width - tab_inactive_.r_width, height()); canvas->DrawBitmapInt(*tab_inactive_.image_r, - bounds_.x() + width() - tab_inactive_.r_width, bounds_.y()); + width() - tab_inactive_.r_width, 0); } void TabRendererGtk::PaintActiveTabBackground(gfx::Canvas* canvas) { @@ -628,7 +634,7 @@ void TabRendererGtk::PaintActiveTabBackground(gfx::Canvas* canvas) { *tab_bg, offset, 0, tab_active_.l_width, height()); SkBitmap theme_l = skia::ImageOperations::CreateMaskedBitmap( tab_l, *tab_alpha.image_l); - canvas->DrawBitmapInt(theme_l, bounds_.x(), bounds_.y()); + canvas->DrawBitmapInt(theme_l, 0, 0); // Draw right edge. SkBitmap tab_r = skia::ImageOperations::CreateTiledBitmap( @@ -637,21 +643,18 @@ void TabRendererGtk::PaintActiveTabBackground(gfx::Canvas* canvas) { tab_active_.r_width, height()); SkBitmap theme_r = skia::ImageOperations::CreateMaskedBitmap( tab_r, *tab_alpha.image_r); - canvas->DrawBitmapInt(theme_r, - bounds_.x() + width() - tab_active_.r_width, bounds_.y()); + canvas->DrawBitmapInt(theme_r, width() - tab_active_.r_width, 0); // Draw center. canvas->TileImageInt(*tab_bg, offset + tab_active_.l_width, 2, - bounds_.x() + tab_active_.l_width, bounds_.y() + 2, + tab_active_.l_width, 2, width() - tab_active_.l_width - tab_active_.r_width, height() - 2); - canvas->DrawBitmapInt(*tab_active_.image_l, bounds_.x(), bounds_.y()); - canvas->TileImageInt(*tab_active_.image_c, - bounds_.x() + tab_active_.l_width, bounds_.y(), + canvas->DrawBitmapInt(*tab_active_.image_l, 0, 0); + canvas->TileImageInt(*tab_active_.image_c, tab_active_.l_width, 0, width() - tab_active_.l_width - tab_active_.r_width, height()); - canvas->DrawBitmapInt(*tab_active_.image_r, - bounds_.x() + width() - tab_active_.r_width, bounds_.y()); + canvas->DrawBitmapInt(*tab_active_.image_r, width() - tab_active_.r_width, 0); } void TabRendererGtk::PaintLoadingAnimation(gfx::Canvas* canvas) { @@ -666,8 +669,8 @@ void TabRendererGtk::PaintLoadingAnimation(gfx::Canvas* canvas) { // Just like with the Tab's title and favicon, the position for the page // loading animation also needs to be mirrored if the UI layout is RTL. // TODO(willchan): Handle RTL. - // dst_x = x() + width() - kLeftPadding - image_size; - int dst_x = x() + kLeftPadding; + // dst_x = width() - kLeftPadding - image_size; + int dst_x = kLeftPadding; canvas->DrawBitmapInt(*frames, image_offset, 0, image_size, image_size, dst_x, dst_y, image_size, image_size, diff --git a/chrome/browser/gtk/tabs/tab_renderer_gtk.h b/chrome/browser/gtk/tabs/tab_renderer_gtk.h index b353049..2cff947 100644 --- a/chrome/browser/gtk/tabs/tab_renderer_gtk.h +++ b/chrome/browser/gtk/tabs/tab_renderer_gtk.h @@ -194,6 +194,10 @@ class TabRendererGtk : public AnimationDelegate { // Generates the bounds for the interior items of the tab. void Layout(); + // Returns the local bounds of the tab. This returns the rect + // {0, 0, width(), height()} for now, as we don't yet support borders. + gfx::Rect GetLocalBounds(); + // Moves the close button widget within the GtkFixed container. void MoveCloseButtonWidget(); |