#pragma once #include #include #include "SDL_compat.h" class SystemProperties : public QObject { Q_OBJECT friend class SystemPropertyQueryThread; public: SystemProperties(); ~SystemProperties(); // Static properties queried synchronously during the constructor Q_PROPERTY(bool isRunningWayland MEMBER isRunningWayland CONSTANT) Q_PROPERTY(bool isRunningXWayland MEMBER isRunningXWayland CONSTANT) Q_PROPERTY(bool isWow64 MEMBER isWow64 CONSTANT) Q_PROPERTY(QString friendlyNativeArchName MEMBER friendlyNativeArchName CONSTANT) Q_PROPERTY(bool hasDesktopEnvironment MEMBER hasDesktopEnvironment CONSTANT) Q_PROPERTY(bool hasBrowser MEMBER hasBrowser CONSTANT) Q_PROPERTY(bool hasDiscordIntegration MEMBER hasDiscordIntegration CONSTANT) Q_PROPERTY(bool usesMaterial3Theme MEMBER usesMaterial3Theme CONSTANT) Q_PROPERTY(QString versionString MEMBER versionString CONSTANT) // Properties queried asynchronously Q_PROPERTY(bool hasHardwareAcceleration MEMBER hasHardwareAcceleration NOTIFY hasHardwareAccelerationChanged) Q_PROPERTY(bool rendererAlwaysFullScreen MEMBER rendererAlwaysFullScreen NOTIFY rendererAlwaysFullScreenChanged) Q_PROPERTY(QString unmappedGamepads MEMBER unmappedGamepads NOTIFY unmappedGamepadsChanged) Q_PROPERTY(QSize maximumResolution MEMBER maximumResolution NOTIFY maximumResolutionChanged) Q_PROPERTY(bool supportsHdr MEMBER supportsHdr NOTIFY supportsHdrChanged) Q_INVOKABLE void refreshDisplays(); Q_INVOKABLE QRect getNativeResolution(int displayIndex); Q_INVOKABLE QRect getSafeAreaResolution(int displayIndex); Q_INVOKABLE int getRefreshRate(int displayIndex); signals: void unmappedGamepadsChanged(); void hasHardwareAccelerationChanged(); void rendererAlwaysFullScreenChanged(); void maximumResolutionChanged(); void supportsHdrChanged(); private slots: void updateDecoderProperties(bool hasHardwareAcceleration, bool rendererAlwaysFullScreen, QSize maximumResolution, bool supportsHdr); private: QThread* systemPropertyQueryThread; SDL_Window* testWindow; // Properties set by the constructor bool isRunningWayland; bool isRunningXWayland; bool isWow64; QString friendlyNativeArchName; bool hasDesktopEnvironment; bool hasBrowser; bool hasDiscordIntegration; QString unmappedGamepads; QString versionString; bool usesMaterial3Theme; // Properties set by updateDecoderProperties() bool hasHardwareAcceleration; bool rendererAlwaysFullScreen; QSize maximumResolution; bool supportsHdr; // Properties set by refreshDisplays() QList monitorNativeResolutions; QList monitorSafeAreaResolutions; QList monitorRefreshRates; };