OLD | NEW |
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/wm/caption_buttons/frame_caption_button_container_view.h" | 8 #include "ash/wm/caption_buttons/frame_caption_button_container_view.h" |
9 #include "ash/wm/frame_border_hit_test_controller.h" | 9 #include "ash/wm/frame_border_hit_test_controller.h" |
10 #include "ash/wm/header_painter.h" | 10 #include "ash/wm/header_painter.h" |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 | 236 |
237 void BrowserNonClientFrameViewAsh::OnPaint(gfx::Canvas* canvas) { | 237 void BrowserNonClientFrameViewAsh::OnPaint(gfx::Canvas* canvas) { |
238 if (!ShouldPaint()) | 238 if (!ShouldPaint()) |
239 return; | 239 return; |
240 | 240 |
241 if (UseImmersiveLightbarHeaderStyle()) { | 241 if (UseImmersiveLightbarHeaderStyle()) { |
242 PaintImmersiveLightbarStyleHeader(canvas); | 242 PaintImmersiveLightbarStyleHeader(canvas); |
243 return; | 243 return; |
244 } | 244 } |
245 | 245 |
| 246 caption_button_container_->SetPaintAsActive(ShouldPaintAsActive()); |
| 247 |
246 // The primary header image changes based on window activation state and | 248 // The primary header image changes based on window activation state and |
247 // theme, so we look it up for each paint. | 249 // theme, so we look it up for each paint. |
248 int theme_frame_image_id = GetThemeFrameImageId(); | 250 int theme_frame_image_id = 0; |
249 int theme_frame_overlay_image_id = GetThemeFrameOverlayImageId(); | 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 } |
250 | 260 |
251 ui::ThemeProvider* theme_provider = GetThemeProvider(); | 261 ash::HeaderPainter::Mode header_mode = ShouldPaintAsActive() ? |
252 if (!theme_provider->HasCustomImage(theme_frame_image_id) && | 262 ash::HeaderPainter::MODE_ACTIVE : ash::HeaderPainter::MODE_INACTIVE; |
253 (theme_frame_overlay_image_id == 0 || | |
254 !theme_provider->HasCustomImage(theme_frame_overlay_image_id))) { | |
255 if (frame()->IsMaximized() || frame()->IsFullscreen()) | |
256 theme_frame_image_id = IDR_AURA_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED; | |
257 } | |
258 header_painter_->PaintHeader( | 263 header_painter_->PaintHeader( |
259 canvas, | 264 canvas, |
| 265 header_mode, |
260 theme_frame_image_id, | 266 theme_frame_image_id, |
261 theme_frame_overlay_image_id); | 267 theme_frame_overlay_image_id); |
262 if (browser_view()->ShouldShowWindowTitle()) | 268 if (browser_view()->ShouldShowWindowTitle()) |
263 header_painter_->PaintTitleBar(canvas, BrowserFrame::GetTitleFontList()); | 269 header_painter_->PaintTitleBar(canvas, BrowserFrame::GetTitleFontList()); |
264 if (browser_view()->IsToolbarVisible()) | 270 if (browser_view()->IsToolbarVisible()) |
265 PaintToolbarBackground(canvas); | 271 PaintToolbarBackground(canvas); |
266 else | 272 else |
267 PaintContentEdge(canvas); | 273 PaintContentEdge(canvas); |
268 } | 274 } |
269 | 275 |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 gfx::Rect(x + kClientEdgeThickness, | 515 gfx::Rect(x + kClientEdgeThickness, |
510 toolbar_bounds.bottom() - kClientEdgeThickness, | 516 toolbar_bounds.bottom() - kClientEdgeThickness, |
511 w - (2 * kClientEdgeThickness), | 517 w - (2 * kClientEdgeThickness), |
512 kClientEdgeThickness), | 518 kClientEdgeThickness), |
513 ThemeProperties::GetDefaultColor( | 519 ThemeProperties::GetDefaultColor( |
514 ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); | 520 ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); |
515 } | 521 } |
516 | 522 |
517 void BrowserNonClientFrameViewAsh::PaintContentEdge(gfx::Canvas* canvas) { | 523 void BrowserNonClientFrameViewAsh::PaintContentEdge(gfx::Canvas* canvas) { |
518 if (UsePackagedAppHeaderStyle()) { | 524 if (UsePackagedAppHeaderStyle()) { |
519 header_painter_->PaintHeaderContentSeparator(canvas); | 525 ash::HeaderPainter::Mode header_mode = ShouldPaintAsActive() ? |
| 526 ash::HeaderPainter::MODE_ACTIVE : ash::HeaderPainter::MODE_INACTIVE; |
| 527 header_painter_->PaintHeaderContentSeparator(canvas, header_mode); |
520 } else { | 528 } else { |
521 canvas->FillRect(gfx::Rect(0, caption_button_container_->bounds().bottom(), | 529 canvas->FillRect(gfx::Rect(0, caption_button_container_->bounds().bottom(), |
522 width(), kClientEdgeThickness), | 530 width(), kClientEdgeThickness), |
523 ThemeProperties::GetDefaultColor( | 531 ThemeProperties::GetDefaultColor( |
524 ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); | 532 ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); |
525 } | 533 } |
526 } | 534 } |
527 | 535 |
528 int BrowserNonClientFrameViewAsh::GetThemeFrameImageId() const { | 536 void BrowserNonClientFrameViewAsh::GetFrameImageIdsForTabbedBrowser( |
| 537 int* frame_image_id, |
| 538 int* frame_overlay_image_id) const { |
| 539 *frame_overlay_image_id = 0; |
| 540 |
529 bool is_incognito = !browser_view()->IsRegularOrGuestSession(); | 541 bool is_incognito = !browser_view()->IsRegularOrGuestSession(); |
530 if (browser_view()->IsBrowserTypeNormal()) { | 542 ui::ThemeProvider* tp = GetThemeProvider(); |
531 // Use the standard resource ids to allow users to theme the frames. | 543 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && |
532 if (ShouldPaintAsActive()) { | 544 !is_incognito) { |
533 return is_incognito ? | 545 *frame_overlay_image_id = ShouldPaintAsActive() ? |
534 IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME; | 546 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE; |
535 } | 547 } |
536 return is_incognito ? | 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 ? |
537 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; | 554 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; |
538 } | 555 } |
539 // Never theme app and popup windows. | 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(); |
540 if (ShouldPaintAsActive()) { | 571 if (ShouldPaintAsActive()) { |
541 return is_incognito ? | 572 return is_incognito ? |
542 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_ACTIVE : | 573 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_ACTIVE : |
543 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_ACTIVE; | 574 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_ACTIVE; |
544 } | 575 } |
545 return is_incognito ? | 576 return is_incognito ? |
546 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_INACTIVE : | 577 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_INACTIVE : |
547 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INACTIVE; | 578 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INACTIVE; |
548 } | 579 } |
549 | 580 |
550 int BrowserNonClientFrameViewAsh::GetThemeFrameOverlayImageId() const { | 581 int BrowserNonClientFrameViewAsh::GetFrameImageIdForHostedApp() const { |
551 ui::ThemeProvider* tp = GetThemeProvider(); | 582 if (UsePackagedAppHeaderStyle()) { |
552 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && | |
553 browser_view()->IsBrowserTypeNormal() && | |
554 !browser_view()->IsOffTheRecord()) { | |
555 return ShouldPaintAsActive() ? | 583 return ShouldPaintAsActive() ? |
556 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE; | 584 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE : |
| 585 IDR_AURA_WINDOW_HEADER_BASE_INACTIVE; |
557 } | 586 } |
558 return 0; | 587 return GetFrameImageIdForBrowserPopup(); |
559 } | 588 } |
OLD | NEW |