Chromium Code Reviews| Index: ui/message_center/views/notifier_settings_view.cc |
| diff --git a/ui/message_center/views/notifier_settings_view.cc b/ui/message_center/views/notifier_settings_view.cc |
| index e0c3fba7f4398e22b9a315ad923728d959ce35b9..b1c6eb0efbe40a6fcad07505192b1c32cbcff3a9 100644 |
| --- a/ui/message_center/views/notifier_settings_view.cc |
| +++ b/ui/message_center/views/notifier_settings_view.cc |
| @@ -49,6 +49,7 @@ class EntryView : public views::View { |
| // Overridden from views::View: |
| virtual void Layout() OVERRIDE; |
| virtual gfx::Size GetPreferredSize() OVERRIDE; |
| + virtual void OnFocus() OVERRIDE; |
| private: |
| DISALLOW_COPY_AND_ASSIGN(EntryView); |
| @@ -64,11 +65,12 @@ EntryView::~EntryView() { |
| void EntryView::Layout() { |
| DCHECK_EQ(1, child_count()); |
| views::View* contents = child_at(0); |
| - gfx::Size size = contents->GetPreferredSize(); |
| + int contents_width = width() - kMarginWidth * 2; |
| + int contents_height = contents->GetHeightForWidth(contents_width); |
|
dharcourt
2013/04/05 16:07:03
Nit: contents_width/contents_height should be cont
Jun Mukai
2013/04/06 03:14:04
Done.
|
| int y = 0; |
| - if (size.height() < height()) |
| - y = (height() - size.height()) / 2; |
| - contents->SetBounds(kMarginWidth, y, width() - kMarginWidth, size.height()); |
| + if (contents_height < height()) |
| + y = (height() - contents_height) / 2; |
|
dharcourt
2013/04/05 16:07:03
This _might_ be simpler as y = std::max((height()
Jun Mukai
2013/04/06 03:14:04
Done.
|
| + contents->SetBounds(kMarginWidth, y, contents_width, contents_height); |
| } |
| gfx::Size EntryView::GetPreferredSize() { |
| @@ -78,6 +80,10 @@ gfx::Size EntryView::GetPreferredSize() { |
| return size; |
| } |
| +void EntryView::OnFocus() { |
| + ScrollRectToVisible(GetLocalBounds()); |
| +} |
| + |
| // The separator line between the title and the scroll view. Currently |
| // it is achieved as a top border of the scroll view. |
| class Separator : public views::Border { |
| @@ -141,7 +147,7 @@ class NotifierSettingsView::NotifierButton : public views::CustomButton, |
| views::BoxLayout::kHorizontal, 0, 0, kSpaceInButtonComponents)); |
| checkbox_->SetChecked(notifier_->enabled); |
| checkbox_->set_listener(this); |
| - checkbox_->set_focusable(true); |
| + checkbox_->set_focusable(false); |
|
dewittj
2013/04/05 20:48:41
I believe you could just remove this line, since f
Jun Mukai
2013/04/06 03:14:04
Done.
|
| AddChildView(checkbox_); |
| UpdateIconImage(notifier_->icon); |
| AddChildView(new views::Label(notifier_->name)); |
| @@ -264,14 +270,16 @@ NotifierSettingsView::NotifierSettingsView( |
| IDS_MESSAGE_CENTER_SETTINGS_DIALOG_DESCRIPTION)); |
| top_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| top_label->SetMultiLine(true); |
| - top_label->SizeToFit(kMinimumWindowWidth - kMarginWidth); |
| + top_label->SizeToFit(kMinimumWindowWidth - kMarginWidth * 2); |
| contents_view->AddChildView(new EntryView(top_label)); |
| std::vector<Notifier*> notifiers; |
| delegate_->GetNotifierList(¬ifiers); |
| for (size_t i = 0; i < notifiers.size(); ++i) { |
| NotifierButton* button = new NotifierButton(notifiers[i], this); |
| - contents_view->AddChildView(new EntryView(button)); |
| + EntryView* entry = new EntryView(button); |
| + entry->set_focusable(true); |
| + contents_view->AddChildView(entry); |
| buttons_.insert(button); |
| } |
| scroller_->SetContents(contents_view); |
| @@ -299,6 +307,14 @@ bool NotifierSettingsView::CanResize() const { |
| void NotifierSettingsView::Layout() { |
| int title_height = title_entry_->GetPreferredSize().height(); |
| title_entry_->SetBounds(0, 0, width(), title_height); |
| + views::View* contents_view = scroller_->contents(); |
|
dewittj
2013/04/05 20:48:41
You are more familiar with scroll views than me bu
Jun Mukai
2013/04/06 03:14:04
That is a tricky part of the scroll view.
The size
|
| + int contents_width = width(); |
| + int contents_height = contents_view->GetHeightForWidth(contents_width); |
|
dharcourt
2013/04/05 16:07:03
Nit: Same contents_width/contents_height -> conten
Jun Mukai
2013/04/06 03:14:04
Done.
|
| + if (title_height + contents_height > kMinimumWindowHeight) { |
| + contents_width -= scroller_->GetScrollBarWidth(); |
| + contents_height = contents_view->GetHeightForWidth(contents_width); |
| + } |
| + contents_view->SetBounds(0, 0, contents_width, contents_height); |
| scroller_->SetBounds(0, title_height, width(), height() - title_height); |
| } |