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

Side by Side Diff: chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc

Issue 189463013: [Refactor] Move code for painting the window header for browser windows out of ash (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.h" 5 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/frame/caption_buttons/frame_caption_button_container_view.h" 8 #include "ash/frame/caption_buttons/frame_caption_button_container_view.h"
9 #include "ash/frame/default_header_painter.h"
9 #include "ash/frame/frame_border_hit_test_controller.h" 10 #include "ash/frame/frame_border_hit_test_controller.h"
10 #include "ash/frame/header_painter.h" 11 #include "ash/frame/header_painter_util.h"
11 #include "base/command_line.h" 12 #include "base/command_line.h"
12 #include "chrome/browser/themes/theme_properties.h" 13 #include "chrome/browser/themes/theme_properties.h"
13 #include "chrome/browser/ui/browser.h" 14 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/views/avatar_label.h" 15 #include "chrome/browser/ui/views/avatar_label.h"
15 #include "chrome/browser/ui/views/avatar_menu_button.h" 16 #include "chrome/browser/ui/views/avatar_menu_button.h"
16 #include "chrome/browser/ui/views/frame/browser_frame.h" 17 #include "chrome/browser/ui/views/frame/browser_frame.h"
18 #include "chrome/browser/ui/views/frame/browser_header_painter_ash.h"
17 #include "chrome/browser/ui/views/frame/browser_view.h" 19 #include "chrome/browser/ui/views/frame/browser_view.h"
18 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" 20 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
19 #include "chrome/browser/ui/views/tab_icon_view.h" 21 #include "chrome/browser/ui/views/tab_icon_view.h"
20 #include "chrome/browser/ui/views/tabs/tab_strip.h" 22 #include "chrome/browser/ui/views/tabs/tab_strip.h"
21 #include "chrome/common/chrome_switches.h" 23 #include "chrome/common/chrome_switches.h"
22 #include "content/public/browser/web_contents.h" 24 #include "content/public/browser/web_contents.h"
23 #include "grit/ash_resources.h" 25 #include "grit/ash_resources.h"
24 #include "grit/theme_resources.h" 26 #include "grit/theme_resources.h"
25 #include "ui/accessibility/ax_view_state.h" 27 #include "ui/accessibility/ax_view_state.h"
26 #include "ui/aura/client/aura_constants.h" 28 #include "ui/aura/client/aura_constants.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 74
73 // static 75 // static
74 const char BrowserNonClientFrameViewAsh::kViewClassName[] = 76 const char BrowserNonClientFrameViewAsh::kViewClassName[] =
75 "BrowserNonClientFrameViewAsh"; 77 "BrowserNonClientFrameViewAsh";
76 78
77 BrowserNonClientFrameViewAsh::BrowserNonClientFrameViewAsh( 79 BrowserNonClientFrameViewAsh::BrowserNonClientFrameViewAsh(
78 BrowserFrame* frame, BrowserView* browser_view) 80 BrowserFrame* frame, BrowserView* browser_view)
79 : BrowserNonClientFrameView(frame, browser_view), 81 : BrowserNonClientFrameView(frame, browser_view),
80 caption_button_container_(NULL), 82 caption_button_container_(NULL),
81 window_icon_(NULL), 83 window_icon_(NULL),
82 header_painter_(new ash::HeaderPainter),
83 frame_border_hit_test_controller_( 84 frame_border_hit_test_controller_(
84 new ash::FrameBorderHitTestController(frame)) { 85 new ash::FrameBorderHitTestController(frame)) {
85 } 86 }
86 87
87 BrowserNonClientFrameViewAsh::~BrowserNonClientFrameViewAsh() { 88 BrowserNonClientFrameViewAsh::~BrowserNonClientFrameViewAsh() {
88 } 89 }
89 90
90 void BrowserNonClientFrameViewAsh::Init() { 91 void BrowserNonClientFrameViewAsh::Init() {
91 caption_button_container_ = new ash::FrameCaptionButtonContainerView(frame(), 92 caption_button_container_ = new ash::FrameCaptionButtonContainerView(frame(),
92 ash::FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); 93 ash::FrameCaptionButtonContainerView::MINIMIZE_ALLOWED);
93 AddChildView(caption_button_container_); 94 AddChildView(caption_button_container_);
94 95
95 // Initializing the TabIconView is expensive, so only do it if we need to. 96 // Initializing the TabIconView is expensive, so only do it if we need to.
96 if (browser_view()->ShouldShowWindowIcon()) { 97 if (browser_view()->ShouldShowWindowIcon()) {
97 window_icon_ = new TabIconView(this, NULL); 98 window_icon_ = new TabIconView(this, NULL);
98 window_icon_->set_is_light(true); 99 window_icon_->set_is_light(true);
99 AddChildView(window_icon_); 100 AddChildView(window_icon_);
100 window_icon_->Update(); 101 window_icon_->Update();
101 } 102 }
102 103
103 // Create incognito icon if necessary. 104 // Create incognito icon if necessary.
104 UpdateAvatarInfo(); 105 UpdateAvatarInfo();
105 106
106 // HeaderPainter handles layout. 107 // HeaderPainter handles layout.
107 ash::HeaderPainter::Style header_style = UsePackagedAppHeaderStyle() ? 108 if (UsePackagedAppHeaderStyle()) {
108 ash::HeaderPainter::STYLE_OTHER : ash::HeaderPainter::STYLE_BROWSER; 109 ash::DefaultHeaderPainter* header_painter = new ash::DefaultHeaderPainter;
109 header_painter_->Init(header_style, frame(), this, window_icon_, 110 header_painter_.reset(header_painter);
110 caption_button_container_); 111 header_painter->Init(frame(), this, window_icon_,
112 caption_button_container_);
113 } else {
114 BrowserHeaderPainterAsh* header_painter = new BrowserHeaderPainterAsh;
115 header_painter_.reset(header_painter);
116 header_painter->Init(frame(), browser_view(), this, window_icon_,
117 caption_button_container_);
118 }
111 } 119 }
112 120
113 /////////////////////////////////////////////////////////////////////////////// 121 ///////////////////////////////////////////////////////////////////////////////
114 // BrowserNonClientFrameView overrides: 122 // BrowserNonClientFrameView overrides:
115 123
116 gfx::Rect BrowserNonClientFrameViewAsh::GetBoundsForTabStrip( 124 gfx::Rect BrowserNonClientFrameViewAsh::GetBoundsForTabStrip(
117 views::View* tabstrip) const { 125 views::View* tabstrip) const {
118 if (!tabstrip) 126 if (!tabstrip)
119 return gfx::Rect(); 127 return gfx::Rect();
120 128
(...skipping 14 matching lines...) Expand all
135 if (!ShouldPaint() || UseImmersiveLightbarHeaderStyle()) 143 if (!ShouldPaint() || UseImmersiveLightbarHeaderStyle())
136 return 0; 144 return 0;
137 145
138 if (browser_view()->IsTabStripVisible()) { 146 if (browser_view()->IsTabStripVisible()) {
139 if (frame()->IsMaximized() || frame()->IsFullscreen()) 147 if (frame()->IsMaximized() || frame()->IsFullscreen())
140 return kTabstripTopSpacingShort; 148 return kTabstripTopSpacingShort;
141 else 149 else
142 return kTabstripTopSpacingTall; 150 return kTabstripTopSpacingTall;
143 } 151 }
144 152
153 if (UsePackagedAppHeaderStyle())
154 return header_painter_->GetHeaderHeightForPainting();
155
145 int caption_buttons_bottom = caption_button_container_->bounds().bottom(); 156 int caption_buttons_bottom = caption_button_container_->bounds().bottom();
146 157
147 // The toolbar partially overlaps the caption buttons. 158 // The toolbar partially overlaps the caption buttons.
148 if (browser_view()->IsToolbarVisible()) 159 if (browser_view()->IsToolbarVisible())
149 return caption_buttons_bottom - kContentShadowHeight; 160 return caption_buttons_bottom - kContentShadowHeight;
150 161
151 int separator_thickness = UsePackagedAppHeaderStyle() ? 162 return caption_buttons_bottom + kClientEdgeThickness;
152 header_painter_->HeaderContentSeparatorSize() : kClientEdgeThickness;
153 return caption_buttons_bottom + separator_thickness;
154 } 163 }
155 164
156 int BrowserNonClientFrameViewAsh::GetThemeBackgroundXInset() const { 165 int BrowserNonClientFrameViewAsh::GetThemeBackgroundXInset() const {
157 return header_painter_->GetThemeBackgroundXInset(); 166 return ash::HeaderPainterUtil::GetThemeBackgroundXInset();
158 } 167 }
159 168
160 void BrowserNonClientFrameViewAsh::UpdateThrobber(bool running) { 169 void BrowserNonClientFrameViewAsh::UpdateThrobber(bool running) {
161 if (window_icon_) 170 if (window_icon_)
162 window_icon_->Update(); 171 window_icon_->Update();
163 } 172 }
164 173
165 /////////////////////////////////////////////////////////////////////////////// 174 ///////////////////////////////////////////////////////////////////////////////
166 // views::NonClientFrameView overrides: 175 // views::NonClientFrameView overrides:
167 176
168 gfx::Rect BrowserNonClientFrameViewAsh::GetBoundsForClientView() const { 177 gfx::Rect BrowserNonClientFrameViewAsh::GetBoundsForClientView() const {
169 // The ClientView must be flush with the top edge of the widget so that the 178 // The ClientView must be flush with the top edge of the widget so that the
170 // web contents can take up the entire screen in immersive fullscreen (with 179 // web contents can take up the entire screen in immersive fullscreen (with
171 // or without the top-of-window views revealed). When in immersive fullscreen 180 // or without the top-of-window views revealed). When in immersive fullscreen
172 // and the top-of-window views are revealed, the TopContainerView paints the 181 // and the top-of-window views are revealed, the TopContainerView paints the
173 // window header by redirecting paints from its background to 182 // window header by redirecting paints from its background to
174 // BrowserNonClientFrameViewAsh. 183 // BrowserNonClientFrameViewAsh.
175 return ash::HeaderPainter::GetBoundsForClientView(0, bounds()); 184 return bounds();
176 } 185 }
177 186
178 gfx::Rect BrowserNonClientFrameViewAsh::GetWindowBoundsForClientBounds( 187 gfx::Rect BrowserNonClientFrameViewAsh::GetWindowBoundsForClientBounds(
179 const gfx::Rect& client_bounds) const { 188 const gfx::Rect& client_bounds) const {
180 return ash::HeaderPainter::GetWindowBoundsForClientBounds(0, client_bounds); 189 return client_bounds;
181 } 190 }
182 191
183 int BrowserNonClientFrameViewAsh::NonClientHitTest(const gfx::Point& point) { 192 int BrowserNonClientFrameViewAsh::NonClientHitTest(const gfx::Point& point) {
184 int hit_test = ash::FrameBorderHitTestController::NonClientHitTest(this, 193 int hit_test = ash::FrameBorderHitTestController::NonClientHitTest(this,
185 header_painter_.get(), point); 194 caption_button_container_, point);
186 195
187 // See if the point is actually within the avatar menu button or within 196 // See if the point is actually within the avatar menu button or within
188 // the avatar label. 197 // the avatar label.
189 if (hit_test == HTCAPTION && ((avatar_button() && 198 if (hit_test == HTCAPTION && ((avatar_button() &&
190 avatar_button()->GetMirroredBounds().Contains(point)) || 199 avatar_button()->GetMirroredBounds().Contains(point)) ||
191 (avatar_label() && avatar_label()->GetMirroredBounds().Contains(point)))) 200 (avatar_label() && avatar_label()->GetMirroredBounds().Contains(point))))
192 return HTCLIENT; 201 return HTCLIENT;
193 202
194 // When the window is restored we want a large click target above the tabs 203 // When the window is restored we want a large click target above the tabs
195 // to drag the window, so redirect clicks in the tab's shadow to caption. 204 // to drag the window, so redirect clicks in the tab's shadow to caption.
(...skipping 25 matching lines...) Expand all
221 caption_button_container_->ResetWindowControls(); 230 caption_button_container_->ResetWindowControls();
222 } 231 }
223 232
224 void BrowserNonClientFrameViewAsh::UpdateWindowIcon() { 233 void BrowserNonClientFrameViewAsh::UpdateWindowIcon() {
225 if (window_icon_) 234 if (window_icon_)
226 window_icon_->SchedulePaint(); 235 window_icon_->SchedulePaint();
227 } 236 }
228 237
229 void BrowserNonClientFrameViewAsh::UpdateWindowTitle() { 238 void BrowserNonClientFrameViewAsh::UpdateWindowTitle() {
230 if (!frame()->IsFullscreen()) 239 if (!frame()->IsFullscreen())
231 header_painter_->SchedulePaintForTitle(BrowserFrame::GetTitleFontList()); 240 header_painter_->SchedulePaintForTitle();
232 } 241 }
233 242
234 /////////////////////////////////////////////////////////////////////////////// 243 ///////////////////////////////////////////////////////////////////////////////
235 // views::View overrides: 244 // views::View overrides:
236 245
237 void BrowserNonClientFrameViewAsh::OnPaint(gfx::Canvas* canvas) { 246 void BrowserNonClientFrameViewAsh::OnPaint(gfx::Canvas* canvas) {
238 if (!ShouldPaint()) 247 if (!ShouldPaint())
239 return; 248 return;
240 249
241 if (UseImmersiveLightbarHeaderStyle()) { 250 if (UseImmersiveLightbarHeaderStyle()) {
242 PaintImmersiveLightbarStyleHeader(canvas); 251 PaintImmersiveLightbarStyleHeader(canvas);
243 return; 252 return;
244 } 253 }
245 254
246 caption_button_container_->SetPaintAsActive(ShouldPaintAsActive()); 255 caption_button_container_->SetPaintAsActive(ShouldPaintAsActive());
247 256
248 // The primary header image changes based on window activation state and
249 // theme, so we look it up for each paint.
250 int theme_frame_image_id = 0;
251 int theme_frame_overlay_image_id = 0;
252 if (browser_view()->IsTabStripVisible()) {
253 GetFrameImageIdsForTabbedBrowser(&theme_frame_image_id,
254 &theme_frame_overlay_image_id);
255 } else if (browser_view()->browser()->is_app()) {
256 theme_frame_image_id = GetFrameImageIdForHostedApp();
257 } else {
258 theme_frame_image_id = GetFrameImageIdForBrowserPopup();
259 }
260
261 ash::HeaderPainter::Mode header_mode = ShouldPaintAsActive() ? 257 ash::HeaderPainter::Mode header_mode = ShouldPaintAsActive() ?
262 ash::HeaderPainter::MODE_ACTIVE : ash::HeaderPainter::MODE_INACTIVE; 258 ash::HeaderPainter::MODE_ACTIVE : ash::HeaderPainter::MODE_INACTIVE;
263 header_painter_->PaintHeader( 259 header_painter_->PaintHeader(canvas, header_mode);
264 canvas,
265 header_mode,
266 theme_frame_image_id,
267 theme_frame_overlay_image_id);
268 if (browser_view()->ShouldShowWindowTitle())
269 header_painter_->PaintTitleBar(canvas, BrowserFrame::GetTitleFontList());
270 if (browser_view()->IsToolbarVisible()) 260 if (browser_view()->IsToolbarVisible())
271 PaintToolbarBackground(canvas); 261 PaintToolbarBackground(canvas);
272 else 262 else if (!UsePackagedAppHeaderStyle())
273 PaintContentEdge(canvas); 263 PaintContentEdge(canvas);
274 } 264 }
275 265
276 void BrowserNonClientFrameViewAsh::Layout() { 266 void BrowserNonClientFrameViewAsh::Layout() {
277 // The header must be laid out before computing |header_height| because the 267 // The header must be laid out before computing |painted_height| because the
278 // computation of |header_height| for app and popup windows depends on the 268 // computation of |painted_height| for app and popup windows depends on the
279 // position of the window controls. 269 // position of the window controls.
280 header_painter_->LayoutHeader(); 270 header_painter_->LayoutHeader();
281 271
282 int header_height = 0; 272 int painted_height = 0;
283 if (browser_view()->IsTabStripVisible()) { 273 if (browser_view()->IsTabStripVisible()) {
284 header_height = GetTopInset() + 274 painted_height = GetTopInset() +
285 browser_view()->tabstrip()->GetPreferredSize().height(); 275 browser_view()->tabstrip()->GetPreferredSize().height();
286 } else if (browser_view()->IsToolbarVisible()) { 276 } else if (browser_view()->IsToolbarVisible()) {
287 // Set the header's height so that it overlaps with the toolbar because the 277 // Paint the header so that it overlaps with the top few pixels of the
288 // top few pixels of the toolbar are not opaque. 278 // toolbar because the top few pixels of the toolbar are not opaque.
289 header_height = GetTopInset() + kFrameShadowThickness * 2; 279 painted_height = GetTopInset() + kFrameShadowThickness * 2;
290 } else { 280 } else {
291 header_height = GetTopInset(); 281 painted_height = GetTopInset();
292 } 282 }
293 header_painter_->set_header_height(header_height); 283 header_painter_->SetHeaderHeightForPainting(painted_height);
294 if (avatar_button()) 284 if (avatar_button())
295 LayoutAvatar(); 285 LayoutAvatar();
296 BrowserNonClientFrameView::Layout(); 286 BrowserNonClientFrameView::Layout();
297 } 287 }
298 288
299 const char* BrowserNonClientFrameViewAsh::GetClassName() const { 289 const char* BrowserNonClientFrameViewAsh::GetClassName() const {
300 return kViewClassName; 290 return kViewClassName;
301 } 291 }
302 292
303 bool BrowserNonClientFrameViewAsh::HitTestRect(const gfx::Rect& rect) const { 293 bool BrowserNonClientFrameViewAsh::HitTestRect(const gfx::Rect& rect) const {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 // Ensure that the minimum width is enough to hold a minimum width tab strip 329 // Ensure that the minimum width is enough to hold a minimum width tab strip
340 // at its usual insets. 330 // at its usual insets.
341 int min_tabstrip_width = 331 int min_tabstrip_width =
342 browser_view()->tabstrip()->GetMinimumSize().width(); 332 browser_view()->tabstrip()->GetMinimumSize().width();
343 min_width = std::max(min_width, 333 min_width = std::max(min_width,
344 min_tabstrip_width + GetTabStripLeftInset() + GetTabStripRightInset()); 334 min_tabstrip_width + GetTabStripLeftInset() + GetTabStripRightInset());
345 } 335 }
346 return gfx::Size(min_width, min_client_view_size.height()); 336 return gfx::Size(min_width, min_client_view_size.height());
347 } 337 }
348 338
349 void BrowserNonClientFrameViewAsh::OnThemeChanged() {
350 BrowserNonClientFrameView::OnThemeChanged();
351 header_painter_->OnThemeChanged();
352 }
353
354 /////////////////////////////////////////////////////////////////////////////// 339 ///////////////////////////////////////////////////////////////////////////////
355 // chrome::TabIconViewModel overrides: 340 // chrome::TabIconViewModel overrides:
356 341
357 bool BrowserNonClientFrameViewAsh::ShouldTabIconViewAnimate() const { 342 bool BrowserNonClientFrameViewAsh::ShouldTabIconViewAnimate() const {
358 // This function is queried during the creation of the window as the 343 // This function is queried during the creation of the window as the
359 // TabIconView we host is initialized, so we need to NULL check the selected 344 // TabIconView we host is initialized, so we need to NULL check the selected
360 // WebContents because in this condition there is not yet a selected tab. 345 // WebContents because in this condition there is not yet a selected tab.
361 content::WebContents* current_tab = browser_view()->GetActiveWebContents(); 346 content::WebContents* current_tab = browser_view()->GetActiveWebContents();
362 return current_tab ? current_tab->IsLoading() : false; 347 return current_tab ? current_tab->IsLoading() : false;
363 } 348 }
364 349
365 gfx::ImageSkia BrowserNonClientFrameViewAsh::GetFaviconForTabIconView() { 350 gfx::ImageSkia BrowserNonClientFrameViewAsh::GetFaviconForTabIconView() {
366 views::WidgetDelegate* delegate = frame()->widget_delegate(); 351 views::WidgetDelegate* delegate = frame()->widget_delegate();
367 if (!delegate) 352 if (!delegate)
368 return gfx::ImageSkia(); 353 return gfx::ImageSkia();
369 return delegate->GetWindowIcon(); 354 return delegate->GetWindowIcon();
370 } 355 }
371 356
372 /////////////////////////////////////////////////////////////////////////////// 357 ///////////////////////////////////////////////////////////////////////////////
373 // BrowserNonClientFrameViewAsh, private: 358 // BrowserNonClientFrameViewAsh, private:
374 359
375 int BrowserNonClientFrameViewAsh::GetTabStripLeftInset() const { 360 int BrowserNonClientFrameViewAsh::GetTabStripLeftInset() const {
376 return avatar_button() ? kAvatarSideSpacing + 361 return avatar_button() ? kAvatarSideSpacing +
377 browser_view()->GetOTRAvatarIcon().width() + kAvatarSideSpacing : 362 browser_view()->GetOTRAvatarIcon().width() + kAvatarSideSpacing :
378 kTabstripLeftSpacing; 363 kTabstripLeftSpacing;
379 } 364 }
380 365
381 int BrowserNonClientFrameViewAsh::GetTabStripRightInset() const { 366 int BrowserNonClientFrameViewAsh::GetTabStripRightInset() const {
382 return header_painter_->GetRightInset() + kTabstripRightSpacing; 367 return caption_button_container_->GetPreferredSize().width() +
368 kTabstripRightSpacing;
383 } 369 }
384 370
385 bool BrowserNonClientFrameViewAsh::UseImmersiveLightbarHeaderStyle() const { 371 bool BrowserNonClientFrameViewAsh::UseImmersiveLightbarHeaderStyle() const {
386 ImmersiveModeController* immersive_controller = 372 ImmersiveModeController* immersive_controller =
387 browser_view()->immersive_mode_controller(); 373 browser_view()->immersive_mode_controller();
388 return immersive_controller->IsEnabled() && 374 return immersive_controller->IsEnabled() &&
389 !immersive_controller->IsRevealed() && 375 !immersive_controller->IsRevealed() &&
390 browser_view()->IsTabStripVisible(); 376 browser_view()->IsTabStripVisible();
391 } 377 }
392 378
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 canvas->FillRect( 500 canvas->FillRect(
515 gfx::Rect(x + kClientEdgeThickness, 501 gfx::Rect(x + kClientEdgeThickness,
516 toolbar_bounds.bottom() - kClientEdgeThickness, 502 toolbar_bounds.bottom() - kClientEdgeThickness,
517 w - (2 * kClientEdgeThickness), 503 w - (2 * kClientEdgeThickness),
518 kClientEdgeThickness), 504 kClientEdgeThickness),
519 ThemeProperties::GetDefaultColor( 505 ThemeProperties::GetDefaultColor(
520 ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); 506 ThemeProperties::COLOR_TOOLBAR_SEPARATOR));
521 } 507 }
522 508
523 void BrowserNonClientFrameViewAsh::PaintContentEdge(gfx::Canvas* canvas) { 509 void BrowserNonClientFrameViewAsh::PaintContentEdge(gfx::Canvas* canvas) {
524 if (UsePackagedAppHeaderStyle()) { 510 DCHECK(!UsePackagedAppHeaderStyle());
525 ash::HeaderPainter::Mode header_mode = ShouldPaintAsActive() ? 511 canvas->FillRect(gfx::Rect(0, caption_button_container_->bounds().bottom(),
526 ash::HeaderPainter::MODE_ACTIVE : ash::HeaderPainter::MODE_INACTIVE; 512 width(), kClientEdgeThickness),
527 header_painter_->PaintHeaderContentSeparator(canvas, header_mode); 513 ThemeProperties::GetDefaultColor(
528 } else { 514 ThemeProperties::COLOR_TOOLBAR_SEPARATOR));
529 canvas->FillRect(gfx::Rect(0, caption_button_container_->bounds().bottom(),
530 width(), kClientEdgeThickness),
531 ThemeProperties::GetDefaultColor(
532 ThemeProperties::COLOR_TOOLBAR_SEPARATOR));
533 }
534 } 515 }
535
536 void BrowserNonClientFrameViewAsh::GetFrameImageIdsForTabbedBrowser(
537 int* frame_image_id,
538 int* frame_overlay_image_id) const {
539 *frame_overlay_image_id = 0;
540
541 bool is_incognito = !browser_view()->IsRegularOrGuestSession();
542 ui::ThemeProvider* tp = GetThemeProvider();
543 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) &&
544 !is_incognito) {
545 *frame_overlay_image_id = ShouldPaintAsActive() ?
546 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE;
547 }
548
549 if (ShouldPaintAsActive()) {
550 *frame_image_id = is_incognito ?
551 IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME;
552 } else {
553 *frame_image_id = is_incognito ?
554 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE;
555 }
556
557 if ((frame()->IsMaximized() || frame()->IsFullscreen()) &&
558 !tp->HasCustomImage(IDR_THEME_FRAME) &&
559 !tp->HasCustomImage(*frame_image_id) &&
560 *frame_overlay_image_id == 0) {
561 *frame_image_id = IDR_AURA_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED;
562 }
563 }
564
565 int BrowserNonClientFrameViewAsh::GetFrameImageIdForBrowserPopup() const {
566 // Browser popups are not themeable.
567 if (frame()->IsMaximized() || frame()->IsFullscreen())
568 return IDR_AURA_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED;
569
570 bool is_incognito = !browser_view()->IsRegularOrGuestSession();
571 if (ShouldPaintAsActive()) {
572 return is_incognito ?
573 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_ACTIVE :
574 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_ACTIVE;
575 }
576 return is_incognito ?
577 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_INACTIVE :
578 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INACTIVE;
579 }
580
581 int BrowserNonClientFrameViewAsh::GetFrameImageIdForHostedApp() const {
582 if (UsePackagedAppHeaderStyle()) {
583 return ShouldPaintAsActive() ?
584 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE :
585 IDR_AURA_WINDOW_HEADER_BASE_INACTIVE;
586 }
587 return GetFrameImageIdForBrowserPopup();
588 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698