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.
11 #include "threads/CriticalSection.h"
12 #include "threads/SystemClock.h"
13 #include "threads/Timer.h"
14 #include "windowing/WinSystem.h"
21 typedef struct _CGLContextObject
* CGLContextObj
;
22 typedef struct CGRect NSRect
;
26 @
class NSWindowController
;
34 struct NSWindowController
;
38 class CWinSystemOSX
: public CWinSystemBase
, public ITimerCallback
42 ~CWinSystemOSX() override
;
44 struct ScreenResolution
46 bool interlaced
{false};
50 size_t pixelHeight
{0};
51 double refreshrate
{0.0};
54 // ITimerCallback interface
55 void OnTimeout() override
;
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
;
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
);
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();
120 bool DestroyWindowInternal();
122 std::unique_ptr
<CWinEventsOSX
> m_winEvents
;
125 NSWindow
* m_appWindow
;
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
;
142 NSWindowController
* m_appWindowController
;