[Windows] Fix driver version detection of AMD RDNA+ GPU on Windows 10
[xbmc.git] / xbmc / windowing / osx / WinSystemOSX.h
blob899e52486b9a0b5461f38b8af90fefa57ccd9a1f
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #pragma once
11 #include "threads/CriticalSection.h"
12 #include "threads/SystemClock.h"
13 #include "threads/Timer.h"
14 #include "windowing/WinSystem.h"
16 #include <memory>
17 #include <optional>
18 #include <string>
19 #include <vector>
21 typedef struct _CGLContextObject* CGLContextObj;
22 typedef struct CGRect NSRect;
23 class IDispResource;
24 class CWinEventsOSX;
25 #ifdef __OBJC__
26 @class NSWindowController;
27 @class NSWindow;
28 @class OSXGLView;
29 @class NSEvent;
30 #else
31 struct NSWindow;
32 struct OSXGLView;
33 struct NSEvent;
34 struct NSWindowController;
36 #endif
38 class CWinSystemOSX : public CWinSystemBase, public ITimerCallback
40 public:
41 CWinSystemOSX();
42 ~CWinSystemOSX() override;
44 struct ScreenResolution
46 bool interlaced{false};
47 size_t resWidth{0};
48 size_t resHeight{0};
49 size_t pixelWidth{0};
50 size_t pixelHeight{0};
51 double refreshrate{0.0};
54 // ITimerCallback interface
55 void OnTimeout() override;
57 // CWinSystemBase
58 bool InitWindowSystem() override;
59 bool DestroyWindowSystem() override;
60 bool CreateNewWindow(const std::string& name, bool fullScreen, RESOLUTION_INFO& res) override;
61 bool DestroyWindow() override;
62 bool ResizeWindow(int newWidth, int newHeight, int newLeft, int newTop) override;
63 bool SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool blankOtherDisplays) override;
64 void UpdateResolutions() override;
65 bool Minimize() override;
66 bool Restore() override;
67 bool Hide() override;
68 bool HasCursor() override;
69 bool Show(bool raise = true) override;
70 unsigned int GetScreenId(const std::string& screen) override;
71 void MoveToScreen(unsigned int screenIdx) override;
72 void OnMove(int x, int y) override;
73 void OnChangeScreen(unsigned int screenIdx) override;
74 bool HasValidResolution() const;
76 std::string GetClipboardText() override;
78 void Register(IDispResource* resource) override;
79 void Unregister(IDispResource* resource) override;
81 std::unique_ptr<CVideoSync> GetVideoSync(CVideoReferenceClock* clock) override;
83 void WindowChangedScreen();
85 void AnnounceOnLostDevice();
86 void AnnounceOnResetDevice();
87 void HandleOnResetDevice();
88 void StartLostDeviceTimer();
89 void StopLostDeviceTimer();
91 int CheckDisplayChanging(uint32_t flags);
92 void SetFullscreenWillToggle(bool toggle) { m_fullscreenWillToggle = toggle; }
93 bool GetFullscreenWillToggle() { return m_fullscreenWillToggle; }
94 void SignalFullScreenStateChanged(bool fullscreenState);
96 CGLContextObj GetCGLContextObj();
98 std::vector<std::string> GetConnectedOutputs() override;
100 // winevents override
101 bool MessagePump() override;
103 NSRect GetWindowDimensions();
104 void enableInputEvents();
105 void disableInputEvents();
107 void signalMouseEntered();
108 void signalMouseExited();
109 void SendInputEvent(NSEvent* nsEvent);
111 protected:
112 std::unique_ptr<KODI::WINDOWING::IOSScreenSaver> GetOSScreenSaverImpl() override;
114 ScreenResolution GetScreenResolution(unsigned long screenIdx);
115 void EnableVSync(bool enable);
116 bool SwitchToVideoMode(RESOLUTION_INFO& res);
117 void FillInVideoModes();
118 bool FlushBuffer();
120 bool DestroyWindowInternal();
122 std::unique_ptr<CWinEventsOSX> m_winEvents;
124 std::string m_name;
125 NSWindow* m_appWindow;
126 OSXGLView* m_glView;
127 unsigned long m_lastDisplayNr;
128 double m_refreshRate;
130 CCriticalSection m_resourceSection;
131 std::vector<IDispResource*> m_resources;
132 CTimer m_lostDeviceTimer;
133 bool m_delayDispReset;
134 XbmcThreads::EndTime<> m_dispResetTimer;
135 bool m_fullscreenWillToggle;
136 bool m_hasCursor{false};
137 //! Set while moving the fullscreen window to another screen. Stores the target screen id.
138 std::optional<unsigned long> m_fullScreenMovingToScreen;
139 CCriticalSection m_critSection;
141 private:
142 NSWindowController* m_appWindowController;