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 class CursorManager;
44 struct Surface;
45 }
46 
47 namespace GUI {
48 class GuiObject;
49 class OptionsContainerWidget;
50 }
51 
52 namespace DLC {
53 class Store;
54 }
55 
56 namespace Common {
57 class EventManager;
58 class MutexInternal;
59 struct Rect;
60 class SaveFileManager;
61 class SearchSet;
62 class String;
63 #if defined(USE_TASKBAR)
64 class TaskbarManager;
65 #endif
66 #if defined(USE_UPDATES)
67 class UpdateManager;
68 #endif
69 class TextToSpeechManager;
70 #if defined(USE_SYSDIALOGS)
71 class DialogManager;
72 #endif
73 class PrintingManager;
74 class TimerManager;
75 class SeekableReadStream;
76 class WriteStream;
77 class HardwareInputSet;
78 class Keymap;
79 class KeymapperDefaultBindings;
80 
81 enum RotationMode : int;
82 
83 typedef Array<Keymap *> KeymapArray;
84 }
85 
95 class AudioCDManager;
96 class FilesystemFactory;
97 class PaletteManager;
98 
110 struct TimeDate {
111  int tm_sec;
112  int tm_min;
113  int tm_hour;
114  int tm_mday;
115  int tm_mon;
116  int tm_year;
117  int tm_wday;
118 };
119 
126 
129 
133 
139 };
140 
141 #if defined(USE_IMGUI)
142 typedef struct ImGuiCallbacks {
143  void (*init)() = nullptr;
144  void (*render)() = nullptr;
145  void (*cleanup)() = nullptr;
146 } ImGuiCallbacks;
147 #endif
148 
166  friend class Graphics::CursorManager;
167 
168 protected:
169  OSystem();
170  virtual ~OSystem();
171 
172 protected:
202 
209 
216 
223 
224 #if defined(USE_TASKBAR)
225 
230  Common::TaskbarManager *_taskbarManager;
231 #endif
232 
233 #if defined(USE_UPDATES)
234 
239  Common::UpdateManager *_updateManager;
240 #endif
241 
248 
249 #if defined(USE_SYSDIALOGS)
250 
256 #endif
257 
268 
275 
280 
286 
292 private:
296  bool _backendInitialized;
297 
299 
300 public:
301 
305  void destroy();
306 
310  virtual void init() {}
311 
320  virtual void initBackend();
321 
328  bool backendInitialized() const { return _backendInitialized; }
329 
335  virtual void engineInit() { }
336 
342  virtual void engineDone() { }
343 
347  enum Task {
352 
357 
361  kDataPackDownload
362  };
363 
367  virtual void taskStarted(Task) { }
368 
372  virtual void taskFinished(Task) { }
373 
384  virtual void updateStartSettings(const Common::String &executable, Common::String &command, Common::StringMap &startSettings, Common::StringArray& additionalArgs);
385 
414  enum Feature {
420 
438 
444 
449 
456 
468 
474 
480 
486 
493 
502 
508 
514 
520 
527 
535 
548 
556 
561 
566 
571 
576 
581 
586 
592 
597 
604 
610 
615 
620 
625 
631 
636  };
637 
641  virtual bool hasFeature(Feature f) { return false; }
642 
649  virtual void setFeatureState(Feature f, bool enable) {}
650 
656  virtual bool getFeatureState(Feature f) { return false; }
657 
730  struct GraphicsMode {
737  const char *name;
743  const char *description;
750  int id;
751  };
752 
763  virtual const GraphicsMode *getSupportedGraphicsModes() const {
764  static const GraphicsMode noGraphicsModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
765  return noGraphicsModes;
766  }
767 
776  virtual int getDefaultGraphicsMode() const { return 0; }
777 
779  kGfxModeNoFlags = 0,
780  kGfxModeRender3d = (1 << 0)
781  };
782 
796  virtual bool setGraphicsMode(int mode, uint flags = kGfxModeNoFlags) { return (mode == 0); }
797 
811  bool setGraphicsMode(const char *name);
812 
818  virtual int getGraphicsMode() const { return 0; }
819 
820 #ifdef USE_RGB_COLOR
821 
832  virtual Graphics::PixelFormat getScreenFormat() const = 0;
833 
857  virtual Common::List<Graphics::PixelFormat> getSupportedFormats() const = 0;
858 #else
859  inline Graphics::PixelFormat getScreenFormat() const {
861  }
862 
863  inline Common::List<Graphics::PixelFormat> getSupportedFormats() const {
866  return list;
867  }
868 #endif
869 
877  return Common::Array<uint>();
878  }
879 
890  virtual OpenGL::ContextType getOpenGLType() const {
891  return OpenGL::kContextNone;
892  }
893 
894 #if defined(USE_OPENGL) && defined(USE_GLAD)
895 
906  virtual void *getOpenGLProcAddress(const char *name) const { return nullptr; }
907 #endif
908 
909 #if defined(USE_IMGUI)
910 
917  virtual void setImGuiCallbacks(const ImGuiCallbacks &callbacks) {}
927  virtual void *getImGuiTexture(const Graphics::Surface &image, const byte *palette = nullptr, int palCount = 0) { return nullptr; }
933  virtual void freeImGuiTexture(void *texture) {}
934 #endif
935 
945  virtual bool setShader(const Common::Path &fileName) { return false; }
946 
956  virtual const GraphicsMode *getSupportedStretchModes() const {
957  static const GraphicsMode noStretchModes[] = {{"NONE", "Normal", 0}, {nullptr, nullptr, 0 }};
958  return noStretchModes;
959  }
960 
970  virtual int getDefaultStretchMode() const { return 0; }
971 
981  virtual bool setStretchMode(int mode) { return false; }
982 
997  bool setStretchMode(const char *name);
998 
1004  virtual int getStretchMode() const { return 0; }
1005 
1015  virtual bool setRotationMode(Common::RotationMode rotation) { return false; }
1016 
1026  bool setRotationMode(int rotation);
1027 
1037  virtual uint getDefaultScaler() const { return 0; }
1038 
1048  virtual uint getDefaultScaleFactor() const { return 1; }
1049 
1060  virtual bool setScaler(uint mode, int factor) { return false; }
1061 
1073  virtual bool setScaler(const char *name, int factor) { return false; }
1074 
1080  virtual uint getScaler() const { return 0; }
1081 
1087  virtual uint getScaleFactor() const { return 1; }
1088 
1089 
1118  virtual void initSize(uint width, uint height, const Graphics::PixelFormat *format = nullptr) = 0;
1119 
1130  virtual void initSizeHint(const Graphics::ModeList &modes) {}
1131 
1146  virtual int getScreenChangeID() const { return 0; }
1147 
1166  virtual void beginGFXTransaction() {}
1167 
1178  kTransactionSuccess = 0,
1179  kTransactionAspectRatioFailed = (1 << 0),
1180  kTransactionFullscreenFailed = (1 << 1),
1181  kTransactionModeSwitchFailed = (1 << 2),
1182  kTransactionSizeChangeFailed = (1 << 3),
1183  kTransactionFormatNotSupported = (1 << 4),
1184  kTransactionFilteringFailed = (1 << 5),
1185  kTransactionStretchModeSwitchFailed = (1 << 6),
1186  kTransactionShaderChangeFailed = (1 << 7),
1187  kTransactionVSyncFailed = (1 << 8),
1188  };
1189 
1198  virtual TransactionError endGFXTransaction() { return kTransactionSuccess; }
1199 
1207  virtual int16 getHeight() = 0;
1208 
1216  virtual int16 getWidth() = 0;
1217 
1223  virtual PaletteManager *getPaletteManager() = 0;
1224 
1229  virtual float getHiDPIScreenFactor() const { return 1.0f; }
1230 
1258  virtual void copyRectToScreen(const void *buf, int pitch, int x, int y, int w, int h) = 0;
1259 
1278  virtual Graphics::Surface *lockScreen() = 0;
1279 
1284  virtual void unlockScreen() = 0;
1285 
1289  virtual void fillScreen(uint32 col) = 0;
1290 
1294  virtual void fillScreen(const Common::Rect &r, uint32 col) = 0;
1295 
1305  virtual void updateScreen() = 0;
1306 
1310  virtual void presentBuffer() {}
1311 
1331  virtual void setShakePos(int shakeXOffset, int shakeYOffset) = 0;
1332 
1347  virtual void setFocusRectangle(const Common::Rect& rect) {}
1348 
1357  virtual void clearFocusRectangle() {}
1358 
1364  virtual void saveScreenshot() {}
1365 
1394  virtual void showOverlay(bool inGUI = true) = 0;
1395 
1397  virtual void hideOverlay() = 0;
1398 
1400  virtual bool isOverlayVisible() const = 0;
1401 
1407  virtual Graphics::PixelFormat getOverlayFormat() const = 0;
1408 
1419  virtual void clearOverlay() = 0;
1420 
1427  virtual void grabOverlay(Graphics::Surface &surface) = 0;
1428 
1444  virtual void copyRectToOverlay(const void *buf, int pitch, int x, int y, int w, int h) = 0;
1445 
1451  virtual int16 getOverlayHeight() const = 0;
1452 
1458  virtual int16 getOverlayWidth() const = 0;
1459 
1471  virtual Common::Rect getSafeOverlayArea(int16 *width = nullptr, int16 *height = nullptr) const;
1472 
1486 protected:
1499  virtual bool showMouse(bool visible) = 0;
1500 
1518  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;
1519 
1531  virtual void setCursorPalette(const byte *colors, uint start, uint num) {}
1532 
1533 public:
1538  virtual bool lockMouse(bool lock) { return false; }
1539 
1547  virtual void warpMouse(int x, int y) = 0;
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:614
Definition: store.h:32
Definition: system.h:132
Definition: system.h:485
virtual Common::KeymapArray getGlobalKeymaps()
Definition: system.h:1618
CursorMaskValue
Definition: system.h:123
Definition: system.h:52
virtual void messageBox(LogMessageType::Type type, const char *message)
Definition: system.h:1952
GfxModeFlags
Definition: system.h:778
virtual void taskFinished(Task)
Definition: system.h:372
int tm_hour
Definition: system.h:113
Definition: system.h:110
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:750
virtual bool lockMouse(bool lock)
Definition: system.h:1538
Definition: surface.h:67
int tm_mday
Definition: system.h:114
Definition: system.h:138
virtual bool setScaler(const char *name, int factor)
Definition: system.h:1073
Definition: system.h:560
Definition: system.h:580
virtual void setFocusRectangle(const Common::Rect &rect)
Definition: system.h:1347
Definition: stream.h:77
Definition: fs-factory.h:31
virtual bool setShader(const Common::Path &fileName)
Definition: system.h:945
virtual void saveScreenshot()
Definition: system.h:1364
virtual Common::Array< uint > getSupportedAntiAliasingLevels() const
Definition: system.h:876
virtual int getGraphicsMode() const
Definition: system.h:818
Definition: pixelformat.h:138
const char * name
Definition: system.h:737
Definition: system.h:730
int tm_min
Definition: system.h:112
virtual void setWindowCaption(const Common::U32String &caption)
Definition: system.h:1717
virtual const GraphicsMode * getSupportedStretchModes() const
Definition: system.h:956
Feature
Definition: system.h:414
Definition: system.h:635
Common::TimerManager * _timerManager
Definition: system.h:215
Common::TextToSpeechManager * _textToSpeechManager
Definition: system.h:247
Definition: list.h:44
virtual TransactionError endGFXTransaction()
Definition: system.h:1198
Definition: system.h:570
virtual void engineInit()
Definition: system.h:335
static constexpr PixelFormat createFormatCLUT8()
Definition: pixelformat.h:184
Definition: rect.h:524
Definition: system.h:547
Definition: path.h:52
virtual int getDefaultGraphicsMode() const
Definition: system.h:776
Definition: system.h:630
Task
Definition: system.h:347
Definition: cursorman.h:42
Definition: stream.h:745
Definition: system.h:448
Definition: printman.h:30
Definition: object.h:60
Definition: widget.h:537
Definition: system.h:443
OSystem * g_system
Definition: system.h:565
virtual Common::DialogManager * getDialogManager()
Definition: system.h:1818
Type
Definition: log.h:33
virtual void initSizeHint(const Graphics::ModeList &modes)
Definition: system.h:1130
int tm_wday
Definition: system.h:117
Definition: noncopyable.h:39
Definition: system.h:534
Common::DialogManager * _dialogManager
Definition: system.h:255
Common::U32String _clipboard
Definition: system.h:285
Definition: system.h:596
AudioCDManager * getAudioCDManager()
Definition: system.h:1688
Definition: system.h:603
virtual void setCursorPalette(const byte *colors, uint start, uint num)
Definition: system.h:1531
Definition: system.h:585
virtual void engineDone()
Definition: system.h:342
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:1060
Definition: system.h:473
virtual uint getDefaultScaleFactor() const
Definition: system.h:1048
Definition: system.h:351
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:125
TransactionError
Definition: system.h:1177
virtual OpenGL::ContextType getOpenGLType() const
Definition: system.h:890
Definition: archive.h:330
virtual bool setGraphicsMode(int mode, uint flags=kGfxModeNoFlags)
Definition: system.h:796
Definition: system.h:624
int tm_sec
Definition: system.h:111
virtual bool setStretchMode(int mode)
Definition: system.h:981
Definition: system.h:609
virtual void taskStarted(Task)
Definition: system.h:367
Definition: hardware-input.h:199
Definition: algorithm.h:29
Definition: formatinfo.h:28
Definition: system.h:555
virtual bool hasFeature(Feature f)
Definition: system.h:641
const char * description
Definition: system.h:743
Definition: system.h:507
virtual Common::KeymapperDefaultBindings * getKeymapperDefaultBindings()
Definition: system.h:1627
Common::SaveFileManager * _savefileManager
Definition: system.h:222
virtual int getScreenChangeID() const
Definition: system.h:1146
Definition: keymapper-defaults.h:32
Definition: system.h:513
virtual bool displayLogFile()
Definition: system.h:1979
virtual Common::Path getDefaultLogFileName()
Definition: system.h:1888
DLC::Store * _dlcStore
Definition: system.h:279
Definition: system.h:455
int tm_year
Definition: system.h:116
Definition: system.h:419
Definition: system.h:519
virtual void init()
Definition: system.h:310
Common::EventManager * getEventManager()
Definition: system.h:1596
Definition: text-to-speech.h:150
Common::EventManager * _eventManager
Definition: system.h:208
Definition: dialogs.h:47
virtual void registerDefaultSettings(const Common::String &target) const
Definition: system.h:1896
int tm_mon
Definition: system.h:115
Definition: system.h:619
virtual uint getScaleFactor() const
Definition: system.h:1087
virtual uint getScaler() const
Definition: system.h:1080
virtual void presentBuffer()
Definition: system.h:1310
virtual int getStretchMode() const
Definition: system.h:1004
virtual void beginGFXTransaction()
Definition: system.h:1166
virtual Common::TextToSpeechManager * getTextToSpeechManager()
Definition: system.h:1799
Definition: system.h:575
Definition: system.h:479
Definition: savefile.h:142
virtual Common::U32String getTextFromClipboard()
Definition: system.h:2001
Definition: system.h:356
Definition: system.h:591
bool backendInitialized() const
Definition: system.h:328
virtual void clearFocusRectangle()
Definition: system.h:1357
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:1229
Definition: system.h:165
Common::PrintingManager * _printingManager
Definition: system.h:274
virtual uint getDefaultScaler() const
Definition: system.h:1037
virtual const GraphicsMode * getSupportedGraphicsModes() const
Definition: system.h:763
virtual void setFeatureState(Feature f, bool enable)
Definition: system.h:649
void push_back(const t_T &element)
Definition: list.h:174
virtual bool setRotationMode(Common::RotationMode rotation)
Definition: system.h:1015
FilesystemFactory * _fsFactory
Definition: system.h:267
AudioCDManager * _audiocdManager
Definition: system.h:201
Definition: system.h:128
Definition: paletteman.h:47
Definition: system.h:526
Definition: events.h:483
Definition: audiocd.h:33
bool _dummyUnused
Definition: system.h:290
Definition: system.h:38
virtual int getDefaultStretchMode() const
Definition: system.h:970
virtual DLC::Store * getDLCStore()
Definition: system.h:1828
Definition: system.h:467
virtual bool getFeatureState(Feature f)
Definition: system.h:656