#ifndef MIR_EXAMPLE_TILING_WINDOW_MANAGER_H_
#define MIR_EXAMPLE_TILING_WINDOW_MANAGER_H_
{
namespace examples
{
class TilingWindowManagerPolicy : public WindowManagementPolicy
{
public:
void click(geometry::Point cursor);
void resize(geometry::Point cursor);
std::shared_ptr<scene::Session> const& session,
scene::SurfaceCreationParameters const& request_parameters)
-> scene::SurfaceCreationParameters;
void handle_new_surface(std::shared_ptr<scene::Session>
const& session, std::shared_ptr<scene::Surface>
const& surface);
std::shared_ptr<scene::Session> const& session,
std::shared_ptr<scene::Surface> const& surface,
shell::SurfaceSpecification const& modifications);
void handle_delete_surface(std::shared_ptr<scene::Session>
const& session, std::weak_ptr<scene::Surface>
const& surface);
void drag(geometry::Point cursor);
std::shared_ptr<scene::Session> const& session,
std::shared_ptr<scene::Surface> const& surface);
std::shared_ptr<scene::Session> const& session, std::shared_ptr<scene::Surface> const& surface,
std::function<
frontend::SurfaceId(std::shared_ptr<scene::Session>
const&, scene::SurfaceCreationParameters
const&)>
const& build);
private:
static const int modifier_mask =
std::shared_ptr<scene::Session> session_under(geometry::Point position);
void update_tiles(
geometry::Rectangles const& displays);
void update_surfaces(std::weak_ptr<scene::Session> const& session, geometry::Rectangle const& old_tile, geometry::Rectangle const& new_tile);
static void clip_to_tile(scene::SurfaceCreationParameters& parameters, geometry::Rectangle const& tile);
static void fit_to_new_tile(scene::Surface& surface, geometry::Rectangle const& old_tile, geometry::Rectangle const& new_tile);
void drag(std::shared_ptr<scene::Surface> surface, geometry::Point to, geometry::Point from, geometry::Rectangle bounds);
static void resize(std::shared_ptr<scene::Surface> surface, geometry::Point cursor, geometry::Point old_cursor, geometry::Rectangle bounds);
static void constrained_move(std::shared_ptr<scene::Surface> const& surface, geometry::Displacement& movement, geometry::Rectangle const& bounds);
std::shared_ptr<scene::Surface> select_active_surface(std::shared_ptr<scene::Session> const& session, std::shared_ptr<scene::Surface> const& surface);
WindowManagerTools* const tools;
geometry::Point old_cursor{};
};
}
}
#endif