Index: chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc |
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc |
index a79a29b12633a21e0724ed7cb35c035ab783c6bb..b6fad050b0b4c9de1db8522d527ed40439a30d84 100644 |
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc |
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc |
@@ -6,14 +6,16 @@ |
#include "ash/ash_switches.h" |
#include "ash/wm/caption_buttons/frame_caption_button_container_view.h" |
+#include "ash/wm/default_header_painter.h" |
#include "ash/wm/frame_border_hit_test_controller.h" |
-#include "ash/wm/header_painter.h" |
+#include "ash/wm/header_metrics.h" |
#include "base/command_line.h" |
#include "chrome/browser/themes/theme_properties.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/views/avatar_label.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_header_painter_ash.h" |
#include "chrome/browser/ui/views/frame/browser_view.h" |
#include "chrome/browser/ui/views/frame/immersive_mode_controller.h" |
#include "chrome/browser/ui/views/tab_icon_view.h" |
@@ -79,7 +81,6 @@ BrowserNonClientFrameViewAsh::BrowserNonClientFrameViewAsh( |
: BrowserNonClientFrameView(frame, browser_view), |
caption_button_container_(NULL), |
window_icon_(NULL), |
- header_painter_(new ash::HeaderPainter), |
frame_border_hit_test_controller_( |
new ash::FrameBorderHitTestController(frame)) { |
} |
@@ -104,10 +105,17 @@ void BrowserNonClientFrameViewAsh::Init() { |
UpdateAvatarInfo(); |
// HeaderPainter handles layout. |
- ash::HeaderPainter::Style header_style = UsePackagedAppHeaderStyle() ? |
- ash::HeaderPainter::STYLE_OTHER : ash::HeaderPainter::STYLE_BROWSER; |
- header_painter_->Init(header_style, frame(), this, window_icon_, |
- caption_button_container_); |
+ if (UsePackagedAppHeaderStyle()) { |
+ ash::DefaultHeaderPainter* header_painter = new ash::DefaultHeaderPainter; |
+ header_painter->Init(frame(), this, window_icon_, |
+ caption_button_container_); |
+ header_painter_.reset(header_painter); |
James Cook
2014/03/10 17:32:30
Out of curiosity, why reset after Init()? Does he
pkotwicz
2014/03/14 17:56:22
Init is not part of the ash::HeaderPainter interfa
James Cook
2014/03/14 18:27:15
That makes sense. It just looked odd to my reading
pkotwicz
2014/03/16 17:27:18
I swapped the order of lines 110 and 112. Hopefull
|
+ } else { |
+ BrowserHeaderPainterAsh* header_painter = new BrowserHeaderPainterAsh; |
+ header_painter->Init(frame(), browser_view(), this, window_icon_, |
+ caption_button_container_); |
+ header_painter_.reset(header_painter); |
+ } |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -142,19 +150,20 @@ int BrowserNonClientFrameViewAsh::GetTopInset() const { |
return kTabstripTopSpacingTall; |
} |
+ if (UsePackagedAppHeaderStyle()) |
+ return header_painter_->GetHeaderHeightForPainting(); |
+ |
int caption_buttons_bottom = caption_button_container_->bounds().bottom(); |
// The toolbar partially overlaps the caption buttons. |
if (browser_view()->IsToolbarVisible()) |
return caption_buttons_bottom - kContentShadowHeight; |
- int separator_thickness = UsePackagedAppHeaderStyle() ? |
- header_painter_->HeaderContentSeparatorSize() : kClientEdgeThickness; |
- return caption_buttons_bottom + separator_thickness; |
+ return caption_buttons_bottom + kClientEdgeThickness; |
} |
int BrowserNonClientFrameViewAsh::GetThemeBackgroundXInset() const { |
- return header_painter_->GetThemeBackgroundXInset(); |
+ return ash::HeaderMetrics::GetThemeBackgroundXInset(); |
} |
void BrowserNonClientFrameViewAsh::UpdateThrobber(bool running) { |
@@ -172,17 +181,17 @@ gfx::Rect BrowserNonClientFrameViewAsh::GetBoundsForClientView() const { |
// and the top-of-window views are revealed, the TopContainerView paints the |
// window header by redirecting paints from its background to |
// BrowserNonClientFrameViewAsh. |
- return ash::HeaderPainter::GetBoundsForClientView(0, bounds()); |
+ return bounds(); |
} |
gfx::Rect BrowserNonClientFrameViewAsh::GetWindowBoundsForClientBounds( |
const gfx::Rect& client_bounds) const { |
- return ash::HeaderPainter::GetWindowBoundsForClientBounds(0, client_bounds); |
+ return client_bounds; |
} |
int BrowserNonClientFrameViewAsh::NonClientHitTest(const gfx::Point& point) { |
int hit_test = ash::FrameBorderHitTestController::NonClientHitTest(this, |
- header_painter_.get(), point); |
+ caption_button_container_, point); |
// See if the point is actually within the avatar menu button or within |
// the avatar label. |
@@ -228,7 +237,7 @@ void BrowserNonClientFrameViewAsh::UpdateWindowIcon() { |
void BrowserNonClientFrameViewAsh::UpdateWindowTitle() { |
if (!frame()->IsFullscreen()) |
- header_painter_->SchedulePaintForTitle(BrowserFrame::GetTitleFontList()); |
+ header_painter_->SchedulePaintForTitle(); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -245,52 +254,33 @@ void BrowserNonClientFrameViewAsh::OnPaint(gfx::Canvas* canvas) { |
caption_button_container_->SetPaintAsActive(ShouldPaintAsActive()); |
- // The primary header image changes based on window activation state and |
- // theme, so we look it up for each paint. |
- int theme_frame_image_id = 0; |
- int theme_frame_overlay_image_id = 0; |
- if (browser_view()->IsTabStripVisible()) { |
- GetFrameImageIdsForTabbedBrowser(&theme_frame_image_id, |
- &theme_frame_overlay_image_id); |
- } else if (browser_view()->browser()->is_app()) { |
- theme_frame_image_id = GetFrameImageIdForHostedApp(); |
- } else { |
- theme_frame_image_id = GetFrameImageIdForBrowserPopup(); |
- } |
- |
ash::HeaderPainter::Mode header_mode = ShouldPaintAsActive() ? |
ash::HeaderPainter::MODE_ACTIVE : ash::HeaderPainter::MODE_INACTIVE; |
- header_painter_->PaintHeader( |
- canvas, |
- header_mode, |
- theme_frame_image_id, |
- theme_frame_overlay_image_id); |
- if (browser_view()->ShouldShowWindowTitle()) |
- header_painter_->PaintTitleBar(canvas, BrowserFrame::GetTitleFontList()); |
+ header_painter_->PaintHeader(canvas, header_mode); |
if (browser_view()->IsToolbarVisible()) |
PaintToolbarBackground(canvas); |
- else |
+ else if (!UsePackagedAppHeaderStyle()) |
PaintContentEdge(canvas); |
} |
void BrowserNonClientFrameViewAsh::Layout() { |
- // The header must be laid out before computing |header_height| because the |
- // computation of |header_height| for app and popup windows depends on the |
+ // The header must be laid out before computing |painted_height| because the |
+ // computation of |painted_height| for app and popup windows depends on the |
// position of the window controls. |
header_painter_->LayoutHeader(); |
- int header_height = 0; |
+ int painted_height = 0; |
if (browser_view()->IsTabStripVisible()) { |
- header_height = GetTopInset() + |
+ painted_height = GetTopInset() + |
browser_view()->tabstrip()->GetPreferredSize().height(); |
} else if (browser_view()->IsToolbarVisible()) { |
- // Set the header's height so that it overlaps with the toolbar because the |
- // top few pixels of the toolbar are not opaque. |
- header_height = GetTopInset() + kFrameShadowThickness * 2; |
+ // Paint the header so that it overlaps with the top few pixels of the |
+ // toolbar because the top few pixels of the toolbar are not opaque. |
+ painted_height = GetTopInset() + kFrameShadowThickness * 2; |
} else { |
- header_height = GetTopInset(); |
+ painted_height = GetTopInset(); |
} |
- header_painter_->set_header_height(header_height); |
+ header_painter_->SetHeaderHeightForPainting(painted_height); |
if (avatar_button()) |
LayoutAvatar(); |
BrowserNonClientFrameView::Layout(); |
@@ -346,11 +336,6 @@ gfx::Size BrowserNonClientFrameViewAsh::GetMinimumSize() { |
return gfx::Size(min_width, min_client_view_size.height()); |
} |
-void BrowserNonClientFrameViewAsh::OnThemeChanged() { |
- BrowserNonClientFrameView::OnThemeChanged(); |
- header_painter_->OnThemeChanged(); |
-} |
- |
/////////////////////////////////////////////////////////////////////////////// |
// chrome::TabIconViewModel overrides: |
@@ -379,7 +364,8 @@ int BrowserNonClientFrameViewAsh::GetTabStripLeftInset() const { |
} |
int BrowserNonClientFrameViewAsh::GetTabStripRightInset() const { |
- return header_painter_->GetRightInset() + kTabstripRightSpacing; |
+ return caption_button_container_->GetPreferredSize().width() + |
+ kTabstripRightSpacing; |
} |
bool BrowserNonClientFrameViewAsh::UseImmersiveLightbarHeaderStyle() const { |
@@ -521,68 +507,9 @@ void BrowserNonClientFrameViewAsh::PaintToolbarBackground(gfx::Canvas* canvas) { |
} |
void BrowserNonClientFrameViewAsh::PaintContentEdge(gfx::Canvas* canvas) { |
- if (UsePackagedAppHeaderStyle()) { |
- ash::HeaderPainter::Mode header_mode = ShouldPaintAsActive() ? |
- ash::HeaderPainter::MODE_ACTIVE : ash::HeaderPainter::MODE_INACTIVE; |
- header_painter_->PaintHeaderContentSeparator(canvas, header_mode); |
- } else { |
- canvas->FillRect(gfx::Rect(0, caption_button_container_->bounds().bottom(), |
- width(), kClientEdgeThickness), |
- ThemeProperties::GetDefaultColor( |
- ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); |
- } |
-} |
- |
-void BrowserNonClientFrameViewAsh::GetFrameImageIdsForTabbedBrowser( |
- int* frame_image_id, |
- int* frame_overlay_image_id) const { |
- *frame_overlay_image_id = 0; |
- |
- bool is_incognito = !browser_view()->IsRegularOrGuestSession(); |
- ui::ThemeProvider* tp = GetThemeProvider(); |
- if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && |
- !is_incognito) { |
- *frame_overlay_image_id = ShouldPaintAsActive() ? |
- IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE; |
- } |
- |
- if (ShouldPaintAsActive()) { |
- *frame_image_id = is_incognito ? |
- IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME; |
- } else { |
- *frame_image_id = is_incognito ? |
- IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; |
- } |
- |
- if ((frame()->IsMaximized() || frame()->IsFullscreen()) && |
- !tp->HasCustomImage(IDR_THEME_FRAME) && |
- !tp->HasCustomImage(*frame_image_id) && |
- *frame_overlay_image_id == 0) { |
- *frame_image_id = IDR_AURA_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED; |
- } |
-} |
- |
-int BrowserNonClientFrameViewAsh::GetFrameImageIdForBrowserPopup() const { |
- // Browser popups are not themeable. |
- if (frame()->IsMaximized() || frame()->IsFullscreen()) |
- return IDR_AURA_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED; |
- |
- bool is_incognito = !browser_view()->IsRegularOrGuestSession(); |
- if (ShouldPaintAsActive()) { |
- return is_incognito ? |
- IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_ACTIVE : |
- IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_ACTIVE; |
- } |
- return is_incognito ? |
- IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_INACTIVE : |
- IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INACTIVE; |
-} |
- |
-int BrowserNonClientFrameViewAsh::GetFrameImageIdForHostedApp() const { |
- if (UsePackagedAppHeaderStyle()) { |
- return ShouldPaintAsActive() ? |
- IDR_AURA_WINDOW_HEADER_BASE_ACTIVE : |
- IDR_AURA_WINDOW_HEADER_BASE_INACTIVE; |
- } |
- return GetFrameImageIdForBrowserPopup(); |
+ DCHECK(!UsePackagedAppHeaderStyle()); |
+ canvas->FillRect(gfx::Rect(0, caption_button_container_->bounds().bottom(), |
+ width(), kClientEdgeThickness), |
+ ThemeProperties::GetDefaultColor( |
+ ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); |
} |