openMSX
VisibleSurface.hh
Go to the documentation of this file.
1#ifndef VISIBLESURFACE_HH
2#define VISIBLESURFACE_HH
3
4#include "Observer.hh"
5#include "EventListener.hh"
6#include "RTSchedulable.hh"
7#include <memory>
8
9namespace openmsx {
10
11class Layer;
12class OutputSurface;
13class Reactor;
14class CommandConsole;
15class EventDistributor;
16class InputEventGenerator;
17class Setting;
18class Display;
19class OSDGUI;
20class CliComm;
21class VideoSystem;
22
26class VisibleSurface : public EventListener, private Observer<Setting>
27 , private RTSchedulable
28{
29public:
30 virtual ~VisibleSurface();
31 virtual void updateWindowTitle() = 0;
32 virtual bool setFullScreen(bool fullscreen) = 0;
33
38 virtual void finish() = 0;
39
40 [[nodiscard]] virtual std::unique_ptr<Layer> createSnowLayer() = 0;
41 [[nodiscard]] virtual std::unique_ptr<Layer> createConsoleLayer(
42 Reactor& reactor, CommandConsole& console) = 0;
43 [[nodiscard]] virtual std::unique_ptr<Layer> createOSDGUILayer(OSDGUI& gui) = 0;
44
49 [[nodiscard]] virtual std::unique_ptr<OutputSurface> createOffScreenSurface() = 0;
50
51 [[nodiscard]] CliComm& getCliComm() const { return cliComm; }
52 [[nodiscard]] Display& getDisplay() const { return display; }
53
54protected:
55 VisibleSurface(Display& display,
56 RTScheduler& rtScheduler,
57 EventDistributor& eventDistributor,
58 InputEventGenerator& inputEventGenerator,
59 CliComm& cliComm,
60 VideoSystem& videoSystem);
61
62private:
63 void updateCursor();
64
65 // Observer
66 void update(const Setting& setting) noexcept override;
67 // EventListener
68 int signalEvent(const Event& event) override;
69 // RTSchedulable
70 void executeRT() override;
71
72private:
73 Display& display;
74 EventDistributor& eventDistributor;
75 InputEventGenerator& inputEventGenerator;
76 CliComm& cliComm;
77 VideoSystem& videoSystem;
78 bool grab = false;
79};
80
81} // namespace openmsx
82
83#endif
BaseSetting * setting
Definition: Interpreter.cc:28
Represents the output window/screen of openMSX.
Definition: Display.hh:33
Generic Gang-of-Four Observer class, templatized edition.
Definition: Observer.hh:10
Contains the main loop of openMSX.
Definition: Reactor.hh:68
Video back-end system.
Definition: VideoSystem.hh:23
An OutputSurface which is visible to the user, such as a window or a full screen display.
virtual void updateWindowTitle()=0
virtual bool setFullScreen(bool fullscreen)=0
VisibleSurface(Display &display, RTScheduler &rtScheduler, EventDistributor &eventDistributor, InputEventGenerator &inputEventGenerator, CliComm &cliComm, VideoSystem &videoSystem)
Display & getDisplay() const
virtual void finish()=0
When a complete frame is finished, call this method.
virtual std::unique_ptr< OutputSurface > createOffScreenSurface()=0
Create an off-screen OutputSurface which has similar properties as this VisibleSurface.
virtual std::unique_ptr< Layer > createConsoleLayer(Reactor &reactor, CommandConsole &console)=0
virtual std::unique_ptr< Layer > createSnowLayer()=0
virtual std::unique_ptr< Layer > createOSDGUILayer(OSDGUI &gui)=0
CliComm & getCliComm() const
This file implemented 3 utility functions:
Definition: Autofire.cc:9