summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos
diff options
context:
space:
mode:
authorglotov@chromium.org <glotov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-04 15:22:08 +0000
committerglotov@chromium.org <glotov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-04 15:22:08 +0000
commita06e1a5dff0d8b971e738ed53be7e5dd945a894e (patch)
treeee75a8e668df869684caadfa2ddc3238fec903a0 /chrome/browser/chromeos
parentf0a0660a161b414af46becf128a9044785c75631 (diff)
downloadchromium_src-a06e1a5dff0d8b971e738ed53be7e5dd945a894e.zip
chromium_src-a06e1a5dff0d8b971e738ed53be7e5dd945a894e.tar.gz
chromium_src-a06e1a5dff0d8b971e738ed53be7e5dd945a894e.tar.bz2
Update OOBE welcome screen based on latest mocks.
BUG=http://crosbug.com/3279 TEST=none Review URL: http://codereview.chromium.org/2590001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48927 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos')
-rw-r--r--chrome/browser/chromeos/login/language_switch_model.cc22
-rw-r--r--chrome/browser/chromeos/login/language_switch_model.h11
-rw-r--r--chrome/browser/chromeos/login/network_selection_view.cc80
-rw-r--r--chrome/browser/chromeos/login/network_selection_view.h1
4 files changed, 91 insertions, 23 deletions
diff --git a/chrome/browser/chromeos/login/language_switch_model.cc b/chrome/browser/chromeos/login/language_switch_model.cc
index 896a2c9..ec552c7 100644
--- a/chrome/browser/chromeos/login/language_switch_model.cc
+++ b/chrome/browser/chromeos/login/language_switch_model.cc
@@ -27,7 +27,9 @@ namespace chromeos {
LanguageSwitchModel::LanguageSwitchModel()
: ALLOW_THIS_IN_INITIALIZER_LIST(menu_model_(this)),
- ALLOW_THIS_IN_INITIALIZER_LIST(menu_model_submenu_(this)) {
+ ALLOW_THIS_IN_INITIALIZER_LIST(menu_model_submenu_(this)),
+ delta_x_(0),
+ delta_y_(0) {
}
void LanguageSwitchModel::InitLanguageMenu() {
@@ -65,12 +67,28 @@ std::wstring LanguageSwitchModel::GetCurrentLocaleName() const {
language_list_->GetIndexFromLocale(locale));
};
+// Currently, views::Menu is implemented directly with the Gtk
+// widgets. So we use native gtk callbacks to get its future size.
+int LanguageSwitchModel::GetFirstLevelMenuWidth() const {
+ DCHECK(menu_ != NULL);
+ GtkRequisition box_size;
+ gtk_widget_size_request(menu_->GetNativeMenu(), &box_size);
+ return box_size.width;
+}
+
+void LanguageSwitchModel::SetFirstLevelMenuWidth(int width) {
+ DCHECK(menu_ != NULL);
+ gtk_widget_set_size_request(menu_->GetNativeMenu(), width, -1);
+}
+
////////////////////////////////////////////////////////////////////////////////
// views::ViewMenuDelegate implementation.
void LanguageSwitchModel::RunMenu(views::View* source, const gfx::Point& pt) {
DCHECK(menu_ != NULL);
- menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
+ gfx::Point point(pt);
+ point.Offset(delta_x_, delta_y_);
+ menu_->RunMenuAt(point, views::Menu2::ALIGN_TOPRIGHT);
}
////////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/browser/chromeos/login/language_switch_model.h b/chrome/browser/chromeos/login/language_switch_model.h
index 09155c5..882999a 100644
--- a/chrome/browser/chromeos/login/language_switch_model.h
+++ b/chrome/browser/chromeos/login/language_switch_model.h
@@ -32,6 +32,15 @@ class LanguageSwitchModel : public views::ViewMenuDelegate,
// Returns current locale name to be placed on the language menu-button.
std::wstring GetCurrentLocaleName() const;
+ // Returns original width of the first level menu to be shown when called.
+ int GetFirstLevelMenuWidth() const;
+ void SetFirstLevelMenuWidth(int width);
+
+ void set_menu_offset(int delta_x, int delta_y) {
+ delta_x_ = delta_x;
+ delta_y_ = delta_y;
+ }
+
private:
// views::ViewMenuDelegate implementation.
virtual void RunMenu(views::View* source, const gfx::Point& pt);
@@ -54,6 +63,8 @@ class LanguageSwitchModel : public views::ViewMenuDelegate,
// Language locale name storage.
scoped_ptr<LanguageList> language_list_;
+ int delta_x_, delta_y_;
+
FRIEND_TEST(::WizardControllerTest, SwitchLanguage);
DISALLOW_COPY_AND_ASSIGN(LanguageSwitchModel);
};
diff --git a/chrome/browser/chromeos/login/network_selection_view.cc b/chrome/browser/chromeos/login/network_selection_view.cc
index 891612d..7ef902c 100644
--- a/chrome/browser/chromeos/login/network_selection_view.cc
+++ b/chrome/browser/chromeos/login/network_selection_view.cc
@@ -40,10 +40,19 @@ const int kWelcomeLabelY = 150;
const int kContinueButtonSpacingX = 30;
const int kSpacing = 25;
const int kHorizontalSpacing = 25;
-const int kNetworkComboboxWidth = 250;
-const int kNetworkComboboxHeight = 30;
-const int kLanguagesMenuWidth = 200;
-const int kLanguagesMenuHeight = 30;
+const int kSelectionBoxWidthMin = 200;
+const int kSelectionBoxHeight = 29;
+const int kSelectionBoxSpacing = 7;
+
+// Menu button is drawn using our custom icons in resources. See
+// TextButtonBorder::Paint() for details. So this offset compensate
+// horizontal size, eaten by those icons.
+const int kMenuButtonHorizontalOffset = 1;
+
+// Vertical addition to the menu window to make it appear exactly below
+// MenuButton.
+const int kMenuButtonVerticalOffset = 3;
+
const SkColor kWelcomeColor = 0xFF1D6AB1;
const int kThrobberFrameMs = 60;
@@ -57,6 +66,7 @@ NetworkSelectionView::NetworkSelectionView(NetworkScreenDelegate* delegate)
: network_combobox_(NULL),
languages_menubutton_(NULL),
welcome_label_(NULL),
+ select_language_label_(NULL),
select_network_label_(NULL),
connecting_network_label_(NULL),
continue_button_(NULL),
@@ -86,6 +96,9 @@ void NetworkSelectionView::Init() {
welcome_label_->SetColor(kWelcomeColor);
welcome_label_->SetFont(welcome_label_font);
+ select_language_label_ = new views::Label();
+ select_language_label_->SetFont(rb.GetFont(ResourceBundle::MediumFont));
+
select_network_label_ = new views::Label();
select_network_label_->SetFont(rb.GetFont(ResourceBundle::MediumFont));
@@ -104,8 +117,12 @@ void NetworkSelectionView::Init() {
languages_menubutton_ = new views::MenuButton(
NULL, std::wstring(), delegate_->language_switch_model(), true);
+ languages_menubutton_->SetNormalHasBorder(true);
+ delegate_->language_switch_model()->set_menu_offset(
+ kMenuButtonHorizontalOffset, kMenuButtonVerticalOffset);
AddChildView(welcome_label_);
+ AddChildView(select_language_label_);
AddChildView(select_network_label_);
AddChildView(connecting_network_label_);
AddChildView(network_combobox_);
@@ -120,6 +137,8 @@ void NetworkSelectionView::UpdateLocalizedStrings() {
delegate_->language_switch_model()->GetCurrentLocaleName());
welcome_label_->SetText(l10n_util::GetStringF(IDS_NETWORK_SELECTION_TITLE,
l10n_util::GetString(IDS_PRODUCT_OS_NAME)));
+ select_language_label_->SetText(
+ l10n_util::GetString(IDS_LANGUAGE_SELECTION_SELECT));
select_network_label_->SetText(
l10n_util::GetString(IDS_NETWORK_SELECTION_SELECT));
continue_button_->SetLabel(
@@ -158,16 +177,42 @@ void NetworkSelectionView::Layout() {
y,
welcome_label_->GetPreferredSize().width(),
welcome_label_->GetPreferredSize().height());
-
- int select_network_x = (width() -
- select_network_label_->GetPreferredSize().width() -
- kNetworkComboboxWidth) / 2;
y += welcome_label_->GetPreferredSize().height() + kSpacing;
+
+ // Use menu preffered size to calculate boxes width accordingly.
+ int box_width = delegate_->language_switch_model()->GetFirstLevelMenuWidth() +
+ kMenuButtonHorizontalOffset * 2;
+ const int widest_label = std::max(
+ select_language_label_->GetPreferredSize().width(),
+ select_network_label_->GetPreferredSize().width());
+ if (box_width < kSelectionBoxWidthMin) {
+ box_width = kSelectionBoxWidthMin;
+ delegate_->language_switch_model()->SetFirstLevelMenuWidth(
+ box_width - kMenuButtonHorizontalOffset * 2);
+ } else if (widest_label + box_width + 2 * kHorizontalSpacing > width()) {
+ box_width = width() - widest_label - 2 * kHorizontalSpacing;
+ }
+ const int labels_x = (width() - widest_label - box_width) / 2;
+ select_language_label_->SetBounds(
+ labels_x,
+ y,
+ select_language_label_->GetPreferredSize().width(),
+ select_language_label_->GetPreferredSize().height());
+
+ const int selection_box_x = labels_x + widest_label + kHorizontalSpacing;
+ const int label_y_offset =
+ (kSelectionBoxHeight -
+ select_language_label_->GetPreferredSize().height()) / 2;
+ languages_menubutton_->SetBounds(selection_box_x, y - label_y_offset,
+ box_width, kSelectionBoxHeight);
+
+ y += kSelectionBoxHeight + kSelectionBoxSpacing;
select_network_label_->SetBounds(
- select_network_x,
+ labels_x,
y,
select_network_label_->GetPreferredSize().width(),
select_network_label_->GetPreferredSize().height());
+
connecting_network_label_->SetBounds(
kHorizontalSpacing,
y,
@@ -178,16 +223,12 @@ void NetworkSelectionView::Layout() {
width() / 2 + connecting_network_label_->GetPreferredSize().width() / 2 +
kHorizontalSpacing,
y + (connecting_network_label_->GetPreferredSize().height() -
- throbber_->GetPreferredSize().height()) / 2,
+ throbber_->GetPreferredSize().height()) / 2,
throbber_->GetPreferredSize().width(),
throbber_->GetPreferredSize().height());
- select_network_x +=
- select_network_label_->GetPreferredSize().width() + kHorizontalSpacing;
- y += (select_network_label_->GetPreferredSize().height() -
- network_combobox_->GetPreferredSize().height()) / 2;
- network_combobox_->SetBounds(select_network_x, y,
- kNetworkComboboxWidth, kNetworkComboboxHeight);
+ network_combobox_->SetBounds(selection_box_x, y - label_y_offset,
+ box_width, kSelectionBoxHeight);
y = height() - continue_button_->GetPreferredSize().height() - kSpacing;
continue_button_->SetBounds(
@@ -197,11 +238,6 @@ void NetworkSelectionView::Layout() {
continue_button_->GetPreferredSize().width(),
continue_button_->GetPreferredSize().height());
- int x = width() - kLanguagesMenuWidth - kHorizontalSpacing;
- y = kSpacing;
- languages_menubutton_->SetBounds(x, y,
- kLanguagesMenuWidth, kLanguagesMenuHeight);
-
// Need to refresh combobox layout explicitly.
network_combobox_->Layout();
continue_button_->Layout();
@@ -230,6 +266,8 @@ void NetworkSelectionView::ShowConnectingStatus(bool connecting,
const string16& network_id) {
network_id_ = network_id;
UpdateConnectingNetworkLabel();
+ select_language_label_->SetVisible(!connecting);
+ languages_menubutton_->SetVisible(!connecting);
select_network_label_->SetVisible(!connecting);
network_combobox_->SetVisible(!connecting);
connecting_network_label_->SetVisible(connecting);
diff --git a/chrome/browser/chromeos/login/network_selection_view.h b/chrome/browser/chromeos/login/network_selection_view.h
index c72fd4f..5843e33 100644
--- a/chrome/browser/chromeos/login/network_selection_view.h
+++ b/chrome/browser/chromeos/login/network_selection_view.h
@@ -72,6 +72,7 @@ class NetworkSelectionView : public views::View {
views::Combobox* network_combobox_;
views::MenuButton* languages_menubutton_;
views::Label* welcome_label_;
+ views::Label* select_language_label_;
views::Label* select_network_label_;
views::Label* connecting_network_label_;
views::NativeButton* continue_button_;