File diff r25018:67412c730caa → r25019:7bd7e70574c6
src/video/cocoa/cocoa_v.h
Show inline comments
 
@@ -2,96 +2,98 @@
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file cocoa_v.h The Cocoa video driver. */
 

	
 
#ifndef VIDEO_COCOA_H
 
#define VIDEO_COCOA_H
 

	
 
#include "../video_driver.hpp"
 
#include "../../core/geometry_type.hpp"
 

	
 

	
 
extern bool _cocoa_video_started;
 

	
 
@class OTTD_CocoaWindowDelegate;
 
@class OTTD_CocoaWindow;
 
@class OTTD_CocoaView;
 

	
 
class VideoDriver_Cocoa : public VideoDriver {
 
private:
 
	Dimension orig_res;   ///< Saved window size for non-fullscreen mode.
 

	
 
public:
 
	bool setup; ///< Window is currently being created.
 

	
 
	OTTD_CocoaWindow *window;    ///< Pointer to window object
 
	OTTD_CocoaView *cocoaview;   ///< Pointer to view object
 
	CGColorSpaceRef color_space; ///< Window color space
 

	
 
	OTTD_CocoaWindowDelegate *delegate; //!< Window delegate object
 

	
 
public:
 
	VideoDriver_Cocoa();
 

	
 
	void Stop() override;
 
	void MainLoop() override;
 

	
 
	void MakeDirty(int left, int top, int width, int height) override;
 
	bool AfterBlitterChange() override;
 

	
 
	bool ChangeResolution(int w, int h) override;
 
	bool ToggleFullscreen(bool fullscreen) override;
 

	
 
	void EditBoxLostFocus() override;
 

	
 
	std::vector<int> GetListOfMonitorRefreshRates() override;
 

	
 
	/* --- The following methods should be private, but can't be due to Obj-C limitations. --- */
 

	
 
	void MainLoopReal();
 

	
 
	virtual void AllocateBackingStore(bool force = false) = 0;
 

	
 
protected:
 
	Rect dirty_rect;    ///< Region of the screen that needs redrawing.
 
	bool buffer_locked; ///< Video buffer was locked by the main thread.
 

	
 
	Dimension GetScreenSize() const override;
 
	float GetDPIScale() override;
 
	void InputLoop() override;
 
	bool LockVideoBuffer() override;
 
	void UnlockVideoBuffer() override;
 
	bool PollEvent() override;
 

	
 
	void GameSizeChanged();
 

	
 
	const char *Initialize();
 

	
 
	void UpdateVideoModes();
 

	
 
	bool MakeWindow(int width, int height);
 

	
 
	virtual NSView* AllocateDrawView() = 0;
 

	
 
	/** Get a pointer to the video buffer. */
 
	virtual void *GetVideoPointer() = 0;
 
	/** Hand video buffer back to the drawing backend. */
 
	virtual void ReleaseVideoPointer() {}
 

	
 
private:
 
	bool IsFullscreen();
 
};
 

	
 
class VideoDriver_CocoaQuartz : public VideoDriver_Cocoa {
 
private:
 
	int buffer_depth;     ///< Colour depth of used frame buffer
 
	void *pixel_buffer;   ///< used for direct pixel access
 
	void *window_buffer;  ///< Colour translation from palette to screen
 

	
 
	int window_width;     ///< Current window width in pixel
 
	int window_height;    ///< Current window height in pixel
 
	int window_pitch;
 

	
 
	uint32 palette[256];  ///< Colour Palette