OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/profiles/profile_chooser_view.h" | 5 #include "chrome/browser/ui/views/profiles/profile_chooser_view.h" |
6 | 6 |
7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
10 #include "chrome/browser/lifetime/application_lifetime.h" | 10 #include "chrome/browser/lifetime/application_lifetime.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "components/signin/core/common/profile_management_switches.h" | 31 #include "components/signin/core/common/profile_management_switches.h" |
32 #include "grit/chromium_strings.h" | 32 #include "grit/chromium_strings.h" |
33 #include "grit/generated_resources.h" | 33 #include "grit/generated_resources.h" |
34 #include "grit/theme_resources.h" | 34 #include "grit/theme_resources.h" |
35 #include "third_party/skia/include/core/SkColor.h" | 35 #include "third_party/skia/include/core/SkColor.h" |
36 #include "ui/base/l10n/l10n_util.h" | 36 #include "ui/base/l10n/l10n_util.h" |
37 #include "ui/base/resource/resource_bundle.h" | 37 #include "ui/base/resource/resource_bundle.h" |
38 #include "ui/gfx/canvas.h" | 38 #include "ui/gfx/canvas.h" |
39 #include "ui/gfx/image/image.h" | 39 #include "ui/gfx/image/image.h" |
40 #include "ui/gfx/image/image_skia.h" | 40 #include "ui/gfx/image/image_skia.h" |
| 41 #include "ui/gfx/path.h" |
| 42 #include "ui/gfx/skia_util.h" |
41 #include "ui/gfx/text_elider.h" | 43 #include "ui/gfx/text_elider.h" |
42 #include "ui/native_theme/native_theme.h" | 44 #include "ui/native_theme/native_theme.h" |
43 #include "ui/views/controls/button/blue_button.h" | 45 #include "ui/views/controls/button/blue_button.h" |
44 #include "ui/views/controls/button/image_button.h" | 46 #include "ui/views/controls/button/image_button.h" |
45 #include "ui/views/controls/button/label_button.h" | 47 #include "ui/views/controls/button/label_button.h" |
46 #include "ui/views/controls/button/menu_button.h" | 48 #include "ui/views/controls/button/menu_button.h" |
47 #include "ui/views/controls/label.h" | 49 #include "ui/views/controls/label.h" |
48 #include "ui/views/controls/link.h" | 50 #include "ui/views/controls/link.h" |
49 #include "ui/views/controls/separator.h" | 51 #include "ui/views/controls/separator.h" |
50 #include "ui/views/controls/styled_label.h" | 52 #include "ui/views/controls/styled_label.h" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 const gfx::Image& icon, | 152 const gfx::Image& icon, |
151 bool is_editing_allowed, | 153 bool is_editing_allowed, |
152 const gfx::Rect& bounds) | 154 const gfx::Rect& bounds) |
153 : views::ImageView(), | 155 : views::ImageView(), |
154 change_photo_button_(NULL) { | 156 change_photo_button_(NULL) { |
155 gfx::Image image = profiles::GetSizedAvatarIcon( | 157 gfx::Image image = profiles::GetSizedAvatarIcon( |
156 icon, true, kLargeImageSide, kLargeImageSide); | 158 icon, true, kLargeImageSide, kLargeImageSide); |
157 SetImage(image.ToImageSkia()); | 159 SetImage(image.ToImageSkia()); |
158 SetBoundsRect(bounds); | 160 SetBoundsRect(bounds); |
159 | 161 |
160 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); | 162 // Calculate the circular mask that will be used to display the photo. |
161 views::ImageView* frame_overlay = new views::ImageView(); | 163 gfx::Point center = bounds.CenterPoint(); |
162 frame_overlay->SetImage(rb->GetImageNamed( | 164 circular_mask_.addCircle(SkIntToScalar(center.x()), |
163 IDR_ICON_PROFILES_AVATAR_PHOTO_FRAME).ToImageSkia()); | 165 SkIntToScalar(center.y()), |
164 frame_overlay->SetVerticalAlignment(views::ImageView::CENTER); | 166 SkIntToScalar(bounds.width() / 2)); |
165 frame_overlay->SetBoundsRect(bounds); | |
166 AddChildView(frame_overlay); | |
167 | 167 |
168 if (!is_editing_allowed) | 168 if (!is_editing_allowed) |
169 return; | 169 return; |
170 | 170 |
171 set_notify_enter_exit_on_child(true); | 171 set_notify_enter_exit_on_child(true); |
172 | 172 |
173 // Button overlay that appears when hovering over the image. | 173 // Button overlay that appears when hovering over the image. |
174 change_photo_button_ = new views::LabelButton(listener, base::string16()); | 174 change_photo_button_ = new views::LabelButton(listener, base::string16()); |
175 change_photo_button_->SetHorizontalAlignment(gfx::ALIGN_CENTER); | 175 change_photo_button_->SetHorizontalAlignment(gfx::ALIGN_CENTER); |
176 change_photo_button_->SetBorder(views::Border::NullBorder()); | 176 change_photo_button_->SetBorder(views::Border::NullBorder()); |
177 | 177 |
178 const SkColor kBackgroundColor = SkColorSetARGB(65, 255, 255, 255); | 178 const SkColor kBackgroundColor = SkColorSetARGB(65, 255, 255, 255); |
179 change_photo_button_->set_background( | 179 change_photo_button_->set_background( |
180 views::Background::CreateSolidBackground(kBackgroundColor)); | 180 views::Background::CreateSolidBackground(kBackgroundColor)); |
181 change_photo_button_->SetImage(views::LabelButton::STATE_NORMAL, | 181 change_photo_button_->SetImage(views::LabelButton::STATE_NORMAL, |
182 *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_CAMERA)); | 182 *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| 183 IDR_ICON_PROFILES_EDIT_CAMERA)); |
183 | 184 |
184 change_photo_button_->SetBoundsRect(bounds); | 185 change_photo_button_->SetBoundsRect(bounds); |
185 change_photo_button_->SetVisible(false); | 186 change_photo_button_->SetVisible(false); |
186 AddChildView(change_photo_button_); | 187 AddChildView(change_photo_button_); |
187 } | 188 } |
188 | 189 |
| 190 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { |
| 191 // Display the profile picture as a circle. |
| 192 canvas->ClipPath(circular_mask_, true); |
| 193 views::ImageView::OnPaint(canvas); |
| 194 } |
| 195 |
| 196 virtual void PaintChildren(gfx::Canvas* canvas, |
| 197 const views::CullSet& cull_set) OVERRIDE { |
| 198 // Display any children (the "change photo" overlay) as a circle. |
| 199 canvas->ClipPath(circular_mask_, true); |
| 200 View::PaintChildren(canvas, cull_set); |
| 201 } |
| 202 |
189 views::LabelButton* change_photo_button() { return change_photo_button_; } | 203 views::LabelButton* change_photo_button() { return change_photo_button_; } |
190 | 204 |
191 private: | 205 private: |
192 // views::View: | 206 // views::View: |
193 virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE { | 207 virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE { |
194 if (change_photo_button_) | 208 if (change_photo_button_) |
195 change_photo_button_->SetVisible(true); | 209 change_photo_button_->SetVisible(true); |
196 } | 210 } |
197 | 211 |
198 virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE { | 212 virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE { |
199 if (change_photo_button_) | 213 if (change_photo_button_) |
200 change_photo_button_->SetVisible(false); | 214 change_photo_button_->SetVisible(false); |
201 } | 215 } |
202 | 216 |
| 217 gfx::Path circular_mask_; |
| 218 |
203 // Button that is shown when hovering over the image view. Can be NULL if | 219 // Button that is shown when hovering over the image view. Can be NULL if |
204 // the photo isn't allowed to be edited (e.g. for guest profiles). | 220 // the photo isn't allowed to be edited (e.g. for guest profiles). |
205 views::LabelButton* change_photo_button_; | 221 views::LabelButton* change_photo_button_; |
206 | 222 |
207 DISALLOW_COPY_AND_ASSIGN(EditableProfilePhoto); | 223 DISALLOW_COPY_AND_ASSIGN(EditableProfilePhoto); |
208 }; | 224 }; |
209 | 225 |
210 | 226 |
211 // EditableProfileName ------------------------------------------------- | 227 // EditableProfileName ------------------------------------------------- |
212 | 228 |
(...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1302 layout->StartRowWithPadding( | 1318 layout->StartRowWithPadding( |
1303 1, 0, 0, views::kUnrelatedControlVerticalSpacing); | 1319 1, 0, 0, views::kUnrelatedControlVerticalSpacing); |
1304 layout->AddView(end_preview_and_relaunch_button_); | 1320 layout->AddView(end_preview_and_relaunch_button_); |
1305 | 1321 |
1306 TitleCard* title_card = new TitleCard( | 1322 TitleCard* title_card = new TitleCard( |
1307 IDS_PROFILES_END_PREVIEW, this, &end_preview_cancel_button_); | 1323 IDS_PROFILES_END_PREVIEW, this, &end_preview_cancel_button_); |
1308 return TitleCard::AddPaddedTitleCard( | 1324 return TitleCard::AddPaddedTitleCard( |
1309 view, title_card, kFixedAccountRemovalViewWidth); | 1325 view, title_card, kFixedAccountRemovalViewWidth); |
1310 } | 1326 } |
1311 | 1327 |
OLD | NEW |