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 "athena/wm/window_overview_mode.h" | 5 #include "athena/wm/window_overview_mode.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
12 #include "ui/aura/scoped_window_targeter.h" | 12 #include "ui/aura/scoped_window_targeter.h" |
13 #include "ui/aura/window.h" | 13 #include "ui/aura/window.h" |
14 #include "ui/aura/window_delegate.h" | 14 #include "ui/aura/window_delegate.h" |
15 #include "ui/aura/window_property.h" | 15 #include "ui/aura/window_property.h" |
16 #include "ui/aura/window_targeter.h" | 16 #include "ui/aura/window_targeter.h" |
17 #include "ui/compositor/scoped_layer_animation_settings.h" | 17 #include "ui/compositor/scoped_layer_animation_settings.h" |
18 #include "ui/events/event_handler.h" | 18 #include "ui/events/event_handler.h" |
19 #include "ui/gfx/transform.h" | 19 #include "ui/gfx/transform.h" |
| 20 #include "ui/wm/core/shadow.h" |
20 | 21 |
21 namespace { | 22 namespace { |
22 | 23 |
23 struct WindowOverviewState { | 24 struct WindowOverviewState { |
24 // The transform for when the window is at the topmost position. | 25 // The transform for when the window is at the topmost position. |
25 gfx::Transform top; | 26 gfx::Transform top; |
26 | 27 |
27 // The transform for when the window is at the bottom-most position. | 28 // The transform for when the window is at the bottom-most position. |
28 gfx::Transform bottom; | 29 gfx::Transform bottom; |
29 | 30 |
30 // The current overview state of the window. 0.f means the window is at the | 31 // The current overview state of the window. 0.f means the window is at the |
31 // topmost position. 1.f means the window is at the bottom-most position. | 32 // topmost position. 1.f means the window is at the bottom-most position. |
32 float progress; | 33 float progress; |
| 34 |
| 35 scoped_ptr<wm::Shadow> shadow; |
33 }; | 36 }; |
34 | 37 |
35 } // namespace | 38 } // namespace |
36 | 39 |
37 DECLARE_WINDOW_PROPERTY_TYPE(WindowOverviewState*) | 40 DECLARE_WINDOW_PROPERTY_TYPE(WindowOverviewState*) |
38 DEFINE_OWNED_WINDOW_PROPERTY_KEY(WindowOverviewState, | 41 DEFINE_OWNED_WINDOW_PROPERTY_KEY(WindowOverviewState, |
39 kWindowOverviewState, | 42 kWindowOverviewState, |
40 NULL) | 43 NULL) |
41 namespace athena { | 44 namespace athena { |
42 | 45 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 gfx::Transform bottom_transform; | 145 gfx::Transform bottom_transform; |
143 int bottom = container_size.height() - (index * kGapBetweenWindowsBottom); | 146 int bottom = container_size.height() - (index * kGapBetweenWindowsBottom); |
144 x_translate = container_size.width() * (1 - kMaxScale) / 2.; | 147 x_translate = container_size.width() * (1 - kMaxScale) / 2.; |
145 bottom_transform.Translate(x_translate, bottom - window->bounds().y()); | 148 bottom_transform.Translate(x_translate, bottom - window->bounds().y()); |
146 bottom_transform.Scale(kMaxScale, kMaxScale); | 149 bottom_transform.Scale(kMaxScale, kMaxScale); |
147 | 150 |
148 WindowOverviewState* state = new WindowOverviewState; | 151 WindowOverviewState* state = new WindowOverviewState; |
149 state->top = top_transform; | 152 state->top = top_transform; |
150 state->bottom = bottom_transform; | 153 state->bottom = bottom_transform; |
151 state->progress = 0.f; | 154 state->progress = 0.f; |
| 155 state->shadow = CreateShadowForWindow(window); |
152 window->SetProperty(kWindowOverviewState, state); | 156 window->SetProperty(kWindowOverviewState, state); |
153 } | 157 } |
154 } | 158 } |
155 | 159 |
156 // Sets the initial position for the windows for the overview mode. | 160 // Sets the initial position for the windows for the overview mode. |
157 void SetInitialWindowStates() { | 161 void SetInitialWindowStates() { |
158 aura::Window::Windows windows = container_->children(); | 162 aura::Window::Windows windows = container_->children(); |
159 size_t window_count = windows.size(); | 163 size_t window_count = windows.size(); |
160 // The initial overview state of the topmost three windows. | 164 // The initial overview state of the topmost three windows. |
161 const float kInitialProgress[] = { 0.5f, 0.05f, 0.01f }; | 165 const float kInitialProgress[] = { 0.5f, 0.05f, 0.01f }; |
(...skipping 18 matching lines...) Expand all Loading... |
180 { | 184 { |
181 ui::ScopedLayerAnimationSettings settings(animator); | 185 ui::ScopedLayerAnimationSettings settings(animator); |
182 settings.SetPreemptionStrategy( | 186 settings.SetPreemptionStrategy( |
183 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); | 187 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
184 settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(250)); | 188 settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(250)); |
185 SetWindowProgress(window, progress); | 189 SetWindowProgress(window, progress); |
186 } | 190 } |
187 } | 191 } |
188 } | 192 } |
189 | 193 |
| 194 scoped_ptr<wm::Shadow> CreateShadowForWindow(aura::Window* window) { |
| 195 scoped_ptr<wm::Shadow> shadow(new wm::Shadow()); |
| 196 shadow->Init(wm::Shadow::STYLE_ACTIVE); |
| 197 shadow->SetContentBounds(gfx::Rect(window->bounds().size())); |
| 198 shadow->layer()->SetVisible(true); |
| 199 window->layer()->Add(shadow->layer()); |
| 200 return shadow.Pass(); |
| 201 } |
| 202 |
190 aura::Window* SelectWindowAt(ui::LocatedEvent* event) { | 203 aura::Window* SelectWindowAt(ui::LocatedEvent* event) { |
191 CHECK_EQ(container_, event->target()); | 204 CHECK_EQ(container_, event->target()); |
192 // Find the old targeter to find the target of the event. | 205 // Find the old targeter to find the target of the event. |
193 ui::EventTarget* window = container_; | 206 ui::EventTarget* window = container_; |
194 ui::EventTargeter* targeter = scoped_targeter_->old_targeter(); | 207 ui::EventTargeter* targeter = scoped_targeter_->old_targeter(); |
195 while (!targeter && window->GetParentTarget()) { | 208 while (!targeter && window->GetParentTarget()) { |
196 window = window->GetParentTarget(); | 209 window = window->GetParentTarget(); |
197 targeter = window->GetEventTargeter(); | 210 targeter = window->GetEventTargeter(); |
198 } | 211 } |
199 if (!targeter) | 212 if (!targeter) |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } // namespace | 249 } // namespace |
237 | 250 |
238 scoped_ptr<WindowOverviewMode> WindowOverviewMode::Create( | 251 scoped_ptr<WindowOverviewMode> WindowOverviewMode::Create( |
239 aura::Window* window, | 252 aura::Window* window, |
240 WindowOverviewModeDelegate* delegate) { | 253 WindowOverviewModeDelegate* delegate) { |
241 return scoped_ptr<WindowOverviewMode>( | 254 return scoped_ptr<WindowOverviewMode>( |
242 new WindowOverviewModeImpl(window, delegate)); | 255 new WindowOverviewModeImpl(window, delegate)); |
243 } | 256 } |
244 | 257 |
245 } // namespace athena | 258 } // namespace athena |
OLD | NEW |