Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Side by Side Diff: chrome/browser/chromeos/login/user_image_view.cc

Issue 2498003: Revert r48735 "Added user image screen for new user login (or old user logging in through" (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: removed grd files from cl Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/login/user_image_view.h"
6
7 #include <algorithm>
8
9 #include "app/l10n_util.h"
10 #include "app/resource_bundle.h"
11 #include "base/callback.h"
12 #include "chrome/browser/chromeos/login/rounded_rect_painter.h"
13 #include "gfx/canvas.h"
14 #include "grit/generated_resources.h"
15 #include "grit/theme_resources.h"
16 #include "skia/ext/image_operations.h"
17 #include "views/controls/button/image_button.h"
18 #include "views/controls/button/native_button.h"
19 #include "views/controls/image_view.h"
20 #include "views/controls/label.h"
21
22 namespace {
23
24 // Margin in pixels from the left and right borders of screen's contents.
25 const int kHorizontalMargin = 10;
26 // Margin in pixels from the top and bottom borders of screen's contents.
27 const int kVerticalMargin = 10;
28 // Padding between horizontally neighboring elements.
29 const int kHorizontalPadding = 10;
30 // Padding between vertically neighboring elements.
31 const int kVerticalPadding = 10;
32 // Size of each image in images list.
33 const int kImageSize = 160;
34 // Size of selected image preview.
35 const int kSelectedImageSize = 260;
36
37 } // namespace
38
39 namespace chromeos {
40
41 UserImageView::UserImageView(Delegate* delegate)
42 : title_label_(NULL),
43 ok_button_(NULL),
44 cancel_button_(NULL),
45 video_button_(NULL),
46 selected_image_(NULL),
47 delegate_(delegate),
48 image_selected_(false) {
49 }
50
51 UserImageView::~UserImageView() {
52 }
53
54 void UserImageView::Init() {
55 // Use rounded rect background.
56 set_border(CreateWizardBorder(&BorderDefinition::kScreenBorder));
57 views::Painter* painter = CreateWizardPainter(
58 &BorderDefinition::kScreenBorder);
59 set_background(views::Background::CreateBackgroundPainter(true, painter));
60
61 // Set up fonts.
62 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
63 gfx::Font title_font = rb.GetFont(ResourceBundle::MediumBoldFont);
64
65 title_label_ = new views::Label();
66 title_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
67 title_label_->SetFont(title_font);
68 title_label_->SetMultiLine(true);
69 AddChildView(title_label_);
70
71 SkBitmap video_button_image(
72 skia::ImageOperations::Resize(
73 *ResourceBundle::GetSharedInstance().GetBitmapNamed(
74 IDR_USER_IMAGE_NO_VIDEO),
75 skia::ImageOperations::RESIZE_LANCZOS3,
76 kImageSize,
77 kImageSize));
78
79 video_button_ = new views::ImageButton(this);
80 video_button_->SetImage(views::CustomButton::BS_NORMAL, &video_button_image);
81 AddChildView(video_button_);
82
83 selected_image_ = new views::ImageView();
84 selected_image_->SetImageSize(
85 gfx::Size(kSelectedImageSize, kSelectedImageSize));
86 selected_image_->SetImage(
87 *ResourceBundle::GetSharedInstance().GetBitmapNamed(
88 IDR_LOGIN_OTHER_USER));
89 AddChildView(selected_image_);
90
91 UpdateLocalizedStrings();
92 }
93
94 void UserImageView::RecreateNativeControls() {
95 // There is no way to get native button preferred size after the button was
96 // sized so delete and recreate the button on text update.
97 delete ok_button_;
98 ok_button_ = new views::NativeButton(this, std::wstring());
99 AddChildView(ok_button_);
100 ok_button_->SetEnabled(image_selected_);
101
102 delete cancel_button_;
103 cancel_button_ = new views::NativeButton(this, std::wstring());
104 AddChildView(cancel_button_);
105 cancel_button_->SetEnabled(true);
106 }
107
108 void UserImageView::UpdateLocalizedStrings() {
109 RecreateNativeControls();
110
111 title_label_->SetText(l10n_util::GetString(IDS_USER_IMAGE_SCREEN_TITLE));
112 ok_button_->SetLabel(l10n_util::GetString(IDS_OK));
113 cancel_button_->SetLabel(l10n_util::GetString(IDS_CANCEL));
114 selected_image_->SetTooltipText(
115 l10n_util::GetString(IDS_USER_IMAGE_SELECTED_TOOLTIP));
116 }
117
118 void UserImageView::UpdateVideoFrame(const SkBitmap& frame) {
119 last_frame_.reset(new SkBitmap(frame));
120 SkBitmap video_button_image(
121 skia::ImageOperations::Resize(
122 frame,
123 skia::ImageOperations::RESIZE_LANCZOS3,
124 kImageSize,
125 kImageSize));
126
127 video_button_->SetImage(views::CustomButton::BS_NORMAL, &video_button_image);
128 video_button_->SchedulePaint();
129 }
130
131 void UserImageView::OnVideoImageClicked() {
132 // TODO(avayvod): Snapshot sound.
133 if (!last_frame_.get())
134 return;
135 selected_image_->SetImage(*last_frame_);
136 image_selected_ = true;
137 ok_button_->SetEnabled(true);
138 }
139
140 void UserImageView::LocaleChanged() {
141 UpdateLocalizedStrings();
142 Layout();
143 }
144
145 void UserImageView::Layout() {
146 gfx::Insets insets = GetInsets();
147
148 // Place title at the top.
149 int title_x = insets.left() + kHorizontalMargin;
150 int title_y = insets.top() + kVerticalMargin;
151 int max_width = width() - insets.width() - kHorizontalMargin * 2;
152 title_label_->SizeToFit(max_width);
153
154 gfx::Size title_size = title_label_->GetPreferredSize();
155 title_label_->SetBounds(title_x,
156 title_y,
157 std::min(max_width, title_size.width()),
158 title_size.height());
159
160 // Put OK button at the right bottom corner.
161 gfx::Size ok_size = ok_button_->GetPreferredSize();
162 int ok_x = width() - insets.right() - kHorizontalMargin - ok_size.width();
163 int ok_y = height() - insets.bottom() - kVerticalMargin - ok_size.height();
164 ok_button_->SetBounds(ok_x, ok_y, ok_size.width(), ok_size.height());
165
166 // Put Cancel button to the left from OK.
167 gfx::Size cancel_size = cancel_button_->GetPreferredSize();
168 int cancel_x = ok_x - kHorizontalPadding - cancel_size.width();
169 int cancel_y = ok_y; // Height should be the same for both buttons.
170 cancel_button_->SetBounds(cancel_x,
171 cancel_y,
172 cancel_size.width(),
173 cancel_size.height());
174
175 // The area between buttons and title is for images.
176 int title_bottom = title_label_->y() + title_label_->height();
177 gfx::Rect images_area(insets.left() + kHorizontalMargin,
178 title_bottom + kVerticalPadding,
179 max_width,
180 ok_button_->y() - title_bottom -
181 2 * kVerticalPadding);
182
183 // Video capture image is in the top left corner of the area.
184 int video_button_x = images_area.x();
185 int video_button_y = images_area.y();
186 gfx::Size video_button_size = video_button_->GetPreferredSize();
187 video_button_->SetBounds(video_button_x,
188 video_button_y,
189 video_button_size.width(),
190 video_button_size.height());
191
192 // Selected image is floating in the middle between top and height, near
193 // the right border.
194 gfx::Size selected_image_size = selected_image_->GetPreferredSize();
195 int selected_image_x = images_area.right() - selected_image_size.width();
196 int selected_image_y = images_area.y() +
197 (images_area.height() - selected_image_size.height()) / 2;
198 selected_image_->SetBounds(selected_image_x,
199 selected_image_y,
200 selected_image_size.width(),
201 selected_image_size.height());
202
203 SchedulePaint();
204 }
205
206 gfx::Size UserImageView::GetPreferredSize() {
207 return gfx::Size(width(), height());
208 }
209
210 void UserImageView::ButtonPressed(
211 views::Button* sender, const views::Event& event) {
212 DCHECK(delegate_);
213 if (sender == video_button_) {
214 OnVideoImageClicked();
215 return;
216 }
217 if (sender == ok_button_)
218 delegate_->OnOK(*last_frame_);
219 else if (sender == cancel_button_)
220 delegate_->OnCancel();
221 else
222 NOTREACHED();
223 }
224
225 } // namespace chromeos
226
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/user_image_view.h ('k') | chrome/browser/chromeos/login/user_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698