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 "ash/system/user/tray_user.h" | 5 #include "ash/system/user/tray_user.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <climits> | 8 #include <climits> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 #include "ui/views/layout/fill_layout.h" | 65 #include "ui/views/layout/fill_layout.h" |
66 #include "ui/views/mouse_watcher.h" | 66 #include "ui/views/mouse_watcher.h" |
67 #include "ui/views/painter.h" | 67 #include "ui/views/painter.h" |
68 #include "ui/views/view.h" | 68 #include "ui/views/view.h" |
69 #include "ui/views/widget/widget.h" | 69 #include "ui/views/widget/widget.h" |
70 | 70 |
71 namespace { | 71 namespace { |
72 | 72 |
73 const int kUserDetailsVerticalPadding = 5; | 73 const int kUserDetailsVerticalPadding = 5; |
74 const int kUserCardVerticalPadding = 10; | 74 const int kUserCardVerticalPadding = 10; |
75 const int kUserIconSize = 32; | 75 const int kProfileRoundedCornerRadius = 2; |
76 const int kUserIconCornerRadius = 2; | 76 const int kUserIconSize = 27; |
| 77 const int kUserIconLargeSize = 32; |
| 78 const int kUserIconLargeCornerRadius = 2; |
77 const int kUserLabelToIconPadding = 5; | 79 const int kUserLabelToIconPadding = 5; |
78 | 80 |
79 // When a hover border is used, it is starting this many pixels before the icon | 81 // When a hover border is used, it is starting this many pixels before the icon |
80 // position. | 82 // position. |
81 const int kTrayUserTileHoverBorderInset = 10; | 83 const int kTrayUserTileHoverBorderInset = 10; |
82 | 84 |
83 // The border color of the user button. | 85 // The border color of the user button. |
84 const SkColor kBorderColor = 0xffdcdcdc; | 86 const SkColor kBorderColor = 0xffdcdcdc; |
85 | 87 |
86 // The invisible word joiner character, used as a marker to indicate the start | 88 // The invisible word joiner character, used as a marker to indicate the start |
(...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
904 user_card_view_->AddChildView(details); | 906 user_card_view_->AddChildView(details); |
905 } else { | 907 } else { |
906 if (username) | 908 if (username) |
907 user_card_view_->AddChildView(username); | 909 user_card_view_->AddChildView(username); |
908 if (additional) | 910 if (additional) |
909 user_card_view_->AddChildView(additional); | 911 user_card_view_->AddChildView(additional); |
910 } | 912 } |
911 } | 913 } |
912 | 914 |
913 views::View* UserView::CreateIconForUserCard(user::LoginStatus login) { | 915 views::View* UserView::CreateIconForUserCard(user::LoginStatus login) { |
914 RoundedImageView* icon = new RoundedImageView(kUserIconCornerRadius, | 916 RoundedImageView* icon = new RoundedImageView(kProfileRoundedCornerRadius, |
915 multiprofile_index_ == 0); | 917 multiprofile_index_ == 0); |
916 icon->SetEnabled(false); | 918 icon->SetEnabled(false); |
917 if (login == user::LOGGED_IN_GUEST) { | 919 if (login == user::LOGGED_IN_GUEST) { |
918 icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). | 920 icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). |
919 GetImageNamed(IDR_AURA_UBER_TRAY_GUEST_ICON).ToImageSkia(), | 921 GetImageNamed(IDR_AURA_UBER_TRAY_GUEST_ICON).ToImageSkia(), |
920 gfx::Size(kUserIconSize, kUserIconSize)); | 922 gfx::Size(kUserIconSize, kUserIconSize)); |
921 } else { | 923 } else { |
922 icon->SetImage( | 924 icon->SetImage( |
923 Shell::GetInstance()->session_state_delegate()-> | 925 Shell::GetInstance()->session_state_delegate()-> |
924 GetUserImage(multiprofile_index_), | 926 GetUserImage(multiprofile_index_), |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1066 kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset, | 1068 kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset, |
1067 kUserCardVerticalPadding, | 1069 kUserCardVerticalPadding, |
1068 kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset)); | 1070 kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset)); |
1069 | 1071 |
1070 add_user_->SetLayoutManager(new views::BoxLayout( | 1072 add_user_->SetLayoutManager(new views::BoxLayout( |
1071 views::BoxLayout::kHorizontal, 0, 0 , kTrayPopupPaddingBetweenItems)); | 1073 views::BoxLayout::kHorizontal, 0, 0 , kTrayPopupPaddingBetweenItems)); |
1072 AddChildViewAt(add_user_, 0); | 1074 AddChildViewAt(add_user_, 0); |
1073 | 1075 |
1074 // Add the [+] icon which is also the anchor for messages. | 1076 // Add the [+] icon which is also the anchor for messages. |
1075 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 1077 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
1076 RoundedImageView* icon = new RoundedImageView(kUserIconCornerRadius, | 1078 RoundedImageView* icon = new RoundedImageView(kProfileRoundedCornerRadius, |
1077 true); | 1079 true); |
1078 anchor_ = icon; | 1080 anchor_ = icon; |
1079 icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). | 1081 icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). |
1080 GetImageNamed(IDR_AURA_UBER_TRAY_ADD_MULTIPROFILE_USER).ToImageSkia(), | 1082 GetImageNamed(IDR_AURA_UBER_TRAY_ADD_MULTIPROFILE_USER).ToImageSkia(), |
1081 gfx::Size(kUserIconSize, kUserIconSize)); | 1083 gfx::Size(kUserIconSize, kUserIconSize)); |
1082 add_user_->AddChildView(icon); | 1084 add_user_->AddChildView(icon); |
1083 | 1085 |
1084 // Add the command text. | 1086 // Add the command text. |
1085 views::Label* command_label = new views::Label( | 1087 views::Label* command_label = new views::Label( |
1086 bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT)); | 1088 bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT)); |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1197 (need_label != (label_ != NULL))) { | 1199 (need_label != (label_ != NULL))) { |
1198 layout_view_->RemoveAllChildViews(true); | 1200 layout_view_->RemoveAllChildViews(true); |
1199 if (need_label) { | 1201 if (need_label) { |
1200 label_ = new views::Label; | 1202 label_ = new views::Label; |
1201 SetupLabelForTray(label_); | 1203 SetupLabelForTray(label_); |
1202 layout_view_->AddChildView(label_); | 1204 layout_view_->AddChildView(label_); |
1203 } else { | 1205 } else { |
1204 label_ = NULL; | 1206 label_ = NULL; |
1205 } | 1207 } |
1206 if (need_avatar) { | 1208 if (need_avatar) { |
1207 avatar_ = new tray::RoundedImageView(kUserIconCornerRadius, true); | 1209 avatar_ = new tray::RoundedImageView(kProfileRoundedCornerRadius, true); |
1208 layout_view_->AddChildView(avatar_); | 1210 layout_view_->AddChildView(avatar_); |
1209 } else { | 1211 } else { |
1210 avatar_ = NULL; | 1212 avatar_ = NULL; |
1211 } | 1213 } |
1212 } | 1214 } |
1213 | 1215 |
1214 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 1216 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
1215 if (status == user::LOGGED_IN_LOCALLY_MANAGED) { | 1217 if (status == user::LOGGED_IN_LOCALLY_MANAGED) { |
1216 label_->SetText( | 1218 label_->SetText( |
1217 bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_LOCALLY_MANAGED_LABEL)); | 1219 bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_LOCALLY_MANAGED_LABEL)); |
1218 } else if (status == user::LOGGED_IN_GUEST) { | 1220 } else if (status == user::LOGGED_IN_GUEST) { |
1219 label_->SetText(bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_GUEST_LABEL)); | 1221 label_->SetText(bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_GUEST_LABEL)); |
1220 } | 1222 } |
1221 | 1223 |
1222 if (avatar_) { | 1224 if (avatar_ && switches::UseAlternateShelfLayout()) { |
1223 avatar_->SetCornerRadii( | 1225 avatar_->SetCornerRadii( |
1224 0, kUserIconCornerRadius, kUserIconCornerRadius, 0); | 1226 0, kUserIconLargeCornerRadius, kUserIconLargeCornerRadius, 0); |
1225 avatar_->SetBorder(views::Border::NullBorder()); | 1227 avatar_->SetBorder(views::Border::NullBorder()); |
1226 } | 1228 } |
1227 UpdateAvatarImage(status); | 1229 UpdateAvatarImage(status); |
1228 | 1230 |
1229 // Update layout after setting label_ and avatar_ with new login status. | 1231 // Update layout after setting label_ and avatar_ with new login status. |
1230 UpdateLayoutOfItem(); | 1232 UpdateLayoutOfItem(); |
1231 } | 1233 } |
1232 | 1234 |
1233 void TrayUser::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { | 1235 void TrayUser::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { |
1234 // Inactive users won't have a layout. | 1236 // Inactive users won't have a layout. |
1235 if (!layout_view_) | 1237 if (!layout_view_) |
1236 return; | 1238 return; |
1237 if (alignment == SHELF_ALIGNMENT_BOTTOM || | 1239 if (alignment == SHELF_ALIGNMENT_BOTTOM || |
1238 alignment == SHELF_ALIGNMENT_TOP) { | 1240 alignment == SHELF_ALIGNMENT_TOP) { |
1239 if (avatar_) { | 1241 if (avatar_) { |
1240 avatar_->SetBorder(views::Border::NullBorder()); | 1242 if (switches::UseAlternateShelfLayout()) { |
1241 avatar_->SetCornerRadii( | 1243 avatar_->SetBorder(views::Border::NullBorder()); |
1242 0, kUserIconCornerRadius, kUserIconCornerRadius, 0); | 1244 avatar_->SetCornerRadii( |
| 1245 0, kUserIconLargeCornerRadius, kUserIconLargeCornerRadius, 0); |
| 1246 } else { |
| 1247 avatar_->SetBorder(views::Border::CreateEmptyBorder( |
| 1248 0, |
| 1249 kTrayImageItemHorizontalPaddingBottomAlignment + 2, |
| 1250 0, |
| 1251 kTrayImageItemHorizontalPaddingBottomAlignment)); |
| 1252 } |
1243 } | 1253 } |
1244 if (label_) { | 1254 if (label_) { |
1245 label_->SetBorder(views::Border::CreateEmptyBorder( | 1255 label_->SetBorder(views::Border::CreateEmptyBorder( |
1246 0, | 1256 0, |
1247 kTrayLabelItemHorizontalPaddingBottomAlignment, | 1257 kTrayLabelItemHorizontalPaddingBottomAlignment, |
1248 0, | 1258 0, |
1249 kTrayLabelItemHorizontalPaddingBottomAlignment)); | 1259 kTrayLabelItemHorizontalPaddingBottomAlignment)); |
1250 } | 1260 } |
1251 layout_view_->SetLayoutManager( | 1261 layout_view_->SetLayoutManager( |
1252 new views::BoxLayout(views::BoxLayout::kHorizontal, | 1262 new views::BoxLayout(views::BoxLayout::kHorizontal, |
1253 0, 0, kUserLabelToIconPadding)); | 1263 0, 0, kUserLabelToIconPadding)); |
1254 } else { | 1264 } else { |
1255 if (avatar_) { | 1265 if (avatar_) { |
1256 avatar_->SetBorder(views::Border::NullBorder()); | 1266 if (switches::UseAlternateShelfLayout()) { |
1257 avatar_->SetCornerRadii( | 1267 avatar_->SetBorder(views::Border::NullBorder()); |
1258 0, 0, kUserIconCornerRadius, kUserIconCornerRadius); | 1268 avatar_->SetCornerRadii( |
| 1269 0, 0, kUserIconLargeCornerRadius, kUserIconLargeCornerRadius); |
| 1270 } else { |
| 1271 SetTrayImageItemBorder(avatar_, alignment); |
| 1272 } |
1259 } | 1273 } |
1260 if (label_) { | 1274 if (label_) { |
1261 label_->SetBorder(views::Border::CreateEmptyBorder( | 1275 label_->SetBorder(views::Border::CreateEmptyBorder( |
1262 kTrayLabelItemVerticalPaddingVerticalAlignment, | 1276 kTrayLabelItemVerticalPaddingVerticalAlignment, |
1263 kTrayLabelItemHorizontalPaddingBottomAlignment, | 1277 kTrayLabelItemHorizontalPaddingBottomAlignment, |
1264 kTrayLabelItemVerticalPaddingVerticalAlignment, | 1278 kTrayLabelItemVerticalPaddingVerticalAlignment, |
1265 kTrayLabelItemHorizontalPaddingBottomAlignment)); | 1279 kTrayLabelItemHorizontalPaddingBottomAlignment)); |
1266 } | 1280 } |
1267 layout_view_->SetLayoutManager( | 1281 layout_view_->SetLayoutManager( |
1268 new views::BoxLayout(views::BoxLayout::kVertical, | 1282 new views::BoxLayout(views::BoxLayout::kVertical, |
(...skipping 21 matching lines...) Expand all Loading... |
1290 Shell::GetInstance()->system_tray_delegate()->GetUserLoginStatus()); | 1304 Shell::GetInstance()->system_tray_delegate()->GetUserLoginStatus()); |
1291 } | 1305 } |
1292 | 1306 |
1293 void TrayUser::UpdateAvatarImage(user::LoginStatus status) { | 1307 void TrayUser::UpdateAvatarImage(user::LoginStatus status) { |
1294 SessionStateDelegate* session_state_delegate = | 1308 SessionStateDelegate* session_state_delegate = |
1295 Shell::GetInstance()->session_state_delegate(); | 1309 Shell::GetInstance()->session_state_delegate(); |
1296 if (!avatar_ || | 1310 if (!avatar_ || |
1297 GetTrayIndex() >= session_state_delegate->NumberOfLoggedInUsers()) | 1311 GetTrayIndex() >= session_state_delegate->NumberOfLoggedInUsers()) |
1298 return; | 1312 return; |
1299 | 1313 |
| 1314 int icon_size = switches::UseAlternateShelfLayout() ? |
| 1315 kUserIconLargeSize : kUserIconSize; |
| 1316 |
1300 avatar_->SetImage( | 1317 avatar_->SetImage( |
1301 Shell::GetInstance()->session_state_delegate()->GetUserImage( | 1318 Shell::GetInstance()->session_state_delegate()->GetUserImage( |
1302 GetTrayIndex()), | 1319 GetTrayIndex()), |
1303 gfx::Size(kUserIconSize, kUserIconSize)); | 1320 gfx::Size(icon_size, icon_size)); |
1304 | 1321 |
1305 // Unit tests might come here with no images for some users. | 1322 // Unit tests might come here with no images for some users. |
1306 if (avatar_->size().IsEmpty()) | 1323 if (avatar_->size().IsEmpty()) |
1307 avatar_->SetSize(gfx::Size(kUserIconSize, kUserIconSize)); | 1324 avatar_->SetSize(gfx::Size(icon_size, icon_size)); |
1308 } | 1325 } |
1309 | 1326 |
1310 MultiProfileIndex TrayUser::GetTrayIndex() { | 1327 MultiProfileIndex TrayUser::GetTrayIndex() { |
1311 Shell* shell = Shell::GetInstance(); | 1328 Shell* shell = Shell::GetInstance(); |
1312 // If multi profile is not enabled we can use the normal index. | 1329 // If multi profile is not enabled we can use the normal index. |
1313 if (!shell->delegate()->IsMultiProfilesEnabled()) | 1330 if (!shell->delegate()->IsMultiProfilesEnabled()) |
1314 return multiprofile_index_; | 1331 return multiprofile_index_; |
1315 // In case of multi profile we need to mirror the indices since the system | 1332 // In case of multi profile we need to mirror the indices since the system |
1316 // tray items are in the reverse order then the menu items. | 1333 // tray items are in the reverse order then the menu items. |
1317 return shell->session_state_delegate()->GetMaximumNumberOfLoggedInUsers() - | 1334 return shell->session_state_delegate()->GetMaximumNumberOfLoggedInUsers() - |
1318 1 - multiprofile_index_; | 1335 1 - multiprofile_index_; |
1319 } | 1336 } |
1320 | 1337 |
1321 void TrayUser::UpdateLayoutOfItem() { | 1338 void TrayUser::UpdateLayoutOfItem() { |
1322 internal::RootWindowController* controller = | 1339 internal::RootWindowController* controller = |
1323 internal::GetRootWindowController( | 1340 internal::GetRootWindowController( |
1324 system_tray()->GetWidget()->GetNativeWindow()->GetRootWindow()); | 1341 system_tray()->GetWidget()->GetNativeWindow()->GetRootWindow()); |
1325 if (controller && controller->shelf()) { | 1342 if (controller && controller->shelf()) { |
1326 UpdateAfterShelfAlignmentChange( | 1343 UpdateAfterShelfAlignmentChange( |
1327 controller->GetShelfLayoutManager()->GetAlignment()); | 1344 controller->GetShelfLayoutManager()->GetAlignment()); |
1328 } | 1345 } |
1329 } | 1346 } |
1330 | 1347 |
1331 } // namespace internal | 1348 } // namespace internal |
1332 } // namespace ash | 1349 } // namespace ash |
OLD | NEW |