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 "common/frac.h"
35 #include "graphics/pixelformat.h"
36 #include "graphics/mode.h"
37 #include "graphics/opengl/context.h"
38 
39 namespace Audio {
40 class Mixer;
41 }
42 
43 namespace Graphics {
44 class CursorManager;
45 struct Surface;
46 }
47 
48 namespace GUI {
49 class GuiObject;
50 class OptionsContainerWidget;
51 }
52 
53 namespace DLC {
54 class Store;
55 }
56 
57 namespace Common {
58 class EventManager;
59 class MutexInternal;
60 struct Rect;
61 class SaveFileManager;
62 class SearchSet;
63 class String;
64 #if defined(USE_TASKBAR)
65 class TaskbarManager;
66 #endif
67 #if defined(USE_UPDATES)
68 class UpdateManager;
69 #endif
70 class TextToSpeechManager;
71 #if defined(USE_SYSDIALOGS)
72 class DialogManager;
73 #endif
74 class PrintingManager;
75 class TimerManager;
76 class SeekableReadStream;
77 class WriteStream;
78 class HardwareInputSet;
79 class Keymap;
80 class KeymapperDefaultBindings;
81 
82 enum RotationMode : int;
83 
84 typedef Array<Keymap *> KeymapArray;
85 }
86 
96 class AudioCDManager;
97 class FilesystemFactory;
98 class PaletteManager;
99 
111 struct TimeDate {
112  int tm_sec;
113  int tm_min;
114  int tm_hour;
115  int tm_mday;
116  int tm_mon;
117  int tm_year;
118  int tm_wday;
119 };
120 
127 
130 
134 
140 };
141 
142 #if defined(USE_IMGUI)
143 typedef struct ImGuiCallbacks {
144  void (*init)() = nullptr;
145  void (*render)() = nullptr;
146  void (*cleanup)() = nullptr;
147 } ImGuiCallbacks;
148 #endif
149 
167  friend class Graphics::CursorManager;
168 
169 protected:
170  OSystem();
171  virtual ~OSystem();
172 
173 protected:
203 
210 
217 
224 
225 #if defined(USE_TASKBAR)
226 
231  Common::TaskbarManager *_taskbarManager;
232 #endif
233 
234 #if defined(USE_UPDATES)
235 
240  Common::UpdateManager *_updateManager;
241 #endif
242 
249 
250 #if defined(USE_SYSDIALOGS)
251 
257 #endif
258 
269 
276 
281 
287 
293 private:
297  bool _backendInitialized;
298 
300 
301 public:
302 
306  void destroy();
307 
311  virtual void init() {}
312 
321  virtual void initBackend();
322 
329  bool backendInitialized() const { return _backendInitialized; }
330 
336  virtual void engineInit() { }
337 
343  virtual void engineDone() { }
344 
348  enum Task {
353 
358 
362  kDataPackDownload
363  };
364 
368  virtual void taskStarted(Task) { }
369 
373  virtual void taskFinished(Task) { }
374 
385  virtual void updateStartSettings(const Common::String &executable, Common::String &command, Common::StringMap &startSettings, Common::StringArray& additionalArgs);
386 
415  enum Feature {
421 
439 
445 
450 
457 
469 
475 
481 
487 
494 
503 
509 
515 
521 
528 
536 
549 
557 
562 
567 
572 
577 
582 
587 
593 
598 
605 
611 
616 
621 
626 
632 
637 
647  };
648 
652  virtual bool hasFeature(Feature f) { return false; }
653 
660  virtual void setFeatureState(Feature f, bool enable) {}
661 
667  virtual bool getFeatureState(Feature f) { return false; }
668 
741  struct GraphicsMode {
748  const char *name;
754  const char *description;
761  int id;
762  };
763 
774  virtual const GraphicsMode *getSupportedGraphicsModes() const {
775  static const GraphicsMode noGraphicsModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
776  return noGraphicsModes;
777  }
778 
787  virtual int getDefaultGraphicsMode() const { return 0; }
788 
790  kGfxModeNoFlags = 0,
791  kGfxModeRender3d = (1 << 0)
792  };
793 
807  virtual bool setGraphicsMode(int mode, uint flags = kGfxModeNoFlags) { return (mode == 0); }
808 
822  bool setGraphicsMode(const char *name);
823 
829  virtual int getGraphicsMode() const { return 0; }
830 
831 #ifdef USE_RGB_COLOR
832 
843  virtual Graphics::PixelFormat getScreenFormat() const = 0;
844 
868  virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const = 0;
869 #else
870  inline Graphics::PixelFormat getScreenFormat() const {
872  }
873 
874  inline Common::List<Graphics::PixelFormat> getSupportedFormats() const {
877  return list;
878  }
879 #endif
880 
888  return Common::Array<uint>();
889  }
890 
901  virtual OpenGL::ContextType getOpenGLType() const {
902  return OpenGL::kContextNone;
903  }
904 
905 #if defined(USE_OPENGL) && defined(USE_GLAD)
906 
917  virtual void *getOpenGLProcAddress(const char *name) const { return nullptr; }
918 #endif
919 
920 #if defined(USE_IMGUI)
921 
928  virtual void setImGuiCallbacks(const ImGuiCallbacks &callbacks) {}
938  virtual void *getImGuiTexture(const Graphics::Surface &image, const byte *palette = nullptr, int palCount = 0) { return nullptr; }
944  virtual void freeImGuiTexture(void *texture) {}
945 #endif
946 
956  virtual bool setShader(const Common::Path &fileName) { return false; }
957 
967  virtual const GraphicsMode *getSupportedStretchModes() const {
968  static const GraphicsMode noStretchModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
969  return noStretchModes;
970  }
971 
981  virtual int getDefaultStretchMode() const { return 0; }
982 
992  virtual bool setStretchMode(int mode) { return false; }
993 
1008  bool setStretchMode(const char *name);
1009 
1015  virtual int getStretchMode() const { return 0; }
1016 
1026  virtual bool setRotationMode(Common::RotationMode rotation) { return false; }
1027 
1037  bool setRotationMode(int rotation);
1038 
1048  virtual uint getDefaultScaler() const { return 0; }
1049 
1059  virtual uint getDefaultScaleFactor() const { return 1; }
1060 
1071  virtual bool setScaler(uint mode, int factor) { return false; }
1072 
1084  virtual bool setScaler(const char *name, int factor) { return false; }
1085 
1091  virtual uint getScaler() const { return 0; }
1092 
1098  virtual uint getScaleFactor() const { return 1; }
1099 
1100 
1129  virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format = nullptr) = 0;
1130 
1141  virtual void initSizeHint(const Graphics::ModeList &modes) {}
1142 
1157  virtual int getScreenChangeID() const { return 0; }
1158 
1177  virtual void beginGFXTransaction() {}
1178 
1189  kTransactionSuccess = 0,
1190  kTransactionAspectRatioFailed = (1 << 0),
1191  kTransactionFullscreenFailed = (1 << 1),
1192  kTransactionModeSwitchFailed = (1 << 2),
1193  kTransactionSizeChangeFailed = (1 << 3),
1194  kTransactionFormatNotSupported = (1 << 4),
1195  kTransactionFilteringFailed = (1 << 5),
1196  kTransactionStretchModeSwitchFailed = (1 << 6),
1197  kTransactionShaderChangeFailed = (1 << 7),
1198  kTransactionVSyncFailed = (1 << 8),
1199  };
1200 
1209  virtual TransactionError endGFXTransaction() { return kTransactionSuccess; }
1210 
1218  virtual int16 getHeight() = 0;
1219 
1227  virtual int16 getWidth() = 0;
1228 
1234  virtual PaletteManager *getPaletteManager() = 0;
1235 
1240  virtual float getHiDPIScreenFactor() const { return 1.0f; }
1241 
1269  virtual void copyRectToScreen(const void *buf, int pitch, int x, int y, int w, int h) = 0;
1270 
1289  virtual Graphics::Surface *lockScreen() = 0;
1290 
1295  virtual void unlockScreen() = 0;
1296 
1300  virtual void fillScreen(uint32 col) = 0;
1301 
1305  virtual void fillScreen(const Common::Rect &r, uint32 col) = 0;
1306 
1316  virtual void updateScreen() = 0;
1317 
1321  virtual void presentBuffer() {}
1322 
1342  virtual void setShakePos(int shakeXOffset, int shakeYOffset) = 0;
1343 
1358  virtual void setFocusRectangle(const Common::Rect& rect) {}
1359 
1368  virtual void clearFocusRectangle() {}
1369 
1375  virtual void saveScreenshot() {}
1376 
1405  virtual void showOverlay(bool inGUI = true) = 0;
1406 
1408  virtual void hideOverlay() = 0;
1409 
1411  virtual bool isOverlayVisible() const = 0;
1412 
1418  virtual Graphics::PixelFormat getOverlayFormat() const = 0;
1419 
1430  virtual void clearOverlay() = 0;
1431 
1438  virtual void grabOverlay(Graphics::Surface &surface) = 0;
1439 
1455  virtual void copyRectToOverlay(const void *buf, int pitch, int x, int y, int w, int h) = 0;
1456 
1462  virtual int16 getOverlayHeight() const = 0;
1463 
1469  virtual int16 getOverlayWidth() const = 0;
1470 
1482  virtual Common::Rect getSafeOverlayArea(int16 *width = nullptr, int16 *height = nullptr) const;
1483 
1497 protected:
1510  virtual bool showMouse(bool visible) = 0;
1511 
1531  virtual void setMouseCursor(const void *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, const Graphics::PixelFormat *format, const byte *mask, frac_t scaleX, frac_t scaleY) = 0;
1532 
1544  virtual void setCursorPalette(const byte *colors, uint start, uint num) {}
1545 
1546 public:
1551  virtual bool lockMouse(bool lock) { return false; }
1552 
1560  virtual void warpMouse(int x, int y) = 0;
1561 
1566  virtual uint32 getDoubleClickTime() const { return 0; }
1567 
1584  virtual uint32 getMillis(bool skipRecord = false) = 0;
1585 
1587  virtual void delayMillis(uint msecs) = 0;
1588 
1595  virtual void getTimeAndDate(TimeDate &td, bool skipRecord = false) const = 0;
1596 
1602  virtual Common::TimerManager *getTimerManager();
1603 
1610  return _eventManager;
1611  }
1612 
1620  virtual Common::HardwareInputSet *getHardwareInputSet() { return nullptr; }
1621 
1632 
1641 
1669  virtual Common::MutexInternal *createMutex() = 0;
1670 
1685  virtual Audio::Mixer *getMixer() = 0;
1686 
1702  return _audiocdManager;
1703  }
1704 
1715  virtual void quit() = 0;
1716 
1722  virtual void fatalError();
1723 
1730  virtual void setWindowCaption(const Common::U32String &caption) {}
1731 
1748  virtual void displayMessageOnOSD(const Common::U32String &msg) = 0;
1749 
1767  virtual void displayActivityIconOnOSD(const Graphics::Surface *icon) = 0;
1781  virtual Common::SaveFileManager *getSavefileManager();
1782 
1783 #if defined(USE_TASKBAR)
1784 
1790  virtual Common::TaskbarManager *getTaskbarManager() {
1791  return _taskbarManager;
1792  }
1793 #endif
1794 
1795 #if defined(USE_UPDATES)
1796 
1802  virtual Common::UpdateManager *getUpdateManager() {
1803  return _updateManager;
1804  }
1805 #endif
1806 
1813  return _textToSpeechManager;
1814  }
1815 
1822  return _printingManager;
1823  }
1824 
1825 #if defined(USE_SYSDIALOGS)
1826 
1832  return _dialogManager;
1833  }
1834 #endif
1835 
1842  return _dlcStore;
1843  }
1844 
1850  virtual FilesystemFactory *getFilesystemFactory();
1867  virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority);
1868 
1875  virtual Common::SeekableReadStream *createConfigReadStream();
1876 
1885  virtual Common::WriteStream *createConfigWriteStream();
1886 
1893  virtual Common::Path getDefaultConfigFileName();
1894 
1902 
1909  virtual void registerDefaultSettings(const Common::String &target) const {}
1910 
1924  virtual GUI::OptionsContainerWidget *buildBackendOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const { return nullptr; }
1925 
1936  virtual const char * const *buildHelpDialogData() { return nullptr; }
1937 
1943  virtual void applyBackendSettings() {}
1944 
1957  virtual void logMessage(LogMessageType::Type type, const char *message) = 0;
1958 
1965  virtual void messageBox(LogMessageType::Type type, const char *message) {}
1966 
1992  virtual bool displayLogFile() { return false; }
1993 
2003  virtual bool hasTextInClipboard() { return !_clipboard.empty(); }
2004 
2014  virtual Common::U32String getTextFromClipboard() { return _clipboard; }
2015 
2025  virtual bool setTextInClipboard(const Common::U32String &text) { _clipboard = text; return true; }
2026 
2039  virtual bool openUrl(const Common::String &url) {return false; }
2040 
2058  virtual Common::String getSystemLanguage() const;
2059 
2065  virtual bool isConnectionLimited();
2066 
2068 };
2069 
2070 
2072 extern OSystem *g_system;
2073 
2076 #endif
Definition: system.h:615
Definition: store.h:32
Definition: system.h:133
Definition: system.h:486
virtual Common::KeymapArray getGlobalKeymaps()
Definition: system.h:1631
CursorMaskValue
Definition: system.h:124
Definition: system.h:53
virtual void messageBox(LogMessageType::Type type, const char *message)
Definition: system.h:1965
GfxModeFlags
Definition: system.h:789
virtual void taskFinished(Task)
Definition: system.h:373
int tm_hour
Definition: system.h:114
Definition: system.h:111
Definition: str.h:59
virtual const char *const * buildHelpDialogData()
Definition: system.h:1936
virtual Common::HardwareInputSet * getHardwareInputSet()
Definition: system.h:1620
int id
Definition: system.h:761
virtual bool lockMouse(bool lock)
Definition: system.h:1551
Definition: surface.h:67
int tm_mday
Definition: system.h:115
Definition: system.h:139
virtual bool setScaler(const char *name, int factor)
Definition: system.h:1084
Definition: system.h:561
Definition: system.h:581
virtual void setFocusRectangle(const Common::Rect &rect)
Definition: system.h:1358
Definition: stream.h:77
Definition: fs-factory.h:31
virtual bool setShader(const Common::Path &fileName)
Definition: system.h:956
virtual void saveScreenshot()
Definition: system.h:1375
virtual Common::Array< uint > getSupportedAntiAliasingLevels() const
Definition: system.h:887
virtual int getGraphicsMode() const
Definition: system.h:829
Definition: pixelformat.h:138
const char * name
Definition: system.h:748
Definition: system.h:741
int tm_min
Definition: system.h:113
virtual void setWindowCaption(const Common::U32String &caption)
Definition: system.h:1730
virtual const GraphicsMode * getSupportedStretchModes() const
Definition: system.h:967
Feature
Definition: system.h:415
Definition: system.h:636
Common::TimerManager * _timerManager
Definition: system.h:216
Common::TextToSpeechManager * _textToSpeechManager
Definition: system.h:248
Definition: list.h:44
virtual TransactionError endGFXTransaction()
Definition: system.h:1209
Definition: system.h:571
virtual void engineInit()
Definition: system.h:336
static constexpr PixelFormat createFormatCLUT8()
Definition: pixelformat.h:184
Definition: rect.h:536
Definition: system.h:548
Definition: path.h:52
virtual int getDefaultGraphicsMode() const
Definition: system.h:787
Definition: system.h:631
Task
Definition: system.h:348
Definition: cursorman.h:43
Definition: stream.h:745
Definition: system.h:449
Definition: printman.h:30
Definition: object.h:60
Definition: widget.h:537
Definition: system.h:444
OSystem * g_system
Definition: system.h:566
virtual Common::DialogManager * getDialogManager()
Definition: system.h:1831
Type
Definition: log.h:33
virtual void initSizeHint(const Graphics::ModeList &modes)
Definition: system.h:1141
int tm_wday
Definition: system.h:118
Definition: noncopyable.h:39
Definition: system.h:535
Common::DialogManager * _dialogManager
Definition: system.h:256
Common::U32String _clipboard
Definition: system.h:286
Definition: system.h:597
AudioCDManager * getAudioCDManager()
Definition: system.h:1701
Definition: system.h:604
virtual void setCursorPalette(const byte *colors, uint start, uint num)
Definition: system.h:1544
Definition: system.h:586
virtual void engineDone()
Definition: system.h:343
virtual GUI::OptionsContainerWidget * buildBackendOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const
Definition: system.h:1924
Definition: mixer.h:70
virtual bool setScaler(uint mode, int factor)
Definition: system.h:1071
Definition: system.h:474
virtual uint getDefaultScaleFactor() const
Definition: system.h:1059
Definition: system.h:352
virtual void applyBackendSettings()
Definition: system.h:1943
virtual bool openUrl(const Common::String &url)
Definition: system.h:2039
virtual bool hasTextInClipboard()
Definition: system.h:2003
virtual bool setTextInClipboard(const Common::U32String &text)
Definition: system.h:2025
Definition: timer.h:40
Definition: ustr.h:57
Definition: system.h:126
TransactionError
Definition: system.h:1188
virtual OpenGL::ContextType getOpenGLType() const
Definition: system.h:901
Definition: archive.h:330
virtual bool setGraphicsMode(int mode, uint flags=kGfxModeNoFlags)
Definition: system.h:807
Definition: system.h:625
int tm_sec
Definition: system.h:112
virtual bool setStretchMode(int mode)
Definition: system.h:992
Definition: system.h:610
virtual void taskStarted(Task)
Definition: system.h:368
Definition: hardware-input.h:199
Definition: algorithm.h:29
Definition: formatinfo.h:28
Definition: system.h:556
virtual bool hasFeature(Feature f)
Definition: system.h:652
const char * description
Definition: system.h:754
Definition: system.h:508
virtual Common::KeymapperDefaultBindings * getKeymapperDefaultBindings()
Definition: system.h:1640
Common::SaveFileManager * _savefileManager
Definition: system.h:223
virtual int getScreenChangeID() const
Definition: system.h:1157
Definition: keymapper-defaults.h:32
Definition: system.h:514
virtual bool displayLogFile()
Definition: system.h:1992
virtual Common::Path getDefaultLogFileName()
Definition: system.h:1901
DLC::Store * _dlcStore
Definition: system.h:280
Definition: system.h:456
int tm_year
Definition: system.h:117
Definition: system.h:420
Definition: system.h:520
virtual void init()
Definition: system.h:311
Common::EventManager * getEventManager()
Definition: system.h:1609
Definition: text-to-speech.h:150
Common::EventManager * _eventManager
Definition: system.h:209
Definition: dialogs.h:47
virtual void registerDefaultSettings(const Common::String &target) const
Definition: system.h:1909
int tm_mon
Definition: system.h:116
Definition: system.h:620
virtual uint getScaleFactor() const
Definition: system.h:1098
virtual uint getScaler() const
Definition: system.h:1091
virtual void presentBuffer()
Definition: system.h:1321
virtual int getStretchMode() const
Definition: system.h:1015
virtual void beginGFXTransaction()
Definition: system.h:1177
virtual Common::TextToSpeechManager * getTextToSpeechManager()
Definition: system.h:1812
Definition: system.h:576
Definition: system.h:480
Definition: savefile.h:142
virtual Common::U32String getTextFromClipboard()
Definition: system.h:2014
Definition: system.h:357
Definition: system.h:592
bool backendInitialized() const
Definition: system.h:329
virtual void clearFocusRectangle()
Definition: system.h:1368
RotationMode
Definition: rotationmode.h:44
Definition: mutex.h:40
virtual Common::PrintingManager * getPrintingManager()
Definition: system.h:1821
virtual uint32 getDoubleClickTime() const
Definition: system.h:1566
Definition: printman.h:41
virtual float getHiDPIScreenFactor() const
Definition: system.h:1240
Definition: system.h:166
Common::PrintingManager * _printingManager
Definition: system.h:275
virtual uint getDefaultScaler() const
Definition: system.h:1048
virtual const GraphicsMode * getSupportedGraphicsModes() const
Definition: system.h:774
virtual void setFeatureState(Feature f, bool enable)
Definition: system.h:660
void push_back(const t_T &element)
Definition: list.h:174
virtual bool setRotationMode(Common::RotationMode rotation)
Definition: system.h:1026
FilesystemFactory * _fsFactory
Definition: system.h:268
AudioCDManager * _audiocdManager
Definition: system.h:202
Definition: system.h:129
Definition: paletteman.h:47
Definition: system.h:527
int32 frac_t
Definition: frac.h:52
Definition: events.h:491
Definition: audiocd.h:33
bool _dummyUnused
Definition: system.h:291
Definition: system.h:39
virtual int getDefaultStretchMode() const
Definition: system.h:981
virtual DLC::Store * getDLCStore()
Definition: system.h:1841
Definition: system.h:468
virtual bool getFeatureState(Feature f)
Definition: system.h:667