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

Side by Side Diff: ash/wm/overview/window_grid.cc

Issue 2895713002: [mus+ash] Removes WmWindow from ash/wm/mru_window_tracker and overview mode (Closed)
Patch Set: Address nits, unit_tests target compiles Created 3 years, 7 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
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 "ash/wm/overview/window_grid.h" 5 #include "ash/wm/overview/window_grid.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 24 matching lines...) Expand all
35 #include "ui/gfx/animation/tween.h" 35 #include "ui/gfx/animation/tween.h"
36 #include "ui/gfx/canvas.h" 36 #include "ui/gfx/canvas.h"
37 #include "ui/gfx/geometry/safe_integer_conversions.h" 37 #include "ui/gfx/geometry/safe_integer_conversions.h"
38 #include "ui/gfx/geometry/vector2d.h" 38 #include "ui/gfx/geometry/vector2d.h"
39 #include "ui/gfx/scoped_canvas.h" 39 #include "ui/gfx/scoped_canvas.h"
40 #include "ui/views/background.h" 40 #include "ui/views/background.h"
41 #include "ui/views/border.h" 41 #include "ui/views/border.h"
42 #include "ui/views/painter.h" 42 #include "ui/views/painter.h"
43 #include "ui/views/view.h" 43 #include "ui/views/view.h"
44 #include "ui/views/widget/widget.h" 44 #include "ui/views/widget/widget.h"
45 #include "ui/wm/core/coordinate_conversion.h"
45 #include "ui/wm/core/shadow.h" 46 #include "ui/wm/core/shadow.h"
46 #include "ui/wm/core/shadow_types.h" 47 #include "ui/wm/core/shadow_types.h"
47 #include "ui/wm/core/window_animations.h" 48 #include "ui/wm/core/window_animations.h"
48 49
49 namespace ash { 50 namespace ash {
50 namespace { 51 namespace {
51 52
52 using Windows = std::vector<WmWindow*>; 53 using Windows = aura::Window::Windows;
53 54
54 // A comparator for locating a given target window. 55 // A comparator for locating a given target window.
55 struct WindowSelectorItemComparator { 56 struct WindowSelectorItemComparator {
56 explicit WindowSelectorItemComparator(const WmWindow* target_window) 57 explicit WindowSelectorItemComparator(const aura::Window* target_window)
57 : target(target_window) {} 58 : target(target_window) {}
58 59
59 bool operator()(std::unique_ptr<WindowSelectorItem>& window) const { 60 bool operator()(std::unique_ptr<WindowSelectorItem>& window) const {
60 return window->GetWindow() == target; 61 return window->GetWindow() == target;
61 } 62 }
62 63
63 const WmWindow* target; 64 const aura::Window* target;
64 }; 65 };
65 66
66 // Time it takes for the selector widget to move to the next target. The same 67 // Time it takes for the selector widget to move to the next target. The same
67 // time is used for fading out shield widget when the overview mode is opened 68 // time is used for fading out shield widget when the overview mode is opened
68 // or closed. 69 // or closed.
69 const int kOverviewSelectorTransitionMilliseconds = 250; 70 const int kOverviewSelectorTransitionMilliseconds = 250;
70 71
71 // The color and opacity of the screen shield in overview. 72 // The color and opacity of the screen shield in overview.
72 const SkColor kShieldColor = SkColorSetARGB(255, 0, 0, 0); 73 const SkColor kShieldColor = SkColorSetARGB(255, 0, 0, 0);
73 const float kShieldOpacity = 0.7f; 74 const float kShieldOpacity = 0.7f;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 break; 216 break;
216 } 217 }
217 return vector; 218 return vector;
218 } 219 }
219 220
220 // Creates and returns a background translucent widget parented in 221 // Creates and returns a background translucent widget parented in
221 // |root_window|'s default container and having |background_color|. 222 // |root_window|'s default container and having |background_color|.
222 // When |border_thickness| is non-zero, a border is created having 223 // When |border_thickness| is non-zero, a border is created having
223 // |border_color|, otherwise |border_color| parameter is ignored. 224 // |border_color|, otherwise |border_color| parameter is ignored.
224 // The new background widget starts with |initial_opacity| and then fades in. 225 // The new background widget starts with |initial_opacity| and then fades in.
225 views::Widget* CreateBackgroundWidget(WmWindow* root_window, 226 views::Widget* CreateBackgroundWidget(aura::Window* root_window,
226 ui::LayerType layer_type, 227 ui::LayerType layer_type,
227 SkColor background_color, 228 SkColor background_color,
228 int border_thickness, 229 int border_thickness,
229 int border_radius, 230 int border_radius,
230 SkColor border_color, 231 SkColor border_color,
231 float initial_opacity) { 232 float initial_opacity) {
232 views::Widget* widget = new views::Widget; 233 views::Widget* widget = new views::Widget;
233 views::Widget::InitParams params; 234 views::Widget::InitParams params;
234 params.type = views::Widget::InitParams::TYPE_POPUP; 235 params.type = views::Widget::InitParams::TYPE_POPUP;
235 params.keep_on_top = false; 236 params.keep_on_top = false;
236 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 237 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
237 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; 238 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
238 params.layer_type = layer_type; 239 params.layer_type = layer_type;
239 params.accept_events = false; 240 params.accept_events = false;
240 widget->set_focus_on_creation(false); 241 widget->set_focus_on_creation(false);
241 // Parenting in kShellWindowId_WallpaperContainer allows proper layering of 242 // Parenting in kShellWindowId_WallpaperContainer allows proper layering of
242 // the shield and selection widgets. Since that container is created with 243 // the shield and selection widgets. Since that container is created with
243 // USE_LOCAL_COORDINATES BoundsInScreenBehavior local bounds in |root_window_| 244 // USE_LOCAL_COORDINATES BoundsInScreenBehavior local bounds in |root_window_|
244 // need to be provided. 245 // need to be provided.
245 root_window->GetRootWindowController()->ConfigureWidgetInitParamsForContainer( 246 RootWindowController::ForWindow(root_window)
246 widget, kShellWindowId_WallpaperContainer, &params); 247 ->ConfigureWidgetInitParamsForContainer(
248 widget, kShellWindowId_WallpaperContainer, &params);
247 widget->Init(params); 249 widget->Init(params);
248 WmWindow* widget_window = WmWindow::Get(widget->GetNativeWindow()); 250 aura::Window* widget_window = widget->GetNativeWindow();
249 // Disable the "bounce in" animation when showing the window. 251 // Disable the "bounce in" animation when showing the window.
250 widget_window->SetVisibilityAnimationTransition(::wm::ANIMATE_NONE); 252 ::wm::SetWindowVisibilityAnimationTransition(widget_window,
253 ::wm::ANIMATE_NONE);
251 // The background widget should not activate the shelf when passing under it. 254 // The background widget should not activate the shelf when passing under it.
252 widget_window->GetWindowState()->set_ignored_by_shelf(true); 255 wm::GetWindowState(widget_window)->set_ignored_by_shelf(true);
253 if (params.layer_type == ui::LAYER_SOLID_COLOR) { 256 if (params.layer_type == ui::LAYER_SOLID_COLOR) {
254 widget_window->GetLayer()->SetColor(background_color); 257 widget_window->layer()->SetColor(background_color);
255 } else { 258 } else {
256 views::View* content_view = 259 views::View* content_view =
257 new RoundedRectView(border_radius, SK_ColorTRANSPARENT); 260 new RoundedRectView(border_radius, SK_ColorTRANSPARENT);
258 content_view->set_background(new BackgroundWith1PxBorder( 261 content_view->set_background(new BackgroundWith1PxBorder(
259 background_color, border_color, border_thickness, border_radius)); 262 background_color, border_color, border_thickness, border_radius));
260 widget->SetContentsView(content_view); 263 widget->SetContentsView(content_view);
261 } 264 }
262 widget_window->GetParent()->StackChildAtTop(widget_window); 265 widget_window->parent()->StackChildAtTop(widget_window);
263 widget->Show(); 266 widget->Show();
264 widget_window->SetOpacity(initial_opacity); 267 widget_window->layer()->SetOpacity(initial_opacity);
265 return widget; 268 return widget;
266 } 269 }
267 270
268 bool IsMinimizedStateType(wm::WindowStateType type) { 271 bool IsMinimizedStateType(wm::WindowStateType type) {
269 return type == wm::WINDOW_STATE_TYPE_MINIMIZED; 272 return type == wm::WINDOW_STATE_TYPE_MINIMIZED;
270 } 273 }
271 274
272 } // namespace 275 } // namespace
273 276
274 WindowGrid::WindowGrid(WmWindow* root_window, 277 WindowGrid::WindowGrid(aura::Window* root_window,
275 const std::vector<WmWindow*>& windows, 278 const std::vector<aura::Window*>& windows,
276 WindowSelector* window_selector) 279 WindowSelector* window_selector)
277 : root_window_(root_window), 280 : root_window_(root_window),
278 window_selector_(window_selector), 281 window_selector_(window_selector),
279 window_observer_(this), 282 window_observer_(this),
280 window_state_observer_(this), 283 window_state_observer_(this),
281 selected_index_(0), 284 selected_index_(0),
282 num_columns_(0), 285 num_columns_(0),
283 prepared_for_overview_(false) { 286 prepared_for_overview_(false) {
284 std::vector<WmWindow*> windows_in_root; 287 aura::Window::Windows windows_in_root;
285 for (auto* window : windows) { 288 for (auto* window : windows) {
286 if (window->GetRootWindow() == root_window) 289 if (window->GetRootWindow() == root_window)
287 windows_in_root.push_back(window); 290 windows_in_root.push_back(window);
288 } 291 }
289 292
290 for (auto* window : windows_in_root) { 293 for (auto* window : windows_in_root) {
291 window_observer_.Add(window->aura_window()); 294 window_observer_.Add(window);
292 window_state_observer_.Add(window->GetWindowState()); 295 window_state_observer_.Add(wm::GetWindowState(window));
293 window_list_.push_back( 296 window_list_.push_back(
294 base::MakeUnique<WindowSelectorItem>(window, window_selector_)); 297 base::MakeUnique<WindowSelectorItem>(window, window_selector_));
295 } 298 }
296 } 299 }
297 300
298 WindowGrid::~WindowGrid() {} 301 WindowGrid::~WindowGrid() {}
299 302
300 void WindowGrid::Shutdown() { 303 void WindowGrid::Shutdown() {
301 for (const auto& window : window_list_) 304 for (const auto& window : window_list_)
302 window->Shutdown(); 305 window->Shutdown();
303 306
304 if (shield_widget_) { 307 if (shield_widget_) {
305 // Fade out the shield widget. This animation continues past the lifetime 308 // Fade out the shield widget. This animation continues past the lifetime
306 // of |this|. 309 // of |this|.
307 WmWindow* widget_window = WmWindow::Get(shield_widget_->GetNativeWindow()); 310 aura::Window* widget_window = shield_widget_->GetNativeWindow();
308 ui::ScopedLayerAnimationSettings animation_settings( 311 ui::ScopedLayerAnimationSettings animation_settings(
309 widget_window->GetLayer()->GetAnimator()); 312 widget_window->layer()->GetAnimator());
310 animation_settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds( 313 animation_settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(
311 kOverviewSelectorTransitionMilliseconds)); 314 kOverviewSelectorTransitionMilliseconds));
312 animation_settings.SetTweenType(gfx::Tween::EASE_OUT); 315 animation_settings.SetTweenType(gfx::Tween::EASE_OUT);
313 animation_settings.SetPreemptionStrategy( 316 animation_settings.SetPreemptionStrategy(
314 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); 317 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
315 // CleanupAnimationObserver will delete itself (and the shield widget) when 318 // CleanupAnimationObserver will delete itself (and the shield widget) when
316 // the opacity animation is complete. 319 // the opacity animation is complete.
317 // Ownership over the observer is passed to the window_selector_->delegate() 320 // Ownership over the observer is passed to the window_selector_->delegate()
318 // which has longer lifetime so that animations can continue even after the 321 // which has longer lifetime so that animations can continue even after the
319 // overview mode is shut down. 322 // overview mode is shut down.
(...skipping 12 matching lines...) Expand all
332 for (const auto& window : window_list_) 335 for (const auto& window : window_list_)
333 window->PrepareForOverview(); 336 window->PrepareForOverview();
334 prepared_for_overview_ = true; 337 prepared_for_overview_ = true;
335 } 338 }
336 339
337 void WindowGrid::PositionWindows(bool animate) { 340 void WindowGrid::PositionWindows(bool animate) {
338 if (window_selector_->is_shut_down() || window_list_.empty()) 341 if (window_selector_->is_shut_down() || window_list_.empty())
339 return; 342 return;
340 DCHECK(shield_widget_.get()); 343 DCHECK(shield_widget_.get());
341 // Keep the background shield widget covering the whole screen. 344 // Keep the background shield widget covering the whole screen.
342 WmWindow* widget_window = WmWindow::Get(shield_widget_->GetNativeWindow()); 345 aura::Window* widget_window = shield_widget_->GetNativeWindow();
343 const gfx::Rect bounds = widget_window->GetParent()->GetBounds(); 346 const gfx::Rect bounds = widget_window->parent()->bounds();
344 widget_window->SetBounds(bounds); 347 widget_window->SetBounds(bounds);
345 gfx::Rect total_bounds = root_window_->ConvertRectToScreen( 348 gfx::Rect total_bounds = ScreenUtil::GetDisplayWorkAreaBoundsInParent(
346 ScreenUtil::GetDisplayWorkAreaBoundsInParent( 349 root_window_->GetChildById(kShellWindowId_DefaultContainer));
347 root_window_->GetChildByShellWindowId(kShellWindowId_DefaultContainer) 350 ::wm::ConvertRectToScreen(root_window_, &total_bounds);
348 ->aura_window()));
349 // Windows occupy vertically centered area with additional vertical insets. 351 // Windows occupy vertically centered area with additional vertical insets.
350 int horizontal_inset = 352 int horizontal_inset =
351 gfx::ToFlooredInt(std::min(kOverviewInsetRatio * total_bounds.width(), 353 gfx::ToFlooredInt(std::min(kOverviewInsetRatio * total_bounds.width(),
352 kOverviewInsetRatio * total_bounds.height())); 354 kOverviewInsetRatio * total_bounds.height()));
353 int vertical_inset = 355 int vertical_inset =
354 horizontal_inset + 356 horizontal_inset +
355 kOverviewVerticalInset * (total_bounds.height() - 2 * horizontal_inset); 357 kOverviewVerticalInset * (total_bounds.height() - 2 * horizontal_inset);
356 total_bounds.Inset(std::max(0, horizontal_inset - kWindowMargin), 358 total_bounds.Inset(std::max(0, horizontal_inset - kWindowMargin),
357 std::max(0, vertical_inset - kWindowMargin)); 359 std::max(0, vertical_inset - kWindowMargin));
358 std::vector<gfx::Rect> rects; 360 std::vector<gfx::Rect> rects;
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 return out_of_bounds; 522 return out_of_bounds;
521 } 523 }
522 524
523 WindowSelectorItem* WindowGrid::SelectedWindow() const { 525 WindowSelectorItem* WindowGrid::SelectedWindow() const {
524 if (!selection_widget_) 526 if (!selection_widget_)
525 return nullptr; 527 return nullptr;
526 CHECK(selected_index_ < window_list_.size()); 528 CHECK(selected_index_ < window_list_.size());
527 return window_list_[selected_index_].get(); 529 return window_list_[selected_index_].get();
528 } 530 }
529 531
530 bool WindowGrid::Contains(const WmWindow* window) const { 532 bool WindowGrid::Contains(const aura::Window* window) const {
531 for (const auto& window_item : window_list_) { 533 for (const auto& window_item : window_list_) {
532 if (window_item->Contains(window)) 534 if (window_item->Contains(window))
533 return true; 535 return true;
534 } 536 }
535 return false; 537 return false;
536 } 538 }
537 539
538 void WindowGrid::FilterItems(const base::string16& pattern) { 540 void WindowGrid::FilterItems(const base::string16& pattern) {
539 base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents finder(pattern); 541 base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents finder(pattern);
540 for (const auto& window : window_list_) { 542 for (const auto& window : window_list_) {
541 if (finder.Search(window->GetWindow()->aura_window()->GetTitle(), nullptr, 543 if (finder.Search(window->GetWindow()->GetTitle(), nullptr, nullptr)) {
542 nullptr)) {
543 window->SetDimmed(false); 544 window->SetDimmed(false);
544 } else { 545 } else {
545 window->SetDimmed(true); 546 window->SetDimmed(true);
546 if (selection_widget_ && SelectedWindow() == window.get()) { 547 if (selection_widget_ && SelectedWindow() == window.get()) {
547 SelectedWindow()->SetSelected(false); 548 SelectedWindow()->SetSelected(false);
548 selection_widget_.reset(); 549 selection_widget_.reset();
549 selector_shadow_.reset(); 550 selector_shadow_.reset();
550 } 551 }
551 } 552 }
552 } 553 }
553 } 554 }
554 555
555 void WindowGrid::WindowClosing(WindowSelectorItem* window) { 556 void WindowGrid::WindowClosing(WindowSelectorItem* window) {
556 if (!selection_widget_ || SelectedWindow() != window) 557 if (!selection_widget_ || SelectedWindow() != window)
557 return; 558 return;
558 WmWindow* selection_widget_window = 559 aura::Window* selection_widget_window = selection_widget_->GetNativeWindow();
559 WmWindow::Get(selection_widget_->GetNativeWindow());
560 std::unique_ptr<ScopedOverviewAnimationSettings> animation_settings_label = 560 std::unique_ptr<ScopedOverviewAnimationSettings> animation_settings_label =
561 ScopedOverviewAnimationSettingsFactory::Get() 561 ScopedOverviewAnimationSettingsFactory::Get()
562 ->CreateOverviewAnimationSettings( 562 ->CreateOverviewAnimationSettings(
563 OverviewAnimationType::OVERVIEW_ANIMATION_CLOSING_SELECTOR_ITEM, 563 OverviewAnimationType::OVERVIEW_ANIMATION_CLOSING_SELECTOR_ITEM,
564 selection_widget_window); 564 selection_widget_window);
565 selection_widget_->SetOpacity(0.f); 565 selection_widget_->SetOpacity(0.f);
566 } 566 }
567 567
568 void WindowGrid::OnWindowDestroying(aura::Window* window) { 568 void WindowGrid::OnWindowDestroying(aura::Window* window) {
569 window_observer_.Remove(window); 569 window_observer_.Remove(window);
570 window_state_observer_.Remove(wm::GetWindowState(window)); 570 window_state_observer_.Remove(wm::GetWindowState(window));
571 auto iter = std::find_if(window_list_.begin(), window_list_.end(), 571 auto iter = std::find_if(window_list_.begin(), window_list_.end(),
572 WindowSelectorItemComparator(WmWindow::Get(window))); 572 WindowSelectorItemComparator(window));
573 573
574 DCHECK(iter != window_list_.end()); 574 DCHECK(iter != window_list_.end());
575 575
576 size_t removed_index = iter - window_list_.begin(); 576 size_t removed_index = iter - window_list_.begin();
577 window_list_.erase(iter); 577 window_list_.erase(iter);
578 578
579 if (empty()) { 579 if (empty()) {
580 // If the grid is now empty, notify the window selector so that it erases us 580 // If the grid is now empty, notify the window selector so that it erases us
581 // from its grid list. 581 // from its grid list.
582 window_selector_->OnGridEmpty(this); 582 window_selector_->OnGridEmpty(this);
(...skipping 15 matching lines...) Expand all
598 598
599 void WindowGrid::OnWindowBoundsChanged(aura::Window* window, 599 void WindowGrid::OnWindowBoundsChanged(aura::Window* window,
600 const gfx::Rect& old_bounds, 600 const gfx::Rect& old_bounds,
601 const gfx::Rect& new_bounds) { 601 const gfx::Rect& new_bounds) {
602 // During preparation, window bounds can change. Ignore bounds 602 // During preparation, window bounds can change. Ignore bounds
603 // change notifications in this case; we'll reposition soon. 603 // change notifications in this case; we'll reposition soon.
604 if (!prepared_for_overview_) 604 if (!prepared_for_overview_)
605 return; 605 return;
606 606
607 auto iter = std::find_if(window_list_.begin(), window_list_.end(), 607 auto iter = std::find_if(window_list_.begin(), window_list_.end(),
608 WindowSelectorItemComparator(WmWindow::Get(window))); 608 WindowSelectorItemComparator(window));
609 DCHECK(iter != window_list_.end()); 609 DCHECK(iter != window_list_.end());
610 610
611 // Immediately finish any active bounds animation. 611 // Immediately finish any active bounds animation.
612 window->layer()->GetAnimator()->StopAnimatingProperty( 612 window->layer()->GetAnimator()->StopAnimatingProperty(
613 ui::LayerAnimationElement::BOUNDS); 613 ui::LayerAnimationElement::BOUNDS);
614 PositionWindows(false); 614 PositionWindows(false);
615 } 615 }
616 616
617 void WindowGrid::OnPostWindowStateTypeChange(wm::WindowState* window_state, 617 void WindowGrid::OnPostWindowStateTypeChange(wm::WindowState* window_state,
618 wm::WindowStateType old_type) { 618 wm::WindowStateType old_type) {
619 // During preparation, window state can change, e.g. updating shelf 619 // During preparation, window state can change, e.g. updating shelf
620 // visibility may show the temporarily hidden (minimized) panels. 620 // visibility may show the temporarily hidden (minimized) panels.
621 if (!prepared_for_overview_) 621 if (!prepared_for_overview_)
622 return; 622 return;
623 623
624 wm::WindowStateType new_type = window_state->GetStateType(); 624 wm::WindowStateType new_type = window_state->GetStateType();
625 if (IsMinimizedStateType(old_type) == IsMinimizedStateType(new_type)) 625 if (IsMinimizedStateType(old_type) == IsMinimizedStateType(new_type))
626 return; 626 return;
627 627
628 auto iter = std::find_if( 628 auto iter =
629 window_list_.begin(), window_list_.end(), 629 std::find_if(window_list_.begin(), window_list_.end(),
630 [window_state](std::unique_ptr<WindowSelectorItem>& item) { 630 [window_state](std::unique_ptr<WindowSelectorItem>& item) {
631 return item->Contains(WmWindow::Get(window_state->window())); 631 return item->Contains(window_state->window());
632 }); 632 });
633 if (iter != window_list_.end()) { 633 if (iter != window_list_.end()) {
634 (*iter)->OnMinimizedStateChanged(); 634 (*iter)->OnMinimizedStateChanged();
635 PositionWindows(false); 635 PositionWindows(false);
636 } 636 }
637 } 637 }
638 638
639 void WindowGrid::InitShieldWidget() { 639 void WindowGrid::InitShieldWidget() {
640 // TODO(varkha): The code assumes that SHELF_BACKGROUND_MAXIMIZED is 640 // TODO(varkha): The code assumes that SHELF_BACKGROUND_MAXIMIZED is
641 // synonymous with a black shelf background. Update this code if that 641 // synonymous with a black shelf background. Update this code if that
642 // assumption is no longer valid. 642 // assumption is no longer valid.
643 const float initial_opacity = 643 const float initial_opacity =
644 (WmShelf::ForWindow(root_window_->aura_window())->GetBackgroundType() == 644 (WmShelf::ForWindow(root_window_)->GetBackgroundType() ==
645 SHELF_BACKGROUND_MAXIMIZED) 645 SHELF_BACKGROUND_MAXIMIZED)
646 ? 1.f 646 ? 1.f
647 : 0.f; 647 : 0.f;
648 shield_widget_.reset( 648 shield_widget_.reset(
649 CreateBackgroundWidget(root_window_, ui::LAYER_SOLID_COLOR, kShieldColor, 649 CreateBackgroundWidget(root_window_, ui::LAYER_SOLID_COLOR, kShieldColor,
650 0, 0, SK_ColorTRANSPARENT, initial_opacity)); 650 0, 0, SK_ColorTRANSPARENT, initial_opacity));
651 WmWindow* widget_window = WmWindow::Get(shield_widget_->GetNativeWindow()); 651 aura::Window* widget_window = shield_widget_->GetNativeWindow();
652 const gfx::Rect bounds = widget_window->GetParent()->GetBounds(); 652 const gfx::Rect bounds = widget_window->parent()->bounds();
653 widget_window->SetBounds(bounds); 653 widget_window->SetBounds(bounds);
654 widget_window->aura_window()->SetName("OverviewModeShield"); 654 widget_window->SetName("OverviewModeShield");
655 655
656 ui::ScopedLayerAnimationSettings animation_settings( 656 ui::ScopedLayerAnimationSettings animation_settings(
657 widget_window->GetLayer()->GetAnimator()); 657 widget_window->layer()->GetAnimator());
658 animation_settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds( 658 animation_settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(
659 kOverviewSelectorTransitionMilliseconds)); 659 kOverviewSelectorTransitionMilliseconds));
660 animation_settings.SetTweenType(gfx::Tween::EASE_OUT); 660 animation_settings.SetTweenType(gfx::Tween::EASE_OUT);
661 animation_settings.SetPreemptionStrategy( 661 animation_settings.SetPreemptionStrategy(
662 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); 662 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
663 shield_widget_->SetOpacity(kShieldOpacity); 663 shield_widget_->SetOpacity(kShieldOpacity);
664 } 664 }
665 665
666 void WindowGrid::InitSelectionWidget(WindowSelector::Direction direction) { 666 void WindowGrid::InitSelectionWidget(WindowSelector::Direction direction) {
667 selection_widget_.reset(CreateBackgroundWidget( 667 selection_widget_.reset(CreateBackgroundWidget(
668 root_window_, ui::LAYER_TEXTURED, kWindowSelectionColor, 668 root_window_, ui::LAYER_TEXTURED, kWindowSelectionColor,
669 kWindowSelectionBorderThickness, kWindowSelectionRadius, 669 kWindowSelectionBorderThickness, kWindowSelectionRadius,
670 kWindowSelectionBorderColor, 0.f)); 670 kWindowSelectionBorderColor, 0.f));
671 WmWindow* widget_window = WmWindow::Get(selection_widget_->GetNativeWindow()); 671 aura::Window* widget_window = selection_widget_->GetNativeWindow();
672 const gfx::Rect target_bounds = 672 gfx::Rect target_bounds = SelectedWindow()->target_bounds();
673 root_window_->ConvertRectFromScreen(SelectedWindow()->target_bounds()); 673 ::wm::ConvertRectFromScreen(root_window_, &target_bounds);
674 gfx::Vector2d fade_out_direction = 674 gfx::Vector2d fade_out_direction =
675 GetSlideVectorForFadeIn(direction, target_bounds); 675 GetSlideVectorForFadeIn(direction, target_bounds);
676 widget_window->SetBounds(target_bounds - fade_out_direction); 676 widget_window->SetBounds(target_bounds - fade_out_direction);
677 widget_window->aura_window()->SetName("OverviewModeSelector"); 677 widget_window->SetName("OverviewModeSelector");
678 678
679 selector_shadow_.reset(new ::wm::Shadow()); 679 selector_shadow_.reset(new ::wm::Shadow());
680 selector_shadow_->Init(::wm::ShadowElevation::LARGE); 680 selector_shadow_->Init(::wm::ShadowElevation::LARGE);
681 selector_shadow_->layer()->SetVisible(true); 681 selector_shadow_->layer()->SetVisible(true);
682 selection_widget_->GetLayer()->SetMasksToBounds(false); 682 selection_widget_->GetLayer()->SetMasksToBounds(false);
683 selection_widget_->GetLayer()->Add(selector_shadow_->layer()); 683 selection_widget_->GetLayer()->Add(selector_shadow_->layer());
684 selector_shadow_->SetContentBounds(gfx::Rect(target_bounds.size())); 684 selector_shadow_->SetContentBounds(gfx::Rect(target_bounds.size()));
685 } 685 }
686 686
687 void WindowGrid::MoveSelectionWidget(WindowSelector::Direction direction, 687 void WindowGrid::MoveSelectionWidget(WindowSelector::Direction direction,
688 bool recreate_selection_widget, 688 bool recreate_selection_widget,
689 bool out_of_bounds, 689 bool out_of_bounds,
690 bool animate) { 690 bool animate) {
691 // If the selection widget is already active, fade it out in the selection 691 // If the selection widget is already active, fade it out in the selection
692 // direction. 692 // direction.
693 if (selection_widget_ && (recreate_selection_widget || out_of_bounds)) { 693 if (selection_widget_ && (recreate_selection_widget || out_of_bounds)) {
694 // Animate the old selection widget and then destroy it. 694 // Animate the old selection widget and then destroy it.
695 views::Widget* old_selection = selection_widget_.get(); 695 views::Widget* old_selection = selection_widget_.get();
696 WmWindow* old_selection_window = 696 aura::Window* old_selection_window = old_selection->GetNativeWindow();
697 WmWindow::Get(old_selection->GetNativeWindow());
698 gfx::Vector2d fade_out_direction = 697 gfx::Vector2d fade_out_direction =
699 GetSlideVectorForFadeIn(direction, old_selection_window->GetBounds()); 698 GetSlideVectorForFadeIn(direction, old_selection_window->bounds());
700 699
701 ui::ScopedLayerAnimationSettings animation_settings( 700 ui::ScopedLayerAnimationSettings animation_settings(
702 old_selection_window->GetLayer()->GetAnimator()); 701 old_selection_window->layer()->GetAnimator());
703 animation_settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds( 702 animation_settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(
704 kOverviewSelectorTransitionMilliseconds)); 703 kOverviewSelectorTransitionMilliseconds));
705 animation_settings.SetPreemptionStrategy( 704 animation_settings.SetPreemptionStrategy(
706 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); 705 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
707 animation_settings.SetTweenType(gfx::Tween::FAST_OUT_LINEAR_IN); 706 animation_settings.SetTweenType(gfx::Tween::FAST_OUT_LINEAR_IN);
708 // CleanupAnimationObserver will delete itself (and the widget) when the 707 // CleanupAnimationObserver will delete itself (and the widget) when the
709 // motion animation is complete. 708 // motion animation is complete.
710 // Ownership over the observer is passed to the window_selector_->delegate() 709 // Ownership over the observer is passed to the window_selector_->delegate()
711 // which has longer lifetime so that animations can continue even after the 710 // which has longer lifetime so that animations can continue even after the
712 // overview mode is shut down. 711 // overview mode is shut down.
713 std::unique_ptr<CleanupAnimationObserver> observer( 712 std::unique_ptr<CleanupAnimationObserver> observer(
714 new CleanupAnimationObserver(std::move(selection_widget_))); 713 new CleanupAnimationObserver(std::move(selection_widget_)));
715 animation_settings.AddObserver(observer.get()); 714 animation_settings.AddObserver(observer.get());
716 window_selector_->delegate()->AddDelayedAnimationObserver( 715 window_selector_->delegate()->AddDelayedAnimationObserver(
717 std::move(observer)); 716 std::move(observer));
718 old_selection->SetOpacity(0.f); 717 old_selection->SetOpacity(0.f);
719 old_selection_window->SetBounds(old_selection_window->GetBounds() + 718 old_selection_window->SetBounds(old_selection_window->bounds() +
720 fade_out_direction); 719 fade_out_direction);
721 old_selection->Hide(); 720 old_selection->Hide();
722 } 721 }
723 if (out_of_bounds) 722 if (out_of_bounds)
724 return; 723 return;
725 724
726 if (!selection_widget_) 725 if (!selection_widget_)
727 InitSelectionWidget(direction); 726 InitSelectionWidget(direction);
728 // Send an a11y alert so that if ChromeVox is enabled, the item label is 727 // Send an a11y alert so that if ChromeVox is enabled, the item label is
729 // read. 728 // read.
730 SelectedWindow()->SendAccessibleSelectionEvent(); 729 SelectedWindow()->SendAccessibleSelectionEvent();
731 // The selection widget is moved to the newly selected item in the same 730 // The selection widget is moved to the newly selected item in the same
732 // grid. 731 // grid.
733 MoveSelectionWidgetToTarget(animate); 732 MoveSelectionWidgetToTarget(animate);
734 } 733 }
735 734
736 void WindowGrid::MoveSelectionWidgetToTarget(bool animate) { 735 void WindowGrid::MoveSelectionWidgetToTarget(bool animate) {
737 gfx::Rect bounds = 736 gfx::Rect bounds = SelectedWindow()->target_bounds();
738 root_window_->ConvertRectFromScreen(SelectedWindow()->target_bounds()); 737 ::wm::ConvertRectFromScreen(root_window_, &bounds);
739 if (animate) { 738 if (animate) {
740 WmWindow* selection_widget_window = 739 aura::Window* selection_widget_window =
741 WmWindow::Get(selection_widget_->GetNativeWindow()); 740 selection_widget_->GetNativeWindow();
742 ui::ScopedLayerAnimationSettings animation_settings( 741 ui::ScopedLayerAnimationSettings animation_settings(
743 selection_widget_window->GetLayer()->GetAnimator()); 742 selection_widget_window->layer()->GetAnimator());
744 animation_settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds( 743 animation_settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(
745 kOverviewSelectorTransitionMilliseconds)); 744 kOverviewSelectorTransitionMilliseconds));
746 animation_settings.SetTweenType(gfx::Tween::EASE_IN_OUT); 745 animation_settings.SetTweenType(gfx::Tween::EASE_IN_OUT);
747 animation_settings.SetPreemptionStrategy( 746 animation_settings.SetPreemptionStrategy(
748 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); 747 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
749 selection_widget_->SetBounds(bounds); 748 selection_widget_->SetBounds(bounds);
750 selection_widget_->SetOpacity(1.f); 749 selection_widget_->SetOpacity(1.f);
751 750
752 if (selector_shadow_) { 751 if (selector_shadow_) {
753 ui::ScopedLayerAnimationSettings animation_settings_shadow( 752 ui::ScopedLayerAnimationSettings animation_settings_shadow(
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 *min_right = left; 833 *min_right = left;
835 if (*max_right < left) 834 if (*max_right < left)
836 *max_right = left; 835 *max_right = left;
837 } 836 }
838 *max_bottom = top + height; 837 *max_bottom = top + height;
839 } 838 }
840 return windows_fit; 839 return windows_fit;
841 } 840 }
842 841
843 } // namespace ash 842 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698