#ifndef MIR_EXAMPLE_TILING_WINDOW_MANAGER_H_
#define MIR_EXAMPLE_TILING_WINDOW_MANAGER_H_
{
namespace examples
{
struct TilingSessionInfo
{
geometry::Rectangle
tile;
std::vector<std::weak_ptr<scene::Surface>>
surfaces;
};
struct TilingSurfaceInfo
{
std::shared_ptr<scene::Session>
const&
session,
std::shared_ptr<scene::Surface> const& surface,
scene::SurfaceCreationParameters const& params);
std::weak_ptr<scene::Session>
session;
};
class TilingWindowManagerPolicy
{
public:
using Tools = BasicWindowManagerToolsCopy<TilingSessionInfo, TilingSurfaceInfo>;
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::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);
static bool drag(std::shared_ptr<scene::Surface> surface, geometry::Point to, geometry::Point from, geometry::Rectangle bounds);
static bool resize(std::shared_ptr<scene::Surface> surface, geometry::Point cursor, geometry::Point old_cursor, geometry::Rectangle bounds);
geometry::Point old_cursor{};
};
}
}
#endif