Index: chrome/browser/ui/views/ash/browser_non_client_frame_view_ash.cc |
diff --git a/chrome/browser/ui/views/ash/browser_non_client_frame_view_ash.cc b/chrome/browser/ui/views/ash/browser_non_client_frame_view_ash.cc |
deleted file mode 100644 |
index 00c172d2a6faa6fdf668b550fd105cca73e35520..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/views/ash/browser_non_client_frame_view_ash.cc |
+++ /dev/null |
@@ -1,635 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/ui/views/ash/browser_non_client_frame_view_ash.h" |
- |
-#include "ash/wm/frame_painter.h" |
-#include "ash/wm/workspace/frame_maximize_button.h" |
-#include "chrome/browser/themes/theme_service.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/ntp_background_util.h" |
-#include "chrome/browser/ui/search/search.h" |
-#include "chrome/browser/ui/search/search_delegate.h" |
-#include "chrome/browser/ui/search/search_model.h" |
-#include "chrome/browser/ui/search/search_ui.h" |
-#include "chrome/browser/ui/views/avatar_menu_button.h" |
-#include "chrome/browser/ui/views/frame/browser_frame.h" |
-#include "chrome/browser/ui/views/frame/browser_view.h" |
-#include "chrome/browser/ui/views/tab_icon_view.h" |
-#include "chrome/browser/ui/views/tabs/tab_strip.h" |
-#include "chrome/browser/ui/views/toolbar_view.h" |
-#include "chrome/browser/ui/webui/instant_ui.h" |
-#include "content/public/browser/web_contents.h" |
-#include "grit/ash_resources.h" |
-#include "grit/generated_resources.h" // Accessibility names |
-#include "grit/theme_resources.h" |
-#include "ui/aura/client/aura_constants.h" |
-#include "ui/aura/window.h" |
-#include "ui/base/accessibility/accessible_view_state.h" |
-#include "ui/base/hit_test.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/layout.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/base/theme_provider.h" |
-#include "ui/compositor/layer_animator.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/image/image_skia.h" |
-#include "ui/views/controls/button/image_button.h" |
-#include "ui/views/widget/widget.h" |
-#include "ui/views/widget/widget_delegate.h" |
- |
-namespace { |
- |
-// The avatar ends 2 px above the bottom of the tabstrip (which, given the |
-// way the tabstrip draws its bottom edge, will appear like a 1 px gap to the |
-// user). |
-const int kAvatarBottomSpacing = 2; |
-// There are 2 px on each side of the avatar (between the frame border and |
-// it on the left, and between it and the tabstrip on the right). |
-const int kAvatarSideSpacing = 2; |
-// Space between left edge of window and tabstrip. |
-const int kTabstripLeftSpacing = 0; |
-// Space between right edge of tabstrip and maximize button. |
-const int kTabstripRightSpacing = 10; |
-// Height of the shadow of the content area, at the top of the toolbar. |
-const int kContentShadowHeight = 1; |
- |
-// Space between top of window and top of tabstrip for tall headers, such as |
-// for restored windows, apps, etc. |
-int tabstrip_top_spacing_tall() { |
- static int value = -1; |
- if (value == -1) { |
- switch (ui::GetDisplayLayout()) { |
- case ui::LAYOUT_ASH: |
- case ui::LAYOUT_DESKTOP: |
- value = 7; |
- break; |
- case ui::LAYOUT_TOUCH: |
- value = 8; |
- break; |
- default: |
- NOTREACHED(); |
- } |
- } |
- return value; |
-} |
- |
-// Space between top of window and top of tabstrip for short headers, such as |
-// for maximized windows, pop-ups, etc. |
-int tabstrip_top_spacing_short() { |
- static int value = -1; |
- if (value == -1) { |
- switch (ui::GetDisplayLayout()) { |
- case ui::LAYOUT_ASH: |
- case ui::LAYOUT_DESKTOP: |
- // Place them flush to the top to make them clickable when the cursor |
- // is at the screen edge. |
- value = 0; |
- break; |
- case ui::LAYOUT_TOUCH: |
- // Touch needs space for full-size window caption buttons (size, close) |
- // and Fitt's Law doesn't apply to fingers at the screen edge. |
- value = 8; |
- break; |
- default: |
- NOTREACHED(); |
- } |
- } |
- return value; |
-} |
- |
-// Height of the shadow in the tab image, used to ensure clicks in the shadow |
-// area still drag restored windows. This keeps the clickable area large enough |
-// to hit easily. |
-int tab_shadow_height() { |
- static int value = -1; |
- if (value == -1) { |
- switch (ui::GetDisplayLayout()) { |
- case ui::LAYOUT_ASH: |
- case ui::LAYOUT_DESKTOP: |
- value = 4; |
- break; |
- case ui::LAYOUT_TOUCH: |
- value = 5; |
- break; |
- default: |
- NOTREACHED(); |
- } |
- } |
- return value; |
-} |
- |
-} // namespace |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// BrowserNonClientFrameViewAsh, public: |
- |
-// static |
-const char BrowserNonClientFrameViewAsh::kViewClassName[] = |
- "BrowserNonClientFrameViewAsh"; |
- |
-BrowserNonClientFrameViewAsh::BrowserNonClientFrameViewAsh( |
- BrowserFrame* frame, BrowserView* browser_view) |
- : BrowserNonClientFrameView(frame, browser_view), |
- size_button_(NULL), |
- close_button_(NULL), |
- window_icon_(NULL), |
- frame_painter_(new ash::FramePainter), |
- size_button_minimizes_(false) { |
-} |
- |
-BrowserNonClientFrameViewAsh::~BrowserNonClientFrameViewAsh() { |
- // A non-NULL |size_button_| means it was initialized in Init() where |
- // |this| was added as observer to ToolbarSearchAnimator, so remove it now. |
- if (size_button_) { |
- browser_view()->browser()->search_delegate()->toolbar_search_animator(). |
- RemoveObserver(this); |
- } |
-} |
- |
-void BrowserNonClientFrameViewAsh::Init() { |
- // Panels only minimize. |
- ash::FramePainter::SizeButtonBehavior size_button_behavior; |
- if (browser_view()->browser()->is_type_panel() && |
- browser_view()->browser()->app_type() == Browser::APP_TYPE_CHILD) { |
- size_button_minimizes_ = true; |
- size_button_ = new views::ImageButton(this); |
- size_button_behavior = ash::FramePainter::SIZE_BUTTON_MINIMIZES; |
- } else { |
- size_button_ = new ash::FrameMaximizeButton(this, this); |
- size_button_behavior = ash::FramePainter::SIZE_BUTTON_MAXIMIZES; |
- } |
- size_button_->SetAccessibleName( |
- l10n_util::GetStringUTF16(IDS_ACCNAME_MAXIMIZE)); |
- AddChildView(size_button_); |
- close_button_ = new views::ImageButton(this); |
- close_button_->SetAccessibleName( |
- l10n_util::GetStringUTF16(IDS_ACCNAME_CLOSE)); |
- AddChildView(close_button_); |
- |
- // Initializing the TabIconView is expensive, so only do it if we need to. |
- if (browser_view()->ShouldShowWindowIcon()) { |
- window_icon_ = new TabIconView(this); |
- window_icon_->set_is_light(true); |
- AddChildView(window_icon_); |
- window_icon_->Update(); |
- } |
- |
- // Create incognito icon if necessary. |
- UpdateAvatarInfo(); |
- |
- // Frame painter handles layout of these buttons. |
- frame_painter_->Init(frame(), window_icon_, size_button_, close_button_, |
- size_button_behavior); |
- |
- browser_view()->browser()->search_delegate()->toolbar_search_animator(). |
- AddObserver(this); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// BrowserNonClientFrameView overrides: |
- |
-gfx::Rect BrowserNonClientFrameViewAsh::GetBoundsForTabStrip( |
- views::View* tabstrip) const { |
- if (!tabstrip) |
- return gfx::Rect(); |
- TabStripInsets insets(GetTabStripInsets(false)); |
- return gfx::Rect(insets.left, insets.top, |
- std::max(0, width() - insets.left - insets.right), |
- tabstrip->GetPreferredSize().height()); |
-} |
- |
-BrowserNonClientFrameView::TabStripInsets |
-BrowserNonClientFrameViewAsh::GetTabStripInsets(bool force_restored) const { |
- int left = avatar_button() ? kAvatarSideSpacing + |
- browser_view()->GetOTRAvatarIcon().width() + kAvatarSideSpacing : |
- kTabstripLeftSpacing; |
- int right = frame_painter_->GetRightInset() + kTabstripRightSpacing; |
- return TabStripInsets(NonClientTopBorderHeight(force_restored), left, right); |
-} |
- |
-int BrowserNonClientFrameViewAsh::GetThemeBackgroundXInset() const { |
- return frame_painter_->GetThemeBackgroundXInset(); |
-} |
- |
-void BrowserNonClientFrameViewAsh::UpdateThrobber(bool running) { |
- if (window_icon_) |
- window_icon_->Update(); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// views::NonClientFrameView overrides: |
- |
-gfx::Rect BrowserNonClientFrameViewAsh::GetBoundsForClientView() const { |
- int top_height = NonClientTopBorderHeight(false); |
- return frame_painter_->GetBoundsForClientView(top_height, bounds()); |
-} |
- |
-gfx::Rect BrowserNonClientFrameViewAsh::GetWindowBoundsForClientBounds( |
- const gfx::Rect& client_bounds) const { |
- int top_height = NonClientTopBorderHeight(false); |
- return frame_painter_->GetWindowBoundsForClientBounds(top_height, |
- client_bounds); |
-} |
- |
-int BrowserNonClientFrameViewAsh::NonClientHitTest(const gfx::Point& point) { |
- int hit_test = frame_painter_->NonClientHitTest(this, point); |
- // When the window is restored we want a large click target above the tabs |
- // to drag the window, so redirect clicks in the tab's shadow to caption. |
- if (hit_test == HTCLIENT) { // && !frame()->IsMaximized()) { |
- // Convert point to client coordinates. |
- gfx::Point client_point(point); |
- View::ConvertPointToTarget(this, frame()->client_view(), &client_point); |
- // Report hits in shadow at top of tabstrip as caption. |
- gfx::Rect tabstrip_bounds(browser_view()->tabstrip()->bounds()); |
- if (client_point.y() < tabstrip_bounds.y() + tab_shadow_height()) |
- hit_test = HTCAPTION; |
- } |
- return hit_test; |
-} |
- |
-void BrowserNonClientFrameViewAsh::GetWindowMask(const gfx::Size& size, |
- gfx::Path* window_mask) { |
- // Aura does not use window masks. |
-} |
- |
-void BrowserNonClientFrameViewAsh::ResetWindowControls() { |
- size_button_->SetState(views::CustomButton::BS_NORMAL); |
- // The close button isn't affected by this constraint. |
-} |
- |
-void BrowserNonClientFrameViewAsh::UpdateWindowIcon() { |
- if (window_icon_) |
- window_icon_->SchedulePaint(); |
-} |
- |
-void BrowserNonClientFrameViewAsh::UpdateWindowTitle() { |
- if (!frame()->IsFullscreen()) |
- frame_painter_->SchedulePaintForTitle(this, BrowserFrame::GetTitleFont()); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// views::View overrides: |
- |
-void BrowserNonClientFrameViewAsh::OnPaint(gfx::Canvas* canvas) { |
- if (frame()->IsFullscreen()) |
- return; // Nothing visible, don't paint. |
- // The primary header image changes based on window activation state and |
- // theme, so we look it up for each paint. |
- frame_painter_->PaintHeader( |
- this, |
- canvas, |
- ShouldPaintAsActive() ? |
- ash::FramePainter::ACTIVE : ash::FramePainter::INACTIVE, |
- GetThemeFrameImageId(), |
- GetThemeFrameOverlayImage()); |
- if (browser_view()->ShouldShowWindowTitle()) |
- frame_painter_->PaintTitleBar(this, canvas, BrowserFrame::GetTitleFont()); |
- if (browser_view()->IsToolbarVisible()) { |
- chrome::search::Mode mode = |
- browser_view()->browser()->search_model()->mode(); |
- bool fading_in = false; |
- // Get current opacity of gradient background animation to figure out if |
- // we need to paint both flat and gradient backgrounds or just one: |
- // - if |gradient_opacity| < 1f, paint flat background at full opacity, and |
- // only paint gradient background if |gradient_opacity| is not 0f; |
- // - if |gradient_opacity| is 1f, paint the background for the current mode |
- // at full opacity. |
- double gradient_opacity = browser_view()->browser()->search_delegate()-> |
- toolbar_search_animator().GetGradientOpacity(); |
- if (gradient_opacity < 1.0f) { |
- // Paint flat background of |MODE_NTP|. |
- PaintToolbarBackground(canvas, chrome::search::Mode::MODE_NTP); |
- // We're done if we're not showing gradient background. |
- if (gradient_opacity == 0.0f) |
- return; |
- // Otherwise, we're fading in gradient background at |gradient_opacity|. |
- fading_in = true; |
- canvas->SaveLayerAlpha(static_cast<uint8>(gradient_opacity * 0xFF)); |
- } |
- // Paint the background for the current mode. |
- PaintToolbarBackground(canvas, mode.mode); |
- // If we're fading in and have saved canvas, restore it now. |
- if (fading_in) |
- canvas->Restore(); |
- } else { |
- PaintContentEdge(canvas); |
- } |
-} |
- |
-void BrowserNonClientFrameViewAsh::Layout() { |
- frame_painter_->LayoutHeader(this, UseShortHeader()); |
- if (avatar_button()) |
- LayoutAvatar(); |
- BrowserNonClientFrameView::Layout(); |
-} |
- |
-std::string BrowserNonClientFrameViewAsh::GetClassName() const { |
- return kViewClassName; |
-} |
- |
-bool BrowserNonClientFrameViewAsh::HitTestRect(const gfx::Rect& rect) const { |
- // If the rect is outside the bounds of the client area, claim it. |
- if (NonClientFrameView::HitTestRect(rect)) |
- return true; |
- |
- // Otherwise claim it only if it's in a non-tab portion of the tabstrip. |
- if (!browser_view()->tabstrip()) |
- return false; |
- gfx::Rect tabstrip_bounds(browser_view()->tabstrip()->bounds()); |
- gfx::Point tabstrip_origin(tabstrip_bounds.origin()); |
- View::ConvertPointToTarget(frame()->client_view(), this, &tabstrip_origin); |
- tabstrip_bounds.set_origin(tabstrip_origin); |
- if (rect.bottom() > tabstrip_bounds.bottom()) |
- return false; |
- |
- // We convert from our parent's coordinates since we assume we fill its bounds |
- // completely. We need to do this since we're not a parent of the tabstrip, |
- // meaning ConvertPointToTarget would otherwise return something bogus. |
- // TODO(tdanderson): Initialize |browser_view_point| using |rect| instead of |
- // its center point once GetEventHandlerForRect() is implemented. |
- gfx::Point browser_view_point(rect.CenterPoint()); |
- View::ConvertPointToTarget(parent(), browser_view(), &browser_view_point); |
- return browser_view()->IsPositionInWindowCaption(browser_view_point); |
-} |
- |
-void BrowserNonClientFrameViewAsh::GetAccessibleState( |
- ui::AccessibleViewState* state) { |
- state->role = ui::AccessibilityTypes::ROLE_TITLEBAR; |
-} |
- |
-gfx::Size BrowserNonClientFrameViewAsh::GetMinimumSize() { |
- return frame_painter_->GetMinimumSize(this); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// views::ButtonListener overrides: |
- |
-void BrowserNonClientFrameViewAsh::ButtonPressed(views::Button* sender, |
- const ui::Event& event) { |
- // When shift-clicking slow down animations for visual debugging. |
- // We used to do this via an event filter that looked for the shift key being |
- // pressed but this interfered with several normal keyboard shortcuts. |
- if (event.IsShiftDown()) |
- ui::LayerAnimator::set_slow_animation_mode(true); |
- |
- if (sender == size_button_) { |
- // The maximize button may move out from under the cursor. |
- ResetWindowControls(); |
- if (size_button_minimizes_) |
- frame()->Minimize(); |
- else if (frame()->IsMaximized()) |
- frame()->Restore(); |
- else |
- frame()->Maximize(); |
- // |this| may be deleted - some windows delete their frames on maximize. |
- } else if (sender == close_button_) { |
- frame()->Close(); |
- } |
- |
- if (event.IsShiftDown()) |
- ui::LayerAnimator::set_slow_animation_mode(false); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// chrome::TabIconViewModel overrides: |
- |
-bool BrowserNonClientFrameViewAsh::ShouldTabIconViewAnimate() const { |
- // This function is queried during the creation of the window as the |
- // TabIconView we host is initialized, so we need to NULL check the selected |
- // WebContents because in this condition there is not yet a selected tab. |
- content::WebContents* current_tab = browser_view()->GetActiveWebContents(); |
- return current_tab ? current_tab->IsLoading() : false; |
-} |
- |
-gfx::ImageSkia BrowserNonClientFrameViewAsh::GetFaviconForTabIconView() { |
- views::WidgetDelegate* delegate = frame()->widget_delegate(); |
- if (!delegate) |
- return gfx::ImageSkia(); |
- return delegate->GetWindowIcon(); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// chrome::search::ToolbarSearchAnimator::Observer overrides: |
- |
-void BrowserNonClientFrameViewAsh::OnToolbarBackgroundAnimatorProgressed() { |
- // We're fading in the toolbar background, repaint the toolbar background. |
- browser_view()->toolbar()->SchedulePaint(); |
-} |
- |
-void BrowserNonClientFrameViewAsh::OnToolbarBackgroundAnimatorCanceled( |
- content::WebContents* web_contents) { |
- // Fade in of toolbar background has been canceled, repaint the toolbar |
- // background. |
- browser_view()->toolbar()->SchedulePaint(); |
-} |
- |
-void BrowserNonClientFrameViewAsh::OnToolbarSeparatorChanged() { |
- // Omnibox popup has finished closing, paint the toolbar separator. |
- browser_view()->toolbar()->SchedulePaint(); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// BrowserNonClientFrameViewAsh, private: |
- |
- |
-int BrowserNonClientFrameViewAsh::NonClientTopBorderHeight( |
- bool force_restored) const { |
- if (force_restored) |
- return tabstrip_top_spacing_tall(); |
- if (frame()->IsFullscreen()) |
- return 0; |
- // Windows with tab strips need a smaller non-client area. |
- if (browser_view()->IsTabStripVisible()) { |
- if (UseShortHeader()) |
- return tabstrip_top_spacing_short(); |
- return tabstrip_top_spacing_tall(); |
- } |
- // For windows without a tab strip (popups, etc.) ensure we have enough space |
- // to see the window caption buttons. |
- return close_button_->bounds().bottom() - kContentShadowHeight; |
-} |
- |
-bool BrowserNonClientFrameViewAsh::UseShortHeader() const { |
- // Restored browser -> tall header |
- // Maximized browser -> short header |
- // Popup&App window -> tall header |
- // Panel -> short header |
- // Dialogs use short header and are handled via CustomFrameViewAsh. |
- Browser* browser = browser_view()->browser(); |
- switch (browser->type()) { |
- case Browser::TYPE_TABBED: |
- return frame()->IsMaximized(); |
- case Browser::TYPE_POPUP: |
- return false; |
- case Browser::TYPE_PANEL: |
- return true; |
- default: |
- NOTREACHED(); |
- return false; |
- } |
-} |
- |
-void BrowserNonClientFrameViewAsh::LayoutAvatar() { |
- DCHECK(avatar_button()); |
- gfx::ImageSkia incognito_icon = browser_view()->GetOTRAvatarIcon(); |
- |
- int avatar_bottom = GetTabStripInsets(false).top + |
- browser_view()->GetTabStripHeight() - kAvatarBottomSpacing; |
- int avatar_restored_y = avatar_bottom - incognito_icon.height(); |
- int avatar_y = frame()->IsMaximized() ? |
- NonClientTopBorderHeight(false) + kContentShadowHeight: |
- avatar_restored_y; |
- gfx::Rect avatar_bounds(kAvatarSideSpacing, |
- avatar_y, |
- incognito_icon.width(), |
- avatar_bottom - avatar_y); |
- avatar_button()->SetBoundsRect(avatar_bounds); |
-} |
- |
-void BrowserNonClientFrameViewAsh::PaintToolbarBackground( |
- gfx::Canvas* canvas, |
- chrome::search::Mode::Type mode) { |
- gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds()); |
- if (toolbar_bounds.IsEmpty()) |
- return; |
- gfx::Point toolbar_origin(toolbar_bounds.origin()); |
- View::ConvertPointToTarget(browser_view(), this, &toolbar_origin); |
- toolbar_bounds.set_origin(toolbar_origin); |
- |
- int x = toolbar_bounds.x(); |
- int w = toolbar_bounds.width(); |
- int y = toolbar_bounds.y(); |
- int h = toolbar_bounds.height(); |
- |
- // Gross hack: We split the toolbar images into two pieces, since sometimes |
- // (popup mode) the toolbar isn't tall enough to show the whole image. The |
- // split happens between the top shadow section and the bottom gradient |
- // section so that we never break the gradient. |
- int split_point = kFrameShadowThickness * 2; |
- int bottom_y = y + split_point; |
- ui::ThemeProvider* tp = GetThemeProvider(); |
- int bottom_edge_height = h - split_point; |
- |
- // Paint the main toolbar image. Since this image is also used to draw the |
- // tab background, we must use the tab strip offset to compute the image |
- // source y position. If you have to debug this code use an image editor |
- // to paint a diagonal line through the toolbar image and ensure it lines up |
- // across the tab and toolbar. |
- // Determine if we're using NTP background theme for top chrome i.e. toolbar |
- // and tab. |
- gfx::Rect paint_rect(x, bottom_y, w, bottom_edge_height); |
- Profile* profile = browser_view()->browser()->profile(); |
- bool is_instant_extended_api_enabled = |
- chrome::search::IsInstantExtendedAPIEnabled(profile); |
- bool use_ntp_background_theme = false; |
- gfx::ImageSkia* theme_toolbar = |
- chrome::search::GetTopChromeBackgroundImage(tp, |
- is_instant_extended_api_enabled, mode, |
- InstantUI::ShouldShowWhiteNTP(profile), &use_ntp_background_theme); |
- |
- // If |use_ntp_background_theme| is true, paint NTP background theme in |
- // toolbar, else paint IDR_THEME_TOOLBAR. |
- if (use_ntp_background_theme) { |
- // Convert |paint_rect| back to |BrowserView|. |
- gfx::Rect paint_rect_in_browser_view(paint_rect); |
- gfx::Point origin(paint_rect_in_browser_view.origin()); |
- View::ConvertPointToTarget(this, browser_view(), &origin); |
- paint_rect_in_browser_view.set_origin(origin); |
- NtpBackgroundUtil::PaintBackgroundForBrowserClientArea(profile, canvas, |
- paint_rect, browser_view()->size(), paint_rect_in_browser_view); |
- } else { |
- SkColor background_color = chrome::search::GetToolbarBackgroundColor( |
- profile, mode); |
- canvas->FillRect(paint_rect, background_color); |
- |
- canvas->TileImageInt( |
- *theme_toolbar, |
- x + GetThemeBackgroundXInset(), |
- bottom_y - GetTabStripInsets(false).top, |
- x, bottom_y, |
- w, theme_toolbar->height()); |
- } |
- |
- // The content area line has a shadow that extends a couple of pixels above |
- // the toolbar bounds. |
- const int kContentShadowHeight = 2; |
- gfx::ImageSkia* toolbar_top = tp->GetImageSkiaNamed( |
- is_instant_extended_api_enabled ? IDR_TOOLBAR_SHADE_TOP_SEARCH : |
- IDR_TOOLBAR_SHADE_TOP); |
- canvas->TileImageInt(*toolbar_top, |
- 0, 0, |
- x, y - kContentShadowHeight, |
- w, split_point + kContentShadowHeight + 1); |
- |
- // Draw the "lightening" shade line around the edges of the toolbar. |
- gfx::ImageSkia* toolbar_left = tp->GetImageSkiaNamed(IDR_TOOLBAR_SHADE_LEFT); |
- canvas->TileImageInt(*toolbar_left, |
- 0, 0, |
- x + kClientEdgeThickness, |
- y + kClientEdgeThickness + kContentShadowHeight, |
- toolbar_left->width(), theme_toolbar->height()); |
- gfx::ImageSkia* toolbar_right = |
- tp->GetImageSkiaNamed(IDR_TOOLBAR_SHADE_RIGHT); |
- canvas->TileImageInt(*toolbar_right, |
- 0, 0, |
- w - toolbar_right->width() - 2 * kClientEdgeThickness, |
- y + kClientEdgeThickness + kContentShadowHeight, |
- toolbar_right->width(), theme_toolbar->height()); |
- |
- // Only draw the content/toolbar separator if Instant Extended API is disabled |
- // or mode is |DEFAULT|. |
- if (!is_instant_extended_api_enabled || |
- browser_view()->browser()->search_delegate()->toolbar_search_animator(). |
- IsToolbarSeparatorVisible()) { |
- canvas->FillRect( |
- gfx::Rect(x + kClientEdgeThickness, |
- toolbar_bounds.bottom() - kClientEdgeThickness, |
- w - (2 * kClientEdgeThickness), |
- kClientEdgeThickness), |
- ThemeService::GetDefaultColor(is_instant_extended_api_enabled ? |
- ThemeService::COLOR_SEARCH_SEPARATOR_LINE : |
- ThemeService::COLOR_TOOLBAR_SEPARATOR)); |
- } |
-} |
- |
-void BrowserNonClientFrameViewAsh::PaintContentEdge(gfx::Canvas* canvas) { |
- canvas->FillRect(gfx::Rect(0, close_button_->bounds().bottom(), |
- width(), kClientEdgeThickness), |
- ThemeService::GetDefaultColor(ThemeService::COLOR_TOOLBAR_SEPARATOR)); |
-} |
- |
-int BrowserNonClientFrameViewAsh::GetThemeFrameImageId() const { |
- bool is_incognito = browser_view()->IsOffTheRecord(); |
- if (browser_view()->IsBrowserTypeNormal()) { |
- // Use the standard resource ids to allow users to theme the frames. |
- if (ShouldPaintAsActive()) { |
- return is_incognito ? |
- IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME; |
- } |
- return is_incognito ? |
- IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; |
- } |
- // Never theme app and popup windows. |
- if (ShouldPaintAsActive()) { |
- return is_incognito ? |
- IDR_AURA_WINDOW_HEADER_BASE_INCOGNITO_ACTIVE : |
- IDR_AURA_WINDOW_HEADER_BASE_ACTIVE; |
- } |
- return is_incognito ? |
- IDR_AURA_WINDOW_HEADER_BASE_INCOGNITO_INACTIVE : |
- IDR_AURA_WINDOW_HEADER_BASE_INACTIVE; |
-} |
- |
-const gfx::ImageSkia* |
-BrowserNonClientFrameViewAsh::GetThemeFrameOverlayImage() const { |
- ui::ThemeProvider* tp = GetThemeProvider(); |
- if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && |
- browser_view()->IsBrowserTypeNormal() && |
- !browser_view()->IsOffTheRecord()) { |
- return tp->GetImageSkiaNamed(ShouldPaintAsActive() ? |
- IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE); |
- } |
- return NULL; |
-} |