2
* Copyright © 2014 Canonical Ltd.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU General Public License version 3,
6
* as published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by: Robert Carr <robert.carr@canonical.com>
19
#ifndef MIR_TEST_FRAMEWORK_DECLARATIVE_PLACEMENT_STRATEGY_H_
20
#define MIR_TEST_FRAMEWORK_DECLARATIVE_PLACEMENT_STRATEGY_H_
22
#include "mir/scene/placement_strategy.h"
23
#include "mir/geometry/rectangle.h"
24
#include "mir/scene/depth_id.h"
30
namespace mir_test_framework
32
typedef std::map<std::string, mir::geometry::Rectangle> SurfaceGeometries;
33
typedef std::map<std::string, mir::scene::DepthId> SurfaceDepths;
35
/// DeclarativePlacementStrategy is a test utility server component for specifying
36
/// a static list of surface geometries and relative depths. Used, for example,
37
/// in input tests where it is necessary to set up scenarios depending on
38
/// multiple surfaces geometry and stacking.
39
class DeclarativePlacementStrategy : public mir::scene::PlacementStrategy
42
// Placement requests will be passed through to default strategy, and then overriden if the surface appears
43
// in the geometry or depth map. This allows for the convenience of leaving some surfaces geometries unspecified
44
// and receiving the default behavior.
45
DeclarativePlacementStrategy(std::shared_ptr<mir::scene::PlacementStrategy> const& default_strategy,
46
SurfaceGeometries const& positions_by_name, SurfaceDepths const& depths_by_name);
48
virtual ~DeclarativePlacementStrategy() = default;
50
mir::scene::SurfaceCreationParameters place(mir::scene::Session const& session, mir::scene::SurfaceCreationParameters const& request_parameters) override;
53
DeclarativePlacementStrategy(const DeclarativePlacementStrategy&) = delete;
54
DeclarativePlacementStrategy& operator=(const DeclarativePlacementStrategy&) = delete;
57
std::shared_ptr<mir::scene::PlacementStrategy> const default_strategy;
59
SurfaceGeometries surface_geometries_by_name;
60
SurfaceDepths surface_depths_by_name;
64
#endif // MIR_TEST_FRAMEWORK_DECLARATIVE_PLACEMENT_STRATEGY_H_