#ifndef UI_BASE_X_X11_DESKTOP_WINDOW_MOVE_CLIENT_H_
#define UI_BASE_X_X11_DESKTOP_WINDOW_MOVE_CLIENT_H_
#include "base/component_export.h"
#include "base/memory/raw_ptr.h"
#include "ui/base/x/x11_move_loop_delegate.h"
#include "ui/base/x/x11_whole_screen_move_loop.h"
#include "ui/gfx/geometry/point.h"
namespace gfx {
class Rect;
}
namespace ui {
class COMPONENT_EXPORT(UI_BASE_X) X11DesktopWindowMoveClient
: public X11MoveLoopDelegate {
public:
class Delegate {
public:
virtual void SetBoundsOnMove(const gfx::Rect& requested_bounds) = 0;
virtual scoped_refptr<X11Cursor> GetLastCursor() = 0;
virtual gfx::Size GetSize() = 0;
protected:
virtual ~Delegate();
};
explicit X11DesktopWindowMoveClient(Delegate* window);
~X11DesktopWindowMoveClient() override;
void OnMouseMovement(const gfx::Point& screen_point,
int flags,
base::TimeTicks event_time) override;
void OnMouseReleased() override;
void OnMoveLoopEnded() override;
bool RunMoveLoop(bool can_grab_pointer, const gfx::Vector2d& drag_offset);
void EndMoveLoop();
private:
X11WholeScreenMoveLoop move_loop_{this};
const raw_ptr<Delegate> window_;
gfx::Vector2d window_offset_;
};
}
#endif