Chromium Code Reviews| Index: ash/wm/overview/window_selector.cc |
| diff --git a/ash/wm/overview/window_selector.cc b/ash/wm/overview/window_selector.cc |
| index a8cef585f2013eaa114f794a6a2dde1086d9e5cf..4f6b77034bc9e1e38085b873a9ceae1a2d08fb74 100644 |
| --- a/ash/wm/overview/window_selector.cc |
| +++ b/ash/wm/overview/window_selector.cc |
| @@ -25,11 +25,14 @@ |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_event_dispatcher.h" |
| #include "ui/aura/window_observer.h" |
| +#include "ui/base/resource/resource_bundle.h" |
| #include "ui/compositor/scoped_layer_animation_settings.h" |
| #include "ui/events/event.h" |
| #include "ui/gfx/screen.h" |
| +#include "ui/views/background.h" |
| #include "ui/views/border.h" |
| #include "ui/views/controls/textfield/textfield.h" |
| +#include "ui/views/layout/box_layout.h" |
| #include "ui/wm/core/window_util.h" |
| #include "ui/wm/public/activation_client.h" |
| @@ -38,10 +41,14 @@ namespace ash { |
| namespace { |
| // The proportion of screen width that the text filter takes. |
| -const float kTextFilterScreenProportion = 0.5; |
| +const float kTextFilterScreenProportion = 0.25; |
| -// The height of the text filter. |
| -const int kTextFilterHeight = 50; |
| +// The amount of padding surrounding the text in the text filtering textbox. |
| +const int kTextFilterPadding = 3; |
| + |
| +// The font style used for text filtering. |
| +static const ::ui::ResourceBundle::FontStyle kTextFilterFontStyle = |
| + ::ui::ResourceBundle::FontStyle::BaseFont; |
| // Solid shadow length from the text filter. |
| const int kVerticalShadowOffset = 1; |
| @@ -51,6 +58,7 @@ const int kShadowBlur = 10; |
| // Text filter shadow color. |
| const SkColor kTextFilterShadow = 0xB0000000; |
| +const unsigned char kTextFilterOpacity = 128; |
|
tdanderson
2014/07/17 19:45:26
Admittedly a copy of WindowGrid::kWindowOverviewSe
flackr
2014/07/18 13:41:51
As a static class var (like kTransitionMillisecond
|
| // A comparator for locating a grid with a given root window. |
| struct RootWindowGridComparator |
| @@ -105,42 +113,6 @@ void UpdateShelfVisibility() { |
| } |
| } |
| -// Initializes the text filter on the top of the main root window and requests |
| -// focus on its textfield. |
| -views::Widget* CreateTextFilter(views::TextfieldController* controller, |
| - aura::Window* root_window) { |
| - views::Widget* widget = new views::Widget; |
| - views::Widget::InitParams params; |
| - params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; |
| - params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| - params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
| - params.parent = |
| - Shell::GetContainer(root_window, ash::kShellWindowId_OverlayContainer); |
| - params.accept_events = true; |
| - params.bounds = gfx::Rect( |
| - root_window->bounds().width() / 2 * (1 - kTextFilterScreenProportion), 0, |
| - root_window->bounds().width() * kTextFilterScreenProportion, |
| - kTextFilterHeight); |
| - widget->Init(params); |
| - |
| - views::Textfield* textfield = new views::Textfield; |
| - textfield->set_controller(controller); |
| - textfield->SetBackgroundColor(SK_ColorTRANSPARENT); |
| - textfield->SetBorder(views::Border::NullBorder()); |
| - textfield->SetTextColor(SK_ColorWHITE); |
| - textfield->SetShadows(gfx::ShadowValues(1, gfx::ShadowValue( |
| - gfx::Point(0, kVerticalShadowOffset), kShadowBlur, kTextFilterShadow))); |
| - widget->SetContentsView(textfield); |
| - |
| - gfx::Transform transform; |
| - transform.Translate(0, -kTextFilterHeight); |
| - widget->GetNativeWindow()->SetTransform(transform); |
| - widget->Show(); |
| - textfield->RequestFocus(); |
| - |
| - return widget; |
| -} |
| - |
| } // namespace |
| WindowSelector::WindowSelector(const WindowList& windows, |
| @@ -153,11 +125,16 @@ WindowSelector::WindowSelector(const WindowList& windows, |
| overview_start_time_(base::Time::Now()), |
| num_key_presses_(0), |
| num_items_(0), |
| - showing_selection_widget_(false) { |
| + showing_selection_widget_(false), |
| + text_height_(0) { |
| DCHECK(delegate_); |
| Shell* shell = Shell::GetInstance(); |
| shell->OnOverviewModeStarting(); |
| + // Compute and store the height of the text used in text filtering. |
| + ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| + text_height_ = bundle.GetFontList(kTextFilterFontStyle).GetHeight(); |
| + |
| if (restore_focus_window_) |
| restore_focus_window_->AddObserver(this); |
| @@ -253,6 +230,11 @@ WindowSelector::~WindowSelector() { |
| UpdateShelfVisibility(); |
| } |
| +int WindowSelector::TextFilterHeight() const { |
|
flackr
2014/07/18 13:41:51
Can this be in anonymous namespace and use a stati
tdanderson
2014/08/07 20:13:07
This is gone in the next patch set.
|
| + DCHECK(text_height_ > 0); |
| + return text_height_ + 2 * kTextFilterPadding; |
| +} |
| + |
| void WindowSelector::CancelSelection() { |
| delegate_->OnSelectionEnded(); |
| } |
| @@ -402,7 +384,7 @@ void WindowSelector::ContentsChanged(views::Textfield* sender, |
| if (should_show_selection_widget) |
| transform.Translate(0, 0); |
| else |
| - transform.Translate(0, -kTextFilterHeight); |
| + transform.Translate(0, -TextFilterHeight()); |
| text_filter_widget_->GetNativeWindow()->SetTransform(transform); |
| showing_selection_widget_ = should_show_selection_widget; |
| @@ -493,4 +475,53 @@ void WindowSelector::Move(Direction direction, bool animate) { |
| } |
| } |
| +views::Widget* WindowSelector::CreateTextFilter( |
| + views::TextfieldController* controller, |
| + aura::Window* root_window) { |
|
flackr
2014/07/18 13:41:51
Seems like this could still be in the anonymous na
tdanderson
2014/08/07 20:13:07
Done.
|
| + views::Widget* widget = new views::Widget; |
| + views::Widget::InitParams params; |
| + params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; |
| + params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| + params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
| + params.parent = |
| + Shell::GetContainer(root_window, ash::kShellWindowId_OverlayContainer); |
| + params.accept_events = true; |
| + params.bounds = gfx::Rect( |
| + root_window->bounds().width() / 2 * (1 - kTextFilterScreenProportion), 0, |
| + root_window->bounds().width() * kTextFilterScreenProportion, |
| + TextFilterHeight()); |
| + widget->Init(params); |
| + |
| + views::View* container = new views::View; |
| + container->set_background( |
| + views::Background::CreateSolidBackground(SK_ColorBLACK)); |
| + container->SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, |
| + kTextFilterPadding, |
| + kTextFilterPadding, |
| + kTextFilterPadding)); |
| + |
| + views::Textfield* textfield = new views::Textfield; |
| + textfield->set_controller(controller); |
| + textfield->SetBackgroundColor(SK_ColorTRANSPARENT); |
| + textfield->SetBorder(views::Border::NullBorder()); |
| + textfield->SetTextColor(SK_ColorWHITE); |
| + textfield->SetShadows(gfx::ShadowValues(1, gfx::ShadowValue( |
| + gfx::Point(0, kVerticalShadowOffset), kShadowBlur, kTextFilterShadow))); |
| + ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| + textfield->SetFontList(bundle.GetFontList(kTextFilterFontStyle)); |
| + |
| + container->AddChildView(textfield); |
| + widget->SetContentsView(container); |
| + |
| + gfx::Transform transform; |
| + transform.Translate(0, -TextFilterHeight()); |
| + widget->GetNativeWindow()->SetTransform(transform); |
| + widget->SetOpacity(kTextFilterOpacity); |
| + |
| + widget->Show(); |
| + textfield->RequestFocus(); |
| + |
| + return widget; |
| +} |
| + |
| } // namespace ash |