// Copyright 2013 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 UI_APP_LIST_VIEWS_APP_LIST_DRAG_AND_DROP_HOST_H_ #define UI_APP_LIST_VIEWS_APP_LIST_DRAG_AND_DROP_HOST_H_ #include <string> namespace gfx { class Point; class Vector2d; } // namespace gfx namespace app_list { // This class will get used by the AppListView to drag and drop Application // shortcuts onto another host (the launcher). class ApplicationDragAndDropHost { public: // Create an OS dependent drag proxy icon which can escape the given view. // The proxy should get created using the |icon| with a magnification of // |scale_factor| at a center location of |location_in_screen_coordinates. // Use |replaced_view| to find the screen which is used. // The |cursor_offset_from_center| is the offset from the mouse cursor to // the center of the item. virtual void CreateDragIconProxy( const gfx::Point& location_in_screen_coordinates, const gfx::ImageSkia& icon, views::View* replaced_view, const gfx::Vector2d& cursor_offset_from_center, float scale_factor) = 0; // Update the screen location of the Drag icon proxy. virtual void UpdateDragIconProxy( const gfx::Point& location_in_screen_coordinates) = 0; // Remove the OS dependent drag proxy from the screen. virtual void DestroyDragIconProxy() = 0; // A drag operation could get started. The recipient has to return true if // he wants to take it - e.g. |location_in_screen_poordinates| is over a // target area. The passed |app_id| identifies the application which should // get dropped. virtual bool StartDrag(const std::string& app_id, const gfx::Point& location_in_screen_coordinates) = 0; // This gets only called when the |StartDrag| function returned true and it // dispatches the mouse coordinate change accordingly. When the function // returns false it requests that the operation be aborted since the event // location is out of bounds. // Note that this function does not update the drag proxy's screen position. virtual bool Drag(const gfx::Point& location_in_screen_coordinates) = 0; // Once |StartDrag| returned true, this function is guaranteed to be called // when the mouse / touch events stop. If |cancel| is set, the drag operation // was aborted, otherwise the change should be kept. virtual void EndDrag(bool cancel) = 0; }; } // namespace app_list #endif // UI_APP_LIST_VIEWS_APP_LIST_DRAG_AND_DROP_HOST_H_