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 
208 
215 
222 
223 #if defined(USE_TASKBAR)
224 
229  Common::TaskbarManager *_taskbarManager;
230 #endif
231 
232 #if defined(USE_UPDATES)
233 
238  Common::UpdateManager *_updateManager;
239 #endif
240 
247 
248 #if defined(USE_SYSDIALOGS)
249 
255 #endif
256 
267 
274 
279 
285 
291 private:
295  bool _backendInitialized;
296 
298 
299 public:
300 
304  void destroy();
305 
309  virtual void init() {}
310 
319  virtual void initBackend();
320 
327  bool backendInitialized() const { return _backendInitialized; }
328 
334  virtual void engineInit() { }
335 
341  virtual void engineDone() { }
342 
346  enum Task {
351 
356 
360  kDataPackDownload
361  };
362 
366  virtual void taskStarted(Task) { }
367 
371  virtual void taskFinished(Task) { }
372 
383  virtual void updateStartSettings(const Common::String &executable, Common::String &command, Common::StringMap &startSettings, Common::StringArray& additionalArgs);
384 
413  enum Feature {
419 
437 
443 
448 
455 
467 
473 
479 
485 
492 
501 
507 
513 
519 
526 
534 
547 
555 
560 
565 
570 
575 
580 
585 
591 
596 
603 
609 
614 
619 
624 
630 
635  };
636 
640  virtual bool hasFeature(Feature f) { return false; }
641 
648  virtual void setFeatureState(Feature f, bool enable) {}
649 
655  virtual bool getFeatureState(Feature f) { return false; }
656 
729  struct GraphicsMode {
736  const char *name;
742  const char *description;
749  int id;
750  };
751 
762  virtual const GraphicsMode *getSupportedGraphicsModes() const {
763  static const GraphicsMode noGraphicsModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
764  return noGraphicsModes;
765  }
766 
775  virtual int getDefaultGraphicsMode() const { return 0; }
776 
778  kGfxModeNoFlags = 0,
779  kGfxModeRender3d = (1 << 0)
780  };
781 
795  virtual bool setGraphicsMode(int mode, uint flags = kGfxModeNoFlags) { return (mode == 0); }
796 
810  bool setGraphicsMode(const char *name);
811 
817  virtual int getGraphicsMode() const { return 0; }
818 
819 #ifdef USE_RGB_COLOR
820 
831  virtual Graphics::PixelFormat getScreenFormat() const = 0;
832 
856  virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const = 0;
857 #else
858  inline Graphics::PixelFormat getScreenFormat() const {
860  }
861 
862  inline Common::List<Graphics::PixelFormat> getSupportedFormats() const {
865  return list;
866  }
867 #endif
868 
876  return Common::Array<uint>();
877  }
878 
889  virtual OpenGL::ContextType getOpenGLType() const {
890  return OpenGL::kContextNone;
891  }
892 
893 #if defined(USE_OPENGL) && defined(USE_GLAD)
894 
905  virtual void *getOpenGLProcAddress(const char *name) const { return nullptr; }
906 #endif
907 
908 #if defined(USE_IMGUI)
909 
916  virtual void setImGuiCallbacks(const ImGuiCallbacks &callbacks) {}
926  virtual void *getImGuiTexture(const Graphics::Surface &image, const byte *palette = nullptr, int palCount = 0) { return nullptr; }
932  virtual void freeImGuiTexture(void *texture) {}
933 #endif
934 
944  virtual bool setShader(const Common::Path &fileName) { return false; }
945 
955  virtual const GraphicsMode *getSupportedStretchModes() const {
956  static const GraphicsMode noStretchModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
957  return noStretchModes;
958  }
959 
969  virtual int getDefaultStretchMode() const { return 0; }
970 
980  virtual bool setStretchMode(int mode) { return false; }
981 
996  bool setStretchMode(const char *name);
997 
1003  virtual int getStretchMode() const { return 0; }
1004 
1014  virtual bool setRotationMode(Common::RotationMode rotation) { return false; }
1015 
1025  bool setRotationMode(int rotation);
1026 
1036  virtual uint getDefaultScaler() const { return 0; }
1037 
1047  virtual uint getDefaultScaleFactor() const { return 1; }
1048 
1059  virtual bool setScaler(uint mode, int factor) { return false; }
1060 
1072  virtual bool setScaler(const char *name, int factor) { return false; }
1073 
1079  virtual uint getScaler() const { return 0; }
1080 
1086  virtual uint getScaleFactor() const { return 1; }
1087 
1088 
1117  virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format = nullptr) = 0;
1118 
1129  virtual void initSizeHint(const Graphics::ModeList &modes) {}
1130 
1145  virtual int getScreenChangeID() const { return 0; }
1146 
1165  virtual void beginGFXTransaction() {}
1166 
1177  kTransactionSuccess = 0,
1178  kTransactionAspectRatioFailed = (1 << 0),
1179  kTransactionFullscreenFailed = (1 << 1),
1180  kTransactionModeSwitchFailed = (1 << 2),
1181  kTransactionSizeChangeFailed = (1 << 3),
1182  kTransactionFormatNotSupported = (1 << 4),
1183  kTransactionFilteringFailed = (1 << 5),
1184  kTransactionStretchModeSwitchFailed = (1 << 6),
1185  kTransactionShaderChangeFailed = (1 << 7),
1186  kTransactionVSyncFailed = (1 << 8),
1187  };
1188 
1197  virtual TransactionError endGFXTransaction() { return kTransactionSuccess; }
1198 
1206  virtual int16 getHeight() = 0;
1207 
1215  virtual int16 getWidth() = 0;
1216 
1222  virtual PaletteManager *getPaletteManager() = 0;
1223 
1228  virtual float getHiDPIScreenFactor() const { return 1.0f; }
1229 
1257  virtual void copyRectToScreen(const void *buf, int pitch, int x, int y, int w, int h) = 0;
1258 
1277  virtual Graphics::Surface *lockScreen() = 0;
1278 
1283  virtual void unlockScreen() = 0;
1284 
1288  virtual void fillScreen(uint32 col) = 0;
1289 
1293  virtual void fillScreen(const Common::Rect &r, uint32 col) = 0;
1294 
1304  virtual void updateScreen() = 0;
1305 
1309  virtual void presentBuffer() {}
1310 
1330  virtual void setShakePos(int shakeXOffset, int shakeYOffset) = 0;
1331 
1346  virtual void setFocusRectangle(const Common::Rect& rect) {}
1347 
1356  virtual void clearFocusRectangle() {}
1357 
1363  virtual void saveScreenshot() {}
1364 
1393  virtual void showOverlay(bool inGUI = true) = 0;
1394 
1396  virtual void hideOverlay() = 0;
1397 
1399  virtual bool isOverlayVisible() const = 0;
1400 
1406  virtual Graphics::PixelFormat getOverlayFormat() const = 0;
1407 
1418  virtual void clearOverlay() = 0;
1419 
1426  virtual void grabOverlay(Graphics::Surface &surface) = 0;
1427 
1443  virtual void copyRectToOverlay(const void *buf, int pitch, int x, int y, int w, int h) = 0;
1444 
1450  virtual int16 getOverlayHeight() const = 0;
1451 
1457  virtual int16 getOverlayWidth() const = 0;
1458 
1470  virtual Common::Rect getSafeOverlayArea(int16 *width = nullptr, int16 *height = nullptr) const;
1471 
1498  virtual bool showMouse(bool visible) = 0;
1499 
1504  virtual bool lockMouse(bool lock) { return false; }
1505 
1513  virtual void warpMouse(int x, int y) = 0;
1514 
1532  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;
1533 
1545  virtual void setCursorPalette(const byte *colors, uint start, uint num) {}
1546 
1547 
1548 
1553  virtual uint32 getDoubleClickTime() const { return 0; }
1554 
1571  virtual uint32 getMillis(bool skipRecord = false) = 0;
1572 
1574  virtual void delayMillis(uint msecs) = 0;
1575 
1582  virtual void getTimeAndDate(TimeDate &td, bool skipRecord = false) const = 0;
1583 
1589  virtual Common::TimerManager *getTimerManager();
1590 
1597  return _eventManager;
1598  }
1599 
1607  virtual Common::HardwareInputSet *getHardwareInputSet() { return nullptr; }
1608 
1619 
1628 
1656  virtual Common::MutexInternal *createMutex() = 0;
1657 
1672  virtual Audio::Mixer *getMixer() = 0;
1673 
1689  return _audiocdManager;
1690  }
1691 
1702  virtual void quit() = 0;
1703 
1709  virtual void fatalError();
1710 
1717  virtual void setWindowCaption(const Common::U32String &caption) {}
1718 
1735  virtual void displayMessageOnOSD(const Common::U32String &msg) = 0;
1736 
1754  virtual void displayActivityIconOnOSD(const Graphics::Surface *icon) = 0;
1768  virtual Common::SaveFileManager *getSavefileManager();
1769 
1770 #if defined(USE_TASKBAR)
1771 
1777  virtual Common::TaskbarManager *getTaskbarManager() {
1778  return _taskbarManager;
1779  }
1780 #endif
1781 
1782 #if defined(USE_UPDATES)
1783 
1789  virtual Common::UpdateManager *getUpdateManager() {
1790  return _updateManager;
1791  }
1792 #endif
1793 
1800  return _textToSpeechManager;
1801  }
1802 
1809  return _printingManager;
1810  }
1811 
1812 #if defined(USE_SYSDIALOGS)
1813 
1819  return _dialogManager;
1820  }
1821 #endif
1822 
1829  return _dlcStore;
1830  }
1831 
1837  virtual FilesystemFactory *getFilesystemFactory();
1854  virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority);
1855 
1862  virtual Common::SeekableReadStream *createConfigReadStream();
1863 
1872  virtual Common::WriteStream *createConfigWriteStream();
1873 
1880  virtual Common::Path getDefaultConfigFileName();
1881 
1889 
1896  virtual void registerDefaultSettings(const Common::String &target) const {}
1897 
1911  virtual GUI::OptionsContainerWidget *buildBackendOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const { return nullptr; }
1912 
1923  virtual const char * const *buildHelpDialogData() { return nullptr; }
1924 
1930  virtual void applyBackendSettings() {}
1931 
1944  virtual void logMessage(LogMessageType::Type type, const char *message) = 0;
1945 
1952  virtual void messageBox(LogMessageType::Type type, const char *message) {}
1953 
1979  virtual bool displayLogFile() { return false; }
1980 
1990  virtual bool hasTextInClipboard() { return !_clipboard.empty(); }
1991 
2001  virtual Common::U32String getTextFromClipboard() { return _clipboard; }
2002 
2012  virtual bool setTextInClipboard(const Common::U32String &text) { _clipboard = text; return true; }
2013 
2026  virtual bool openUrl(const Common::String &url) {return false; }
2027 
2045  virtual Common::String getSystemLanguage() const;
2046 
2052  virtual bool isConnectionLimited();
2053 
2055 };
2056 
2057 
2059 extern OSystem *g_system;
2060 
2063 #endif
Definition: system.h:613
Definition: store.h:32
Definition: system.h:131
Definition: system.h:484
virtual Common::KeymapArray getGlobalKeymaps()
Definition: system.h:1618
CursorMaskValue
Definition: system.h:122
Definition: system.h:51
virtual void messageBox(LogMessageType::Type type, const char *message)
Definition: system.h:1952
GfxModeFlags
Definition: system.h:777
virtual void taskFinished(Task)
Definition: system.h:371
int tm_hour
Definition: system.h:112
Definition: system.h:109
Definition: str.h:59
virtual const char *const * buildHelpDialogData()
Definition: system.h:1923
virtual Common::HardwareInputSet * getHardwareInputSet()
Definition: system.h:1607
int id
Definition: system.h:749
virtual bool lockMouse(bool lock)
Definition: system.h:1504
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:1072
Definition: system.h:559
Definition: system.h:579
virtual void setFocusRectangle(const Common::Rect &rect)
Definition: system.h:1346
Definition: stream.h:77
Definition: fs-factory.h:31
virtual bool setShader(const Common::Path &fileName)
Definition: system.h:944
virtual void saveScreenshot()
Definition: system.h:1363
virtual Common::Array< uint > getSupportedAntiAliasingLevels() const
Definition: system.h:875
virtual int getGraphicsMode() const
Definition: system.h:817
Definition: pixelformat.h:138
const char * name
Definition: system.h:736
Definition: system.h:729
int tm_min
Definition: system.h:111
virtual void setWindowCaption(const Common::U32String &caption)
Definition: system.h:1717
virtual const GraphicsMode * getSupportedStretchModes() const
Definition: system.h:955
Feature
Definition: system.h:413
Definition: system.h:634
Common::TimerManager * _timerManager
Definition: system.h:214
Common::TextToSpeechManager * _textToSpeechManager
Definition: system.h:246
Definition: list.h:44
virtual TransactionError endGFXTransaction()
Definition: system.h:1197
Definition: system.h:569
virtual void engineInit()
Definition: system.h:334
static constexpr PixelFormat createFormatCLUT8()
Definition: pixelformat.h:184
Definition: rect.h:524
Definition: system.h:546
Definition: path.h:52
virtual int getDefaultGraphicsMode() const
Definition: system.h:775
Definition: system.h:629
Task
Definition: system.h:346
Definition: stream.h:745
Definition: system.h:447
Definition: printman.h:30
Definition: object.h:60
Definition: widget.h:533
Definition: system.h:442
OSystem * g_system
Definition: system.h:564
virtual Common::DialogManager * getDialogManager()
Definition: system.h:1818
Type
Definition: log.h:33
virtual void initSizeHint(const Graphics::ModeList &modes)
Definition: system.h:1129
int tm_wday
Definition: system.h:116
Definition: noncopyable.h:39
Definition: system.h:533
Common::DialogManager * _dialogManager
Definition: system.h:254
Common::U32String _clipboard
Definition: system.h:284
Definition: system.h:595
AudioCDManager * getAudioCDManager()
Definition: system.h:1688
Definition: system.h:602
virtual void setCursorPalette(const byte *colors, uint start, uint num)
Definition: system.h:1545
Definition: system.h:584
virtual void engineDone()
Definition: system.h:341
virtual GUI::OptionsContainerWidget * buildBackendOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const
Definition: system.h:1911
Definition: mixer.h:70
virtual bool setScaler(uint mode, int factor)
Definition: system.h:1059
Definition: system.h:472
virtual uint getDefaultScaleFactor() const
Definition: system.h:1047
Definition: system.h:350
virtual void applyBackendSettings()
Definition: system.h:1930
virtual bool openUrl(const Common::String &url)
Definition: system.h:2026
virtual bool hasTextInClipboard()
Definition: system.h:1990
virtual bool setTextInClipboard(const Common::U32String &text)
Definition: system.h:2012
Definition: timer.h:40
Definition: ustr.h:57
Definition: system.h:124
TransactionError
Definition: system.h:1176
virtual OpenGL::ContextType getOpenGLType() const
Definition: system.h:889
Definition: archive.h:330
virtual bool setGraphicsMode(int mode, uint flags=kGfxModeNoFlags)
Definition: system.h:795
Definition: system.h:623
int tm_sec
Definition: system.h:110
virtual bool setStretchMode(int mode)
Definition: system.h:980
Definition: system.h:608
virtual void taskStarted(Task)
Definition: system.h:366
Definition: hardware-input.h:199
Definition: algorithm.h:29
Definition: formatinfo.h:28
Definition: system.h:554
virtual bool hasFeature(Feature f)
Definition: system.h:640
const char * description
Definition: system.h:742
Definition: system.h:506
virtual Common::KeymapperDefaultBindings * getKeymapperDefaultBindings()
Definition: system.h:1627
Common::SaveFileManager * _savefileManager
Definition: system.h:221
virtual int getScreenChangeID() const
Definition: system.h:1145
Definition: keymapper-defaults.h:32
Definition: system.h:512
virtual bool displayLogFile()
Definition: system.h:1979
virtual Common::Path getDefaultLogFileName()
Definition: system.h:1888
DLC::Store * _dlcStore
Definition: system.h:278
Definition: system.h:454
int tm_year
Definition: system.h:115
Definition: system.h:418
Definition: system.h:518
virtual void init()
Definition: system.h:309
Common::EventManager * getEventManager()
Definition: system.h:1596
Definition: text-to-speech.h:150
Common::EventManager * _eventManager
Definition: system.h:207
Definition: dialogs.h:47
virtual void registerDefaultSettings(const Common::String &target) const
Definition: system.h:1896
int tm_mon
Definition: system.h:114
Definition: system.h:618
virtual uint getScaleFactor() const
Definition: system.h:1086
virtual uint getScaler() const
Definition: system.h:1079
virtual void presentBuffer()
Definition: system.h:1309
virtual int getStretchMode() const
Definition: system.h:1003
virtual void beginGFXTransaction()
Definition: system.h:1165
virtual Common::TextToSpeechManager * getTextToSpeechManager()
Definition: system.h:1799
Definition: system.h:574
Definition: system.h:478
Definition: savefile.h:142
virtual Common::U32String getTextFromClipboard()
Definition: system.h:2001
Definition: system.h:355
Definition: system.h:590
bool backendInitialized() const
Definition: system.h:327
virtual void clearFocusRectangle()
Definition: system.h:1356
RotationMode
Definition: rotationmode.h:44
Definition: mutex.h:40
virtual Common::PrintingManager * getPrintingManager()
Definition: system.h:1808
virtual uint32 getDoubleClickTime() const
Definition: system.h:1553
Definition: printman.h:41
virtual float getHiDPIScreenFactor() const
Definition: system.h:1228
Definition: system.h:164
Common::PrintingManager * _printingManager
Definition: system.h:273
virtual uint getDefaultScaler() const
Definition: system.h:1036
virtual const GraphicsMode * getSupportedGraphicsModes() const
Definition: system.h:762
virtual void setFeatureState(Feature f, bool enable)
Definition: system.h:648
void push_back(const t_T &element)
Definition: list.h:174
virtual bool setRotationMode(Common::RotationMode rotation)
Definition: system.h:1014
FilesystemFactory * _fsFactory
Definition: system.h:266
AudioCDManager * _audiocdManager
Definition: system.h:198
Definition: system.h:127
Definition: paletteman.h:47
Definition: system.h:525
Definition: events.h:483
Definition: audiocd.h:33
bool _dummyUnused
Definition: system.h:289
Definition: system.h:38
virtual int getDefaultStretchMode() const
Definition: system.h:969
virtual DLC::Store * getDLCStore()
Definition: system.h:1828
Definition: system.h:466
virtual bool getFeatureState(Feature f)
Definition: system.h:655