// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef ASH_WM_GESTURES_SYSTEM_PINCH_HANDLER_H_ #define ASH_WM_GESTURES_SYSTEM_PINCH_HANDLER_H_ #include "ash/wm/workspace/phantom_window_controller.h" namespace aura { class Window; } namespace gfx { class Point; } namespace ui { class GestureEvent; } namespace views { class Widget; } namespace ash { namespace internal { enum SystemGestureStatus { SYSTEM_GESTURE_PROCESSED, // The system gesture has been processed. SYSTEM_GESTURE_IGNORED, // The system gesture was ignored. SYSTEM_GESTURE_END, // Marks the end of the sytem gesture. }; // This handles 4+ finger pinch gestures to maximize/minimize/restore windows. class SystemPinchHandler { public: explicit SystemPinchHandler(aura::Window* target); virtual ~SystemPinchHandler(); // Processes a gesture event. Returns SYSTEM_GESTURE_PROCESSED if the gesture // event has been processed. Returns SYSTEM_GESTURE_END if the gesture event // has been processed, and marks the end of the gesture sequence (i.e. the // handler should receive no more input events). SystemGestureStatus ProcessGestureEvent(const ui::GestureEvent& event); static const int kSystemGesturePoints; private: // Returns the appropriate bounds for the phantom window depending on the // state of the window, the state of the gesture sequence, and the current // event location. gfx::Rect GetPhantomWindowScreenBounds(aura::Window* window, const gfx::Point& point); enum PhantomWindowState { PHANTOM_WINDOW_NORMAL, PHANTOM_WINDOW_MAXIMIZED, PHANTOM_WINDOW_MINIMIZED, }; aura::Window* target_; views::Widget* widget_; // A phantom window is used to provide visual cues for // pinch-to-resize/maximize/minimize gestures. PhantomWindowController phantom_; // When the phantom window is in minimized or maximized state, moving the // target window should not move the phantom window. So |phantom_state_| is // used to track the state of the phantom window. PhantomWindowState phantom_state_; // PINCH_UPDATE events include incremental pinch-amount. But it is necessary // to keep track of the overall pinch-amount. |pinch_factor_| is used for // that. double pinch_factor_; DISALLOW_COPY_AND_ASSIGN(SystemPinchHandler); }; } // namespace internal } // namespace ash #endif // ASH_WM_GESTURES_SYSTEM_PINCH_HANDLER_H_