ScummVM API documentation
system.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef COMMON_SYSTEM_H
23 #define COMMON_SYSTEM_H
24 
25 #include "common/scummsys.h"
26 #include "common/noncopyable.h"
27 #include "common/array.h" // For OSystem::getGlobalKeymaps()
28 #include "common/list.h" // For OSystem::getSupportedFormats()
29 #include "common/ustr.h"
30 #include "common/str-array.h" // For OSystem::updateStartSettings()
31 #include "common/hash-str.h" // For OSystem::updateStartSettings()
32 #include "common/path.h"
33 #include "common/log.h"
34 #include "graphics/pixelformat.h"
35 #include "graphics/mode.h"
36 #include "graphics/opengl/context.h"
37 
38 namespace Audio {
39 class Mixer;
40 }
41 
42 namespace Graphics {
43 struct Surface;
44 }
45 
46 namespace GUI {
47 class GuiObject;
48 class OptionsContainerWidget;
49 }
50 
51 namespace DLC {
52 class Store;
53 }
54 
55 namespace Common {
56 class EventManager;
57 class MutexInternal;
58 struct Rect;
59 class SaveFileManager;
60 class SearchSet;
61 class String;
62 #if defined(USE_TASKBAR)
63 class TaskbarManager;
64 #endif
65 #if defined(USE_UPDATES)
66 class UpdateManager;
67 #endif
68 class TextToSpeechManager;
69 #if defined(USE_SYSDIALOGS)
70 class DialogManager;
71 #endif
72 class TimerManager;
73 class SeekableReadStream;
74 class WriteStream;
75 class HardwareInputSet;
76 class Keymap;
77 class KeymapperDefaultBindings;
78 
79 enum RotationMode : int;
80 
81 typedef Array<Keymap *> KeymapArray;
82 }
83 
93 class AudioCDManager;
94 class FilesystemFactory;
95 class PaletteManager;
96 
108 struct TimeDate {
109  int tm_sec;
110  int tm_min;
111  int tm_hour;
112  int tm_mday;
113  int tm_mon;
114  int tm_year;
115  int tm_wday;
116 };
117 
124 
127 
131 
137 };
138 
139 #if defined(USE_IMGUI)
140 typedef struct ImGuiCallbacks {
141  void (*init)() = nullptr;
142  void (*render)() = nullptr;
143  void (*cleanup)() = nullptr;
144 } ImGuiCallbacks;
145 #endif
146 
164 protected:
165  OSystem();
166  virtual ~OSystem();
167 
168 protected:
198 
207 
214 
221 
222 #if defined(USE_TASKBAR)
223 
228  Common::TaskbarManager *_taskbarManager;
229 #endif
230 
231 #if defined(USE_UPDATES)
232 
237  Common::UpdateManager *_updateManager;
238 #endif
239 
246 
247 #if defined(USE_SYSDIALOGS)
248 
254 #endif
255 
266 
271 
277 
283 private:
287  bool _backendInitialized;
288 
290 
291 public:
292 
296  void destroy();
297 
301  virtual void init() {}
302 
311  virtual void initBackend();
312 
319  bool backendInitialized() const { return _backendInitialized; }
320 
326  virtual void engineInit() { }
327 
333  virtual void engineDone() { }
334 
338  enum Task {
343 
348 
352  kDataPackDownload
353  };
354 
358  virtual void taskStarted(Task) { }
359 
363  virtual void taskFinished(Task) { }
364 
375  virtual void updateStartSettings(const Common::String &executable, Common::String &command, Common::StringMap &startSettings, Common::StringArray& additionalArgs);
376 
405  enum Feature {
411 
429 
435 
440 
447 
459 
465 
471 
477 
484 
493 
499 
505 
511 
518 
526 
539 
547 
552 
557 
562 
567 
572 
577 
583 
588 
595 
601 
606 
611 
616 
622 
627  };
628 
632  virtual bool hasFeature(Feature f) { return false; }
633 
640  virtual void setFeatureState(Feature f, bool enable) {}
641 
647  virtual bool getFeatureState(Feature f) { return false; }
648 
721  struct GraphicsMode {
728  const char *name;
734  const char *description;
741  int id;
742  };
743 
754  virtual const GraphicsMode *getSupportedGraphicsModes() const {
755  static const GraphicsMode noGraphicsModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
756  return noGraphicsModes;
757  }
758 
767  virtual int getDefaultGraphicsMode() const { return 0; }
768 
770  kGfxModeNoFlags = 0,
771  kGfxModeRender3d = (1 << 0)
772  };
773 
787  virtual bool setGraphicsMode(int mode, uint flags = kGfxModeNoFlags) { return (mode == 0); }
788 
802  bool setGraphicsMode(const char *name);
803 
809  virtual int getGraphicsMode() const { return 0; }
810 
811 #ifdef USE_RGB_COLOR
812 
823  virtual Graphics::PixelFormat getScreenFormat() const = 0;
824 
848  virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const = 0;
849 #else
850  inline Graphics::PixelFormat getScreenFormat() const {
852  }
853 
854  inline Common::List<Graphics::PixelFormat> getSupportedFormats() const {
857  return list;
858  }
859 #endif
860 
868  return Common::Array<uint>();
869  }
870 
881  virtual OpenGL::ContextType getOpenGLType() const {
882  return OpenGL::kContextNone;
883  }
884 
885 #if defined(USE_OPENGL) && defined(USE_GLAD)
886 
897  virtual void *getOpenGLProcAddress(const char *name) const { return nullptr; }
898 #endif
899 
900 #if defined(USE_IMGUI)
901 
908  virtual void setImGuiCallbacks(const ImGuiCallbacks &callbacks) {}
918  virtual void *getImGuiTexture(const Graphics::Surface &image, const byte *palette = nullptr, int palCount = 0) { return nullptr; }
924  virtual void freeImGuiTexture(void *texture) {}
925 #endif
926 
936  virtual bool setShader(const Common::Path &fileName) { return false; }
937 
947  virtual const GraphicsMode *getSupportedStretchModes() const {
948  static const GraphicsMode noStretchModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
949  return noStretchModes;
950  }
951 
961  virtual int getDefaultStretchMode() const { return 0; }
962 
972  virtual bool setStretchMode(int mode) { return false; }
973 
988  bool setStretchMode(const char *name);
989 
995  virtual int getStretchMode() const { return 0; }
996 
1006  virtual bool setRotationMode(Common::RotationMode rotation) { return false; }
1007 
1017  bool setRotationMode(int rotation);
1018 
1028  virtual uint getDefaultScaler() const { return 0; }
1029 
1039  virtual uint getDefaultScaleFactor() const { return 1; }
1040 
1051  virtual bool setScaler(uint mode, int factor) { return false; }
1052 
1064  virtual bool setScaler(const char *name, int factor) { return false; }
1065 
1071  virtual uint getScaler() const { return 0; }
1072 
1078  virtual uint getScaleFactor() const { return 1; }
1079 
1080 
1109  virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format = nullptr) = 0;
1110 
1121  virtual void initSizeHint(const Graphics::ModeList &modes) {}
1122 
1137  virtual int getScreenChangeID() const { return 0; }
1138 
1157  virtual void beginGFXTransaction() {}
1158 
1169  kTransactionSuccess = 0,
1170  kTransactionAspectRatioFailed = (1 << 0),
1171  kTransactionFullscreenFailed = (1 << 1),
1172  kTransactionModeSwitchFailed = (1 << 2),
1173  kTransactionSizeChangeFailed = (1 << 3),
1174  kTransactionFormatNotSupported = (1 << 4),
1175  kTransactionFilteringFailed = (1 << 5),
1176  kTransactionStretchModeSwitchFailed = (1 << 6),
1177  kTransactionShaderChangeFailed = (1 << 7),
1178  kTransactionVSyncFailed = (1 << 8),
1179  };
1180 
1189  virtual TransactionError endGFXTransaction() { return kTransactionSuccess; }
1190 
1198  virtual int16 getHeight() = 0;
1199 
1207  virtual int16 getWidth() = 0;
1208 
1214  virtual PaletteManager *getPaletteManager() = 0;
1215 
1220  virtual float getHiDPIScreenFactor() const { return 1.0f; }
1221 
1249  virtual void copyRectToScreen(const void *buf, int pitch, int x, int y, int w, int h) = 0;
1250 
1269  virtual Graphics::Surface *lockScreen() = 0;
1270 
1275  virtual void unlockScreen() = 0;
1276 
1280  virtual void fillScreen(uint32 col) = 0;
1281 
1285  virtual void fillScreen(const Common::Rect &r, uint32 col) = 0;
1286 
1296  virtual void updateScreen() = 0;
1297 
1301  virtual void presentBuffer() {}
1302 
1322  virtual void setShakePos(int shakeXOffset, int shakeYOffset) = 0;
1323 
1338  virtual void setFocusRectangle(const Common::Rect& rect) {}
1339 
1348  virtual void clearFocusRectangle() {}
1349 
1355  virtual void saveScreenshot() {}
1356 
1385  virtual void showOverlay(bool inGUI = true) = 0;
1386 
1388  virtual void hideOverlay() = 0;
1389 
1391  virtual bool isOverlayVisible() const = 0;
1392 
1398  virtual Graphics::PixelFormat getOverlayFormat() const = 0;
1399 
1410  virtual void clearOverlay() = 0;
1411 
1418  virtual void grabOverlay(Graphics::Surface &surface) = 0;
1419 
1435  virtual void copyRectToOverlay(const void *buf, int pitch, int x, int y, int w, int h) = 0;
1436 
1442  virtual int16 getOverlayHeight() const = 0;
1443 
1449  virtual int16 getOverlayWidth() const = 0;
1450 
1462  virtual Common::Rect getSafeOverlayArea(int16 *width = nullptr, int16 *height = nullptr) const;
1463 
1490  virtual bool showMouse(bool visible) = 0;
1491 
1496  virtual bool lockMouse(bool lock) { return false; }
1497 
1505  virtual void warpMouse(int x, int y) = 0;
1506 
1524  virtual void setMouseCursor(const void *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, bool dontScale = false, const Graphics::PixelFormat *format = nullptr, const byte *mask = nullptr) = 0;
1525 
1537  virtual void setCursorPalette(const byte *colors, uint start, uint num) {}
1538 
1539 
1540 
1545  virtual uint32 getDoubleClickTime() const { return 0; }
1546 
1563  virtual uint32 getMillis(bool skipRecord = false) = 0;
1564 
1566  virtual void delayMillis(uint msecs) = 0;
1567 
1574  virtual void getTimeAndDate(TimeDate &td, bool skipRecord = false) const = 0;
1575 
1581  virtual Common::TimerManager *getTimerManager();
1582 
1589  return _eventManager;
1590  }
1591 
1599  virtual Common::HardwareInputSet *getHardwareInputSet() { return nullptr; }
1600 
1611 
1620 
1648  virtual Common::MutexInternal *createMutex() = 0;
1649 
1664  virtual Audio::Mixer *getMixer() = 0;
1665 
1681  return _audiocdManager;
1682  }
1683 
1694  virtual void quit() = 0;
1695 
1701  virtual void fatalError();
1702 
1709  virtual void setWindowCaption(const Common::U32String &caption) {}
1710 
1727  virtual void displayMessageOnOSD(const Common::U32String &msg) = 0;
1728 
1746  virtual void displayActivityIconOnOSD(const Graphics::Surface *icon) = 0;
1760  virtual Common::SaveFileManager *getSavefileManager();
1761 
1762 #if defined(USE_TASKBAR)
1763 
1769  virtual Common::TaskbarManager *getTaskbarManager() {
1770  return _taskbarManager;
1771  }
1772 #endif
1773 
1774 #if defined(USE_UPDATES)
1775 
1781  virtual Common::UpdateManager *getUpdateManager() {
1782  return _updateManager;
1783  }
1784 #endif
1785 
1792  return _textToSpeechManager;
1793  }
1794 
1795 #if defined(USE_SYSDIALOGS)
1796 
1802  return _dialogManager;
1803  }
1804 #endif
1805 
1812  return _dlcStore;
1813  }
1814 
1820  virtual FilesystemFactory *getFilesystemFactory();
1837  virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0) {}
1838 
1845  virtual Common::SeekableReadStream *createConfigReadStream();
1846 
1855  virtual Common::WriteStream *createConfigWriteStream();
1856 
1863  virtual Common::Path getDefaultConfigFileName();
1864 
1872 
1879  virtual void registerDefaultSettings(const Common::String &target) const {}
1880 
1894  virtual GUI::OptionsContainerWidget *buildBackendOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const { return nullptr; }
1895 
1906  virtual const char * const *buildHelpDialogData() { return nullptr; }
1907 
1913  virtual void applyBackendSettings() {}
1914 
1927  virtual void logMessage(LogMessageType::Type type, const char *message) = 0;
1928 
1935  virtual void messageBox(LogMessageType::Type type, const char *message) {}
1936 
1962  virtual bool displayLogFile() { return false; }
1963 
1973  virtual bool hasTextInClipboard() { return !_clipboard.empty(); }
1974 
1984  virtual Common::U32String getTextFromClipboard() { return _clipboard; }
1985 
1995  virtual bool setTextInClipboard(const Common::U32String &text) { _clipboard = text; return true; }
1996 
2009  virtual bool openUrl(const Common::String &url) {return false; }
2010 
2028  virtual Common::String getSystemLanguage() const;
2029 
2035  virtual bool isConnectionLimited();
2036 
2038 };
2039 
2040 
2042 extern OSystem *g_system;
2043 
2046 #endif
Definition: system.h:605
Definition: store.h:32
Definition: system.h:130
Definition: system.h:476
virtual Common::KeymapArray getGlobalKeymaps()
Definition: system.h:1610
CursorMaskValue
Definition: system.h:121
Definition: system.h:51
virtual void messageBox(LogMessageType::Type type, const char *message)
Definition: system.h:1935
GfxModeFlags
Definition: system.h:769
virtual void taskFinished(Task)
Definition: system.h:363
int tm_hour
Definition: system.h:111
Definition: system.h:108
Definition: str.h:59
virtual const char *const * buildHelpDialogData()
Definition: system.h:1906
virtual Common::HardwareInputSet * getHardwareInputSet()
Definition: system.h:1599
int id
Definition: system.h:741
virtual bool lockMouse(bool lock)
Definition: system.h:1496
Definition: surface.h:67
int tm_mday
Definition: system.h:112
Definition: system.h:136
virtual bool setScaler(const char *name, int factor)
Definition: system.h:1064
Definition: system.h:551
Definition: system.h:571
virtual void setFocusRectangle(const Common::Rect &rect)
Definition: system.h:1338
Definition: stream.h:77
Definition: fs-factory.h:31
virtual bool setShader(const Common::Path &fileName)
Definition: system.h:936
virtual void saveScreenshot()
Definition: system.h:1355
virtual Common::Array< uint > getSupportedAntiAliasingLevels() const
Definition: system.h:867
virtual int getGraphicsMode() const
Definition: system.h:809
Definition: pixelformat.h:138
const char * name
Definition: system.h:728
Definition: system.h:721
int tm_min
Definition: system.h:110
virtual void setWindowCaption(const Common::U32String &caption)
Definition: system.h:1709
virtual const GraphicsMode * getSupportedStretchModes() const
Definition: system.h:947
Feature
Definition: system.h:405
virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority=0)
Definition: system.h:1837
Definition: system.h:626
Common::TimerManager * _timerManager
Definition: system.h:213
Common::TextToSpeechManager * _textToSpeechManager
Definition: system.h:245
Definition: list.h:44
virtual TransactionError endGFXTransaction()
Definition: system.h:1189
Definition: system.h:561
virtual void engineInit()
Definition: system.h:326
static constexpr PixelFormat createFormatCLUT8()
Definition: pixelformat.h:184
Definition: rect.h:524
Definition: system.h:538
Definition: path.h:52
virtual int getDefaultGraphicsMode() const
Definition: system.h:767
Definition: system.h:621
Task
Definition: system.h:338
Definition: stream.h:745
Definition: system.h:439
Definition: system.h:46
Definition: object.h:60
Definition: widget.h:533
Definition: system.h:434
OSystem * g_system
Definition: system.h:556
virtual Common::DialogManager * getDialogManager()
Definition: system.h:1801
Type
Definition: log.h:33
virtual void initSizeHint(const Graphics::ModeList &modes)
Definition: system.h:1121
int tm_wday
Definition: system.h:115
Definition: noncopyable.h:39
Definition: system.h:525
Common::DialogManager * _dialogManager
Definition: system.h:253
Common::U32String _clipboard
Definition: system.h:276
Definition: system.h:587
AudioCDManager * getAudioCDManager()
Definition: system.h:1680
Definition: system.h:594
virtual void setCursorPalette(const byte *colors, uint start, uint num)
Definition: system.h:1537
Definition: system.h:576
virtual void engineDone()
Definition: system.h:333
virtual GUI::OptionsContainerWidget * buildBackendOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const
Definition: system.h:1894
Definition: mixer.h:70
virtual bool setScaler(uint mode, int factor)
Definition: system.h:1051
Definition: system.h:464
virtual uint getDefaultScaleFactor() const
Definition: system.h:1039
Definition: system.h:342
virtual void applyBackendSettings()
Definition: system.h:1913
virtual bool openUrl(const Common::String &url)
Definition: system.h:2009
virtual bool hasTextInClipboard()
Definition: system.h:1973
virtual bool setTextInClipboard(const Common::U32String &text)
Definition: system.h:1995
Definition: timer.h:40
Definition: ustr.h:57
Definition: system.h:123
TransactionError
Definition: system.h:1168
virtual OpenGL::ContextType getOpenGLType() const
Definition: system.h:881
Definition: archive.h:330
virtual bool setGraphicsMode(int mode, uint flags=kGfxModeNoFlags)
Definition: system.h:787
Definition: system.h:615
int tm_sec
Definition: system.h:109
virtual bool setStretchMode(int mode)
Definition: system.h:972
Definition: system.h:600
virtual void taskStarted(Task)
Definition: system.h:358
Definition: hardware-input.h:199
Definition: algorithm.h:29
Definition: formatinfo.h:28
Definition: system.h:546
virtual bool hasFeature(Feature f)
Definition: system.h:632
const char * description
Definition: system.h:734
Definition: system.h:498
virtual Common::KeymapperDefaultBindings * getKeymapperDefaultBindings()
Definition: system.h:1619
Common::SaveFileManager * _savefileManager
Definition: system.h:220
virtual int getScreenChangeID() const
Definition: system.h:1137
Definition: keymapper-defaults.h:32
Definition: system.h:504
virtual bool displayLogFile()
Definition: system.h:1962
virtual Common::Path getDefaultLogFileName()
Definition: system.h:1871
DLC::Store * _dlcStore
Definition: system.h:270
Definition: system.h:446
int tm_year
Definition: system.h:114
Definition: system.h:410
Definition: system.h:510
virtual void init()
Definition: system.h:301
Common::EventManager * getEventManager()
Definition: system.h:1588
Definition: text-to-speech.h:150
Common::EventManager * _eventManager
Definition: system.h:206
Definition: dialogs.h:47
virtual void registerDefaultSettings(const Common::String &target) const
Definition: system.h:1879
int tm_mon
Definition: system.h:113
Definition: system.h:610
virtual uint getScaleFactor() const
Definition: system.h:1078
virtual uint getScaler() const
Definition: system.h:1071
virtual void presentBuffer()
Definition: system.h:1301
virtual int getStretchMode() const
Definition: system.h:995
virtual void beginGFXTransaction()
Definition: system.h:1157
virtual Common::TextToSpeechManager * getTextToSpeechManager()
Definition: system.h:1791
Definition: system.h:566
Definition: system.h:470
Definition: savefile.h:142
virtual Common::U32String getTextFromClipboard()
Definition: system.h:1984
Definition: system.h:347
Definition: system.h:582
bool backendInitialized() const
Definition: system.h:319
virtual void clearFocusRectangle()
Definition: system.h:1348
RotationMode
Definition: rotationmode.h:44
Definition: mutex.h:40
virtual uint32 getDoubleClickTime() const
Definition: system.h:1545
virtual float getHiDPIScreenFactor() const
Definition: system.h:1220
Definition: system.h:163
virtual uint getDefaultScaler() const
Definition: system.h:1028
virtual const GraphicsMode * getSupportedGraphicsModes() const
Definition: system.h:754
virtual void setFeatureState(Feature f, bool enable)
Definition: system.h:640
void push_back(const t_T &element)
Definition: list.h:174
virtual bool setRotationMode(Common::RotationMode rotation)
Definition: system.h:1006
FilesystemFactory * _fsFactory
Definition: system.h:265
AudioCDManager * _audiocdManager
Definition: system.h:197
Definition: system.h:126
Definition: paletteman.h:47
Definition: system.h:517
Definition: events.h:483
Definition: audiocd.h:33
bool _dummyUnused
Definition: system.h:281
Definition: system.h:38
virtual int getDefaultStretchMode() const
Definition: system.h:961
virtual DLC::Store * getDLCStore()
Definition: system.h:1811
Definition: system.h:458
virtual bool getFeatureState(Feature f)
Definition: system.h:647