2
* Copyright © 2013 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: Kevin DuBois <kevin.dubois@canonical.com>
19
#ifndef MIR_TEST_DOUBLES_STUB_DISPLAY_CONFIGURATION_H_
20
#define MIR_TEST_DOUBLES_STUB_DISPLAY_CONFIGURATION_H_
22
#include "mir/graphics/display_configuration.h"
23
#include "mir/geometry/rectangle.h"
24
#include "mir_toolkit/common.h"
35
class StubDisplayConfig : public graphics::DisplayConfiguration
39
: StubDisplayConfig(3)
43
StubDisplayConfig(StubDisplayConfig const& other)
44
: graphics::DisplayConfiguration(),
46
outputs(other.outputs)
50
StubDisplayConfig(unsigned int num_displays)
51
: StubDisplayConfig(num_displays,
53
mir_pixel_format_bgr_888,
54
mir_pixel_format_abgr_8888,
55
mir_pixel_format_xbgr_8888
60
StubDisplayConfig(std::vector<std::pair<bool,bool>> const& connected_used)
61
: StubDisplayConfig(connected_used.size())
63
for (auto i = 0u; i < outputs.size(); ++i)
65
outputs[i].connected = connected_used[i].first;
66
outputs[i].used = connected_used[i].second;
70
StubDisplayConfig(unsigned int num_displays,
71
std::vector<MirPixelFormat> const& pfs)
73
/* construct a non-trivial dummy display config to send */
75
for (auto i = 0u; i < num_displays; i++)
77
std::vector<graphics::DisplayConfigurationMode> modes;
79
for (auto j = 0u; j <= i; j++)
81
geometry::Size sz{mode_index*4, mode_index*3};
82
graphics::DisplayConfigurationMode mode{sz, 10.0f * mode_index };
84
modes.push_back(mode);
87
size_t mode_index = modes.size() - 1;
88
geometry::Size physical_size{};
89
geometry::Point top_left{};
90
graphics::DisplayConfigurationOutput output{
91
graphics::DisplayConfigurationOutputId{static_cast<int>(i + 1)},
92
graphics::DisplayConfigurationCardId{static_cast<int>(i)},
93
graphics::DisplayConfigurationOutputType::vga,
96
((i % 2) == 0), // even numbers have connected==true
97
((i % 4) == 0), // only every second even has used==true
101
mir_orientation_normal
104
outputs.push_back(output);
106
graphics::DisplayConfigurationCard card{
107
graphics::DisplayConfigurationCardId{static_cast<int>(i)},
111
cards.push_back(card);
116
StubDisplayConfig(std::vector<geometry::Rectangle> const& rects)
119
for (auto const& rect : rects)
121
graphics::DisplayConfigurationOutput output
123
graphics::DisplayConfigurationOutputId{id},
124
graphics::DisplayConfigurationCardId{0},
125
graphics::DisplayConfigurationOutputType::vga,
126
std::vector<MirPixelFormat>{mir_pixel_format_abgr_8888},
128
0, geometry::Size{}, true, true, rect.top_left, 0,
129
mir_pixel_format_abgr_8888, mir_power_mode_on,
130
mir_orientation_normal
133
outputs.push_back(output);
137
graphics::DisplayConfigurationCard card{
138
graphics::DisplayConfigurationCardId{static_cast<int>(1)},
142
cards.push_back(card);
145
void for_each_card(std::function<void(graphics::DisplayConfigurationCard const&)> f) const override
147
for (auto const& card : cards)
151
void for_each_output(std::function<void(graphics::DisplayConfigurationOutput const&)> f) const override
153
for (auto& disp : outputs)
159
void for_each_output(std::function<void(graphics::UserDisplayConfigurationOutput&)> f) override
161
for (auto& disp : outputs)
163
graphics::UserDisplayConfigurationOutput user(disp);
168
std::vector<graphics::DisplayConfigurationCard> cards;
169
std::vector<graphics::DisplayConfigurationOutput> outputs;
176
#endif /* MIR_TEST_DOUBLES_STUB_DISPLAY_CONFIGURATION_H_ */