2
* Copyright (C) 2015 Canonical, Ltd.
4
* This program is free software: you can redistribute it and/or modify it under
5
* the terms of the GNU Lesser General Public License version 3, as published by
6
* the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful, but WITHOUT
9
* ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10
* SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
* Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
#ifndef STUB_DISPLAY_H
18
#define STUB_DISPLAY_H
20
#include "mock_display.h"
21
#include "mock_gl_display_buffer.h"
22
#include "mock_display_configuration.h"
24
#include <mir/compositor/display_listener.h>
26
namespace mg = mir::graphics;
27
namespace geom = mir::geometry;
29
class StubDisplayConfiguration : public MockDisplayConfiguration
32
StubDisplayConfiguration(const std::vector<mg::DisplayConfigurationOutput> &config)
36
void for_each_output(std::function<void(mg::DisplayConfigurationOutput const&)> f) const override
38
for (auto config : m_config) {
44
std::unique_ptr<mg::DisplayConfiguration> clone() const override
46
return std::make_unique<MockDisplayConfiguration>();
50
const std::vector<mg::DisplayConfigurationOutput> m_config;
54
class StubDisplaySyncGroup : public MockDisplaySyncGroup
57
StubDisplaySyncGroup(MockGLDisplayBuffer *buffer) : buffer(buffer) {}
59
void for_each_display_buffer(std::function<void(mg::DisplayBuffer&)> const& f) override
63
std::chrono::milliseconds recommended_sleep() const override
65
std::chrono::milliseconds one{1};
69
MockGLDisplayBuffer *buffer;
73
class StubDisplay : public MockDisplay
76
// Note, GMock cannot mock functions which return non-copyable objects, so stubbing needed
77
std::unique_ptr<mg::DisplayConfiguration> configuration() const override
79
return std::unique_ptr<mg::DisplayConfiguration>(
80
new StubDisplayConfiguration(m_config)
84
void for_each_display_sync_group(std::function<void(mg::DisplaySyncGroup&)> const& f) override
86
for (auto displayBuffer : m_displayBuffers) {
87
StubDisplaySyncGroup b(displayBuffer);
92
void setFakeConfiguration(std::vector<mg::DisplayConfigurationOutput> &config,
93
std::vector<MockGLDisplayBuffer*> &displayBuffers)
96
m_displayBuffers = displayBuffers;
100
std::vector<mg::DisplayConfigurationOutput> m_config;
101
std::vector<MockGLDisplayBuffer*> m_displayBuffers;
104
class StubDisplayListener : public mir::compositor::DisplayListener
106
void add_display(mir::geometry::Rectangle const& /*area*/) override {};
108
void remove_display(mir::geometry::Rectangle const& /*area*/) override {};
111
#endif // STUB_DISPLAY_H