| OLD | NEW |
| 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/common/wm/overview/window_grid.h" | 5 #include "ash/common/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 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 } | 219 } |
| 220 return vector; | 220 return vector; |
| 221 } | 221 } |
| 222 | 222 |
| 223 // Creates and returns a background translucent widget parented in | 223 // Creates and returns a background translucent widget parented in |
| 224 // |root_window|'s default container and having |background_color|. | 224 // |root_window|'s default container and having |background_color|. |
| 225 // When |border_thickness| is non-zero, a border is created having | 225 // When |border_thickness| is non-zero, a border is created having |
| 226 // |border_color|, otherwise |border_color| parameter is ignored. | 226 // |border_color|, otherwise |border_color| parameter is ignored. |
| 227 // The new background widget starts with |initial_opacity| and then fades in. | 227 // The new background widget starts with |initial_opacity| and then fades in. |
| 228 views::Widget* CreateBackgroundWidget(WmWindow* root_window, | 228 views::Widget* CreateBackgroundWidget(WmWindow* root_window, |
| 229 ui::LayerType layer_type, |
| 229 SkColor background_color, | 230 SkColor background_color, |
| 230 int border_thickness, | 231 int border_thickness, |
| 231 int border_radius, | 232 int border_radius, |
| 232 SkColor border_color, | 233 SkColor border_color, |
| 233 float initial_opacity) { | 234 float initial_opacity) { |
| 234 views::Widget* widget = new views::Widget; | 235 views::Widget* widget = new views::Widget; |
| 235 views::Widget::InitParams params; | 236 views::Widget::InitParams params; |
| 236 params.type = views::Widget::InitParams::TYPE_POPUP; | 237 params.type = views::Widget::InitParams::TYPE_POPUP; |
| 237 params.keep_on_top = false; | 238 params.keep_on_top = false; |
| 238 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 239 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 239 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; | 240 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
| 241 params.layer_type = layer_type; |
| 240 params.accept_events = false; | 242 params.accept_events = false; |
| 241 widget->set_focus_on_creation(false); | 243 widget->set_focus_on_creation(false); |
| 242 // Parenting in kShellWindowId_WallpaperContainer allows proper layering of | 244 // Parenting in kShellWindowId_WallpaperContainer allows proper layering of |
| 243 // the shield and selection widgets. Since that container is created with | 245 // the shield and selection widgets. Since that container is created with |
| 244 // USE_LOCAL_COORDINATES BoundsInScreenBehavior local bounds in |root_window_| | 246 // USE_LOCAL_COORDINATES BoundsInScreenBehavior local bounds in |root_window_| |
| 245 // need to be provided. | 247 // need to be provided. |
| 246 root_window->GetRootWindowController()->ConfigureWidgetInitParamsForContainer( | 248 root_window->GetRootWindowController()->ConfigureWidgetInitParamsForContainer( |
| 247 widget, kShellWindowId_WallpaperContainer, ¶ms); | 249 widget, kShellWindowId_WallpaperContainer, ¶ms); |
| 248 widget->Init(params); | 250 widget->Init(params); |
| 249 WmWindow* widget_window = WmLookup::Get()->GetWindowForWidget(widget); | 251 WmWindow* widget_window = WmLookup::Get()->GetWindowForWidget(widget); |
| 250 // Disable the "bounce in" animation when showing the window. | 252 // Disable the "bounce in" animation when showing the window. |
| 251 widget_window->SetVisibilityAnimationTransition(::wm::ANIMATE_NONE); | 253 widget_window->SetVisibilityAnimationTransition(::wm::ANIMATE_NONE); |
| 252 // 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. |
| 253 widget_window->GetWindowState()->set_ignored_by_shelf(true); | 255 widget_window->GetWindowState()->set_ignored_by_shelf(true); |
| 254 | 256 if (params.layer_type == ui::LAYER_SOLID_COLOR) { |
| 255 views::View* content_view = | 257 widget_window->GetLayer()->SetColor(background_color); |
| 256 new RoundedRectView(border_radius, SK_ColorTRANSPARENT); | 258 } else { |
| 257 content_view->set_background(new BackgroundWith1PxBorder( | 259 views::View* content_view = |
| 258 background_color, border_color, border_thickness, border_radius)); | 260 new RoundedRectView(border_radius, SK_ColorTRANSPARENT); |
| 259 widget->SetContentsView(content_view); | 261 content_view->set_background(new BackgroundWith1PxBorder( |
| 262 background_color, border_color, border_thickness, border_radius)); |
| 263 widget->SetContentsView(content_view); |
| 264 } |
| 260 widget_window->GetParent()->StackChildAtTop(widget_window); | 265 widget_window->GetParent()->StackChildAtTop(widget_window); |
| 261 widget->Show(); | 266 widget->Show(); |
| 262 widget_window->SetOpacity(initial_opacity); | 267 widget_window->SetOpacity(initial_opacity); |
| 263 return widget; | 268 return widget; |
| 264 } | 269 } |
| 265 | 270 |
| 266 bool IsMinimizedStateType(wm::WindowStateType type) { | 271 bool IsMinimizedStateType(wm::WindowStateType type) { |
| 267 return type == wm::WINDOW_STATE_TYPE_DOCKED_MINIMIZED || | 272 return type == wm::WINDOW_STATE_TYPE_DOCKED_MINIMIZED || |
| 268 type == wm::WINDOW_STATE_TYPE_MINIMIZED; | 273 type == wm::WINDOW_STATE_TYPE_MINIMIZED; |
| 269 } | 274 } |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 636 | 641 |
| 637 void WindowGrid::InitShieldWidget() { | 642 void WindowGrid::InitShieldWidget() { |
| 638 // TODO(varkha): The code assumes that SHELF_BACKGROUND_MAXIMIZED is | 643 // TODO(varkha): The code assumes that SHELF_BACKGROUND_MAXIMIZED is |
| 639 // synonymous with a black shelf background. Update this code if that | 644 // synonymous with a black shelf background. Update this code if that |
| 640 // assumption is no longer valid. | 645 // assumption is no longer valid. |
| 641 const float initial_opacity = | 646 const float initial_opacity = |
| 642 (WmShelf::ForWindow(root_window_)->GetBackgroundType() == | 647 (WmShelf::ForWindow(root_window_)->GetBackgroundType() == |
| 643 SHELF_BACKGROUND_MAXIMIZED) | 648 SHELF_BACKGROUND_MAXIMIZED) |
| 644 ? 1.f | 649 ? 1.f |
| 645 : 0.f; | 650 : 0.f; |
| 646 shield_widget_.reset(CreateBackgroundWidget( | 651 shield_widget_.reset( |
| 647 root_window_, kShieldColor, 0, 0, SK_ColorTRANSPARENT, initial_opacity)); | 652 CreateBackgroundWidget(root_window_, ui::LAYER_SOLID_COLOR, kShieldColor, |
| 648 | 653 0, 0, SK_ColorTRANSPARENT, initial_opacity)); |
| 649 WmWindow* widget_window = | 654 WmWindow* widget_window = |
| 650 WmLookup::Get()->GetWindowForWidget(shield_widget_.get()); | 655 WmLookup::Get()->GetWindowForWidget(shield_widget_.get()); |
| 651 const gfx::Rect bounds = widget_window->GetParent()->GetBounds(); | 656 const gfx::Rect bounds = widget_window->GetParent()->GetBounds(); |
| 652 widget_window->SetBounds(bounds); | 657 widget_window->SetBounds(bounds); |
| 653 widget_window->SetName("OverviewModeShield"); | 658 widget_window->SetName("OverviewModeShield"); |
| 654 | 659 |
| 655 ui::ScopedLayerAnimationSettings animation_settings( | 660 ui::ScopedLayerAnimationSettings animation_settings( |
| 656 widget_window->GetLayer()->GetAnimator()); | 661 widget_window->GetLayer()->GetAnimator()); |
| 657 animation_settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds( | 662 animation_settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds( |
| 658 kOverviewSelectorTransitionMilliseconds)); | 663 kOverviewSelectorTransitionMilliseconds)); |
| 659 animation_settings.SetTweenType(gfx::Tween::EASE_IN); | 664 animation_settings.SetTweenType(gfx::Tween::EASE_IN); |
| 660 animation_settings.SetPreemptionStrategy( | 665 animation_settings.SetPreemptionStrategy( |
| 661 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); | 666 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
| 662 shield_widget_->SetOpacity(kShieldOpacity); | 667 shield_widget_->SetOpacity(kShieldOpacity); |
| 663 } | 668 } |
| 664 | 669 |
| 665 void WindowGrid::InitSelectionWidget(WindowSelector::Direction direction) { | 670 void WindowGrid::InitSelectionWidget(WindowSelector::Direction direction) { |
| 666 selection_widget_.reset(CreateBackgroundWidget( | 671 selection_widget_.reset(CreateBackgroundWidget( |
| 667 root_window_, kWindowSelectionColor, kWindowSelectionBorderThickness, | 672 root_window_, ui::LAYER_TEXTURED, kWindowSelectionColor, |
| 668 kWindowSelectionRadius, kWindowSelectionBorderColor, 0.f)); | 673 kWindowSelectionBorderThickness, kWindowSelectionRadius, |
| 674 kWindowSelectionBorderColor, 0.f)); |
| 669 WmWindow* widget_window = | 675 WmWindow* widget_window = |
| 670 WmLookup::Get()->GetWindowForWidget(selection_widget_.get()); | 676 WmLookup::Get()->GetWindowForWidget(selection_widget_.get()); |
| 671 const gfx::Rect target_bounds = | 677 const gfx::Rect target_bounds = |
| 672 root_window_->ConvertRectFromScreen(SelectedWindow()->target_bounds()); | 678 root_window_->ConvertRectFromScreen(SelectedWindow()->target_bounds()); |
| 673 gfx::Vector2d fade_out_direction = | 679 gfx::Vector2d fade_out_direction = |
| 674 GetSlideVectorForFadeIn(direction, target_bounds); | 680 GetSlideVectorForFadeIn(direction, target_bounds); |
| 675 widget_window->SetBounds(target_bounds - fade_out_direction); | 681 widget_window->SetBounds(target_bounds - fade_out_direction); |
| 676 widget_window->SetName("OverviewModeSelector"); | 682 widget_window->SetName("OverviewModeSelector"); |
| 677 | 683 |
| 678 selector_shadow_.reset(new ::wm::Shadow()); | 684 selector_shadow_.reset(new ::wm::Shadow()); |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 833 *min_right = left; | 839 *min_right = left; |
| 834 if (*max_right < left) | 840 if (*max_right < left) |
| 835 *max_right = left; | 841 *max_right = left; |
| 836 } | 842 } |
| 837 *max_bottom = top + height; | 843 *max_bottom = top + height; |
| 838 } | 844 } |
| 839 return windows_fit; | 845 return windows_fit; |
| 840 } | 846 } |
| 841 | 847 |
| 842 } // namespace ash | 848 } // namespace ash |
| OLD | NEW |