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 "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" |
9 #include "app/theme_provider.h" | |
10 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
11 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
12 #include "chrome/browser/tab_contents/tab_contents.h" | 11 #include "chrome/browser/tab_contents/tab_contents.h" |
13 #include "chrome/browser/themes/browser_theme_provider.h" | 12 #include "chrome/browser/themes/browser_theme_provider.h" |
14 #include "chrome/browser/ui/views/frame/browser_frame.h" | 13 #include "chrome/browser/ui/views/frame/browser_frame.h" |
15 #include "chrome/browser/ui/views/frame/browser_view.h" | 14 #include "chrome/browser/ui/views/frame/browser_view.h" |
16 #include "chrome/browser/ui/views/tabs/tab_strip.h" | 15 #include "chrome/browser/ui/views/tabs/tab_strip.h" |
17 #include "chrome/browser/ui/views/toolbar_view.h" | 16 #include "chrome/browser/ui/views/toolbar_view.h" |
18 #include "gfx/canvas_skia.h" | 17 #include "gfx/canvas_skia.h" |
19 #include "gfx/font.h" | 18 #include "gfx/font.h" |
20 #include "gfx/path.h" | 19 #include "gfx/path.h" |
21 #include "grit/app_resources.h" | 20 #include "grit/app_resources.h" |
22 #include "grit/chromium_strings.h" | 21 #include "grit/chromium_strings.h" |
23 #include "grit/generated_resources.h" | 22 #include "grit/generated_resources.h" |
24 #include "grit/theme_resources.h" | 23 #include "grit/theme_resources.h" |
| 24 #include "ui/base/theme_provider.h" |
25 #include "views/controls/button/image_button.h" | 25 #include "views/controls/button/image_button.h" |
26 #include "views/controls/image_view.h" | 26 #include "views/controls/image_view.h" |
27 #include "views/widget/root_view.h" | 27 #include "views/widget/root_view.h" |
28 #include "views/window/window.h" | 28 #include "views/window/window.h" |
29 #include "views/window/window_resources.h" | 29 #include "views/window/window_resources.h" |
30 #include "views/window/window_shape.h" | 30 #include "views/window/window_shape.h" |
31 | 31 |
32 #if defined(OS_LINUX) | 32 #if defined(OS_LINUX) |
33 #include "views/window/hit_test.h" | 33 #include "views/window/hit_test.h" |
34 #endif | 34 #endif |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 minimize_button_(new views::ImageButton(this))), | 100 minimize_button_(new views::ImageButton(this))), |
101 ALLOW_THIS_IN_INITIALIZER_LIST( | 101 ALLOW_THIS_IN_INITIALIZER_LIST( |
102 maximize_button_(new views::ImageButton(this))), | 102 maximize_button_(new views::ImageButton(this))), |
103 ALLOW_THIS_IN_INITIALIZER_LIST( | 103 ALLOW_THIS_IN_INITIALIZER_LIST( |
104 restore_button_(new views::ImageButton(this))), | 104 restore_button_(new views::ImageButton(this))), |
105 ALLOW_THIS_IN_INITIALIZER_LIST( | 105 ALLOW_THIS_IN_INITIALIZER_LIST( |
106 close_button_(new views::ImageButton(this))), | 106 close_button_(new views::ImageButton(this))), |
107 window_icon_(NULL), | 107 window_icon_(NULL), |
108 frame_(frame), | 108 frame_(frame), |
109 browser_view_(browser_view) { | 109 browser_view_(browser_view) { |
110 ThemeProvider* tp = frame_->GetThemeProviderForFrame(); | 110 ui::ThemeProvider* tp = frame_->GetThemeProviderForFrame(); |
111 SkColor color = tp->GetColor(BrowserThemeProvider::COLOR_BUTTON_BACKGROUND); | 111 SkColor color = tp->GetColor(BrowserThemeProvider::COLOR_BUTTON_BACKGROUND); |
112 SkBitmap* background = | 112 SkBitmap* background = |
113 tp->GetBitmapNamed(IDR_THEME_WINDOW_CONTROL_BACKGROUND); | 113 tp->GetBitmapNamed(IDR_THEME_WINDOW_CONTROL_BACKGROUND); |
114 minimize_button_->SetImage(views::CustomButton::BS_NORMAL, | 114 minimize_button_->SetImage(views::CustomButton::BS_NORMAL, |
115 tp->GetBitmapNamed(IDR_MINIMIZE)); | 115 tp->GetBitmapNamed(IDR_MINIMIZE)); |
116 minimize_button_->SetImage(views::CustomButton::BS_HOT, | 116 minimize_button_->SetImage(views::CustomButton::BS_HOT, |
117 tp->GetBitmapNamed(IDR_MINIMIZE_H)); | 117 tp->GetBitmapNamed(IDR_MINIMIZE_H)); |
118 minimize_button_->SetImage(views::CustomButton::BS_PUSHED, | 118 minimize_button_->SetImage(views::CustomButton::BS_PUSHED, |
119 tp->GetBitmapNamed(IDR_MINIMIZE_P)); | 119 tp->GetBitmapNamed(IDR_MINIMIZE_P)); |
120 if (browser_view_->IsBrowserTypeNormal()) { | 120 if (browser_view_->IsBrowserTypeNormal()) { |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 unavailable_px_at_top - size - TitlebarBottomThickness(false) + 1) / 2; | 534 unavailable_px_at_top - size - TitlebarBottomThickness(false) + 1) / 2; |
535 } else { | 535 } else { |
536 // For "browser mode" windows, we use the native positioning, which is just | 536 // For "browser mode" windows, we use the native positioning, which is just |
537 // below the top frame border. | 537 // below the top frame border. |
538 y = frame_thickness; | 538 y = frame_thickness; |
539 } | 539 } |
540 return gfx::Rect(frame_thickness + kIconLeftSpacing, y, size, size); | 540 return gfx::Rect(frame_thickness + kIconLeftSpacing, y, size, size); |
541 } | 541 } |
542 | 542 |
543 void OpaqueBrowserFrameView::PaintRestoredFrameBorder(gfx::Canvas* canvas) { | 543 void OpaqueBrowserFrameView::PaintRestoredFrameBorder(gfx::Canvas* canvas) { |
544 ThemeProvider* tp = GetThemeProvider(); | 544 ui::ThemeProvider* tp = GetThemeProvider(); |
545 | 545 |
546 SkBitmap* top_left_corner = tp->GetBitmapNamed(IDR_WINDOW_TOP_LEFT_CORNER); | 546 SkBitmap* top_left_corner = tp->GetBitmapNamed(IDR_WINDOW_TOP_LEFT_CORNER); |
547 SkBitmap* top_right_corner = | 547 SkBitmap* top_right_corner = |
548 tp->GetBitmapNamed(IDR_WINDOW_TOP_RIGHT_CORNER); | 548 tp->GetBitmapNamed(IDR_WINDOW_TOP_RIGHT_CORNER); |
549 SkBitmap* top_edge = tp->GetBitmapNamed(IDR_WINDOW_TOP_CENTER); | 549 SkBitmap* top_edge = tp->GetBitmapNamed(IDR_WINDOW_TOP_CENTER); |
550 SkBitmap* right_edge = tp->GetBitmapNamed(IDR_WINDOW_RIGHT_SIDE); | 550 SkBitmap* right_edge = tp->GetBitmapNamed(IDR_WINDOW_RIGHT_SIDE); |
551 SkBitmap* left_edge = tp->GetBitmapNamed(IDR_WINDOW_LEFT_SIDE); | 551 SkBitmap* left_edge = tp->GetBitmapNamed(IDR_WINDOW_LEFT_SIDE); |
552 SkBitmap* bottom_left_corner = | 552 SkBitmap* bottom_left_corner = |
553 tp->GetBitmapNamed(IDR_WINDOW_BOTTOM_LEFT_CORNER); | 553 tp->GetBitmapNamed(IDR_WINDOW_BOTTOM_LEFT_CORNER); |
554 SkBitmap* bottom_right_corner = | 554 SkBitmap* bottom_right_corner = |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
652 canvas->DrawBitmapInt(*bottom_left_corner, 0, | 652 canvas->DrawBitmapInt(*bottom_left_corner, 0, |
653 height() - bottom_left_corner->height()); | 653 height() - bottom_left_corner->height()); |
654 | 654 |
655 // Left. | 655 // Left. |
656 canvas->TileImageInt(*left_edge, 0, top_left_height, left_edge->width(), | 656 canvas->TileImageInt(*left_edge, 0, top_left_height, left_edge->width(), |
657 height() - top_left_height - bottom_left_corner->height()); | 657 height() - top_left_height - bottom_left_corner->height()); |
658 } | 658 } |
659 | 659 |
660 | 660 |
661 void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(gfx::Canvas* canvas) { | 661 void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(gfx::Canvas* canvas) { |
662 ThemeProvider* tp = GetThemeProvider(); | 662 ui::ThemeProvider* tp = GetThemeProvider(); |
663 views::Window* window = frame_->GetWindow(); | 663 views::Window* window = frame_->GetWindow(); |
664 | 664 |
665 // Window frame mode and color | 665 // Window frame mode and color |
666 SkBitmap* theme_frame; | 666 SkBitmap* theme_frame; |
667 // Never theme app and popup windows. | 667 // Never theme app and popup windows. |
668 if (!browser_view_->IsBrowserTypeNormal()) { | 668 if (!browser_view_->IsBrowserTypeNormal()) { |
669 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 669 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
670 theme_frame = rb.GetBitmapNamed(ShouldPaintAsActive() ? | 670 theme_frame = rb.GetBitmapNamed(ShouldPaintAsActive() ? |
671 IDR_FRAME : IDR_FRAME_INACTIVE); | 671 IDR_FRAME : IDR_FRAME_INACTIVE); |
672 } else if (!browser_view_->IsOffTheRecord()) { | 672 } else if (!browser_view_->IsOffTheRecord()) { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
745 y = toolbar_bounds.y(); | 745 y = toolbar_bounds.y(); |
746 h = toolbar_bounds.bottom(); | 746 h = toolbar_bounds.bottom(); |
747 } | 747 } |
748 | 748 |
749 // Gross hack: We split the toolbar images into two pieces, since sometimes | 749 // Gross hack: We split the toolbar images into two pieces, since sometimes |
750 // (popup mode) the toolbar isn't tall enough to show the whole image. The | 750 // (popup mode) the toolbar isn't tall enough to show the whole image. The |
751 // split happens between the top shadow section and the bottom gradient | 751 // split happens between the top shadow section and the bottom gradient |
752 // section so that we never break the gradient. | 752 // section so that we never break the gradient. |
753 int split_point = kFrameShadowThickness * 2; | 753 int split_point = kFrameShadowThickness * 2; |
754 int bottom_y = y + split_point; | 754 int bottom_y = y + split_point; |
755 ThemeProvider* tp = GetThemeProvider(); | 755 ui::ThemeProvider* tp = GetThemeProvider(); |
756 SkBitmap* toolbar_left = tp->GetBitmapNamed(IDR_CONTENT_TOP_LEFT_CORNER); | 756 SkBitmap* toolbar_left = tp->GetBitmapNamed(IDR_CONTENT_TOP_LEFT_CORNER); |
757 int bottom_edge_height = std::min(toolbar_left->height(), h) - split_point; | 757 int bottom_edge_height = std::min(toolbar_left->height(), h) - split_point; |
758 | 758 |
759 // Split our canvas out so we can mask out the corners of the toolbar | 759 // Split our canvas out so we can mask out the corners of the toolbar |
760 // without masking out the frame. | 760 // without masking out the frame. |
761 canvas->SaveLayerAlpha( | 761 canvas->SaveLayerAlpha( |
762 255, gfx::Rect(x - kClientEdgeThickness, y, w + kClientEdgeThickness * 3, | 762 255, gfx::Rect(x - kClientEdgeThickness, y, w + kClientEdgeThickness * 3, |
763 h)); | 763 h)); |
764 canvas->AsCanvasSkia()->drawARGB(0, 255, 255, 255, SkXfermode::kClear_Mode); | 764 canvas->AsCanvasSkia()->drawARGB(0, 255, 255, 255, SkXfermode::kClear_Mode); |
765 | 765 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
850 // Bias the rounding to select a region that's lower rather than higher, | 850 // Bias the rounding to select a region that's lower rather than higher, |
851 // as the shadows at the image top mean the apparent center is below the | 851 // as the shadows at the image top mean the apparent center is below the |
852 // real center. | 852 // real center. |
853 ((otr_avatar_icon.height() - otr_avatar_bounds_.height()) + 1) / 2, w, h, | 853 ((otr_avatar_icon.height() - otr_avatar_bounds_.height()) + 1) / 2, w, h, |
854 otr_avatar_bounds_.x(), otr_avatar_bounds_.y(), w, h, false); | 854 otr_avatar_bounds_.x(), otr_avatar_bounds_.y(), w, h, false); |
855 | 855 |
856 canvas->Restore(); | 856 canvas->Restore(); |
857 } | 857 } |
858 | 858 |
859 void OpaqueBrowserFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) { | 859 void OpaqueBrowserFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) { |
860 ThemeProvider* tp = GetThemeProvider(); | 860 ui::ThemeProvider* tp = GetThemeProvider(); |
861 int client_area_top = frame_->GetWindow()->GetClientView()->y(); | 861 int client_area_top = frame_->GetWindow()->GetClientView()->y(); |
862 int image_top = client_area_top; | 862 int image_top = client_area_top; |
863 | 863 |
864 gfx::Rect client_area_bounds = CalculateClientAreaBounds(width(), height()); | 864 gfx::Rect client_area_bounds = CalculateClientAreaBounds(width(), height()); |
865 SkColor toolbar_color = tp->GetColor(BrowserThemeProvider::COLOR_TOOLBAR); | 865 SkColor toolbar_color = tp->GetColor(BrowserThemeProvider::COLOR_TOOLBAR); |
866 | 866 |
867 if (browser_view_->IsToolbarVisible()) { | 867 if (browser_view_->IsToolbarVisible()) { |
868 // The client edge images always start below the toolbar corner images. The | 868 // The client edge images always start below the toolbar corner images. The |
869 // client edge filled rects start there or at the bottom of the tooolbar, | 869 // client edge filled rects start there or at the bottom of the tooolbar, |
870 // whichever is shorter. | 870 // whichever is shorter. |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1063 | 1063 |
1064 gfx::Rect OpaqueBrowserFrameView::CalculateClientAreaBounds(int width, | 1064 gfx::Rect OpaqueBrowserFrameView::CalculateClientAreaBounds(int width, |
1065 int height) const { | 1065 int height) const { |
1066 int top_height = NonClientTopBorderHeight(false, false); | 1066 int top_height = NonClientTopBorderHeight(false, false); |
1067 int border_thickness = NonClientBorderThickness(); | 1067 int border_thickness = NonClientBorderThickness(); |
1068 return gfx::Rect(border_thickness, top_height, | 1068 return gfx::Rect(border_thickness, top_height, |
1069 std::max(0, width - (2 * border_thickness)), | 1069 std::max(0, width - (2 * border_thickness)), |
1070 std::max(0, height - GetReservedHeight() - | 1070 std::max(0, height - GetReservedHeight() - |
1071 top_height - border_thickness)); | 1071 top_height - border_thickness)); |
1072 } | 1072 } |
OLD | NEW |