File: modular-backend.h

package info (click to toggle)
scummvm 2.2.0%2Bdfsg1-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 227,768 kB
  • sloc: cpp: 2,525,134; ansic: 144,108; asm: 28,422; sh: 9,109; python: 8,774; xml: 6,003; perl: 3,523; java: 1,547; makefile: 948; yacc: 720; lex: 437; javascript: 336; objc: 81; sed: 22; php: 1
file content (182 lines) | stat: -rw-r--r-- 5,980 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef BACKENDS_MODULAR_BACKEND_H
#define BACKENDS_MODULAR_BACKEND_H

#include "backends/base-backend.h"

class GraphicsManager;
class MixerManager;
class MutexManager;

/**
 * Base classes for modular backends.
 *
 * They wrap most functions to their manager equivalent, but not
 * all OSystem functions are implemented here.
 *
 * A backend derivated from these classes, will need to implement
 * these functions on its own:
 *   OSystem::pollEvent()
 *   OSystem::getMillis()
 *   OSystem::delayMillis()
 *   OSystem::getTimeAndDate()
 *   OSystem::quit()
 *
 * And, it should also initialize all the managers variables
 * declared in this class, or override their related functions.
 */
class ModularGraphicsBackend : virtual public BaseBackend {
public:
	ModularGraphicsBackend();
	virtual ~ModularGraphicsBackend();

	/** @name Features */
	//@{

	virtual bool hasFeature(Feature f) override;
	virtual void setFeatureState(Feature f, bool enable) override;
	virtual bool getFeatureState(Feature f) override;

	//@}

	/** @name Graphics */
	//@{

	GraphicsManager *getGraphicsManager();
	virtual const GraphicsMode *getSupportedGraphicsModes() const override;
	virtual int getDefaultGraphicsMode() const override;
	virtual bool setGraphicsMode(int mode) override;
	virtual int getGraphicsMode() const override;
	virtual const GraphicsMode *getSupportedShaders() const override final;
	virtual int getDefaultShader() const override final;
	virtual int getShader() const override final;
	virtual bool setShader(int id) override final;
	virtual const GraphicsMode *getSupportedStretchModes() const override final;
	virtual int getDefaultStretchMode() const override final;
	virtual bool setStretchMode(int mode) override final;
	virtual int getStretchMode() const override final;
	virtual void resetGraphicsScale() override final;
#ifdef USE_RGB_COLOR
	virtual Graphics::PixelFormat getScreenFormat() const override final;
	virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const override final;
#endif
	virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format = NULL) override final;
	virtual void initSizeHint(const Graphics::ModeList &modes) override final;
	virtual int getScreenChangeID() const override final;

	virtual void beginGFXTransaction() override final;
	virtual OSystem::TransactionError endGFXTransaction() override final;

	virtual int16 getHeight() override final;
	virtual int16 getWidth() override final;
	virtual PaletteManager *getPaletteManager() override final;
	virtual void copyRectToScreen(const void *buf, int pitch, int x, int y, int w, int h) override final;
	virtual Graphics::Surface *lockScreen() override final;
	virtual void unlockScreen() override final;
	virtual void fillScreen(uint32 col) override final;
	virtual void updateScreen() override final;
	virtual void setShakePos(int shakeXOffset, int shakeYOffset) override final;
	virtual void setFocusRectangle(const Common::Rect& rect) override final;
	virtual void clearFocusRectangle() override final;

	virtual void showOverlay() override final;
	virtual void hideOverlay() override final;
	virtual Graphics::PixelFormat getOverlayFormat() const override final;
	virtual void clearOverlay() override final;
	virtual void grabOverlay(void *buf, int pitch) override final;
	virtual void copyRectToOverlay(const void *buf, int pitch, int x, int y, int w, int h) override final;
	virtual int16 getOverlayHeight() override final;
	virtual int16 getOverlayWidth() override final;

	virtual bool showMouse(bool visible) override final;
	virtual void warpMouse(int x, int y) override final;
	virtual void setMouseCursor(const void *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, bool dontScale = false, const Graphics::PixelFormat *format = NULL) override final;
	virtual void setCursorPalette(const byte *colors, uint start, uint num) override final;

	//@}

	/** @name Miscellaneous */
	//@{

	virtual void displayMessageOnOSD(const char *msg) override final;
	virtual void displayActivityIconOnOSD(const Graphics::Surface *icon) override final;

	//@}

protected:
	/** @name Managers variables */
	//@{

	GraphicsManager *_graphicsManager;

	//@}
};

class ModularMixerBackend : virtual public BaseBackend {
public:
	ModularMixerBackend();
	virtual ~ModularMixerBackend();

	/** @name Sound */
	//@{

	virtual MixerManager *getMixerManager();
	virtual Audio::Mixer *getMixer() override final;

	//@}

protected:
	/** @name Managers variables */
	//@{

	MixerManager *_mixerManager;

	//@}
};

class ModularMutexBackend : virtual public BaseBackend {
public:
	ModularMutexBackend();
	virtual ~ModularMutexBackend();

	/** @name Mutex handling */
	//@{

	virtual MutexRef createMutex() override final;
	virtual void lockMutex(MutexRef mutex) override final;
	virtual void unlockMutex(MutexRef mutex) override final;
	virtual void deleteMutex(MutexRef mutex) override final;

	//@}

protected:
	/** @name Managers variables */
	//@{

	MutexManager *_mutexManager;

	//@}
};

#endif