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

Unified Diff: ash/wm/overview/scoped_transform_overview_window.cc

Issue 690103008: Implemented swipe to close in overview mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed ET_SCROLL_FLING_CANCEL handling from TransparentButton and removed WindowSelector.MultiWind… Created 5 years, 12 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 side-by-side diff with in-line comments
Download patch
Index: ash/wm/overview/scoped_transform_overview_window.cc
diff --git a/ash/wm/overview/scoped_transform_overview_window.cc b/ash/wm/overview/scoped_transform_overview_window.cc
index 41205bf64ff8fa666af1e75383bee1332d400f6a..2c2ab62114ab212406c114542d303796b3aacda2 100644
--- a/ash/wm/overview/scoped_transform_overview_window.cc
+++ b/ash/wm/overview/scoped_transform_overview_window.cc
@@ -8,9 +8,11 @@
#include <vector>
#include "ash/screen_util.h"
+#include "ash/shell.h"
#include "ash/shell_window_ids.h"
#include "ash/wm/overview/scoped_overview_animation_settings.h"
#include "ash/wm/overview/scoped_window_copy.h"
+#include "ash/wm/overview/window_selector_controller.h"
#include "ash/wm/overview/window_selector_item.h"
#include "ash/wm/window_state.h"
#include "ash/wm/window_util.h"
@@ -32,12 +34,25 @@ namespace {
// The opacity level that windows will be set to when they are restored.
const float kRestoreWindowOpacity = 1.0f;
+// The minimum opacity used during touch scroll gestures.
+const float kMinimumOpacity = 0.2f;
+
+// The distance at which the minimum opacity should take effect.
+const float kMinimumOpacityDistance = 200.0f;
+
aura::Window* GetTransientRoot(aura::Window* window) {
while (::wm::GetTransientParent(window))
window = ::wm::GetTransientParent(window);
return window;
}
+// Calculates the window opacity from the given scroll |distance|.
+float CalculateOpacityFromScrollDistance(int distance) {
+ float opacity =
+ 1.0 - static_cast<float>(abs(distance)) / kMinimumOpacityDistance;
+ return std::min(1.0f, std::max(kMinimumOpacity, opacity));
+}
+
// An iterator class that traverses an aura::Window and all of it's transient
// descendants.
class TransientDescendantIterator {
@@ -165,7 +180,7 @@ TransientDescendantIteratorRange GetTransientTreeIterator(
} // namespace
ScopedTransformOverviewWindow::ScopedTransformOverviewWindow(
- aura::Window* window)
+ aura::Window* window)
: window_(window),
activate_button_(new TransparentActivateWindowButton(
window_->GetRootWindow(), this)),
@@ -302,6 +317,34 @@ void ScopedTransformOverviewWindow::SetOpacity(float opacity) {
}
}
+void ScopedTransformOverviewWindow::Scroll(int delta_x) {
+ const float opacity = CalculateOpacityFromScrollDistance(delta_x);
+
+ ScopedOverviewAnimationSettings animation_settings(
+ OverviewAnimationType::SELECTOR_ITEM_SCROLL,
+ window());
+ gfx::Transform new_transform;
+ new_transform.Translate(delta_x, 0);
+ new_transform.PreconcatTransform(get_overview_transform());
+ SetTransform(window()->GetRootWindow(), new_transform);
+
+ SetOpacity(opacity);
+}
+
+void ScopedTransformOverviewWindow::CancelScroll() {
+ ScopedOverviewAnimationSettings animation_settings(
+ OverviewAnimationType::SELECTOR_ITEM_SCROLL_CANCEL,
+ window());
+
+ // The target opacity is set before the transform so that the
+ // WindowSelectorItem::OnWindowTransformed handler can properly
+ // update the opacity of the close button to the window's target
+ // opacity.
+ SetOpacity(1.0);
+ SetTransform(window()->GetRootWindow(),
+ get_overview_transform());
+}
+
void ScopedTransformOverviewWindow::Select() {
wm::GetWindowState(window_)->Activate();
}

Powered by Google App Engine
This is Rietveld 408576698