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 GetFrameImageIds(&theme_frame_image_id, &theme_frame_overlay_image_id); | |
250 | 253 |
251 ui::ThemeProvider* theme_provider = GetThemeProvider(); | 254 ash::HeaderPainter::Mode header_mode = ShouldPaintAsActive() ? |
252 if (!theme_provider->HasCustomImage(theme_frame_image_id) && | 255 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_WINDOW_HEADER_BASE_MINIMAL; | |
257 } | |
258 header_painter_->PaintHeader( | 256 header_painter_->PaintHeader( |
259 canvas, | 257 canvas, |
258 header_mode, | |
260 theme_frame_image_id, | 259 theme_frame_image_id, |
261 theme_frame_overlay_image_id); | 260 theme_frame_overlay_image_id); |
262 if (browser_view()->ShouldShowWindowTitle()) | 261 if (browser_view()->ShouldShowWindowTitle()) |
263 header_painter_->PaintTitleBar(canvas, BrowserFrame::GetTitleFontList()); | 262 header_painter_->PaintTitleBar(canvas, BrowserFrame::GetTitleFontList()); |
264 if (browser_view()->IsToolbarVisible()) | 263 if (browser_view()->IsToolbarVisible()) |
265 PaintToolbarBackground(canvas); | 264 PaintToolbarBackground(canvas); |
266 else | 265 else |
267 PaintContentEdge(canvas); | 266 PaintContentEdge(canvas); |
268 } | 267 } |
269 | 268 |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
429 browser_view()->immersive_mode_controller(); | 428 browser_view()->immersive_mode_controller(); |
430 return immersive_mode_controller->IsEnabled() && | 429 return immersive_mode_controller->IsEnabled() && |
431 (immersive_mode_controller->IsRevealed() || | 430 (immersive_mode_controller->IsRevealed() || |
432 UseImmersiveLightbarHeaderStyle()); | 431 UseImmersiveLightbarHeaderStyle()); |
433 } | 432 } |
434 | 433 |
435 void BrowserNonClientFrameViewAsh::PaintImmersiveLightbarStyleHeader( | 434 void BrowserNonClientFrameViewAsh::PaintImmersiveLightbarStyleHeader( |
436 gfx::Canvas* canvas) { | 435 gfx::Canvas* canvas) { |
437 // The light bar header is not themed because theming it does not look good. | 436 // The light bar header is not themed because theming it does not look good. |
438 gfx::ImageSkia* frame_image = GetThemeProvider()->GetImageSkiaNamed( | 437 gfx::ImageSkia* frame_image = GetThemeProvider()->GetImageSkiaNamed( |
439 IDR_AURA_WINDOW_HEADER_BASE_MINIMAL); | 438 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED); |
440 canvas->TileImageInt(*frame_image, 0, 0, width(), frame_image->height()); | 439 canvas->TileImageInt(*frame_image, 0, 0, width(), frame_image->height()); |
441 } | 440 } |
442 | 441 |
443 void BrowserNonClientFrameViewAsh::PaintToolbarBackground(gfx::Canvas* canvas) { | 442 void BrowserNonClientFrameViewAsh::PaintToolbarBackground(gfx::Canvas* canvas) { |
444 gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds()); | 443 gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds()); |
445 if (toolbar_bounds.IsEmpty()) | 444 if (toolbar_bounds.IsEmpty()) |
446 return; | 445 return; |
447 gfx::Point toolbar_origin(toolbar_bounds.origin()); | 446 gfx::Point toolbar_origin(toolbar_bounds.origin()); |
448 View::ConvertPointToTarget(browser_view(), this, &toolbar_origin); | 447 View::ConvertPointToTarget(browser_view(), this, &toolbar_origin); |
449 toolbar_bounds.set_origin(toolbar_origin); | 448 toolbar_bounds.set_origin(toolbar_origin); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
509 gfx::Rect(x + kClientEdgeThickness, | 508 gfx::Rect(x + kClientEdgeThickness, |
510 toolbar_bounds.bottom() - kClientEdgeThickness, | 509 toolbar_bounds.bottom() - kClientEdgeThickness, |
511 w - (2 * kClientEdgeThickness), | 510 w - (2 * kClientEdgeThickness), |
512 kClientEdgeThickness), | 511 kClientEdgeThickness), |
513 ThemeProperties::GetDefaultColor( | 512 ThemeProperties::GetDefaultColor( |
514 ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); | 513 ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); |
515 } | 514 } |
516 | 515 |
517 void BrowserNonClientFrameViewAsh::PaintContentEdge(gfx::Canvas* canvas) { | 516 void BrowserNonClientFrameViewAsh::PaintContentEdge(gfx::Canvas* canvas) { |
518 if (UsePackagedAppHeaderStyle()) { | 517 if (UsePackagedAppHeaderStyle()) { |
519 header_painter_->PaintHeaderContentSeparator(canvas); | 518 ash::HeaderPainter::Mode header_mode = ShouldPaintAsActive() ? |
519 ash::HeaderPainter::MODE_ACTIVE : ash::HeaderPainter::MODE_INACTIVE; | |
520 header_painter_->PaintHeaderContentSeparator(canvas, header_mode); | |
520 } else { | 521 } else { |
521 canvas->FillRect(gfx::Rect(0, caption_button_container_->bounds().bottom(), | 522 canvas->FillRect(gfx::Rect(0, caption_button_container_->bounds().bottom(), |
522 width(), kClientEdgeThickness), | 523 width(), kClientEdgeThickness), |
523 ThemeProperties::GetDefaultColor( | 524 ThemeProperties::GetDefaultColor( |
524 ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); | 525 ThemeProperties::COLOR_TOOLBAR_SEPARATOR)); |
525 } | 526 } |
526 } | 527 } |
527 | 528 |
528 int BrowserNonClientFrameViewAsh::GetThemeFrameImageId() const { | 529 void BrowserNonClientFrameViewAsh::GetFrameImageIds( |
James Cook
2014/02/03 18:46:35
This function is long and complex. I suggest break
| |
530 int* frame_image_id, | |
531 int* frame_overlay_image_id) const { | |
532 *frame_overlay_image_id = 0; | |
533 | |
529 bool is_incognito = !browser_view()->IsRegularOrGuestSession(); | 534 bool is_incognito = !browser_view()->IsRegularOrGuestSession(); |
530 if (browser_view()->IsBrowserTypeNormal()) { | 535 if (browser_view()->IsBrowserTypeNormal()) { |
531 // Use the standard resource ids to allow users to theme the frames. | 536 // Tabbed browser windows. |
537 ui::ThemeProvider* tp = GetThemeProvider(); | |
538 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && | |
539 !is_incognito) { | |
540 *frame_overlay_image_id = ShouldPaintAsActive() ? | |
541 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE; | |
542 } | |
543 | |
532 if (ShouldPaintAsActive()) { | 544 if (ShouldPaintAsActive()) { |
533 return is_incognito ? | 545 *frame_image_id = is_incognito ? |
534 IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME; | 546 IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME; |
547 } else { | |
548 *frame_image_id = is_incognito ? | |
549 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; | |
535 } | 550 } |
536 return is_incognito ? | 551 |
537 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; | 552 if ((frame()->IsMaximized() || frame()->IsFullscreen()) && |
553 !tp->HasCustomImage(IDR_THEME_FRAME) && | |
554 !tp->HasCustomImage(*frame_image_id) && | |
555 *frame_overlay_image_id == 0) { | |
556 *frame_image_id = IDR_AURA_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED; | |
557 } | |
558 } else if (UsePackagedAppHeaderStyle()) { | |
559 // Apps are not themeable. | |
560 *frame_image_id = ShouldPaintAsActive() ? | |
561 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE : | |
562 IDR_AURA_WINDOW_HEADER_BASE_INACTIVE; | |
563 } else { | |
564 // Browser popups are not themeable. | |
565 if (frame()->IsMaximized() || frame()->IsFullscreen()) { | |
566 *frame_image_id = IDR_AURA_BROWSER_WINDOW_HEADER_BASE_MAXIMIZED; | |
567 } else if (ShouldPaintAsActive()) { | |
568 *frame_image_id = is_incognito ? | |
569 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_ACTIVE : | |
570 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_ACTIVE; | |
571 } else { | |
572 *frame_image_id = is_incognito ? | |
573 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INCOGNITO_INACTIVE : | |
574 IDR_AURA_BROWSER_WINDOW_HEADER_BASE_RESTORED_INACTIVE; | |
575 } | |
538 } | 576 } |
539 // Never theme app and popup windows. | |
540 if (ShouldPaintAsActive()) { | |
541 return is_incognito ? | |
542 IDR_AURA_WINDOW_HEADER_BASE_INCOGNITO_ACTIVE : | |
543 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE; | |
544 } | |
545 return is_incognito ? | |
546 IDR_AURA_WINDOW_HEADER_BASE_INCOGNITO_INACTIVE : | |
547 IDR_AURA_WINDOW_HEADER_BASE_INACTIVE; | |
548 } | 577 } |
549 | |
550 int BrowserNonClientFrameViewAsh::GetThemeFrameOverlayImageId() const { | |
551 ui::ThemeProvider* tp = GetThemeProvider(); | |
552 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && | |
553 browser_view()->IsBrowserTypeNormal() && | |
554 !browser_view()->IsOffTheRecord()) { | |
555 return ShouldPaintAsActive() ? | |
556 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE; | |
557 } | |
558 return 0; | |
559 } | |
OLD | NEW |