Index: chrome/browser/ui/views/tabs/tab.cc |
diff --git a/chrome/browser/ui/views/tabs/tab.cc b/chrome/browser/ui/views/tabs/tab.cc |
index 9efec73a1ccddd97907794e46d7aaf1c535f8756..726dc777d9aacc0f9f3bf8a4a9143a1d7e0000e8 100644 |
--- a/chrome/browser/ui/views/tabs/tab.cc |
+++ b/chrome/browser/ui/views/tabs/tab.cc |
@@ -493,9 +493,56 @@ void Tab::OnMouseMoved(const views::MouseEvent& event) { |
//////////////////////////////////////////////////////////////////////////////// |
// Tab, private |
+gfx::ImageSkia* Tab::GetTabBackgroundImage( |
+ chrome::search::Mode::Type mode) const { |
+ ui::ThemeProvider* tp = GetThemeProvider(); |
+ if (!tp) { |
+ DCHECK(tp) << "Unable to get theme provider"; |
+ return NULL; |
+ } |
+ |
+ if (!controller() || !controller()->IsInstantExtendedAPIEnabled()) |
+ return tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR); |
+ |
+ switch (mode) { |
+ case chrome::search::Mode::MODE_NTP: |
+ return tp->GetImageSkiaNamed(IDR_THEME_NTP_BACKGROUND); |
+ |
+ case chrome::search::Mode::MODE_SEARCH: |
+ case chrome::search::Mode::MODE_DEFAULT: |
+ default: |
+ return tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR_SEARCH); |
+ } |
+} |
+ |
void Tab::PaintTabBackground(gfx::Canvas* canvas) { |
if (IsActive()) { |
- PaintActiveTabBackground(canvas); |
+ bool fading_in = false; |
+ // If mode is SEARCH, we might be waiting to fade in or fading in new |
+ // background, in which case, the previous background needs to be painted. |
+ if (data().mode == chrome::search::Mode::MODE_SEARCH && |
+ data().background_state & |
+ chrome::search::ToolbarSearchAnimator::BACKGROUND_STATE_NTP) { |
+ // Paint background for NTP mode. |
+ PaintActiveTabBackground(canvas, |
+ GetTabBackgroundImage(chrome::search::Mode::MODE_NTP)); |
+ // We're done if we're not showing background for |MODE_SEARCH|. |
+ if (!(data().background_state & chrome::search::ToolbarSearchAnimator:: |
+ BACKGROUND_STATE_SEARCH)) { |
+ return; |
+ } |
+ // Otherwise, we're fading in the background for |MODE_SEARCH| at |
+ // |data().search_background_opacity|. |
+ fading_in = true; |
+ canvas->SaveLayerAlpha( |
+ static_cast<uint8>(data().search_background_opacity * 0xFF), |
+ gfx::Rect(width(), height())); |
+ } |
+ // Paint the background for the current mode. |
+ PaintActiveTabBackground(canvas, GetTabBackgroundImage(data().mode)); |
+ // If we're fading in and have saved canvas, restore it now. |
+ if (fading_in) |
+ canvas->Restore(); |
} else { |
if (mini_title_animation_.get() && mini_title_animation_->is_animating()) |
PaintInactiveTabBackgroundWithTitleChange(canvas); |
@@ -507,7 +554,7 @@ void Tab::PaintTabBackground(gfx::Canvas* canvas) { |
canvas->SaveLayerAlpha(static_cast<int>(throb_value * 0xff), |
gfx::Rect(width(), height())); |
canvas->sk_canvas()->drawARGB(0, 255, 255, 255, SkXfermode::kClear_Mode); |
- PaintActiveTabBackground(canvas); |
+ PaintActiveTabBackground(canvas, GetTabBackgroundImage(data().mode)); |
canvas->Restore(); |
} |
} |
@@ -645,26 +692,24 @@ void Tab::PaintInactiveTabBackground(gfx::Canvas* canvas) { |
width() - tab_inactive_image->r_width, 0); |
} |
-void Tab::PaintActiveTabBackground(gfx::Canvas* canvas) { |
- int offset = GetMirroredX() + background_offset_.x(); |
- ui::ThemeProvider* tp = GetThemeProvider(); |
- DCHECK(tp) << "Unable to get theme provider"; |
+void Tab::PaintActiveTabBackground(gfx::Canvas* canvas, |
+ gfx::ImageSkia* tab_background) { |
+ DCHECK(tab_background); |
- gfx::ImageSkia* tab_bg = |
- GetThemeProvider()->GetImageSkiaNamed(IDR_THEME_TOOLBAR); |
+ int offset = GetMirroredX() + background_offset_.x(); |
TabImage* tab_image = &tab_active_; |
TabImage* alpha = &tab_alpha_; |
// Draw left edge. |
gfx::ImageSkia tab_l = SkBitmapOperations::CreateTiledBitmap( |
- *tab_bg, offset, 0, tab_image->l_width, height()); |
+ *tab_background, offset, 0, tab_image->l_width, height()); |
gfx::ImageSkia theme_l = |
SkBitmapOperations::CreateMaskedBitmap(tab_l, *alpha->image_l); |
canvas->DrawImageInt(theme_l, 0, 0); |
// Draw right edge. |
- gfx::ImageSkia tab_r = SkBitmapOperations::CreateTiledBitmap(*tab_bg, |
+ gfx::ImageSkia tab_r = SkBitmapOperations::CreateTiledBitmap(*tab_background, |
offset + width() - tab_image->r_width, 0, tab_image->r_width, height()); |
gfx::ImageSkia theme_r = |
SkBitmapOperations::CreateMaskedBitmap(tab_r, *alpha->image_r); |
@@ -672,7 +717,7 @@ void Tab::PaintActiveTabBackground(gfx::Canvas* canvas) { |
// Draw center. Instead of masking out the top portion we simply skip over it |
// by incrementing by GetDropShadowHeight(), since it's a simple rectangle. |
- canvas->TileImageInt(*tab_bg, |
+ canvas->TileImageInt(*tab_background, |
offset + tab_image->l_width, |
drop_shadow_height() + tab_image->y_offset, |
tab_image->l_width, |