OpenTTD Source 20260129-master-g2bb01bd0e4
VideoDriver_Cocoa Class Referenceabstract
Inheritance diagram for VideoDriver_Cocoa:
VideoDriver Driver VideoDriver_CocoaOpenGL VideoDriver_CocoaQuartz

Public Member Functions

 VideoDriver_Cocoa (bool uses_hardware_acceleration=false)
 
void Stop () override
 Stop Cocoa video driver.
 
void MainLoop () override
 Start the main programme loop when using a cocoa video driver.
 
void MakeDirty (int left, int top, int width, int height) override
 Set dirty a rectangle managed by a cocoa video subdriver.
 
bool AfterBlitterChange () override
 Callback invoked after the blitter was changed.
 
bool ChangeResolution (int w, int h) override
 Change the resolution when using a cocoa video driver.
 
bool ToggleFullscreen (bool fullscreen) override
 Toggle between windowed and full screen mode for cocoa display driver.
 
void ClearSystemSprites () override
 Clear all cached sprites.
 
void PopulateSystemSprites () override
 Populate all sprites in cache.
 
void EditBoxLostFocus () override
 An edit box lost the input focus.
 
std::vector< int > GetListOfMonitorRefreshRates () override
 Get refresh rates of all connected monitors.
 
void MainLoopReal ()
 Main game loop.
 
virtual void AllocateBackingStore (bool force=false)=0
 
- Public Member Functions inherited from VideoDriver
 VideoDriver (bool uses_hardware_acceleration=false)
 
virtual void ToggleVsync (bool vsync)
 Change the vsync setting.
 
virtual bool ClaimMousePointer ()
 
virtual bool UseSystemCursor ()
 Get whether the mouse cursor is drawn by the video driver.
 
virtual bool HasGUI () const
 Whether the driver has a graphical user interface with the end user.
 
virtual bool HasEfficient8Bpp () const
 Has this video driver an efficient code path for palette animated 8-bpp sprites?
 
virtual bool HasAnimBuffer ()
 Does this video driver support a separate animation buffer in addition to the colour buffer?
 
virtual uint8_t * GetAnimBuffer ()
 Get a pointer to the animation buffer of the video back-end.
 
virtual void EditBoxGainedFocus ()
 An edit box gained the input focus.
 
virtual std::string_view GetInfoString () const
 
void QueueOnMainThread (std::function< void()> &&func)
 Queue a function to be called on the main thread with game state lock held and video buffer locked.
 
void GameLoopPause ()
 Pause the game-loop for a bit, releasing the game-state lock.
 
virtual void SetScreensaverInhibited (bool inhibited)
 Prevents the system from going to sleep.
 
- Public Member Functions inherited from Driver
virtual std::optional< std::string_view > Start (const StringList &parm)=0
 Start this driver.
 
virtual std::string_view GetName () const =0
 Get the name of this driver.
 

Data Fields

bool setup
 Window is currently being created.
 
OTTD_CocoaWindowwindow
 Pointer to window object.
 
OTTD_CocoaViewcocoaview
 Pointer to view object.
 
CGColorSpaceRef colour_space
 Window colour space.
 
OTTD_CocoaWindowDelegatedelegate
 Window delegate object.
 

Protected Member Functions

Dimension GetScreenSize () const override
 Get the resolution of the main screen.
 
void InputLoop () override
 Handle input logic, is CTRL pressed, should we fast-forward, etc.
 
bool LockVideoBuffer () override
 Lock video buffer for drawing if it isn't already mapped.
 
void UnlockVideoBuffer () override
 Unlock video buffer.
 
bool PollEvent () override
 Poll and handle a single event from the OS.
 
void GameSizeChanged ()
 Handle a change of the display area.
 
std::optional< std::string_view > Initialize ()
 Common driver initialization.
 
void UpdateVideoModes ()
 Update the video mode.
 
bool MakeWindow (int width, int height)
 Build window and view with a given size.
 
virtual NSView * AllocateDrawView ()=0
 
virtual void * GetVideoPointer ()=0
 Get a pointer to the video buffer.
 
virtual void ReleaseVideoPointer ()
 Hand video buffer back to the drawing backend.
 
- Protected Member Functions inherited from VideoDriver
void UpdateAutoResolution ()
 Apply resolution auto-detection and clamp to sensible defaults.
 
virtual void Paint ()
 Paint the window.
 
virtual void CheckPaletteAnim ()
 Process any pending palette animation.
 
void StartGameThread ()
 Start the loop for game-tick.
 
void StopGameThread ()
 Stop the loop for the game-tick.
 
void Tick ()
 Give the video-driver a tick.
 
void SleepTillNextTick ()
 Sleep till the next tick is about to happen.
 
std::chrono::steady_clock::duration GetGameInterval ()
 
std::chrono::steady_clock::duration GetDrawInterval ()
 
void DrainCommandQueue ()
 Execute all queued commands.
 

Protected Attributes

Rect dirty_rect
 Region of the screen that needs redrawing.
 
bool buffer_locked
 Video buffer was locked by the main thread.
 
- Protected Attributes inherited from VideoDriver
const uint ALLOWED_DRIFT = 5
 How many times videodriver can miss deadlines without it being overly compensated.
 
std::chrono::steady_clock::time_point next_game_tick
 
std::chrono::steady_clock::time_point next_draw_tick
 
bool fast_forward_key_pressed
 The fast-forward key is being pressed.
 
bool fast_forward_via_key
 The fast-forward was enabled by key press.
 
bool is_game_threaded
 
std::thread game_thread
 
std::mutex game_state_mutex
 
std::mutex game_thread_wait_mutex
 
bool uses_hardware_acceleration
 

Private Member Functions

bool IsFullscreen ()
 Are we in fullscreen mode?
 

Private Attributes

Dimension orig_res
 Saved window size for non-fullscreen mode.
 
bool refresh_sys_sprites
 System sprites need refreshing.
 

Additional Inherited Members

- Public Types inherited from Driver
enum  Type : uint8_t {
  DT_BEGIN = 0 , DT_MUSIC = 0 , DT_SOUND , DT_VIDEO ,
  DT_END
}
 The type of driver. More...
 
- Static Public Member Functions inherited from VideoDriver
static VideoDriverGetInstance ()
 Get the currently active instance of the video driver.
 
static std::string GetCaption ()
 Get the caption to use for the game's title bar.
 
- Static Protected Member Functions inherited from VideoDriver
static void GameThreadThunk (VideoDriver *drv)
 

Detailed Description

Definition at line 23 of file cocoa_v.h.

Constructor & Destructor Documentation

◆ VideoDriver_Cocoa()

VideoDriver_Cocoa::VideoDriver_Cocoa ( bool  uses_hardware_acceleration = false)

Definition at line 66 of file cocoa_v.mm.

Member Function Documentation

◆ AfterBlitterChange()

bool VideoDriver_Cocoa::AfterBlitterChange ( )
overridevirtual

Callback invoked after the blitter was changed.

Returns
True if no error.

Reimplemented from VideoDriver.

Definition at line 214 of file cocoa_v.mm.

◆ AllocateBackingStore()

virtual void VideoDriver_Cocoa::AllocateBackingStore ( bool  force = false)
pure virtual

◆ ChangeResolution()

bool VideoDriver_Cocoa::ChangeResolution ( int  w,
int  h 
)
overridevirtual

Change the resolution when using a cocoa video driver.

Parameters
wNew window width.
hNew window height.
Returns
Whether the video driver was successfully updated.

Implements VideoDriver.

Definition at line 150 of file cocoa_v.mm.

References Clamp(), cocoaview, and window.

◆ ClearSystemSprites()

void VideoDriver_Cocoa::ClearSystemSprites ( )
overridevirtual

Clear all cached sprites.

Reimplemented from VideoDriver.

Reimplemented in VideoDriver_CocoaOpenGL.

Definition at line 197 of file cocoa_v.mm.

References refresh_sys_sprites.

Referenced by VideoDriver_CocoaOpenGL::ClearSystemSprites().

◆ EditBoxLostFocus()

void VideoDriver_Cocoa::EditBoxLostFocus ( )
overridevirtual

An edit box lost the input focus.

Abort character compositing if necessary.

Reimplemented from VideoDriver.

Definition at line 223 of file cocoa_v.mm.

References cocoaview, and HandleTextInput().

◆ GameSizeChanged()

void VideoDriver_Cocoa::GameSizeChanged ( )
protected

◆ GetListOfMonitorRefreshRates()

std::vector< int > VideoDriver_Cocoa::GetListOfMonitorRefreshRates ( )
overridevirtual

Get refresh rates of all connected monitors.

Returns
Refresh rates of all connected monitors.

Reimplemented from VideoDriver.

Definition at line 234 of file cocoa_v.mm.

◆ GetScreenSize()

Dimension VideoDriver_Cocoa::GetScreenSize ( ) const
overrideprotectedvirtual

Get the resolution of the main screen.

Returns
The resolution of the main screen.

Reimplemented from VideoDriver.

Definition at line 257 of file cocoa_v.mm.

◆ GetVideoPointer()

virtual void * VideoDriver_Cocoa::GetVideoPointer ( )
protectedpure virtual

Get a pointer to the video buffer.

Implemented in VideoDriver_CocoaOpenGL, and VideoDriver_CocoaQuartz.

Referenced by LockVideoBuffer().

◆ Initialize()

std::optional< std::string_view > VideoDriver_Cocoa::Initialize ( )
protected

Common driver initialization.

Returns
Error message if one has occurred, std::nullopt otherwise.

Definition at line 104 of file cocoa_v.mm.

References _cocoa_video_started, _cur_resolution, CocoaSetupApplication(), orig_res, and VideoDriver::UpdateAutoResolution().

Referenced by VideoDriver_CocoaQuartz::Start().

◆ InputLoop()

void VideoDriver_Cocoa::InputLoop ( )
overrideprotectedvirtual

Handle input logic, is CTRL pressed, should we fast-forward, etc.

Reimplemented from VideoDriver.

Definition at line 439 of file cocoa_v.mm.

References _ctrl_pressed, _settings_client, _shift_pressed, _tab_is_down, VideoDriver::fast_forward_key_pressed, ClientSettings::gui, HandleCtrlChanged(), and GUISettings::right_mouse_btn_emulation.

◆ IsFullscreen()

bool VideoDriver_Cocoa::IsFullscreen ( )
private

Are we in fullscreen mode?

Returns
whether fullscreen mode is currently used

Definition at line 294 of file cocoa_v.mm.

References window.

Referenced by GameSizeChanged(), MainLoopReal(), ToggleFullscreen(), and UpdateVideoModes().

◆ LockVideoBuffer()

bool VideoDriver_Cocoa::LockVideoBuffer ( )
overrideprotectedvirtual

Lock video buffer for drawing if it isn't already mapped.

Returns
True on success and false otherwise.

Reimplemented from VideoDriver.

Definition at line 267 of file cocoa_v.mm.

References buffer_locked, and GetVideoPointer().

◆ MainLoop()

void VideoDriver_Cocoa::MainLoop ( )
overridevirtual

Start the main programme loop when using a cocoa video driver.

Implements VideoDriver.

Definition at line 134 of file cocoa_v.mm.

References OTTDMainLaunchGameEngine.

◆ MainLoopReal()

void VideoDriver_Cocoa::MainLoopReal ( )

◆ MakeDirty()

void VideoDriver_Cocoa::MakeDirty ( int  left,
int  top,
int  width,
int  height 
)
overridevirtual

Set dirty a rectangle managed by a cocoa video subdriver.

Parameters
leftLeft x cooordinate of the dirty rectangle.
topUpper y coordinate of the dirty rectangle.
widthWidth of the dirty rectangle.
heightHeight of the dirty rectangle.

Implements VideoDriver.

Definition at line 125 of file cocoa_v.mm.

References BoundingRect(), and dirty_rect.

Referenced by VideoDriver_CocoaQuartz::AllocateBackingStore(), and VideoDriver_CocoaQuartz::UpdatePalette().

◆ MakeWindow()

bool VideoDriver_Cocoa::MakeWindow ( int  width,
int  height 
)
protected

Build window and view with a given size.

Parameters
widthWindow width.
heightWindow height.
Returns
True on success and false otherwise.

Definition at line 347 of file cocoa_v.mm.

References cocoaview, colour_space, Debug, delegate, setup, and window.

Referenced by VideoDriver_CocoaQuartz::Start().

◆ PollEvent()

bool VideoDriver_Cocoa::PollEvent ( )
overrideprotectedvirtual

Poll and handle a single event from the OS.

Returns
True if there was an event to handle.

Reimplemented from VideoDriver.

Definition at line 427 of file cocoa_v.mm.

◆ PopulateSystemSprites()

void VideoDriver_Cocoa::PopulateSystemSprites ( )
overridevirtual

Populate all sprites in cache.

Reimplemented from VideoDriver.

Reimplemented in VideoDriver_CocoaOpenGL.

Definition at line 202 of file cocoa_v.mm.

References refresh_sys_sprites, and window.

Referenced by VideoDriver_CocoaOpenGL::PopulateSystemSprites().

◆ ReleaseVideoPointer()

virtual void VideoDriver_Cocoa::ReleaseVideoPointer ( )
inlineprotectedvirtual

Hand video buffer back to the drawing backend.

Reimplemented in VideoDriver_CocoaOpenGL.

Definition at line 85 of file cocoa_v.h.

Referenced by UnlockVideoBuffer().

◆ Stop()

void VideoDriver_Cocoa::Stop ( )
overridevirtual

Stop Cocoa video driver.

Implements Driver.

Reimplemented in VideoDriver_CocoaOpenGL, and VideoDriver_CocoaQuartz.

Definition at line 84 of file cocoa_v.mm.

References _cocoa_video_started, CocoaExitApplication(), cocoaview, colour_space, delegate, and window.

Referenced by VideoDriver_CocoaOpenGL::Stop(), and VideoDriver_CocoaQuartz::Stop().

◆ ToggleFullscreen()

bool VideoDriver_Cocoa::ToggleFullscreen ( bool  full_screen)
overridevirtual

Toggle between windowed and full screen mode for cocoa display driver.

Parameters
full_screenWhether to switch to full screen or not.
Returns
Whether the mode switch was successful.

Implements VideoDriver.

Definition at line 179 of file cocoa_v.mm.

References InvalidateWindowClassesData(), IsFullscreen(), UpdateVideoModes(), WC_GAME_OPTIONS, and window.

Referenced by VideoDriver_CocoaQuartz::Start().

◆ UnlockVideoBuffer()

void VideoDriver_Cocoa::UnlockVideoBuffer ( )
overrideprotectedvirtual

Unlock video buffer.

Reimplemented from VideoDriver.

Definition at line 279 of file cocoa_v.mm.

References buffer_locked, and ReleaseVideoPointer().

◆ UpdateVideoModes()

void VideoDriver_Cocoa::UpdateVideoModes ( )
protected

Update the video mode.

Definition at line 322 of file cocoa_v.mm.

References _default_resolutions, _resolutions, IsFullscreen(), and window.

Referenced by VideoDriver_CocoaQuartz::Start(), and ToggleFullscreen().

Field Documentation

◆ buffer_locked

bool VideoDriver_Cocoa::buffer_locked
protected

Video buffer was locked by the main thread.

Definition at line 64 of file cocoa_v.h.

Referenced by LockVideoBuffer(), and UnlockVideoBuffer().

◆ cocoaview

OTTD_CocoaView* VideoDriver_Cocoa::cocoaview

◆ colour_space

CGColorSpaceRef VideoDriver_Cocoa::colour_space

Window colour space.

Definition at line 33 of file cocoa_v.h.

Referenced by MakeWindow(), and Stop().

◆ delegate

OTTD_CocoaWindowDelegate* VideoDriver_Cocoa::delegate

Window delegate object.

Definition at line 35 of file cocoa_v.h.

Referenced by MakeWindow(), and Stop().

◆ dirty_rect

Rect VideoDriver_Cocoa::dirty_rect
protected

Region of the screen that needs redrawing.

Definition at line 63 of file cocoa_v.h.

Referenced by MakeDirty(), and VideoDriver_CocoaQuartz::Paint().

◆ orig_res

Dimension VideoDriver_Cocoa::orig_res
private

Saved window size for non-fullscreen mode.

Definition at line 25 of file cocoa_v.h.

Referenced by GameSizeChanged(), Initialize(), and MainLoopReal().

◆ refresh_sys_sprites

bool VideoDriver_Cocoa::refresh_sys_sprites
private

System sprites need refreshing.

Definition at line 26 of file cocoa_v.h.

Referenced by ClearSystemSprites(), and PopulateSystemSprites().

◆ setup

bool VideoDriver_Cocoa::setup

Window is currently being created.

Definition at line 29 of file cocoa_v.h.

Referenced by VideoDriver_CocoaQuartz::AllocateBackingStore(), and MakeWindow().

◆ window


The documentation for this class was generated from the following files: