OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/views/frame/opaque_non_client_view.h" | 5 #include "chrome/browser/views/frame/opaque_non_client_view.h" |
6 | 6 |
7 #include "chrome/app/theme/theme_resources.h" | 7 #include "chrome/app/theme/theme_resources.h" |
8 #include "chrome/browser/views/frame/browser_view2.h" | 8 #include "chrome/browser/views/frame/browser_view2.h" |
9 #include "chrome/browser/views/tabs/tab_strip.h" | 9 #include "chrome/browser/views/tabs/tab_strip.h" |
10 #include "chrome/common/gfx/chrome_font.h" | 10 #include "chrome/common/gfx/chrome_font.h" |
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 } | 619 } |
620 | 620 |
621 void OpaqueNonClientView::Layout() { | 621 void OpaqueNonClientView::Layout() { |
622 LayoutWindowControls(); | 622 LayoutWindowControls(); |
623 LayoutOTRAvatar(); | 623 LayoutOTRAvatar(); |
624 LayoutDistributorLogo(); | 624 LayoutDistributorLogo(); |
625 LayoutTitleBar(); | 625 LayoutTitleBar(); |
626 LayoutClientView(); | 626 LayoutClientView(); |
627 } | 627 } |
628 | 628 |
629 void OpaqueNonClientView::GetPreferredSize(CSize* out) { | 629 gfx::Size OpaqueNonClientView::GetPreferredSize() { |
630 DCHECK(out); | 630 gfx::Size prefsize = frame_->client_view()->GetPreferredSize(); |
631 frame_->client_view()->GetPreferredSize(out); | 631 prefsize.Enlarge(2 * kWindowHorizontalBorderSize, |
632 out->cx += 2 * kWindowHorizontalBorderSize; | 632 CalculateNonClientTopHeight() + |
633 out->cy += CalculateNonClientTopHeight() + kWindowVerticalBorderBottomSize; | 633 kWindowVerticalBorderBottomSize); |
| 634 return prefsize; |
634 } | 635 } |
635 | 636 |
636 ChromeViews::View* OpaqueNonClientView::GetViewForPoint( | 637 ChromeViews::View* OpaqueNonClientView::GetViewForPoint( |
637 const gfx::Point& point, | 638 const gfx::Point& point, |
638 bool can_create_floating) { | 639 bool can_create_floating) { |
639 // We override this function because the ClientView can overlap the non - | 640 // We override this function because the ClientView can overlap the non - |
640 // client view, making it impossible to click on the window controls. We need | 641 // client view, making it impossible to click on the window controls. We need |
641 // to ensure the window controls are checked _first_. | 642 // to ensure the window controls are checked _first_. |
642 ChromeViews::View* views[] = { close_button_, restore_button_, | 643 ChromeViews::View* views[] = { close_button_, restore_button_, |
643 maximize_button_, minimize_button_ }; | 644 maximize_button_, minimize_button_ }; |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
868 canvas->TileImageInt(app_top_center_, client_area_bounds.x(), | 869 canvas->TileImageInt(app_top_center_, client_area_bounds.x(), |
869 client_area_bounds.y() - app_top_center_.height(), | 870 client_area_bounds.y() - app_top_center_.height(), |
870 client_area_bounds.width(), app_top_center_.height()); | 871 client_area_bounds.width(), app_top_center_.height()); |
871 canvas->DrawBitmapInt(app_top_right_, client_area_bounds.right(), | 872 canvas->DrawBitmapInt(app_top_right_, client_area_bounds.right(), |
872 client_area_bounds.y() - app_top_right_.height() + | 873 client_area_bounds.y() - app_top_right_.height() + |
873 fudge); | 874 fudge); |
874 } | 875 } |
875 } | 876 } |
876 | 877 |
877 void OpaqueNonClientView::LayoutWindowControls() { | 878 void OpaqueNonClientView::LayoutWindowControls() { |
878 CSize ps; | 879 gfx::Size ps; |
879 if (frame_->IsMaximized() || frame_->IsMinimized()) { | 880 if (frame_->IsMaximized() || frame_->IsMinimized()) { |
880 maximize_button_->SetVisible(false); | 881 maximize_button_->SetVisible(false); |
881 restore_button_->SetVisible(true); | 882 restore_button_->SetVisible(true); |
882 } | 883 } |
883 | 884 |
884 if (frame_->IsMaximized()) { | 885 if (frame_->IsMaximized()) { |
885 close_button_->GetPreferredSize(&ps); | 886 ps = close_button_->GetPreferredSize(); |
886 close_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, | 887 close_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, |
887 ChromeViews::Button::ALIGN_TOP); | 888 ChromeViews::Button::ALIGN_TOP); |
888 close_button_->SetBounds( | 889 close_button_->SetBounds( |
889 width() - ps.cx - kWindowControlsRightZoomedOffset, | 890 width() - ps.width() - kWindowControlsRightZoomedOffset, |
890 0, ps.cx + kWindowControlsRightZoomedOffset, | 891 0, ps.width() + kWindowControlsRightZoomedOffset, |
891 ps.cy + kWindowControlsTopZoomedOffset); | 892 ps.height() + kWindowControlsTopZoomedOffset); |
892 | 893 |
893 restore_button_->GetPreferredSize(&ps); | 894 ps = restore_button_->GetPreferredSize(); |
894 restore_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, | 895 restore_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, |
895 ChromeViews::Button::ALIGN_TOP); | 896 ChromeViews::Button::ALIGN_TOP); |
896 restore_button_->SetBounds(close_button_->x() - ps.cx, 0, ps.cx, | 897 restore_button_->SetBounds(close_button_->x() - ps.width(), 0, ps.width(), |
897 ps.cy + kWindowControlsTopZoomedOffset); | 898 ps.height() + kWindowControlsTopZoomedOffset); |
898 | 899 |
899 minimize_button_->GetPreferredSize(&ps); | 900 ps = minimize_button_->GetPreferredSize(); |
900 minimize_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, | 901 minimize_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, |
901 ChromeViews::Button::ALIGN_TOP); | 902 ChromeViews::Button::ALIGN_TOP); |
902 minimize_button_->SetBounds(restore_button_->x() - ps.cx, 0, ps.cx, | 903 minimize_button_->SetBounds(restore_button_->x() - ps.width(), 0, |
903 ps.cy + kWindowControlsTopZoomedOffset); | 904 ps.width(), |
| 905 ps.height() + kWindowControlsTopZoomedOffset); |
904 } else if (frame_->IsMinimized()) { | 906 } else if (frame_->IsMinimized()) { |
905 close_button_->GetPreferredSize(&ps); | 907 ps = close_button_->GetPreferredSize(); |
906 close_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, | 908 close_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, |
907 ChromeViews::Button::ALIGN_BOTTOM); | 909 ChromeViews::Button::ALIGN_BOTTOM); |
908 close_button_->SetBounds( | 910 close_button_->SetBounds( |
909 width() - ps.cx - kWindowControlsRightZoomedOffset, | 911 width() - ps.width() - kWindowControlsRightZoomedOffset, |
910 0, ps.cx + kWindowControlsRightZoomedOffset, | 912 0, ps.width() + kWindowControlsRightZoomedOffset, |
911 ps.cy + kWindowControlsTopZoomedOffset); | 913 ps.height() + kWindowControlsTopZoomedOffset); |
912 | 914 |
913 restore_button_->GetPreferredSize(&ps); | 915 ps = restore_button_->GetPreferredSize(); |
914 restore_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, | 916 restore_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, |
915 ChromeViews::Button::ALIGN_BOTTOM); | 917 ChromeViews::Button::ALIGN_BOTTOM); |
916 restore_button_->SetBounds(close_button_->x() - ps.cx, 0, ps.cx, | 918 restore_button_->SetBounds(close_button_->x() - ps.width(), 0, ps.width(), |
917 ps.cy + kWindowControlsTopZoomedOffset); | 919 ps.height() + kWindowControlsTopZoomedOffset); |
918 | 920 |
919 minimize_button_->GetPreferredSize(&ps); | 921 ps = minimize_button_->GetPreferredSize(); |
920 minimize_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, | 922 minimize_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, |
921 ChromeViews::Button::ALIGN_BOTTOM); | 923 ChromeViews::Button::ALIGN_BOTTOM); |
922 minimize_button_->SetBounds(restore_button_->x() - ps.cx, 0, ps.cx, | 924 minimize_button_->SetBounds(restore_button_->x() - ps.width(), 0, |
923 ps.cy + kWindowControlsTopZoomedOffset); | 925 ps.width(), |
| 926 ps.height() + kWindowControlsTopZoomedOffset); |
924 } else { | 927 } else { |
925 close_button_->GetPreferredSize(&ps); | 928 ps = close_button_->GetPreferredSize(); |
926 close_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, | 929 close_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, |
927 ChromeViews::Button::ALIGN_TOP); | 930 ChromeViews::Button::ALIGN_TOP); |
928 close_button_->SetBounds(width() - kWindowControlsRightOffset - ps.cx, | 931 close_button_->SetBounds(width() - kWindowControlsRightOffset - ps.width(), |
929 kWindowControlsTopOffset, ps.cx, ps.cy); | 932 kWindowControlsTopOffset, ps.width(), |
| 933 ps.height()); |
930 | 934 |
931 restore_button_->SetVisible(false); | 935 restore_button_->SetVisible(false); |
932 | 936 |
933 maximize_button_->SetVisible(true); | 937 maximize_button_->SetVisible(true); |
934 maximize_button_->GetPreferredSize(&ps); | 938 ps = maximize_button_->GetPreferredSize(); |
935 maximize_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, | 939 maximize_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, |
936 ChromeViews::Button::ALIGN_TOP); | 940 ChromeViews::Button::ALIGN_TOP); |
937 maximize_button_->SetBounds(close_button_->x() - ps.cx, | 941 maximize_button_->SetBounds(close_button_->x() - ps.width(), |
938 kWindowControlsTopOffset, ps.cx, ps.cy); | 942 kWindowControlsTopOffset, ps.width(), |
| 943 ps.height()); |
939 | 944 |
940 minimize_button_->GetPreferredSize(&ps); | 945 ps = minimize_button_->GetPreferredSize(); |
941 minimize_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, | 946 minimize_button_->SetImageAlignment(ChromeViews::Button::ALIGN_LEFT, |
942 ChromeViews::Button::ALIGN_TOP); | 947 ChromeViews::Button::ALIGN_TOP); |
943 minimize_button_->SetBounds(maximize_button_->x() - ps.cx, | 948 minimize_button_->SetBounds(maximize_button_->x() - ps.width(), |
944 kWindowControlsTopOffset, ps.cx, ps.cy); | 949 kWindowControlsTopOffset, ps.width(), |
| 950 ps.height()); |
945 } | 951 } |
946 } | 952 } |
947 | 953 |
948 void OpaqueNonClientView::LayoutOTRAvatar() { | 954 void OpaqueNonClientView::LayoutOTRAvatar() { |
949 int otr_x = 0; | 955 int otr_x = 0; |
950 int top_spacing = | 956 int top_spacing = |
951 frame_->IsMaximized() ? kNoTitleOTRZoomedTopSpacing : kNoTitleTopSpacing; | 957 frame_->IsMaximized() ? kNoTitleOTRZoomedTopSpacing : kNoTitleTopSpacing; |
952 int otr_y = browser_view_->GetTabStripHeight() + top_spacing; | 958 int otr_y = browser_view_->GetTabStripHeight() + top_spacing; |
953 int otr_width = 0; | 959 int otr_width = 0; |
954 int otr_height = 0; | 960 int otr_height = 0; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1031 } | 1037 } |
1032 | 1038 |
1033 // static | 1039 // static |
1034 void OpaqueNonClientView::InitAppWindowResources() { | 1040 void OpaqueNonClientView::InitAppWindowResources() { |
1035 static bool initialized = false; | 1041 static bool initialized = false; |
1036 if (!initialized) { | 1042 if (!initialized) { |
1037 title_font_ = win_util::GetWindowTitleFont(); | 1043 title_font_ = win_util::GetWindowTitleFont(); |
1038 initialized = true; | 1044 initialized = true; |
1039 } | 1045 } |
1040 } | 1046 } |
OLD | NEW |