OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/opaque_browser_frame_view.h" | 5 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 #include "ui/base/l10n/l10n_util.h" | 32 #include "ui/base/l10n/l10n_util.h" |
33 #include "ui/base/resource/resource_bundle.h" | 33 #include "ui/base/resource/resource_bundle.h" |
34 #include "ui/base/theme_provider.h" | 34 #include "ui/base/theme_provider.h" |
35 #include "ui/gfx/canvas_skia.h" | 35 #include "ui/gfx/canvas_skia.h" |
36 #include "ui/gfx/font.h" | 36 #include "ui/gfx/font.h" |
37 #include "ui/gfx/image/image.h" | 37 #include "ui/gfx/image/image.h" |
38 #include "ui/gfx/path.h" | 38 #include "ui/gfx/path.h" |
39 #include "ui/views/controls/button/image_button.h" | 39 #include "ui/views/controls/button/image_button.h" |
40 #include "ui/views/controls/image_view.h" | 40 #include "ui/views/controls/image_view.h" |
41 #include "ui/views/widget/root_view.h" | 41 #include "ui/views/widget/root_view.h" |
| 42 #include "ui/views/window/frame_background.h" |
42 #include "ui/views/window/window_shape.h" | 43 #include "ui/views/window/window_shape.h" |
43 | 44 |
44 #if defined(USE_VIRTUAL_KEYBOARD) | 45 #if defined(USE_VIRTUAL_KEYBOARD) |
45 #include "chrome/browser/ui/virtual_keyboard/virtual_keyboard_manager.h" | 46 #include "chrome/browser/ui/virtual_keyboard/virtual_keyboard_manager.h" |
46 #endif | 47 #endif |
47 | 48 |
48 namespace { | 49 namespace { |
49 // The frame border is only visible in restored mode and is hardcoded to 4 px on | 50 // The frame border is only visible in restored mode and is hardcoded to 4 px on |
50 // each side regardless of the system window border size. | 51 // each side regardless of the system window border size. |
51 const int kFrameBorderThickness = 4; | 52 const int kFrameBorderThickness = 4; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 BrowserView* browser_view) | 119 BrowserView* browser_view) |
119 : BrowserNonClientFrameView(frame, browser_view), | 120 : BrowserNonClientFrameView(frame, browser_view), |
120 ALLOW_THIS_IN_INITIALIZER_LIST( | 121 ALLOW_THIS_IN_INITIALIZER_LIST( |
121 minimize_button_(new views::ImageButton(this))), | 122 minimize_button_(new views::ImageButton(this))), |
122 ALLOW_THIS_IN_INITIALIZER_LIST( | 123 ALLOW_THIS_IN_INITIALIZER_LIST( |
123 maximize_button_(new views::ImageButton(this))), | 124 maximize_button_(new views::ImageButton(this))), |
124 ALLOW_THIS_IN_INITIALIZER_LIST( | 125 ALLOW_THIS_IN_INITIALIZER_LIST( |
125 restore_button_(new views::ImageButton(this))), | 126 restore_button_(new views::ImageButton(this))), |
126 ALLOW_THIS_IN_INITIALIZER_LIST( | 127 ALLOW_THIS_IN_INITIALIZER_LIST( |
127 close_button_(new views::ImageButton(this))), | 128 close_button_(new views::ImageButton(this))), |
128 window_icon_(NULL) { | 129 window_icon_(NULL), |
| 130 frame_background_(new views::FrameBackground()) { |
129 ui::ThemeProvider* tp = frame->GetThemeProvider(); | 131 ui::ThemeProvider* tp = frame->GetThemeProvider(); |
130 SkColor color = tp->GetColor(ThemeService::COLOR_BUTTON_BACKGROUND); | 132 SkColor color = tp->GetColor(ThemeService::COLOR_BUTTON_BACKGROUND); |
131 SkBitmap* background = | 133 SkBitmap* background = |
132 tp->GetBitmapNamed(IDR_THEME_WINDOW_CONTROL_BACKGROUND); | 134 tp->GetBitmapNamed(IDR_THEME_WINDOW_CONTROL_BACKGROUND); |
133 minimize_button_->SetImage(views::CustomButton::BS_NORMAL, | 135 minimize_button_->SetImage(views::CustomButton::BS_NORMAL, |
134 tp->GetBitmapNamed(IDR_MINIMIZE)); | 136 tp->GetBitmapNamed(IDR_MINIMIZE)); |
135 minimize_button_->SetImage(views::CustomButton::BS_HOT, | 137 minimize_button_->SetImage(views::CustomButton::BS_HOT, |
136 tp->GetBitmapNamed(IDR_MINIMIZE_H)); | 138 tp->GetBitmapNamed(IDR_MINIMIZE_H)); |
137 minimize_button_->SetImage(views::CustomButton::BS_PUSHED, | 139 minimize_button_->SetImage(views::CustomButton::BS_PUSHED, |
138 tp->GetBitmapNamed(IDR_MINIMIZE_P)); | 140 tp->GetBitmapNamed(IDR_MINIMIZE_P)); |
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 unavailable_px_at_top - size - TitlebarBottomThickness(false) + 1) / 2; | 571 unavailable_px_at_top - size - TitlebarBottomThickness(false) + 1) / 2; |
570 } else { | 572 } else { |
571 // For "browser mode" windows, we use the native positioning, which is just | 573 // For "browser mode" windows, we use the native positioning, which is just |
572 // below the top frame border. | 574 // below the top frame border. |
573 y = frame_thickness; | 575 y = frame_thickness; |
574 } | 576 } |
575 return gfx::Rect(frame_thickness + kIconLeftSpacing, y, size, size); | 577 return gfx::Rect(frame_thickness + kIconLeftSpacing, y, size, size); |
576 } | 578 } |
577 | 579 |
578 void OpaqueBrowserFrameView::PaintRestoredFrameBorder(gfx::Canvas* canvas) { | 580 void OpaqueBrowserFrameView::PaintRestoredFrameBorder(gfx::Canvas* canvas) { |
| 581 frame_background_->set_frame_color(GetFrameColor()); |
| 582 frame_background_->set_theme_bitmap(GetFrameBitmap()); |
| 583 frame_background_->set_theme_overlay_bitmap(GetFrameOverlayBitmap()); |
| 584 frame_background_->set_top_area_height(GetTopAreaHeight()); |
| 585 |
579 ui::ThemeProvider* tp = GetThemeProvider(); | 586 ui::ThemeProvider* tp = GetThemeProvider(); |
580 | 587 frame_background_->SetSideImages( |
| 588 tp->GetBitmapNamed(IDR_WINDOW_LEFT_SIDE), |
| 589 tp->GetBitmapNamed(IDR_WINDOW_TOP_CENTER), |
| 590 tp->GetBitmapNamed(IDR_WINDOW_RIGHT_SIDE), |
| 591 tp->GetBitmapNamed(IDR_WINDOW_BOTTOM_CENTER)); |
581 #if defined(USE_AURA) | 592 #if defined(USE_AURA) |
582 // TODO(jamescook): Remove this when Aura defaults to its own window frame, | 593 // TODO(jamescook): Remove this when Aura defaults to its own window frame, |
583 // BrowserNonClientFrameViewAura. Until then, use custom square corners to | 594 // BrowserNonClientFrameViewAura. Until then, use custom square corners to |
584 // avoid performance penalties associated with transparent layers. | 595 // avoid performance penalties associated with transparent layers. |
585 SkBitmap* top_left_corner = tp->GetBitmapNamed(IDR_AURA_WINDOW_TOP_LEFT); | 596 frame_background_->SetCornerImages( |
586 SkBitmap* top_right_corner = tp->GetBitmapNamed(IDR_AURA_WINDOW_TOP_RIGHT); | 597 tp->GetBitmapNamed(IDR_AURA_WINDOW_TOP_LEFT), |
587 SkBitmap* bottom_left_corner = | 598 tp->GetBitmapNamed(IDR_AURA_WINDOW_TOP_RIGHT), |
588 tp->GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_LEFT); | 599 tp->GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_LEFT), |
589 SkBitmap* bottom_right_corner = | 600 tp->GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_RIGHT)); |
590 tp->GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_RIGHT); | |
591 #else | 601 #else |
592 SkBitmap* top_left_corner = tp->GetBitmapNamed(IDR_WINDOW_TOP_LEFT_CORNER); | 602 frame_background_->SetCornerImages( |
593 SkBitmap* top_right_corner = tp->GetBitmapNamed(IDR_WINDOW_TOP_RIGHT_CORNER); | 603 tp->GetBitmapNamed(IDR_WINDOW_TOP_LEFT_CORNER), |
594 SkBitmap* bottom_left_corner = | 604 tp->GetBitmapNamed(IDR_WINDOW_TOP_RIGHT_CORNER), |
595 tp->GetBitmapNamed(IDR_WINDOW_BOTTOM_LEFT_CORNER); | 605 tp->GetBitmapNamed(IDR_WINDOW_BOTTOM_LEFT_CORNER), |
596 SkBitmap* bottom_right_corner = | 606 tp->GetBitmapNamed(IDR_WINDOW_BOTTOM_RIGHT_CORNER)); |
597 tp->GetBitmapNamed(IDR_WINDOW_BOTTOM_RIGHT_CORNER); | |
598 #endif | 607 #endif |
599 SkBitmap* top_edge = tp->GetBitmapNamed(IDR_WINDOW_TOP_CENTER); | 608 frame_background_->PaintRestored(canvas, this); |
600 SkBitmap* right_edge = tp->GetBitmapNamed(IDR_WINDOW_RIGHT_SIDE); | |
601 SkBitmap* left_edge = tp->GetBitmapNamed(IDR_WINDOW_LEFT_SIDE); | |
602 SkBitmap* bottom_edge = tp->GetBitmapNamed(IDR_WINDOW_BOTTOM_CENTER); | |
603 | 609 |
604 // Fill with the frame color first so we have a constant background for | |
605 // areas not covered by the theme image. | |
606 SkBitmap* theme_frame = GetFrameBitmap(); | |
607 int top_area_height = theme_frame->height(); | |
608 if (browser_view()->IsTabStripVisible()) { | |
609 top_area_height = std::max(top_area_height, | |
610 GetBoundsForTabStrip(browser_view()->tabstrip()).bottom()); | |
611 } | |
612 SkColor frame_color = GetFrameColor(); | |
613 canvas->FillRect(frame_color, gfx::Rect(0, 0, width(), top_area_height)); | |
614 | |
615 int remaining_height = height() - top_area_height; | |
616 if (remaining_height > 0) { | |
617 // Now fill down the sides. | |
618 canvas->FillRect(frame_color, | |
619 gfx::Rect(0, top_area_height, left_edge->width(), | |
620 remaining_height)); | |
621 canvas->FillRect(frame_color, | |
622 gfx::Rect(width() - right_edge->width(), | |
623 top_area_height, right_edge->width(), | |
624 remaining_height)); | |
625 int center_width = width() - left_edge->width() - right_edge->width(); | |
626 if (center_width > 0) { | |
627 // Now fill the bottom area. | |
628 canvas->FillRect(frame_color, | |
629 gfx::Rect(left_edge->width(), | |
630 height() - bottom_edge->height(), | |
631 center_width, bottom_edge->height())); | |
632 } | |
633 } | |
634 | |
635 // Draw the theme frame. | |
636 canvas->TileImageInt(*theme_frame, 0, 0, width(), theme_frame->height()); | |
637 | |
638 // Draw the theme frame overlay. | |
639 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && | |
640 browser_view()->IsBrowserTypeNormal() && | |
641 !browser_view()->IsOffTheRecord()) { | |
642 canvas->DrawBitmapInt(*tp->GetBitmapNamed(ShouldPaintAsActive() ? | |
643 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE), 0, 0); | |
644 } | |
645 | |
646 // Top. | |
647 int top_left_height = std::min(top_left_corner->height(), | |
648 height() - bottom_left_corner->height()); | |
649 canvas->DrawBitmapInt(*top_left_corner, 0, 0, top_left_corner->width(), | |
650 top_left_height, 0, 0, top_left_corner->width(), top_left_height, false); | |
651 canvas->TileImageInt(*top_edge, top_left_corner->width(), 0, | |
652 width() - top_left_corner->width() - top_right_corner->width(), | |
653 top_edge->height()); | |
654 int top_right_height = std::min(top_right_corner->height(), | |
655 height() - bottom_right_corner->height()); | |
656 canvas->DrawBitmapInt(*top_right_corner, 0, 0, top_right_corner->width(), | |
657 top_right_height, width() - top_right_corner->width(), 0, | |
658 top_right_corner->width(), top_right_height, false); | |
659 // Note: When we don't have a toolbar, we need to draw some kind of bottom | 610 // Note: When we don't have a toolbar, we need to draw some kind of bottom |
660 // edge here. Because the App Window graphics we use for this have an | 611 // edge here. Because the App Window graphics we use for this have an |
661 // attached client edge and their sizing algorithm is a little involved, we do | 612 // attached client edge and their sizing algorithm is a little involved, we do |
662 // all this in PaintRestoredClientEdge(). | 613 // all this in PaintRestoredClientEdge(). |
663 | |
664 // Right. | |
665 canvas->TileImageInt(*right_edge, width() - right_edge->width(), | |
666 top_right_height, right_edge->width(), | |
667 height() - top_right_height - bottom_right_corner->height()); | |
668 | |
669 // Bottom. | |
670 canvas->DrawBitmapInt(*bottom_right_corner, | |
671 width() - bottom_right_corner->width(), | |
672 height() - bottom_right_corner->height()); | |
673 canvas->TileImageInt(*bottom_edge, bottom_left_corner->width(), | |
674 height() - bottom_edge->height(), | |
675 width() - bottom_left_corner->width() - bottom_right_corner->width(), | |
676 bottom_edge->height()); | |
677 canvas->DrawBitmapInt(*bottom_left_corner, 0, | |
678 height() - bottom_left_corner->height()); | |
679 | |
680 // Left. | |
681 canvas->TileImageInt(*left_edge, 0, top_left_height, left_edge->width(), | |
682 height() - top_left_height - bottom_left_corner->height()); | |
683 } | 614 } |
684 | 615 |
685 void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(gfx::Canvas* canvas) { | 616 void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(gfx::Canvas* canvas) { |
686 ui::ThemeProvider* tp = GetThemeProvider(); | 617 frame_background_->set_frame_color(GetFrameColor()); |
| 618 frame_background_->set_theme_bitmap(GetFrameBitmap()); |
| 619 frame_background_->set_theme_overlay_bitmap(GetFrameOverlayBitmap()); |
| 620 frame_background_->set_top_area_height(GetTopAreaHeight()); |
687 | 621 |
688 // Allow customization of these attributes. | 622 // Allow customization of these attributes. |
689 SkBitmap* left = NULL; | 623 SkBitmap* left = NULL; |
690 SkBitmap* right = NULL; | 624 SkBitmap* right = NULL; |
691 int top_offset = 0; | 625 int top_offset = 0; |
692 ModifyMaximizedFramePainting(&top_offset, &left, &right); | 626 ModifyMaximizedFramePainting(&top_offset, &left, &right); |
| 627 frame_background_->SetMaximizedCorners(left, right, top_offset); |
693 | 628 |
694 // We will be painting from top_offset to top_offset + theme_frame_height. If | 629 // Theme frame must be aligned with the tabstrip as if we were |
695 // this is less than GetBoundsForTabStrip.bottom, we need to paint the frame | |
696 // color. | |
697 SkBitmap* theme_frame = GetFrameBitmap(); | |
698 int theme_frame_bottom = top_offset + theme_frame->height(); | |
699 int top_area_height = | |
700 GetBoundsForTabStrip(browser_view()->tabstrip()).bottom(); | |
701 if (top_area_height > theme_frame_bottom) { | |
702 SkColor frame_color = GetFrameColor(); | |
703 canvas->FillRect(frame_color, gfx::Rect(0, 0, width(), top_area_height)); | |
704 } | |
705 | |
706 // Draw the theme frame. It must be aligned with the tabstrip as if we were | |
707 // in restored mode. Note that the top of the tabstrip is | 630 // in restored mode. Note that the top of the tabstrip is |
708 // kTabstripTopShadowThickness px off the top of the screen. | 631 // kTabstripTopShadowThickness px off the top of the screen. |
709 int theme_background_y = -(GetHorizontalTabStripVerticalOffset(true) + | 632 int theme_background_y = -(GetHorizontalTabStripVerticalOffset(true) + |
710 kTabstripTopShadowThickness); | 633 kTabstripTopShadowThickness); |
711 int left_offset = 0, right_offset = 0; | 634 frame_background_->set_theme_background_y(theme_background_y); |
712 | 635 |
713 if (left || right) { | 636 frame_background_->PaintMaximized(canvas, this); |
714 // If we have either a left or right we should have both. | |
715 DCHECK(left && right); | |
716 left_offset = left->width(); | |
717 right_offset = right->width(); | |
718 canvas->DrawBitmapInt(*left, 0, 0); | |
719 canvas->DrawBitmapInt(*right, width() - right_offset, 0); | |
720 } | |
721 | 637 |
722 canvas->TileImageInt(*theme_frame, | 638 // TODO(jamescook): Migrate this into FrameBackground. |
723 left_offset, | |
724 top_offset, | |
725 width() - (left_offset + right_offset), | |
726 theme_frame->height()); | |
727 // Draw the theme frame overlay | |
728 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && | |
729 browser_view()->IsBrowserTypeNormal() && | |
730 !browser_view()->IsOffTheRecord()) { | |
731 SkBitmap* theme_overlay = tp->GetBitmapNamed(ShouldPaintAsActive() ? | |
732 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE); | |
733 canvas->DrawBitmapInt(*theme_overlay, 0, theme_background_y); | |
734 } | |
735 | |
736 if (!browser_view()->IsToolbarVisible()) { | 639 if (!browser_view()->IsToolbarVisible()) { |
737 // There's no toolbar to edge the frame border, so we need to draw a bottom | 640 // There's no toolbar to edge the frame border, so we need to draw a bottom |
738 // edge. The graphic we use for this has a built in client edge, so we clip | 641 // edge. The graphic we use for this has a built in client edge, so we clip |
739 // it off the bottom. | 642 // it off the bottom. |
740 SkBitmap* top_center = | 643 SkBitmap* top_center = |
741 tp->GetBitmapNamed(IDR_APP_TOP_CENTER); | 644 GetThemeProvider()->GetBitmapNamed(IDR_APP_TOP_CENTER); |
742 int edge_height = top_center->height() - kClientEdgeThickness; | 645 int edge_height = top_center->height() - kClientEdgeThickness; |
743 canvas->TileImageInt(*top_center, 0, | 646 canvas->TileImageInt(*top_center, 0, |
744 frame()->client_view()->y() - edge_height, width(), edge_height); | 647 frame()->client_view()->y() - edge_height, width(), edge_height); |
745 } | 648 } |
746 } | 649 } |
747 | 650 |
748 void OpaqueBrowserFrameView::PaintTitleBar(gfx::Canvas* canvas) { | 651 void OpaqueBrowserFrameView::PaintTitleBar(gfx::Canvas* canvas) { |
749 // The window icon is painted by the TabIconView. | 652 // The window icon is painted by the TabIconView. |
750 views::WidgetDelegate* delegate = frame()->widget_delegate(); | 653 views::WidgetDelegate* delegate = frame()->widget_delegate(); |
751 if (!delegate) { | 654 if (!delegate) { |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
952 gfx::Rect(client_area_bounds.x(), client_area_bottom, | 855 gfx::Rect(client_area_bounds.x(), client_area_bottom, |
953 client_area_bounds.width(), kClientEdgeThickness)); | 856 client_area_bounds.width(), kClientEdgeThickness)); |
954 canvas->FillRect( | 857 canvas->FillRect( |
955 toolbar_color, | 858 toolbar_color, |
956 gfx::Rect(client_area_bounds.right(), | 859 gfx::Rect(client_area_bounds.right(), |
957 client_area_top, | 860 client_area_top, |
958 kClientEdgeThickness, | 861 kClientEdgeThickness, |
959 client_area_bottom + kClientEdgeThickness - client_area_top)); | 862 client_area_bottom + kClientEdgeThickness - client_area_top)); |
960 } | 863 } |
961 | 864 |
| 865 SkColor OpaqueBrowserFrameView::GetFrameColor() const { |
| 866 bool is_incognito = browser_view()->IsOffTheRecord(); |
| 867 if (browser_view()->IsBrowserTypeNormal()) { |
| 868 if (ShouldPaintAsActive()) { |
| 869 return GetThemeProvider()->GetColor(is_incognito ? |
| 870 ThemeService::COLOR_FRAME_INCOGNITO : ThemeService::COLOR_FRAME); |
| 871 } |
| 872 return GetThemeProvider()->GetColor(is_incognito ? |
| 873 ThemeService::COLOR_FRAME_INCOGNITO_INACTIVE : |
| 874 ThemeService::COLOR_FRAME_INACTIVE); |
| 875 } |
| 876 // Never theme app and popup windows. |
| 877 if (ShouldPaintAsActive()) { |
| 878 return is_incognito ? |
| 879 ResourceBundle::frame_color_incognito : ResourceBundle::frame_color; |
| 880 } |
| 881 return is_incognito ? |
| 882 ResourceBundle::frame_color_incognito_inactive : |
| 883 ResourceBundle::frame_color_inactive; |
| 884 } |
| 885 |
962 SkBitmap* OpaqueBrowserFrameView::GetFrameBitmap() const { | 886 SkBitmap* OpaqueBrowserFrameView::GetFrameBitmap() const { |
963 bool is_incognito = browser_view()->IsOffTheRecord(); | 887 bool is_incognito = browser_view()->IsOffTheRecord(); |
964 int resource_id; | 888 int resource_id; |
965 if (browser_view()->IsBrowserTypeNormal()) { | 889 if (browser_view()->IsBrowserTypeNormal()) { |
966 if (ShouldPaintAsActive()) { | 890 if (ShouldPaintAsActive()) { |
967 resource_id = is_incognito ? | 891 resource_id = is_incognito ? |
968 IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME; | 892 IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME; |
969 } else { | 893 } else { |
970 resource_id = is_incognito ? | 894 resource_id = is_incognito ? |
971 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; | 895 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; |
972 } | 896 } |
973 return GetThemeProvider()->GetBitmapNamed(resource_id); | 897 return GetThemeProvider()->GetBitmapNamed(resource_id); |
974 } | 898 } |
975 // Never theme app and popup windows. | 899 // Never theme app and popup windows. |
976 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 900 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
977 if (ShouldPaintAsActive()) { | 901 if (ShouldPaintAsActive()) { |
978 resource_id = is_incognito ? | 902 resource_id = is_incognito ? |
979 IDR_THEME_FRAME_INCOGNITO : IDR_FRAME; | 903 IDR_THEME_FRAME_INCOGNITO : IDR_FRAME; |
980 } else { | 904 } else { |
981 resource_id = is_incognito ? | 905 resource_id = is_incognito ? |
982 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; | 906 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; |
983 } | 907 } |
984 return rb.GetBitmapNamed(resource_id); | 908 return rb.GetBitmapNamed(resource_id); |
985 } | 909 } |
986 | 910 |
987 SkColor OpaqueBrowserFrameView::GetFrameColor() const { | 911 SkBitmap* OpaqueBrowserFrameView::GetFrameOverlayBitmap() const { |
988 bool is_incognito = browser_view()->IsOffTheRecord(); | 912 ui::ThemeProvider* tp = GetThemeProvider(); |
989 if (browser_view()->IsBrowserTypeNormal()) { | 913 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && |
990 if (ShouldPaintAsActive()) { | 914 browser_view()->IsBrowserTypeNormal() && |
991 return GetThemeProvider()->GetColor(is_incognito ? | 915 !browser_view()->IsOffTheRecord()) { |
992 ThemeService::COLOR_FRAME_INCOGNITO : ThemeService::COLOR_FRAME); | 916 return tp->GetBitmapNamed(ShouldPaintAsActive() ? |
993 } | 917 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE); |
994 return GetThemeProvider()->GetColor(is_incognito ? | |
995 ThemeService::COLOR_FRAME_INCOGNITO_INACTIVE : | |
996 ThemeService::COLOR_FRAME_INACTIVE); | |
997 } | 918 } |
998 // Never theme app and popup windows. | 919 return NULL; |
999 if (ShouldPaintAsActive()) { | 920 } |
1000 return is_incognito ? | 921 |
1001 ResourceBundle::frame_color_incognito : ResourceBundle::frame_color; | 922 int OpaqueBrowserFrameView::GetTopAreaHeight() const { |
| 923 SkBitmap* frame_bitmap = GetFrameBitmap(); |
| 924 int top_area_height = frame_bitmap->height(); |
| 925 if (browser_view()->IsTabStripVisible()) { |
| 926 top_area_height = std::max(top_area_height, |
| 927 GetBoundsForTabStrip(browser_view()->tabstrip()).bottom()); |
1002 } | 928 } |
1003 return is_incognito ? | 929 return top_area_height; |
1004 ResourceBundle::frame_color_incognito_inactive : | |
1005 ResourceBundle::frame_color_inactive; | |
1006 } | 930 } |
1007 | 931 |
1008 void OpaqueBrowserFrameView::LayoutWindowControls() { | 932 void OpaqueBrowserFrameView::LayoutWindowControls() { |
1009 bool is_maximized = frame()->IsMaximized(); | 933 bool is_maximized = frame()->IsMaximized(); |
1010 close_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT, | 934 close_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT, |
1011 views::ImageButton::ALIGN_BOTTOM); | 935 views::ImageButton::ALIGN_BOTTOM); |
1012 int caption_y = CaptionButtonY(false); | 936 int caption_y = CaptionButtonY(false); |
1013 // There should always be the same number of non-shadow pixels visible to the | 937 // There should always be the same number of non-shadow pixels visible to the |
1014 // side of the caption buttons. In maximized mode we extend the rightmost | 938 // side of the caption buttons. In maximized mode we extend the rightmost |
1015 // button to the screen corner to obey Fitts' Law. | 939 // button to the screen corner to obey Fitts' Law. |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1132 | 1056 |
1133 gfx::Rect OpaqueBrowserFrameView::CalculateClientAreaBounds(int width, | 1057 gfx::Rect OpaqueBrowserFrameView::CalculateClientAreaBounds(int width, |
1134 int height) const { | 1058 int height) const { |
1135 int top_height = NonClientTopBorderHeight(false); | 1059 int top_height = NonClientTopBorderHeight(false); |
1136 int border_thickness = NonClientBorderThickness(); | 1060 int border_thickness = NonClientBorderThickness(); |
1137 return gfx::Rect(border_thickness, top_height, | 1061 return gfx::Rect(border_thickness, top_height, |
1138 std::max(0, width - (2 * border_thickness)), | 1062 std::max(0, width - (2 * border_thickness)), |
1139 std::max(0, height - GetReservedHeight() - | 1063 std::max(0, height - GetReservedHeight() - |
1140 top_height - border_thickness)); | 1064 top_height - border_thickness)); |
1141 } | 1065 } |
OLD | NEW |