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 PrintingManager;
73 class TimerManager;
74 class SeekableReadStream;
75 class WriteStream;
76 class HardwareInputSet;
77 class Keymap;
78 class KeymapperDefaultBindings;
79 
80 enum RotationMode : int;
81 
82 typedef Array<Keymap *> KeymapArray;
83 }
84 
94 class AudioCDManager;
95 class FilesystemFactory;
96 class PaletteManager;
97 
109 struct TimeDate {
110  int tm_sec;
111  int tm_min;
112  int tm_hour;
113  int tm_mday;
114  int tm_mon;
115  int tm_year;
116  int tm_wday;
117 };
118 
125 
128 
132 
138 };
139 
140 #if defined(USE_IMGUI)
141 typedef struct ImGuiCallbacks {
142  void (*init)() = nullptr;
143  void (*render)() = nullptr;
144  void (*cleanup)() = nullptr;
145 } ImGuiCallbacks;
146 #endif
147 
165 protected:
166  OSystem();
167  virtual ~OSystem();
168 
169 protected:
199 
206 
213 
220 
221 #if defined(USE_TASKBAR)
222 
227  Common::TaskbarManager *_taskbarManager;
228 #endif
229 
230 #if defined(USE_UPDATES)
231 
236  Common::UpdateManager *_updateManager;
237 #endif
238 
245 
246 #if defined(USE_SYSDIALOGS)
247 
253 #endif
254 
265 
272 
277 
283 
289 private:
293  bool _backendInitialized;
294 
296 
297 public:
298 
302  void destroy();
303 
307  virtual void init() {}
308 
317  virtual void initBackend();
318 
325  bool backendInitialized() const { return _backendInitialized; }
326 
332  virtual void engineInit() { }
333 
339  virtual void engineDone() { }
340 
344  enum Task {
349 
354 
358  kDataPackDownload
359  };
360 
364  virtual void taskStarted(Task) { }
365 
369  virtual void taskFinished(Task) { }
370 
381  virtual void updateStartSettings(const Common::String &executable, Common::String &command, Common::StringMap &startSettings, Common::StringArray& additionalArgs);
382 
411  enum Feature {
417 
435 
441 
446 
453 
465 
471 
477 
483 
490 
499 
505 
511 
517 
524 
532 
545 
553 
558 
563 
568 
573 
578 
583 
589 
594 
601 
607 
612 
617 
622 
628 
633  };
634 
638  virtual bool hasFeature(Feature f) { return false; }
639 
646  virtual void setFeatureState(Feature f, bool enable) {}
647 
653  virtual bool getFeatureState(Feature f) { return false; }
654 
727  struct GraphicsMode {
734  const char *name;
740  const char *description;
747  int id;
748  };
749 
760  virtual const GraphicsMode *getSupportedGraphicsModes() const {
761  static const GraphicsMode noGraphicsModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
762  return noGraphicsModes;
763  }
764 
773  virtual int getDefaultGraphicsMode() const { return 0; }
774 
776  kGfxModeNoFlags = 0,
777  kGfxModeRender3d = (1 << 0)
778  };
779 
793  virtual bool setGraphicsMode(int mode, uint flags = kGfxModeNoFlags) { return (mode == 0); }
794 
808  bool setGraphicsMode(const char *name);
809 
815  virtual int getGraphicsMode() const { return 0; }
816 
817 #ifdef USE_RGB_COLOR
818 
829  virtual Graphics::PixelFormat getScreenFormat() const = 0;
830 
854  virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const = 0;
855 #else
856  inline Graphics::PixelFormat getScreenFormat() const {
858  }
859 
860  inline Common::List<Graphics::PixelFormat> getSupportedFormats() const {
863  return list;
864  }
865 #endif
866 
874  return Common::Array<uint>();
875  }
876 
887  virtual OpenGL::ContextType getOpenGLType() const {
888  return OpenGL::kContextNone;
889  }
890 
891 #if defined(USE_OPENGL) && defined(USE_GLAD)
892 
903  virtual void *getOpenGLProcAddress(const char *name) const { return nullptr; }
904 #endif
905 
906 #if defined(USE_IMGUI)
907 
914  virtual void setImGuiCallbacks(const ImGuiCallbacks &callbacks) {}
924  virtual void *getImGuiTexture(const Graphics::Surface &image, const byte *palette = nullptr, int palCount = 0) { return nullptr; }
930  virtual void freeImGuiTexture(void *texture) {}
931 #endif
932 
942  virtual bool setShader(const Common::Path &fileName) { return false; }
943 
953  virtual const GraphicsMode *getSupportedStretchModes() const {
954  static const GraphicsMode noStretchModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
955  return noStretchModes;
956  }
957 
967  virtual int getDefaultStretchMode() const { return 0; }
968 
978  virtual bool setStretchMode(int mode) { return false; }
979 
994  bool setStretchMode(const char *name);
995 
1001  virtual int getStretchMode() const { return 0; }
1002 
1012  virtual bool setRotationMode(Common::RotationMode rotation) { return false; }
1013 
1023  bool setRotationMode(int rotation);
1024 
1034  virtual uint getDefaultScaler() const { return 0; }
1035 
1045  virtual uint getDefaultScaleFactor() const { return 1; }
1046 
1057  virtual bool setScaler(uint mode, int factor) { return false; }
1058 
1070  virtual bool setScaler(const char *name, int factor) { return false; }
1071 
1077  virtual uint getScaler() const { return 0; }
1078 
1084  virtual uint getScaleFactor() const { return 1; }
1085 
1086 
1115  virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format = nullptr) = 0;
1116 
1127  virtual void initSizeHint(const Graphics::ModeList &modes) {}
1128 
1143  virtual int getScreenChangeID() const { return 0; }
1144 
1163  virtual void beginGFXTransaction() {}
1164 
1175  kTransactionSuccess = 0,
1176  kTransactionAspectRatioFailed = (1 << 0),
1177  kTransactionFullscreenFailed = (1 << 1),
1178  kTransactionModeSwitchFailed = (1 << 2),
1179  kTransactionSizeChangeFailed = (1 << 3),
1180  kTransactionFormatNotSupported = (1 << 4),
1181  kTransactionFilteringFailed = (1 << 5),
1182  kTransactionStretchModeSwitchFailed = (1 << 6),
1183  kTransactionShaderChangeFailed = (1 << 7),
1184  kTransactionVSyncFailed = (1 << 8),
1185  };
1186 
1195  virtual TransactionError endGFXTransaction() { return kTransactionSuccess; }
1196 
1204  virtual int16 getHeight() = 0;
1205 
1213  virtual int16 getWidth() = 0;
1214 
1220  virtual PaletteManager *getPaletteManager() = 0;
1221 
1226  virtual float getHiDPIScreenFactor() const { return 1.0f; }
1227 
1255  virtual void copyRectToScreen(const void *buf, int pitch, int x, int y, int w, int h) = 0;
1256 
1275  virtual Graphics::Surface *lockScreen() = 0;
1276 
1281  virtual void unlockScreen() = 0;
1282 
1286  virtual void fillScreen(uint32 col) = 0;
1287 
1291  virtual void fillScreen(const Common::Rect &r, uint32 col) = 0;
1292 
1302  virtual void updateScreen() = 0;
1303 
1307  virtual void presentBuffer() {}
1308 
1328  virtual void setShakePos(int shakeXOffset, int shakeYOffset) = 0;
1329 
1344  virtual void setFocusRectangle(const Common::Rect& rect) {}
1345 
1354  virtual void clearFocusRectangle() {}
1355 
1361  virtual void saveScreenshot() {}
1362 
1391  virtual void showOverlay(bool inGUI = true) = 0;
1392 
1394  virtual void hideOverlay() = 0;
1395 
1397  virtual bool isOverlayVisible() const = 0;
1398 
1404  virtual Graphics::PixelFormat getOverlayFormat() const = 0;
1405 
1416  virtual void clearOverlay() = 0;
1417 
1424  virtual void grabOverlay(Graphics::Surface &surface) = 0;
1425 
1441  virtual void copyRectToOverlay(const void *buf, int pitch, int x, int y, int w, int h) = 0;
1442 
1448  virtual int16 getOverlayHeight() const = 0;
1449 
1455  virtual int16 getOverlayWidth() const = 0;
1456 
1468  virtual Common::Rect getSafeOverlayArea(int16 *width = nullptr, int16 *height = nullptr) const;
1469 
1496  virtual bool showMouse(bool visible) = 0;
1497 
1502  virtual bool lockMouse(bool lock) { return false; }
1503 
1511  virtual void warpMouse(int x, int y) = 0;
1512 
1530  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;
1531 
1543  virtual void setCursorPalette(const byte *colors, uint start, uint num) {}
1544 
1545 
1546 
1551  virtual uint32 getDoubleClickTime() const { return 0; }
1552 
1569  virtual uint32 getMillis(bool skipRecord = false) = 0;
1570 
1572  virtual void delayMillis(uint msecs) = 0;
1573 
1580  virtual void getTimeAndDate(TimeDate &td, bool skipRecord = false) const = 0;
1581 
1587  virtual Common::TimerManager *getTimerManager();
1588 
1595  return _eventManager;
1596  }
1597 
1605  virtual Common::HardwareInputSet *getHardwareInputSet() { return nullptr; }
1606 
1617 
1626 
1654  virtual Common::MutexInternal *createMutex() = 0;
1655 
1670  virtual Audio::Mixer *getMixer() = 0;
1671 
1687  return _audiocdManager;
1688  }
1689 
1700  virtual void quit() = 0;
1701 
1707  virtual void fatalError();
1708 
1715  virtual void setWindowCaption(const Common::U32String &caption) {}
1716 
1733  virtual void displayMessageOnOSD(const Common::U32String &msg) = 0;
1734 
1752  virtual void displayActivityIconOnOSD(const Graphics::Surface *icon) = 0;
1766  virtual Common::SaveFileManager *getSavefileManager();
1767 
1768 #if defined(USE_TASKBAR)
1769 
1775  virtual Common::TaskbarManager *getTaskbarManager() {
1776  return _taskbarManager;
1777  }
1778 #endif
1779 
1780 #if defined(USE_UPDATES)
1781 
1787  virtual Common::UpdateManager *getUpdateManager() {
1788  return _updateManager;
1789  }
1790 #endif
1791 
1798  return _textToSpeechManager;
1799  }
1800 
1807  return _printingManager;
1808  }
1809 
1810 #if defined(USE_SYSDIALOGS)
1811 
1817  return _dialogManager;
1818  }
1819 #endif
1820 
1827  return _dlcStore;
1828  }
1829 
1835  virtual FilesystemFactory *getFilesystemFactory();
1852  virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority);
1853 
1860  virtual Common::SeekableReadStream *createConfigReadStream();
1861 
1870  virtual Common::WriteStream *createConfigWriteStream();
1871 
1878  virtual Common::Path getDefaultConfigFileName();
1879 
1887 
1894  virtual void registerDefaultSettings(const Common::String &target) const {}
1895 
1909  virtual GUI::OptionsContainerWidget *buildBackendOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const { return nullptr; }
1910 
1921  virtual const char * const *buildHelpDialogData() { return nullptr; }
1922 
1928  virtual void applyBackendSettings() {}
1929 
1942  virtual void logMessage(LogMessageType::Type type, const char *message) = 0;
1943 
1950  virtual void messageBox(LogMessageType::Type type, const char *message) {}
1951 
1977  virtual bool displayLogFile() { return false; }
1978 
1988  virtual bool hasTextInClipboard() { return !_clipboard.empty(); }
1989 
1999  virtual Common::U32String getTextFromClipboard() { return _clipboard; }
2000 
2010  virtual bool setTextInClipboard(const Common::U32String &text) { _clipboard = text; return true; }
2011 
2024  virtual bool openUrl(const Common::String &url) {return false; }
2025 
2043  virtual Common::String getSystemLanguage() const;
2044 
2050  virtual bool isConnectionLimited();
2051 
2053 };
2054 
2055 
2057 extern OSystem *g_system;
2058 
2061 #endif
Definition: system.h:611
Definition: store.h:32
Definition: system.h:131
Definition: system.h:482
virtual Common::KeymapArray getGlobalKeymaps()
Definition: system.h:1616
CursorMaskValue
Definition: system.h:122
Definition: system.h:51
virtual void messageBox(LogMessageType::Type type, const char *message)
Definition: system.h:1950
GfxModeFlags
Definition: system.h:775
virtual void taskFinished(Task)
Definition: system.h:369
int tm_hour
Definition: system.h:112
Definition: system.h:109
Definition: str.h:59
virtual const char *const * buildHelpDialogData()
Definition: system.h:1921
virtual Common::HardwareInputSet * getHardwareInputSet()
Definition: system.h:1605
int id
Definition: system.h:747
virtual bool lockMouse(bool lock)
Definition: system.h:1502
Definition: surface.h:67
int tm_mday
Definition: system.h:113
Definition: system.h:137
virtual bool setScaler(const char *name, int factor)
Definition: system.h:1070
Definition: system.h:557
Definition: system.h:577
virtual void setFocusRectangle(const Common::Rect &rect)
Definition: system.h:1344
Definition: stream.h:77
Definition: fs-factory.h:31
virtual bool setShader(const Common::Path &fileName)
Definition: system.h:942
virtual void saveScreenshot()
Definition: system.h:1361
virtual Common::Array< uint > getSupportedAntiAliasingLevels() const
Definition: system.h:873
virtual int getGraphicsMode() const
Definition: system.h:815
Definition: pixelformat.h:138
const char * name
Definition: system.h:734
Definition: system.h:727
int tm_min
Definition: system.h:111
virtual void setWindowCaption(const Common::U32String &caption)
Definition: system.h:1715
virtual const GraphicsMode * getSupportedStretchModes() const
Definition: system.h:953
Feature
Definition: system.h:411
Definition: system.h:632
Common::TimerManager * _timerManager
Definition: system.h:212
Common::TextToSpeechManager * _textToSpeechManager
Definition: system.h:244
Definition: list.h:44
virtual TransactionError endGFXTransaction()
Definition: system.h:1195
Definition: system.h:567
virtual void engineInit()
Definition: system.h:332
static constexpr PixelFormat createFormatCLUT8()
Definition: pixelformat.h:184
Definition: rect.h:524
Definition: system.h:544
Definition: path.h:52
virtual int getDefaultGraphicsMode() const
Definition: system.h:773
Definition: system.h:627
Task
Definition: system.h:344
Definition: stream.h:745
Definition: system.h:445
Definition: printman.h:30
Definition: object.h:60
Definition: widget.h:535
Definition: system.h:440
OSystem * g_system
Definition: system.h:562
virtual Common::DialogManager * getDialogManager()
Definition: system.h:1816
Type
Definition: log.h:33
virtual void initSizeHint(const Graphics::ModeList &modes)
Definition: system.h:1127
int tm_wday
Definition: system.h:116
Definition: noncopyable.h:39
Definition: system.h:531
Common::DialogManager * _dialogManager
Definition: system.h:252
Common::U32String _clipboard
Definition: system.h:282
Definition: system.h:593
AudioCDManager * getAudioCDManager()
Definition: system.h:1686
Definition: system.h:600
virtual void setCursorPalette(const byte *colors, uint start, uint num)
Definition: system.h:1543
Definition: system.h:582
virtual void engineDone()
Definition: system.h:339
virtual GUI::OptionsContainerWidget * buildBackendOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const
Definition: system.h:1909
Definition: mixer.h:70
virtual bool setScaler(uint mode, int factor)
Definition: system.h:1057
Definition: system.h:470
virtual uint getDefaultScaleFactor() const
Definition: system.h:1045
Definition: system.h:348
virtual void applyBackendSettings()
Definition: system.h:1928
virtual bool openUrl(const Common::String &url)
Definition: system.h:2024
virtual bool hasTextInClipboard()
Definition: system.h:1988
virtual bool setTextInClipboard(const Common::U32String &text)
Definition: system.h:2010
Definition: timer.h:40
Definition: ustr.h:57
Definition: system.h:124
TransactionError
Definition: system.h:1174
virtual OpenGL::ContextType getOpenGLType() const
Definition: system.h:887
Definition: archive.h:330
virtual bool setGraphicsMode(int mode, uint flags=kGfxModeNoFlags)
Definition: system.h:793
Definition: system.h:621
int tm_sec
Definition: system.h:110
virtual bool setStretchMode(int mode)
Definition: system.h:978
Definition: system.h:606
virtual void taskStarted(Task)
Definition: system.h:364
Definition: hardware-input.h:199
Definition: algorithm.h:29
Definition: formatinfo.h:28
Definition: system.h:552
virtual bool hasFeature(Feature f)
Definition: system.h:638
const char * description
Definition: system.h:740
Definition: system.h:504
virtual Common::KeymapperDefaultBindings * getKeymapperDefaultBindings()
Definition: system.h:1625
Common::SaveFileManager * _savefileManager
Definition: system.h:219
virtual int getScreenChangeID() const
Definition: system.h:1143
Definition: keymapper-defaults.h:32
Definition: system.h:510
virtual bool displayLogFile()
Definition: system.h:1977
virtual Common::Path getDefaultLogFileName()
Definition: system.h:1886
DLC::Store * _dlcStore
Definition: system.h:276
Definition: system.h:452
int tm_year
Definition: system.h:115
Definition: system.h:416
Definition: system.h:516
virtual void init()
Definition: system.h:307
Common::EventManager * getEventManager()
Definition: system.h:1594
Definition: text-to-speech.h:150
Common::EventManager * _eventManager
Definition: system.h:205
Definition: dialogs.h:47
virtual void registerDefaultSettings(const Common::String &target) const
Definition: system.h:1894
int tm_mon
Definition: system.h:114
Definition: system.h:616
virtual uint getScaleFactor() const
Definition: system.h:1084
virtual uint getScaler() const
Definition: system.h:1077
virtual void presentBuffer()
Definition: system.h:1307
virtual int getStretchMode() const
Definition: system.h:1001
virtual void beginGFXTransaction()
Definition: system.h:1163
virtual Common::TextToSpeechManager * getTextToSpeechManager()
Definition: system.h:1797
Definition: system.h:572
Definition: system.h:476
Definition: savefile.h:142
virtual Common::U32String getTextFromClipboard()
Definition: system.h:1999
Definition: system.h:353
Definition: system.h:588
bool backendInitialized() const
Definition: system.h:325
virtual void clearFocusRectangle()
Definition: system.h:1354
RotationMode
Definition: rotationmode.h:44
Definition: mutex.h:40
virtual Common::PrintingManager * getPrintingManager()
Definition: system.h:1806
virtual uint32 getDoubleClickTime() const
Definition: system.h:1551
Definition: printman.h:41
virtual float getHiDPIScreenFactor() const
Definition: system.h:1226
Definition: system.h:164
Common::PrintingManager * _printingManager
Definition: system.h:271
virtual uint getDefaultScaler() const
Definition: system.h:1034
virtual const GraphicsMode * getSupportedGraphicsModes() const
Definition: system.h:760
virtual void setFeatureState(Feature f, bool enable)
Definition: system.h:646
void push_back(const t_T &element)
Definition: list.h:174
virtual bool setRotationMode(Common::RotationMode rotation)
Definition: system.h:1012
FilesystemFactory * _fsFactory
Definition: system.h:264
AudioCDManager * _audiocdManager
Definition: system.h:198
Definition: system.h:127
Definition: paletteman.h:47
Definition: system.h:523
Definition: events.h:483
Definition: audiocd.h:33
bool _dummyUnused
Definition: system.h:287
Definition: system.h:38
virtual int getDefaultStretchMode() const
Definition: system.h:967
virtual DLC::Store * getDLCStore()
Definition: system.h:1826
Definition: system.h:464
virtual bool getFeatureState(Feature f)
Definition: system.h:653