src/video/cocoa_v.m
author bjarni
Fri, 05 Jan 2007 19:50:44 +0000
changeset 5543 a8965178408f
parent 5475 2e6990a8c7c4
child 5581 cf2b8ba6556b
permissions -rw-r--r--
(svn r7886) -Fix: [OSX] control+enter will no longer toggle fullscreen as it collided with other hotkeys (pv2b)
People should use command+enter as it was originally intended (this key combo also worked before this commit)
2743
a6c91eb763e8 (svn r3288) Set svn properties on cocoa related files, and add Id tag.
peter1138
parents: 2741
diff changeset
     1
/* $Id$ */
a6c91eb763e8 (svn r3288) Set svn properties on cocoa related files, and add Id tag.
peter1138
parents: 2741
diff changeset
     2
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
     3
/******************************************************************************
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
     4
 *                             Cocoa video driver                             *
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
     5
 * Known things left to do:                                                   *
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
     6
 *  Nothing at the moment.                                                    *
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
     7
 ******************************************************************************/
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
     8
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
     9
#ifdef WITH_COCOA
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    10
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    11
#import <Cocoa/Cocoa.h>
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    12
#import <sys/time.h> /* gettimeofday */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    13
#import <sys/param.h> /* for MAXPATHLEN */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    14
#import <unistd.h>
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    15
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    16
/* Portions of CPS.h */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
    17
typedef struct CPSProcessSerNum {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
    18
	UInt32 lo;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
    19
	UInt32 hi;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    20
} CPSProcessSerNum;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    21
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
    22
extern OSErr CPSGetCurrentProcess(CPSProcessSerNum* psn);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
    23
extern OSErr CPSEnableForegroundOperation(CPSProcessSerNum* psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
    24
extern OSErr CPSSetFrontProcess(CPSProcessSerNum* psn);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    25
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    26
/* From Menus.h (according to Xcode Developer Documentation) */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    27
extern void ShowMenuBar(void);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    28
extern void HideMenuBar(void);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    29
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    30
/* Disables a warning. This is needed since the method exists but has been dropped from the header, supposedly as of 10.4. */
2741
65d4de069014 (svn r3286) -Fix: [OSX] 10.2 works again and universal binaries got 10.2 as target by default
bjarni
parents: 2736
diff changeset
    31
#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    32
@interface NSApplication(NSAppleMenu)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    33
- (void)setAppleMenu:(NSMenu *)menu;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    34
@end
2741
65d4de069014 (svn r3286) -Fix: [OSX] 10.2 works again and universal binaries got 10.2 as target by default
bjarni
parents: 2736
diff changeset
    35
#endif
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    36
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    37
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    38
/* Defined in ppc/param.h or i386/param.h included from sys/param.h */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    39
#undef ALIGN
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    40
/* Defined in stdbool.h */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    41
#ifndef __cplusplus
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    42
# ifndef __BEOS__
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    43
#  undef bool
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    44
#  undef false
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    45
#  undef true
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    46
# endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    47
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    48
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    49
#include "../stdafx.h"
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    50
#include "../openttd.h"
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    51
#include "../debug.h"
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    52
#include "../functions.h"
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    53
#include "../gfx.h"
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    54
#include "../macros.h"
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    55
#include "../sdl.h"
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    56
#include "../window.h"
5469
7edfc643abbc (svn r7751) -Codechange: move network_* to a new network map. Furthermore move the low level network functions to network/core, so they can be reused by the masterserver and website-serverlist-updater.
rubidium
parents: 5383
diff changeset
    57
#include "../network/network.h"
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    58
#include "../variables.h"
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    59
#include "../os/macosx/splash.h"
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    60
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    61
#include "cocoa_v.h"
3035
fbc01469d2ba (svn r3615) Remove the Quartz key codes from the public cocoa video driver interface
tron
parents: 3016
diff changeset
    62
#include "cocoa_keys.h"
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    63
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    64
#undef Point
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    65
#undef Rect
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    66
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    67
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    68
/* Subclass of NSWindow to fix genie effect and support resize events  */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    69
@interface OTTD_QuartzWindow : NSWindow
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    70
- (void)miniaturize:(id)sender;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    71
- (void)display;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    72
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    73
- (void)appDidHide:(NSNotification*)note;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    74
- (void)appWillUnhide:(NSNotification*)note;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    75
- (void)appDidUnhide:(NSNotification*)note;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    76
- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    77
@end
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    78
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    79
/* Delegate for our NSWindow to send ask for quit on close */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    80
@interface OTTD_QuartzWindowDelegate : NSObject
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    81
- (BOOL)windowShouldClose:(id)sender;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    82
@end
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    83
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    84
@interface OTTDMain : NSObject
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    85
@end
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    86
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    87
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
    88
/* Structure for rez switch gamma fades
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
    89
 * We can hide the monitor flicker by setting the gamma tables to 0
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
    90
 */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    91
#define QZ_GAMMA_TABLE_SIZE 256
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    92
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    93
typedef struct {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    94
	CGGammaValue red[QZ_GAMMA_TABLE_SIZE];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    95
	CGGammaValue green[QZ_GAMMA_TABLE_SIZE];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    96
	CGGammaValue blue[QZ_GAMMA_TABLE_SIZE];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    97
} OTTD_QuartzGammaTable;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
    98
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
    99
/* Add methods to get at private members of NSScreen.
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   100
 * Since there is a bug in Apple's screen switching code that does not update
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   101
 * this variable when switching to fullscreen, we'll set it manually (but only
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   102
 * for the main screen).
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   103
 */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   104
@interface NSScreen (NSScreenAccess)
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   105
	- (void) setFrame:(NSRect)frame;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   106
@end
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   107
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   108
@implementation NSScreen (NSScreenAccess)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   109
- (void) setFrame:(NSRect)frame;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   110
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   111
	_frame = frame;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   112
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   113
@end
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   114
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   115
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   116
static void QZ_Draw(void);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   117
static void QZ_UnsetVideoMode(void);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   118
static void QZ_UpdatePalette(uint start, uint count);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   119
static void QZ_WarpCursor(int x, int y);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   120
static void QZ_ShowMouse(void);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   121
static void QZ_HideMouse(void);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   122
static void CocoaVideoFullScreen(bool full_screen);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   123
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   124
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   125
static NSAutoreleasePool *_ottd_autorelease_pool;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   126
static OTTDMain *_ottd_main;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   127
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   128
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   129
static struct CocoaVideoData {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   130
	bool isset;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   131
	bool issetting;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   132
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   133
	CGDirectDisplayID  display_id;         /* 0 == main display (only support single display) */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   134
	CFDictionaryRef    mode;               /* current mode of the display */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   135
	CFDictionaryRef    save_mode;          /* original mode of the display */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   136
	CFArrayRef         mode_list;          /* list of available fullscreen modes */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   137
	CGDirectPaletteRef palette;            /* palette of an 8-bit display */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   138
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   139
	uint32 device_width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   140
	uint32 device_height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   141
	uint32 device_bpp;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   142
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   143
	void *realpixels;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   144
	uint8 *pixels;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   145
	uint32 width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   146
	uint32 height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   147
	uint32 pitch;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   148
	bool fullscreen;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   149
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   150
	unsigned int current_mods;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   151
	bool tab_is_down;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   152
	bool emulating_right_button;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   153
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   154
	bool cursor_visible;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   155
	bool active;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   156
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   157
#ifdef _DEBUG
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   158
	uint32 tEvent;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   159
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   160
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   161
	OTTD_QuartzWindow *window;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   162
	NSQuickDrawView *qdview;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   163
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   164
#define MAX_DIRTY_RECTS 100
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   165
	OTTDRect dirty_rects[MAX_DIRTY_RECTS];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   166
	int num_dirty_rects;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   167
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   168
	uint16 palette16[256];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   169
	uint32 palette32[256];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   170
} _cocoa_video_data;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   171
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
   172
static bool _cocoa_video_started = false;
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
   173
static bool _cocoa_video_dialog = false;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   174
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   175
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   176
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   177
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   178
/******************************************************************************
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   179
 *                             Game loop and accessories                      *
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   180
 ******************************************************************************/
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   181
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   182
static uint32 GetTick(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   183
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   184
	struct timeval tim;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   185
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   186
	gettimeofday(&tim, NULL);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   187
	return tim.tv_usec / 1000 + tim.tv_sec * 1000;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   188
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   189
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   190
static void QZ_CheckPaletteAnim(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   191
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   192
	if (_pal_last_dirty != -1) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   193
		QZ_UpdatePalette(_pal_first_dirty, _pal_last_dirty - _pal_first_dirty + 1);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   194
		_pal_last_dirty = -1;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   195
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   196
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   197
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   198
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   199
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   200
typedef struct VkMapping {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   201
	unsigned short vk_from;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   202
	byte map_to;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   203
} VkMapping;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   204
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   205
#define AS(x, z) {x, z}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   206
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   207
static const VkMapping _vk_mapping[] = {
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   208
	AS(QZ_BACKQUOTE,  WKC_BACKQUOTE), // key left of '1'
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   209
	AS(QZ_BACKQUOTE2, WKC_BACKQUOTE), // some keyboards have it on another scancode
2845
e520ad0a77b7 (svn r3393) -Fix: [OSX] some keyboards had a different scancode for opening the console (egladil)
bjarni
parents: 2827
diff changeset
   210
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   211
	// Pageup stuff + up/down
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   212
	//AM(SDLK_PAGEUP, SDLK_PAGEDOWN, WKC_PAGEUP, WKC_PAGEDOWN),  <==== Does this include HOME/END?
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   213
	AS(QZ_PAGEUP,   WKC_PAGEUP),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   214
	AS(QZ_PAGEDOWN, WKC_PAGEDOWN),
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   215
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   216
	AS(QZ_UP,    WKC_UP),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   217
	AS(QZ_DOWN,  WKC_DOWN),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   218
	AS(QZ_LEFT,  WKC_LEFT),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   219
	AS(QZ_RIGHT, WKC_RIGHT),
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   220
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   221
	AS(QZ_HOME, WKC_HOME),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   222
	AS(QZ_END,  WKC_END),
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   223
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   224
	AS(QZ_INSERT, WKC_INSERT),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   225
	AS(QZ_DELETE, WKC_DELETE),
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   226
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   227
	// Letters. QZ_[a-z] is not in numerical order so we can't use AM(...)
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   228
	AS(QZ_a, 'A'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   229
	AS(QZ_b, 'B'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   230
	AS(QZ_c, 'C'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   231
	AS(QZ_d, 'D'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   232
	AS(QZ_e, 'E'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   233
	AS(QZ_f, 'F'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   234
	AS(QZ_g, 'G'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   235
	AS(QZ_h, 'H'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   236
	AS(QZ_i, 'I'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   237
	AS(QZ_j, 'J'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   238
	AS(QZ_k, 'K'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   239
	AS(QZ_l, 'L'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   240
	AS(QZ_m, 'M'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   241
	AS(QZ_n, 'N'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   242
	AS(QZ_o, 'O'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   243
	AS(QZ_p, 'P'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   244
	AS(QZ_q, 'Q'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   245
	AS(QZ_r, 'R'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   246
	AS(QZ_s, 'S'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   247
	AS(QZ_t, 'T'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   248
	AS(QZ_u, 'U'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   249
	AS(QZ_v, 'V'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   250
	AS(QZ_w, 'W'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   251
	AS(QZ_x, 'X'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   252
	AS(QZ_y, 'Y'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   253
	AS(QZ_z, 'Z'),
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   254
	// Same thing for digits
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   255
	AS(QZ_0, '0'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   256
	AS(QZ_1, '1'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   257
	AS(QZ_2, '2'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   258
	AS(QZ_3, '3'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   259
	AS(QZ_4, '4'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   260
	AS(QZ_5, '5'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   261
	AS(QZ_6, '6'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   262
	AS(QZ_7, '7'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   263
	AS(QZ_8, '8'),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   264
	AS(QZ_9, '9'),
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   265
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   266
	AS(QZ_ESCAPE,    WKC_ESC),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   267
	AS(QZ_PAUSE,     WKC_PAUSE),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   268
	AS(QZ_BACKSPACE, WKC_BACKSPACE),
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   269
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   270
	AS(QZ_SPACE,  WKC_SPACE),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   271
	AS(QZ_RETURN, WKC_RETURN),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   272
	AS(QZ_TAB,    WKC_TAB),
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   273
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   274
	// Function keys
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   275
	AS(QZ_F1,  WKC_F1),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   276
	AS(QZ_F2,  WKC_F2),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   277
	AS(QZ_F3,  WKC_F3),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   278
	AS(QZ_F4,  WKC_F4),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   279
	AS(QZ_F5,  WKC_F5),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   280
	AS(QZ_F6,  WKC_F6),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   281
	AS(QZ_F7,  WKC_F7),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   282
	AS(QZ_F8,  WKC_F8),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   283
	AS(QZ_F9,  WKC_F9),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   284
	AS(QZ_F10, WKC_F10),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   285
	AS(QZ_F11, WKC_F11),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   286
	AS(QZ_F12, WKC_F12),
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   287
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   288
	// Numeric part.
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   289
	AS(QZ_KP0,         WKC_NUM_0),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   290
	AS(QZ_KP1,         WKC_NUM_1),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   291
	AS(QZ_KP2,         WKC_NUM_2),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   292
	AS(QZ_KP3,         WKC_NUM_3),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   293
	AS(QZ_KP4,         WKC_NUM_4),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   294
	AS(QZ_KP5,         WKC_NUM_5),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   295
	AS(QZ_KP6,         WKC_NUM_6),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   296
	AS(QZ_KP7,         WKC_NUM_7),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   297
	AS(QZ_KP8,         WKC_NUM_8),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   298
	AS(QZ_KP9,         WKC_NUM_9),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   299
	AS(QZ_KP_DIVIDE,   WKC_NUM_DIV),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   300
	AS(QZ_KP_MULTIPLY, WKC_NUM_MUL),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   301
	AS(QZ_KP_MINUS,    WKC_NUM_MINUS),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   302
	AS(QZ_KP_PLUS,     WKC_NUM_PLUS),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   303
	AS(QZ_KP_ENTER,    WKC_NUM_ENTER),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   304
	AS(QZ_KP_PERIOD,   WKC_NUM_DECIMAL)
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   305
};
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   306
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   307
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   308
static uint32 QZ_MapKey(unsigned short sym)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   309
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   310
	const VkMapping *map;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   311
	uint32 key = 0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   312
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   313
	for (map = _vk_mapping; map != endof(_vk_mapping); ++map) {
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   314
		if (sym == map->vk_from) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   315
			key = map->map_to;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   316
			break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   317
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   318
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   319
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   320
	if (_cocoa_video_data.current_mods & NSShiftKeyMask)     key |= WKC_SHIFT;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   321
	if (_cocoa_video_data.current_mods & NSControlKeyMask)   key |= WKC_CTRL;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   322
	if (_cocoa_video_data.current_mods & NSAlternateKeyMask) key |= WKC_ALT;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   323
	if (_cocoa_video_data.current_mods & NSCommandKeyMask)   key |= WKC_META;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   324
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   325
	return key << 16;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   326
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   327
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   328
static void QZ_KeyEvent(unsigned short keycode, unsigned short unicode, BOOL down)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   329
{
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   330
	switch (keycode) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   331
		case QZ_UP:    SB(_dirkeys, 1, 1, down); break;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   332
		case QZ_DOWN:  SB(_dirkeys, 3, 1, down); break;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   333
		case QZ_LEFT:  SB(_dirkeys, 0, 1, down); break;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   334
		case QZ_RIGHT: SB(_dirkeys, 2, 1, down); break;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   335
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   336
		case QZ_TAB: _cocoa_video_data.tab_is_down = down; break;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   337
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   338
		case QZ_RETURN:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   339
		case QZ_f:
5543
a8965178408f (svn r7886) -Fix: [OSX] control+enter will no longer toggle fullscreen as it collided with other hotkeys (pv2b)
bjarni
parents: 5475
diff changeset
   340
			if (down && (_cocoa_video_data.current_mods & NSCommandKeyMask)) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   341
				CocoaVideoFullScreen(!_fullscreen);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   342
			}
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   343
			break;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   344
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   345
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   346
	if (down) {
5086
386ba9fe0621 (svn r7153) -Fix [FS#279]: Some keyboard events possibly lost under high CPU load, handle
Darkvater
parents: 4550
diff changeset
   347
		uint32 pressed_key = QZ_MapKey(keycode) | unicode;
386ba9fe0621 (svn r7153) -Fix [FS#279]: Some keyboard events possibly lost under high CPU load, handle
Darkvater
parents: 4550
diff changeset
   348
		HandleKeypress(pressed_key);
5383
ba6d46dd90c3 (svn r7569) -Fix (r7565): cocoa files were (somehow) forgotten.
rubidium
parents: 5090
diff changeset
   349
		DEBUG(driver, 2, "cocoa_v: QZ_KeyEvent: %x (%x), down, mapping: %x", keycode, unicode, pressed_key);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   350
	} else {
5383
ba6d46dd90c3 (svn r7569) -Fix (r7565): cocoa files were (somehow) forgotten.
rubidium
parents: 5090
diff changeset
   351
		DEBUG(driver, 2, "cocoa_v: QZ_KeyEvent: %x (%x), up", keycode, unicode);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   352
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   353
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   354
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   355
static void QZ_DoUnsidedModifiers(unsigned int newMods)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   356
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   357
	const int mapping[] = { QZ_CAPSLOCK, QZ_LSHIFT, QZ_LCTRL, QZ_LALT, QZ_LMETA };
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   358
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   359
	int i;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   360
	int bit;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   361
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   362
	if (_cocoa_video_data.current_mods == newMods) return;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   363
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   364
	/* Iterate through the bits, testing each against the current modifiers */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   365
	for (i = 0, bit = NSAlphaShiftKeyMask; bit <= NSCommandKeyMask; bit <<= 1, ++i) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   366
		unsigned int currentMask, newMask;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   367
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   368
		currentMask = _cocoa_video_data.current_mods & bit;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   369
		newMask     = newMods & bit;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   370
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   371
		if (currentMask && currentMask != newMask) { /* modifier up event */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   372
			/* If this was Caps Lock, we need some additional voodoo to make SDL happy (is this needed in ottd?) */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   373
			if (bit == NSAlphaShiftKeyMask) QZ_KeyEvent(mapping[i], 0, YES);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   374
			QZ_KeyEvent(mapping[i], 0, NO);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   375
		} else if (newMask && currentMask != newMask) { /* modifier down event */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   376
			QZ_KeyEvent(mapping[i], 0, YES);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   377
			/* If this was Caps Lock, we need some additional voodoo to make SDL happy (is this needed in ottd?) */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   378
			if (bit == NSAlphaShiftKeyMask) QZ_KeyEvent(mapping[i], 0, NO);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   379
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   380
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   381
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   382
	_cocoa_video_data.current_mods = newMods;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   383
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   384
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   385
static void QZ_MouseMovedEvent(int x, int y)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   386
{
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   387
	if (_cursor.fix_at) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   388
		int dx = x - _cursor.pos.x;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   389
		int dy = y - _cursor.pos.y;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   390
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   391
		if (dx != 0 || dy != 0) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   392
			_cursor.delta.x += dx;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   393
			_cursor.delta.y += dy;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   394
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   395
			QZ_WarpCursor(_cursor.pos.x, _cursor.pos.y);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   396
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   397
	} else {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   398
		_cursor.delta.x = x - _cursor.pos.x;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   399
		_cursor.delta.y = y - _cursor.pos.y;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   400
		_cursor.pos.x = x;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   401
		_cursor.pos.y = y;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   402
		_cursor.dirty = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   403
	}
5090
67446a4104f7 (svn r7157) -Fix [FS#221, SF1168820]: Some mouse events possibly lost under high CPU load, handle
Darkvater
parents: 5086
diff changeset
   404
	HandleMouseEvents();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   405
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   406
4509
e6c048cb7692 (svn r6294) -Cleanup: Add static
tron
parents: 4475
diff changeset
   407
e6c048cb7692 (svn r6294) -Cleanup: Add static
tron
parents: 4475
diff changeset
   408
static void QZ_MouseButtonEvent(int button, BOOL down)
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   409
{
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   410
	switch (button) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   411
		case 0:
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   412
			if (down) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   413
				_left_button_down = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   414
			} else {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   415
				_left_button_down = false;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   416
				_left_button_clicked = false;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   417
			}
5090
67446a4104f7 (svn r7157) -Fix [FS#221, SF1168820]: Some mouse events possibly lost under high CPU load, handle
Darkvater
parents: 5086
diff changeset
   418
			HandleMouseEvents();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   419
			break;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   420
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   421
		case 1:
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   422
			if (down) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   423
				_right_button_down = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   424
				_right_button_clicked = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   425
			} else {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   426
				_right_button_down = false;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   427
			}
5090
67446a4104f7 (svn r7157) -Fix [FS#221, SF1168820]: Some mouse events possibly lost under high CPU load, handle
Darkvater
parents: 5086
diff changeset
   428
			HandleMouseEvents();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   429
			break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   430
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   431
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   432
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   433
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   434
static inline NSPoint QZ_GetMouseLocation(NSEvent *event)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   435
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   436
	NSPoint pt;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   437
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   438
	if (_cocoa_video_data.fullscreen) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   439
		pt = [ NSEvent mouseLocation ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   440
		pt.y = _cocoa_video_data.height - pt.y;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   441
	} else {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   442
		pt = [event locationInWindow];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   443
		pt = [_cocoa_video_data.qdview convertPoint:pt fromView:nil];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   444
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   445
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   446
	return pt;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   447
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   448
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   449
static bool QZ_MouseIsInsideView(NSPoint *pt)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   450
{
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   451
	if (_cocoa_video_data.fullscreen) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   452
		return pt->x >= 0 && pt->y >= 0 && pt->x < _cocoa_video_data.width && pt->y < _cocoa_video_data.height;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   453
	} else {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   454
		return [ _cocoa_video_data.qdview mouse:*pt inRect:[ _cocoa_video_data.qdview bounds ] ];
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   455
	}
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   456
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   457
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   458
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   459
static bool QZ_PollEvent(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   460
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   461
	NSEvent *event;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   462
	NSPoint pt;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   463
	NSString *chars;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   464
#ifdef _DEBUG
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   465
	uint32 et0, et;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   466
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   467
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   468
#ifdef _DEBUG
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   469
	et0 = GetTick();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   470
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   471
	event = [ NSApp nextEventMatchingMask:NSAnyEventMask
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   472
			untilDate: [ NSDate distantPast ]
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   473
			inMode: NSDefaultRunLoopMode dequeue:YES ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   474
#ifdef _DEBUG
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   475
	et = GetTick();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   476
	_cocoa_video_data.tEvent+= et - et0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   477
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   478
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   479
	if (event == nil) return false;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   480
	if (!_cocoa_video_data.active) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   481
		QZ_ShowMouse();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   482
		[NSApp sendEvent:event];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   483
		return true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   484
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   485
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   486
	QZ_DoUnsidedModifiers( [ event modifierFlags ] );
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   487
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   488
	switch ([event type]) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   489
		case NSMouseMoved:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   490
		case NSOtherMouseDragged:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   491
		case NSRightMouseDragged:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   492
		case NSLeftMouseDragged:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   493
			pt = QZ_GetMouseLocation(event);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   494
			if (!QZ_MouseIsInsideView(&pt) &&
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   495
					!_cocoa_video_data.emulating_right_button) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   496
				QZ_ShowMouse();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   497
				[NSApp sendEvent:event];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   498
				break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   499
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   500
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   501
			QZ_HideMouse();
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   502
			QZ_MouseMovedEvent((int)pt.x, (int)pt.y);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   503
			break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   504
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   505
		case NSLeftMouseDown:
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   506
			if (!([ event modifierFlags ] & NSCommandKeyMask) ||
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   507
					!QZ_MouseIsInsideView(&pt)) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   508
				[NSApp sendEvent:event];
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   509
			}
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   510
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   511
			pt = QZ_GetMouseLocation(event);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   512
			if (!QZ_MouseIsInsideView(&pt)) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   513
				QZ_ShowMouse();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   514
				break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   515
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   516
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   517
			QZ_HideMouse();
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   518
			QZ_MouseMovedEvent((int)pt.x, (int)pt.y);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   519
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   520
			/* Right mouse button emulation */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   521
			if ([ event modifierFlags ] & NSCommandKeyMask) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   522
				_cocoa_video_data.emulating_right_button = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   523
				QZ_MouseButtonEvent(1, YES);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   524
			} else {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   525
				QZ_MouseButtonEvent(0, YES);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   526
			}
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   527
			break;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   528
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   529
		case NSLeftMouseUp:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   530
			[NSApp sendEvent:event];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   531
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   532
			pt = QZ_GetMouseLocation(event);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   533
			if (!QZ_MouseIsInsideView(&pt)) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   534
				QZ_ShowMouse();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   535
				break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   536
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   537
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   538
			QZ_HideMouse();
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   539
			QZ_MouseMovedEvent((int)pt.x, (int)pt.y);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   540
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   541
			/* Right mouse button emulation */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   542
			if (_cocoa_video_data.emulating_right_button) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   543
				_cocoa_video_data.emulating_right_button = false;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   544
				QZ_MouseButtonEvent(1, NO);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   545
			} else {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   546
				QZ_MouseButtonEvent(0, NO);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   547
			}
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   548
			break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   549
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   550
		case NSRightMouseDown:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   551
			pt = QZ_GetMouseLocation(event);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   552
			if (!QZ_MouseIsInsideView(&pt)) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   553
				QZ_ShowMouse();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   554
				[NSApp sendEvent:event];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   555
				break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   556
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   557
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   558
			QZ_HideMouse();
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   559
			QZ_MouseMovedEvent((int)pt.x, (int)pt.y);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   560
			QZ_MouseButtonEvent(1, YES);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   561
			break;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   562
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   563
		case NSRightMouseUp:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   564
			pt = QZ_GetMouseLocation(event);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   565
			if (!QZ_MouseIsInsideView(&pt)) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   566
				QZ_ShowMouse();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   567
				[NSApp sendEvent:event];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   568
				break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   569
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   570
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   571
			QZ_HideMouse();
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   572
			QZ_MouseMovedEvent((int)pt.x, (int)pt.y);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   573
			QZ_MouseButtonEvent(1, NO);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   574
			break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   575
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   576
#if 0
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   577
		/* This is not needed since openttd currently only use two buttons */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   578
		case NSOtherMouseDown:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   579
			pt = QZ_GetMouseLocation(event);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   580
			if (!QZ_MouseIsInsideView(&pt)) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   581
				QZ_ShowMouse();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   582
				[NSApp sendEvent:event];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   583
				break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   584
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   585
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   586
			QZ_HideMouse();
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   587
			QZ_MouseMovedEvent((int)pt.x, (int)pt.y);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   588
			QZ_MouseButtonEvent([ event buttonNumber ], YES);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   589
			break;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   590
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   591
		case NSOtherMouseUp:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   592
			pt = QZ_GetMouseLocation(event);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   593
			if (!QZ_MouseIsInsideView(&pt)) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   594
				QZ_ShowMouse();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   595
				[NSApp sendEvent:event];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   596
				break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   597
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   598
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   599
			QZ_HideMouse();
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   600
			QZ_MouseMovedEvent((int)pt.x, (int)pt.y);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   601
			QZ_MouseButtonEvent([ event buttonNumber ], NO);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   602
			break;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   603
#endif
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   604
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   605
		case NSKeyDown:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   606
			/* Quit, hide and minimize */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   607
			switch ([event keyCode]) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   608
				case QZ_q:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   609
				case QZ_h:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   610
				case QZ_m:
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   611
					if ([ event modifierFlags ] & NSCommandKeyMask) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   612
						[NSApp sendEvent:event];
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   613
					}
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   614
					break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   615
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   616
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   617
			chars = [ event characters ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   618
			QZ_KeyEvent([event keyCode], [ chars length ] ? [ chars characterAtIndex:0 ] : 0, YES);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   619
			break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   620
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   621
		case NSKeyUp:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   622
			/* Quit, hide and minimize */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   623
			switch ([event keyCode]) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   624
				case QZ_q:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   625
				case QZ_h:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   626
				case QZ_m:
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   627
					if ([ event modifierFlags ] & NSCommandKeyMask) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   628
						[NSApp sendEvent:event];
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   629
					}
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   630
					break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   631
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   632
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   633
			chars = [ event characters ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   634
			QZ_KeyEvent([event keyCode], [ chars length ] ? [ chars characterAtIndex:0 ] : 0, NO);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   635
			break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   636
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   637
		case NSScrollWheel:
4116
f57064a934a3 (svn r5460) -Feature: [OSX] macs with touchpads that support two finger scrolling can now use this "scrollwheel" to scroll up/down (ln-)
bjarni
parents: 4000
diff changeset
   638
			if ([ event deltaY ] > 0.0) { /* Scroll up */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   639
				_cursor.wheel--;
4116
f57064a934a3 (svn r5460) -Feature: [OSX] macs with touchpads that support two finger scrolling can now use this "scrollwheel" to scroll up/down (ln-)
bjarni
parents: 4000
diff changeset
   640
			} else if ([ event deltaY ] < 0.0) { /* Scroll down */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   641
				_cursor.wheel++;
4116
f57064a934a3 (svn r5460) -Feature: [OSX] macs with touchpads that support two finger scrolling can now use this "scrollwheel" to scroll up/down (ln-)
bjarni
parents: 4000
diff changeset
   642
			} /* else: deltaY was 0.0 and we don't want to do anything */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   643
			break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   644
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   645
		default:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   646
			[NSApp sendEvent:event];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   647
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   648
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   649
	return true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   650
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   651
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   652
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   653
static void QZ_GameLoop(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   654
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   655
	uint32 next_tick = GetTick() + 30;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   656
	uint32 cur_ticks;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   657
	uint32 pal_tick = 0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   658
#ifdef _DEBUG
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   659
	uint32 et0, et, st0, st;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   660
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   661
	int i;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   662
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   663
#ifdef _DEBUG
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   664
	et0 = GetTick();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   665
	st = 0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   666
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   667
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   668
	_screen.dst_ptr = _cocoa_video_data.pixels;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   669
	DisplaySplashImage();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   670
	QZ_CheckPaletteAnim();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   671
	QZ_Draw();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   672
	CSleep(1);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   673
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   674
	for (i = 0; i < 2; i++) GameLoop();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   675
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   676
	_screen.dst_ptr = _cocoa_video_data.pixels;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   677
	UpdateWindows();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   678
	QZ_CheckPaletteAnim();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   679
	QZ_Draw();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   680
	CSleep(1);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   681
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   682
	for (;;) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   683
		InteractiveRandom(); // randomness
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   684
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   685
		while (QZ_PollEvent()) {}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   686
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   687
		if (_exit_game) break;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   688
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   689
#if defined(_DEBUG)
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   690
		if (_cocoa_video_data.current_mods & NSShiftKeyMask)
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   691
#else
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   692
		if (_cocoa_video_data.tab_is_down)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   693
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   694
		{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   695
			if (!_networking && _game_mode != GM_MENU) _fast_forward |= 2;
4536
d532b2611952 (svn r6365) -Cleanup: remove IsGeneratingWorld calls that are either not called or have no effect.
rubidium
parents: 4509
diff changeset
   696
		} else if (_fast_forward & 2) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   697
			_fast_forward = 0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   698
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   699
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   700
		cur_ticks = GetTick();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   701
		if ((_fast_forward && !_pause) || cur_ticks > next_tick)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   702
			next_tick = cur_ticks;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   703
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   704
		if (cur_ticks == next_tick) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   705
			next_tick += 30;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   706
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   707
			_ctrl_pressed = !!(_cocoa_video_data.current_mods & NSControlKeyMask);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   708
			_shift_pressed = !!(_cocoa_video_data.current_mods & NSShiftKeyMask);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   709
#ifdef _DEBUG
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   710
			_dbg_screen_rect = !!(_cocoa_video_data.current_mods & NSAlphaShiftKeyMask);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   711
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   712
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   713
			GameLoop();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   714
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   715
			_screen.dst_ptr = _cocoa_video_data.pixels;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   716
			UpdateWindows();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   717
			if (++pal_tick > 4) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   718
				QZ_CheckPaletteAnim();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   719
				pal_tick = 1;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   720
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   721
			QZ_Draw();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   722
		} else {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   723
#ifdef _DEBUG
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   724
			st0 = GetTick();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   725
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   726
			CSleep(1);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   727
#ifdef _DEBUG
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   728
			st += GetTick() - st0;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   729
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   730
			_screen.dst_ptr = _cocoa_video_data.pixels;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   731
			DrawTextMessage();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   732
			DrawMouseCursor();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   733
			QZ_Draw();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   734
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   735
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   737
#ifdef _DEBUG
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   738
	et = GetTick();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   739
5383
ba6d46dd90c3 (svn r7569) -Fix (r7565): cocoa files were (somehow) forgotten.
rubidium
parents: 5090
diff changeset
   740
	DEBUG(driver, 1, "cocoa_v: nextEventMatchingMask took %i ms total", _cocoa_video_data.tEvent);
ba6d46dd90c3 (svn r7569) -Fix (r7565): cocoa files were (somehow) forgotten.
rubidium
parents: 5090
diff changeset
   741
	DEBUG(driver, 1, "cocoa_v: game loop took %i ms total (%i ms without sleep)", et - et0, et - et0 - st);
ba6d46dd90c3 (svn r7569) -Fix (r7565): cocoa files were (somehow) forgotten.
rubidium
parents: 5090
diff changeset
   742
	DEBUG(driver, 1, "cocoa_v: (nextEventMatchingMask total)/(game loop total) is %f%%", (double)_cocoa_video_data.tEvent / (double)(et - et0) * 100);
ba6d46dd90c3 (svn r7569) -Fix (r7565): cocoa files were (somehow) forgotten.
rubidium
parents: 5090
diff changeset
   743
	DEBUG(driver, 1, "cocoa_v: (nextEventMatchingMask total)/(game loop without sleep total) is %f%%", (double)_cocoa_video_data.tEvent / (double)(et - et0 - st) * 100);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   744
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   745
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   746
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   747
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   748
/******************************************************************************
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   749
 *                             Windowed mode                                  *
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   750
 ******************************************************************************/
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   751
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   752
/* This function makes the *game region* of the window 100% opaque.
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   753
 * The genie effect uses the alpha component. Otherwise,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   754
 * it doesn't seem to matter what value it has.
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   755
 */
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   756
static void QZ_SetPortAlphaOpaque(void)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   757
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   758
	if (_cocoa_video_data.device_bpp == 32) {
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   759
		uint32* pixels = (uint32*)_cocoa_video_data.realpixels;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   760
		uint32 rowPixels = _cocoa_video_data.pitch / 4;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   761
		uint32 i;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   762
		uint32 j;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   763
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   764
		for (i = 0; i < _cocoa_video_data.height; i++)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   765
			for (j = 0; j < _cocoa_video_data.width; j++) {
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   766
			pixels[i * rowPixels + j] |= 0xFF000000;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   767
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   768
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   769
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   770
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   771
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   772
@implementation OTTD_QuartzWindow
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   773
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   774
/* we override these methods to fix the miniaturize animation/dock icon bug */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   775
- (void)miniaturize:(id)sender
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   776
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   777
	/* make the alpha channel opaque so anim won't have holes in it */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   778
	QZ_SetPortAlphaOpaque ();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   779
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   780
	/* window is hidden now */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   781
	_cocoa_video_data.active = false;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   782
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   783
	QZ_ShowMouse();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   784
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   785
	[ super miniaturize:sender ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   786
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   787
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   788
- (void)display
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   789
{
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   790
	/* This method fires just before the window deminaturizes from the Dock.
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   791
	 * We'll save the current visible surface, let the window manager redraw any
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   792
	 * UI elements, and restore the surface. This way, no expose event
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   793
	 * is required, and the deminiaturize works perfectly.
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   794
	 */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   795
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   796
	QZ_SetPortAlphaOpaque();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   797
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   798
	/* save current visible surface */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   799
	[ self cacheImageInRect:[ _cocoa_video_data.qdview frame ] ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   800
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   801
	/* let the window manager redraw controls, border, etc */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   802
	[ super display ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   803
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   804
	/* restore visible surface */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   805
	[ self restoreCachedImage ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   806
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   807
	/* window is visible again */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   808
	_cocoa_video_data.active = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   809
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   810
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   811
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   812
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   813
	NSRect newViewFrame;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   814
	CGrafPtr thePort;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   815
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   816
	[ super setFrame:frameRect display:flag ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   817
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   818
	/* Don't do anything if the window is currently beign created */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   819
	if (_cocoa_video_data.issetting) return;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   820
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   821
	if (_cocoa_video_data.window == nil) return;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   822
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   823
	newViewFrame = [ _cocoa_video_data.qdview frame ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   824
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   825
	/* Update the pixels and pitch */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   826
	thePort = [ _cocoa_video_data.qdview qdPort ];
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   827
	LockPortBits(thePort);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   828
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   829
	_cocoa_video_data.realpixels = GetPixBaseAddr(GetPortPixMap(thePort));
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   830
	_cocoa_video_data.pitch      = GetPixRowBytes(GetPortPixMap(thePort));
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   831
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   832
	/* _cocoa_video_data.realpixels now points to the window's pixels
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   833
	 * We want it to point to the *view's* pixels
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   834
	 */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   835
	{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   836
		int vOffset = [ _cocoa_video_data.window frame ].size.height - newViewFrame.size.height - newViewFrame.origin.y;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   837
		int hOffset = newViewFrame.origin.x;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   838
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   839
		_cocoa_video_data.realpixels = (uint8*)_cocoa_video_data.realpixels + (vOffset * _cocoa_video_data.pitch) + hOffset * (_cocoa_video_data.device_bpp / 8);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   840
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   841
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   842
	UnlockPortBits(thePort);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   843
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   844
	/* Allocate new buffer */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   845
	free(_cocoa_video_data.pixels);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   846
	_cocoa_video_data.pixels = (uint8*)malloc(newViewFrame.size.width * newViewFrame.size.height);
3261
e17a3e96f11e (svn r3971) reverted r3742 as those new errors were not the right way to handle those exceptions
bjarni
parents: 3129
diff changeset
   847
	assert(_cocoa_video_data.pixels != NULL);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   848
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   849
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   850
	/* Tell the game that the resolution changed */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   851
	_cocoa_video_data.width = newViewFrame.size.width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   852
	_cocoa_video_data.height = newViewFrame.size.height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   853
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   854
	_screen.width = _cocoa_video_data.width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   855
	_screen.height = _cocoa_video_data.height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   856
	_screen.pitch = _cocoa_video_data.width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   857
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   858
	GameSizeChanged();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   859
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   860
	/* Redraw screen */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   861
	_cocoa_video_data.num_dirty_rects = MAX_DIRTY_RECTS;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   862
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   863
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   864
- (void)appDidHide:(NSNotification*)note
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   865
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   866
	_cocoa_video_data.active = false;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   867
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   868
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   869
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   870
- (void)appWillUnhide:(NSNotification*)note
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   871
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   872
	QZ_SetPortAlphaOpaque ();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   873
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   874
	/* save current visible surface */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   875
	[ self cacheImageInRect:[ _cocoa_video_data.qdview frame ] ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   876
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   877
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   878
- (void)appDidUnhide:(NSNotification*)note
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   879
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   880
	/* restore cached image, since it may not be current, post expose event too */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   881
	[ self restoreCachedImage ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   882
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   883
	_cocoa_video_data.active = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   884
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   885
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   886
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   887
- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   888
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   889
	/* Make our window subclass receive these application notifications */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   890
	[ [ NSNotificationCenter defaultCenter ] addObserver:self
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   891
	selector:@selector(appDidHide:) name:NSApplicationDidHideNotification object:NSApp ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   892
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   893
	[ [ NSNotificationCenter defaultCenter ] addObserver:self
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   894
	selector:@selector(appDidUnhide:) name:NSApplicationDidUnhideNotification object:NSApp ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   895
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   896
	[ [ NSNotificationCenter defaultCenter ] addObserver:self
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   897
	selector:@selector(appWillUnhide:) name:NSApplicationWillUnhideNotification object:NSApp ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   898
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   899
	return [ super initWithContentRect:contentRect styleMask:styleMask backing:backingType defer:flag ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   900
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   901
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   902
@end
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   903
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   904
@implementation OTTD_QuartzWindowDelegate
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   905
- (BOOL)windowShouldClose:(id)sender
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   906
{
4548
6165e12570bf (svn r6380) -Codechange: unify all ways to quit OTTD.
rubidium
parents: 4536
diff changeset
   907
	HandleExitGameRequest();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   908
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   909
	return NO;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   910
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   911
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   912
- (void)windowDidBecomeKey:(NSNotification*)aNotification
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   913
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   914
	_cocoa_video_data.active = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   915
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   916
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   917
- (void)windowDidResignKey:(NSNotification*)aNotification
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   918
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   919
	_cocoa_video_data.active = false;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   920
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   921
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   922
- (void)windowDidBecomeMain:(NSNotification*)aNotification
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   923
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   924
	_cocoa_video_data.active = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   925
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   926
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   927
- (void)windowDidResignMain:(NSNotification*)aNotification
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   928
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   929
	_cocoa_video_data.active = false;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   930
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   931
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   932
@end
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   933
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   934
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   935
static void QZ_UpdateWindowPalette(uint start, uint count)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   936
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   937
	uint i;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   938
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   939
	switch (_cocoa_video_data.device_bpp) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   940
		case 32:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   941
			for (i = start; i < start + count; i++) {
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   942
				uint32 clr32 = 0xff000000;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   943
				clr32 |= (uint32)_cur_palette[i].r << 16;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   944
				clr32 |= (uint32)_cur_palette[i].g << 8;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   945
				clr32 |= (uint32)_cur_palette[i].b;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   946
				_cocoa_video_data.palette32[i] = clr32;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   947
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   948
			break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   949
		case 16:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   950
			for (i = start; i < start + count; i++) {
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   951
				uint16 clr16 = 0x0000;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   952
				clr16 |= (uint16)((_cur_palette[i].r >> 3) & 0x1f) << 10;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   953
				clr16 |= (uint16)((_cur_palette[i].g >> 3) & 0x1f) << 5;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   954
				clr16 |= (uint16)((_cur_palette[i].b >> 3) & 0x1f);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   955
				_cocoa_video_data.palette16[i] = clr16;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   956
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   957
			break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   958
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   959
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   960
	_cocoa_video_data.num_dirty_rects = MAX_DIRTY_RECTS;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   961
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   962
3038
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   963
static inline void QZ_WindowBlitIndexedPixelsToView32(uint left, uint top, uint right, uint bottom)
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   964
{
3038
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   965
	const uint32* pal = _cocoa_video_data.palette32;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   966
	const uint8* src = _cocoa_video_data.pixels;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   967
	uint32* dst = (uint32*)_cocoa_video_data.realpixels;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   968
	uint width = _cocoa_video_data.width;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   969
	uint pitch = _cocoa_video_data.pitch / 4;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   970
	uint x;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   971
	uint y;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   972
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   973
	for (y = top; y < bottom; y++) {
3038
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   974
		for (x = left; x < right; x++) {
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   975
			dst[y * pitch + x] = pal[src[y * width + x]];
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   976
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   977
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   978
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   979
3038
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   980
static inline void QZ_WindowBlitIndexedPixelsToView16(uint left, uint top, uint right, uint bottom)
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   981
{
3038
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   982
	const uint16* pal = _cocoa_video_data.palette16;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   983
	const uint8* src = _cocoa_video_data.pixels;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   984
	uint16* dst = (uint16*)_cocoa_video_data.realpixels;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   985
	uint width = _cocoa_video_data.width;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   986
	uint pitch = _cocoa_video_data.pitch / 2;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   987
	uint x;
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   988
	uint y;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   989
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   990
	for (y = top; y < bottom; y++) {
3038
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   991
		for (x = left; x < right; x++) {
976e2aeca1fc (svn r3618) -Codechange: [OSX] reduce the time spend in the cocoa video driver
bjarni
parents: 3037
diff changeset
   992
			dst[y * pitch + x] = pal[src[y * width + x]];
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   993
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   994
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   995
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   996
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   997
static inline void QZ_WindowBlitIndexedPixelsToView(int left, int top, int right, int bottom)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
   998
{
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
   999
	switch (_cocoa_video_data.device_bpp) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1000
		case 32: QZ_WindowBlitIndexedPixelsToView32(left, top, right, bottom); break;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1001
		case 16: QZ_WindowBlitIndexedPixelsToView16(left, top, right, bottom); break;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1002
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1003
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1004
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1005
static bool _resize_icon[] = {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1006
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1007
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1008
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1009
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1010
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1011
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1012
	0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1013
	0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1014
	0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1015
	0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1016
	0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1017
	0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1018
	0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1019
	0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1020
	0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1021
	1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1022
};
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1023
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1024
static void QZ_DrawResizeIcon(void)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1025
{
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1026
	int xoff = _cocoa_video_data.width - 16;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1027
	int yoff = _cocoa_video_data.height - 16;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1028
	int x;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1029
	int y;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1030
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1031
	for (y = 0; y < 16; y++) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1032
		uint16* trg16 = (uint16*)_cocoa_video_data.realpixels + (yoff + y) * _cocoa_video_data.pitch / 2 + xoff;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1033
		uint32* trg32 = (uint32*)_cocoa_video_data.realpixels + (yoff + y) * _cocoa_video_data.pitch / 4 + xoff;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1034
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1035
		for (x = 0; x < 16; x++, trg16++, trg32++) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1036
			if (!_resize_icon[y * 16 + x]) continue;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1037
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1038
			switch (_cocoa_video_data.device_bpp) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1039
				case 32: *trg32 = 0xff000000; break;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1040
				case 16: *trg16 = 0x0000;     break;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1041
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1042
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1043
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1044
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1045
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1046
static void QZ_DrawWindow(void)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1047
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1048
	int i;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1049
	RgnHandle dirty, temp;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1050
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1051
	/* Check if we need to do anything */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1052
	if (_cocoa_video_data.num_dirty_rects == 0 ||
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1053
			[ _cocoa_video_data.window isMiniaturized ]) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1054
		return;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1055
	}
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1056
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1057
	if (_cocoa_video_data.num_dirty_rects >= MAX_DIRTY_RECTS) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1058
		_cocoa_video_data.num_dirty_rects = 1;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1059
		_cocoa_video_data.dirty_rects[0].left = 0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1060
		_cocoa_video_data.dirty_rects[0].top = 0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1061
		_cocoa_video_data.dirty_rects[0].right = _cocoa_video_data.width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1062
		_cocoa_video_data.dirty_rects[0].bottom = _cocoa_video_data.height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1063
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1064
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1065
	dirty = NewRgn();
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1066
	temp  = NewRgn();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1067
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1068
	SetEmptyRgn(dirty);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1069
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1070
	/* Build the region of dirty rectangles */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1071
	for (i = 0; i < _cocoa_video_data.num_dirty_rects; i++) {
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1072
		QZ_WindowBlitIndexedPixelsToView(
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1073
			_cocoa_video_data.dirty_rects[i].left,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1074
			_cocoa_video_data.dirty_rects[i].top,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1075
			_cocoa_video_data.dirty_rects[i].right,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1076
			_cocoa_video_data.dirty_rects[i].bottom
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1077
		);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1078
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1079
		MacSetRectRgn(
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1080
			temp,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1081
			_cocoa_video_data.dirty_rects[i].left,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1082
			_cocoa_video_data.dirty_rects[i].top,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1083
			_cocoa_video_data.dirty_rects[i].right,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1084
			_cocoa_video_data.dirty_rects[i].bottom
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1085
		);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1086
		MacUnionRgn(dirty, temp, dirty);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1087
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1088
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1089
	QZ_DrawResizeIcon();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1090
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1091
	/* Flush the dirty region */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1092
	QDFlushPortBuffer([ _cocoa_video_data.qdview qdPort ], dirty);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1093
	DisposeRgn(dirty);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1094
	DisposeRgn(temp);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1095
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1096
	_cocoa_video_data.num_dirty_rects = 0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1097
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1098
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1099
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1100
extern const char _openttd_revision[];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1101
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1102
static const char* QZ_SetVideoWindowed(uint width, uint height)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1103
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1104
	char caption[50];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1105
	NSString *nsscaption;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1106
	unsigned int style;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1107
	NSRect contentRect;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1108
	BOOL isCustom = NO;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1109
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1110
	if (width > _cocoa_video_data.device_width)
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1111
		width = _cocoa_video_data.device_width;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1112
	if (height > _cocoa_video_data.device_height)
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1113
		height = _cocoa_video_data.device_height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1114
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1115
	_cocoa_video_data.width = width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1116
	_cocoa_video_data.height = height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1117
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1118
	contentRect = NSMakeRect(0, 0, width, height);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1119
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1120
	/* Check if we should completely destroy the previous mode
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1121
	 * - If it is fullscreen
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1122
	 */
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1123
	if (_cocoa_video_data.isset && _cocoa_video_data.fullscreen)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1124
		QZ_UnsetVideoMode();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1125
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1126
	/* Check if we should recreate the window */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1127
	if (_cocoa_video_data.window == nil) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1128
		/* Set the window style */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1129
		style = NSTitledWindowMask;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1130
		style |= (NSMiniaturizableWindowMask | NSClosableWindowMask);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1131
		style |= NSResizableWindowMask;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1132
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1133
		/* Manually create a window, avoids having a nib file resource */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1134
		_cocoa_video_data.window = [ [ OTTD_QuartzWindow alloc ]
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1135
										initWithContentRect:contentRect
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1136
										styleMask:style
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1137
										backing:NSBackingStoreBuffered
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1138
										defer:NO ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1139
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1140
		if (_cocoa_video_data.window == nil)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1141
			return "Could not create the Cocoa window";
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1142
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1143
		snprintf(caption, sizeof(caption), "OpenTTD %s", _openttd_revision);
2741
65d4de069014 (svn r3286) -Fix: [OSX] 10.2 works again and universal binaries got 10.2 as target by default
bjarni
parents: 2736
diff changeset
  1144
		nsscaption = [ [ NSString alloc ] initWithCString:caption ];
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1145
		[ _cocoa_video_data.window setTitle:nsscaption ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1146
		[ _cocoa_video_data.window setMiniwindowTitle:nsscaption ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1147
		[ nsscaption release ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1148
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1149
		[ _cocoa_video_data.window setAcceptsMouseMovedEvents:YES ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1150
		[ _cocoa_video_data.window setViewsNeedDisplay:NO ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1151
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1152
		[ _cocoa_video_data.window setDelegate: [ [ [ OTTD_QuartzWindowDelegate alloc ] init ] autorelease ] ];
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1153
	} else {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1154
		/* We already have a window, just change its size */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1155
		if (!isCustom) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1156
			[ _cocoa_video_data.window setContentSize:contentRect.size ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1157
			[ _cocoa_video_data.qdview setFrameSize:contentRect.size ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1158
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1159
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1160
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1161
	[ _cocoa_video_data.window center ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1162
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1163
	/* Only recreate the view if it doesn't already exist */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1164
	if (_cocoa_video_data.qdview == nil) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1165
		_cocoa_video_data.qdview = [ [ NSQuickDrawView alloc ] initWithFrame:contentRect ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1166
		[ _cocoa_video_data.qdview setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1167
		[ [ _cocoa_video_data.window contentView ] addSubview:_cocoa_video_data.qdview ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1168
		[ _cocoa_video_data.qdview release ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1169
		[ _cocoa_video_data.window makeKeyAndOrderFront:nil ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1170
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1171
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1172
	LockPortBits([ _cocoa_video_data.qdview qdPort ]);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1173
	_cocoa_video_data.realpixels = GetPixBaseAddr(GetPortPixMap([ _cocoa_video_data.qdview qdPort ]));
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1174
	_cocoa_video_data.pitch = GetPixRowBytes(GetPortPixMap([ _cocoa_video_data.qdview qdPort ]));
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1175
	UnlockPortBits([ _cocoa_video_data.qdview qdPort ]);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1176
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1177
	/* _cocoa_video_data.realpixels now points to the window's pixels
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1178
	 * We want it to point to the *view's* pixels
4549
106ed18a7675 (svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents: 4548
diff changeset
  1179
	 */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1180
	{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1181
		int vOffset = [ _cocoa_video_data.window frame ].size.height - [ _cocoa_video_data.qdview frame ].size.height - [ _cocoa_video_data.qdview frame ].origin.y;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1182
		int hOffset = [ _cocoa_video_data.qdview frame ].origin.x;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1183
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1184
		_cocoa_video_data.realpixels = (uint8*)_cocoa_video_data.realpixels + (vOffset * _cocoa_video_data.pitch) + hOffset * (_cocoa_video_data.device_bpp / 8);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1185
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1186
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1187
	free(_cocoa_video_data.pixels);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1188
	_cocoa_video_data.pixels = (uint8*)malloc(width * height);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1189
	if (_cocoa_video_data.pixels == NULL) return "Failed to allocate 8-bit buffer";
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1190
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1191
	_cocoa_video_data.fullscreen = false;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1192
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1193
	return NULL;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1194
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1195
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1196
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1197
/******************************************************************************
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1198
 *                             Fullscreen mode                                *
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1199
 ******************************************************************************/
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1200
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1201
/* Gamma functions to try to hide the flash from a rez switch
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1202
 * Fade the display from normal to black
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1203
 * Save gamma tables for fade back to normal
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1204
 */
3037
9e2364dd9ac7 (svn r3617) Fix warning introduced in r3616
tron
parents: 3036
diff changeset
  1205
static uint32 QZ_FadeGammaOut(OTTD_QuartzGammaTable* table)
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1206
{
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1207
	CGGammaValue redTable[QZ_GAMMA_TABLE_SIZE];
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1208
	CGGammaValue greenTable[QZ_GAMMA_TABLE_SIZE];
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1209
	CGGammaValue blueTable[QZ_GAMMA_TABLE_SIZE];
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1210
	float percent;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1211
	int j;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1212
	unsigned int actual;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1213
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1214
	if (CGGetDisplayTransferByTable(
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1215
				_cocoa_video_data.display_id, QZ_GAMMA_TABLE_SIZE,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1216
				table->red, table->green, table->blue, &actual
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1217
			) != CGDisplayNoErr ||
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1218
			actual != QZ_GAMMA_TABLE_SIZE) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1219
		return 1;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1220
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1221
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1222
	memcpy(redTable,   table->red,   sizeof(redTable));
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1223
	memcpy(greenTable, table->green, sizeof(greenTable));
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1224
	memcpy(blueTable,  table->blue,  sizeof(greenTable));
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1225
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1226
	for (percent = 1.0; percent >= 0.0; percent -= 0.01) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1227
		for (j = 0; j < QZ_GAMMA_TABLE_SIZE; j++) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1228
			redTable[j]   = redTable[j]   * percent;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1229
			greenTable[j] = greenTable[j] * percent;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1230
			blueTable[j]  = blueTable[j]  * percent;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1231
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1232
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1233
		if (CGSetDisplayTransferByTable(
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1234
					_cocoa_video_data.display_id, QZ_GAMMA_TABLE_SIZE,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1235
					redTable, greenTable, blueTable
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1236
				) != CGDisplayNoErr) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1237
			CGDisplayRestoreColorSyncSettings();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1238
			return 1;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1239
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1240
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1241
		CSleep(10);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1242
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1243
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1244
	return 0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1245
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1246
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1247
/* Fade the display from black to normal
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1248
 * Restore previously saved gamma values
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1249
 */
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1250
static uint32 QZ_FadeGammaIn(const OTTD_QuartzGammaTable* table)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1251
{
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1252
	CGGammaValue redTable[QZ_GAMMA_TABLE_SIZE];
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1253
	CGGammaValue greenTable[QZ_GAMMA_TABLE_SIZE];
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1254
	CGGammaValue blueTable[QZ_GAMMA_TABLE_SIZE];
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1255
	float percent;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1256
	int j;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1257
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1258
	memset(redTable, 0, sizeof(redTable));
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1259
	memset(greenTable, 0, sizeof(greenTable));
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1260
	memset(blueTable, 0, sizeof(greenTable));
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1261
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1262
	for (percent = 0.0; percent <= 1.0; percent += 0.01) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1263
		for (j = 0; j < QZ_GAMMA_TABLE_SIZE; j++) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1264
			redTable[j]   = table->red[j]   * percent;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1265
			greenTable[j] = table->green[j] * percent;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1266
			blueTable[j]  = table->blue[j]  * percent;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1267
		}
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1268
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1269
		if (CGSetDisplayTransferByTable(
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1270
					_cocoa_video_data.display_id, QZ_GAMMA_TABLE_SIZE,
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1271
					redTable, greenTable, blueTable
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1272
				) != CGDisplayNoErr) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1273
			CGDisplayRestoreColorSyncSettings();
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1274
			return 1;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1275
		}
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1276
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1277
		CSleep(10);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1278
	}
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1279
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1280
	return 0;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1281
}
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1282
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1283
static const char* QZ_SetVideoFullScreen(int width, int height)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1284
{
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1285
	const char* errstr = "QZ_SetVideoFullScreen error";
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1286
	int exact_match;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1287
	CFNumberRef number;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1288
	int bpp;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1289
	int gamma_error;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1290
	OTTD_QuartzGammaTable gamma_table;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1291
	NSRect screen_rect;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1292
	CGError error;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1293
	NSPoint pt;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1294
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1295
	/* Destroy any previous mode */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1296
	if (_cocoa_video_data.isset) QZ_UnsetVideoMode();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1297
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1298
	/* See if requested mode exists */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1299
	_cocoa_video_data.mode = CGDisplayBestModeForParameters(_cocoa_video_data.display_id, 8, width, height, &exact_match);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1300
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1301
	/* If the mode wasn't an exact match, check if it has the right bpp, and update width and height */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1302
	if (!exact_match) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1303
		number = CFDictionaryGetValue (_cocoa_video_data.mode, kCGDisplayBitsPerPixel);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1304
		CFNumberGetValue(number, kCFNumberSInt32Type, &bpp);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1305
		if (bpp != 8) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1306
			errstr = "Failed to find display resolution";
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1307
			goto ERR_NO_MATCH;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1308
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1309
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1310
		number = CFDictionaryGetValue(_cocoa_video_data.mode, kCGDisplayWidth);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1311
		CFNumberGetValue(number, kCFNumberSInt32Type, &width);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1312
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1313
		number = CFDictionaryGetValue(_cocoa_video_data.mode, kCGDisplayHeight);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1314
		CFNumberGetValue(number, kCFNumberSInt32Type, &height);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1315
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1316
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1317
	/* Fade display to zero gamma */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1318
	gamma_error = QZ_FadeGammaOut(&gamma_table);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1319
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1320
	/* Put up the blanking window (a window above all other windows) */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1321
	error = CGDisplayCapture(_cocoa_video_data.display_id);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1322
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1323
	if (CGDisplayNoErr != error) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1324
		errstr = "Failed capturing display";
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1325
		goto ERR_NO_CAPTURE;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1326
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1327
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1328
	/* Do the physical switch */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1329
	if (CGDisplaySwitchToMode(_cocoa_video_data.display_id, _cocoa_video_data.mode) != CGDisplayNoErr) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1330
		errstr = "Failed switching display resolution";
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1331
		goto ERR_NO_SWITCH;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1332
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1333
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1334
	_cocoa_video_data.realpixels = (uint8*)CGDisplayBaseAddress(_cocoa_video_data.display_id);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1335
	_cocoa_video_data.pitch  = CGDisplayBytesPerRow(_cocoa_video_data.display_id);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1336
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1337
	_cocoa_video_data.width = CGDisplayPixelsWide(_cocoa_video_data.display_id);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1338
	_cocoa_video_data.height = CGDisplayPixelsHigh(_cocoa_video_data.display_id);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1339
	_cocoa_video_data.fullscreen = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1340
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1341
	/* Setup double-buffer emulation */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1342
	_cocoa_video_data.pixels = (uint8*)malloc(width * height);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1343
	if (_cocoa_video_data.pixels == NULL) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1344
		errstr = "Failed to allocate memory for double buffering";
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1345
		goto ERR_DOUBLEBUF;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1346
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1347
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1348
	if (!CGDisplayCanSetPalette(_cocoa_video_data.display_id)) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1349
		errstr = "Not an indexed display mode.";
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1350
		goto ERR_NOT_INDEXED;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1351
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1352
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1353
	/* If we don't hide menu bar, it will get events and interrupt the program */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1354
	HideMenuBar();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1355
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1356
	/* Fade the display to original gamma */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1357
	if (!gamma_error) QZ_FadeGammaIn(&gamma_table);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1358
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1359
	/* There is a bug in Cocoa where NSScreen doesn't synchronize
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1360
	 * with CGDirectDisplay, so the main screen's frame is wrong.
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1361
	 * As a result, coordinate translation produces incorrect results.
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1362
	 * We can hack around this bug by setting the screen rect ourselves.
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1363
	 * This hack should be removed if/when the bug is fixed.
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1364
	 */
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1365
	screen_rect = NSMakeRect(0, 0, width, height);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1366
	[ [ NSScreen mainScreen ] setFrame:screen_rect ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1367
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1368
	/* we're fullscreen, so flag all input states... */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1369
	_cocoa_video_data.active = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1370
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1371
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1372
	pt = [ NSEvent mouseLocation ];
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1373
	pt.y = CGDisplayPixelsHigh(_cocoa_video_data.display_id) - pt.y;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1374
	if (QZ_MouseIsInsideView(&pt)) QZ_HideMouse();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1375
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1376
	return NULL;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1377
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1378
/* Since the blanking window covers *all* windows (even force quit) correct recovery is crucial */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1379
ERR_NOT_INDEXED:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1380
	free(_cocoa_video_data.pixels);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1381
	_cocoa_video_data.pixels = NULL;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1382
ERR_DOUBLEBUF:
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1383
	CGDisplaySwitchToMode(_cocoa_video_data.display_id, _cocoa_video_data.save_mode);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1384
ERR_NO_SWITCH:
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1385
	CGReleaseAllDisplays();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1386
ERR_NO_CAPTURE:
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1387
	if (!gamma_error) QZ_FadeGammaIn(&gamma_table);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1388
ERR_NO_MATCH:
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1389
	return errstr;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1390
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1391
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1392
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1393
static void QZ_UpdateFullscreenPalette(uint first_color, uint num_colors)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1394
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1395
	CGTableCount  index;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1396
	CGDeviceColor color;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1397
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1398
	for (index = first_color; index < first_color+num_colors; index++) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1399
		/* Clamp colors between 0.0 and 1.0 */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1400
		color.red   = _cur_palette[index].r / 255.0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1401
		color.blue  = _cur_palette[index].b / 255.0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1402
		color.green = _cur_palette[index].g / 255.0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1403
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1404
		CGPaletteSetColorAtIndex(_cocoa_video_data.palette, color, index);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1405
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1406
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1407
	CGDisplaySetPalette(_cocoa_video_data.display_id, _cocoa_video_data.palette);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1408
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1409
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1410
/* Wait for the VBL to occur (estimated since we don't have a hardware interrupt) */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1411
static void QZ_WaitForVerticalBlank(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1412
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1413
	/* The VBL delay is based on Ian Ollmann's RezLib <iano@cco.caltech.edu> */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1414
	double refreshRate;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1415
	double linesPerSecond;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1416
	double target;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1417
	double position;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1418
	double adjustment;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1419
	CFNumberRef refreshRateCFNumber;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1420
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1421
	refreshRateCFNumber = CFDictionaryGetValue(_cocoa_video_data.mode, kCGDisplayRefreshRate);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1422
	if (refreshRateCFNumber == NULL) return;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1423
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1424
	if (CFNumberGetValue(refreshRateCFNumber, kCFNumberDoubleType, &refreshRate) == 0)
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1425
		return;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1426
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1427
	if (refreshRate == 0) return;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1428
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1429
	linesPerSecond = refreshRate * _cocoa_video_data.height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1430
	target = _cocoa_video_data.height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1431
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1432
	/* Figure out the first delay so we start off about right */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1433
	position = CGDisplayBeamPosition(_cocoa_video_data.display_id);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1434
	if (position > target) position = 0;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1435
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1436
	adjustment = (target - position) / linesPerSecond;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1437
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1438
	CSleep((uint32)(adjustment * 1000));
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1439
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1440
4475
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1441
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1442
static void QZ_DrawScreen(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1443
{
4475
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1444
	const uint8* src = _cocoa_video_data.pixels;
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1445
	uint8* dst       = (uint8*)_cocoa_video_data.realpixels;
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1446
	uint pitch       = _cocoa_video_data.pitch;
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1447
	uint width       = _cocoa_video_data.width;
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1448
	uint num_dirty   = _cocoa_video_data.num_dirty_rects;
3327
2493a2b8f4eb (svn r4099) -Codechange: [OSX] the cocoa video driver speedup of around 1000% now also applies to Intel macs
bjarni
parents: 3317
diff changeset
  1449
	uint i;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1450
3327
2493a2b8f4eb (svn r4099) -Codechange: [OSX] the cocoa video driver speedup of around 1000% now also applies to Intel macs
bjarni
parents: 3317
diff changeset
  1451
	/* Check if we need to do anything */
4475
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1452
	if (num_dirty == 0) return;
3128
7ad52c82e55b (svn r3741) -Fix: [i686 OSX] reverted the change in rev 3670 for non PowerPC (done with #ifdef) since it appeared to crash intel based macs
bjarni
parents: 3082
diff changeset
  1453
4475
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1454
	if (num_dirty >= MAX_DIRTY_RECTS) {
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1455
		num_dirty = 1;
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1456
		_cocoa_video_data.dirty_rects[0].left   = 0;
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1457
		_cocoa_video_data.dirty_rects[0].top    = 0;
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1458
		_cocoa_video_data.dirty_rects[0].right  = _cocoa_video_data.width;
3327
2493a2b8f4eb (svn r4099) -Codechange: [OSX] the cocoa video driver speedup of around 1000% now also applies to Intel macs
bjarni
parents: 3317
diff changeset
  1459
		_cocoa_video_data.dirty_rects[0].bottom = _cocoa_video_data.height;
2493a2b8f4eb (svn r4099) -Codechange: [OSX] the cocoa video driver speedup of around 1000% now also applies to Intel macs
bjarni
parents: 3317
diff changeset
  1460
	}
3128
7ad52c82e55b (svn r3741) -Fix: [i686 OSX] reverted the change in rev 3670 for non PowerPC (done with #ifdef) since it appeared to crash intel based macs
bjarni
parents: 3082
diff changeset
  1461
3327
2493a2b8f4eb (svn r4099) -Codechange: [OSX] the cocoa video driver speedup of around 1000% now also applies to Intel macs
bjarni
parents: 3317
diff changeset
  1462
	QZ_WaitForVerticalBlank();
2493a2b8f4eb (svn r4099) -Codechange: [OSX] the cocoa video driver speedup of around 1000% now also applies to Intel macs
bjarni
parents: 3317
diff changeset
  1463
	/* Build the region of dirty rectangles */
4475
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1464
	for (i = 0; i < num_dirty; i++) {
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1465
		uint y      = _cocoa_video_data.dirty_rects[i].top;
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1466
		uint left   = _cocoa_video_data.dirty_rects[i].left;
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1467
		uint length = _cocoa_video_data.dirty_rects[i].right - left;
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1468
		uint bottom = _cocoa_video_data.dirty_rects[i].bottom;
3327
2493a2b8f4eb (svn r4099) -Codechange: [OSX] the cocoa video driver speedup of around 1000% now also applies to Intel macs
bjarni
parents: 3317
diff changeset
  1469
4475
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1470
		for (; y < bottom; y++) {
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1471
			memcpy(dst + y * pitch + left, src + y * width + left, length);
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1472
		}
3081
3a46f595b16b (svn r3670) -Codechange: [OSX] rewrote a part of the cocoa video driver to speed it up by 1000% in fullscreen
bjarni
parents: 3038
diff changeset
  1473
	}
3327
2493a2b8f4eb (svn r4099) -Codechange: [OSX] the cocoa video driver speedup of around 1000% now also applies to Intel macs
bjarni
parents: 3317
diff changeset
  1474
2493a2b8f4eb (svn r4099) -Codechange: [OSX] the cocoa video driver speedup of around 1000% now also applies to Intel macs
bjarni
parents: 3317
diff changeset
  1475
	_cocoa_video_data.num_dirty_rects = 0;
4475
b494c13d5ead (svn r6260) Improve readability
tron
parents: 4434
diff changeset
  1476
}
3327
2493a2b8f4eb (svn r4099) -Codechange: [OSX] the cocoa video driver speedup of around 1000% now also applies to Intel macs
bjarni
parents: 3317
diff changeset
  1477
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1478
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1479
static int QZ_ListFullscreenModes(OTTDPoint* mode_list, int max_modes)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1480
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1481
	CFIndex num_modes;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1482
	CFIndex i;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1483
	int list_size = 0;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1484
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1485
	num_modes = CFArrayGetCount(_cocoa_video_data.mode_list);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1486
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1487
	/* Build list of modes with the requested bpp */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1488
	for (i = 0; i < num_modes && list_size < max_modes; i++) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1489
		CFDictionaryRef onemode;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1490
		CFNumberRef     number;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1491
		int bpp;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1492
		int intvalue;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1493
		bool hasMode;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1494
		uint16 width, height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1495
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1496
		onemode = CFArrayGetValueAtIndex(_cocoa_video_data.mode_list, i);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1497
		number = CFDictionaryGetValue(onemode, kCGDisplayBitsPerPixel);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1498
		CFNumberGetValue (number, kCFNumberSInt32Type, &bpp);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1499
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1500
		if (bpp != 8) continue;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1501
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1502
		number = CFDictionaryGetValue(onemode, kCGDisplayWidth);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1503
		CFNumberGetValue(number, kCFNumberSInt32Type, &intvalue);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1504
		width = (uint16)intvalue;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1505
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1506
		number = CFDictionaryGetValue(onemode, kCGDisplayHeight);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1507
		CFNumberGetValue(number, kCFNumberSInt32Type, &intvalue);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1508
		height = (uint16)intvalue;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1509
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1510
		/* Check if mode is already in the list */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1511
		{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1512
			int i;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1513
			hasMode = false;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1514
			for (i = 0; i < list_size; i++) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1515
				if (mode_list[i].x == width &&  mode_list[i].y == height) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1516
					hasMode = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1517
					break;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1518
				}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1519
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1520
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1521
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1522
		if (hasMode) continue;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1523
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1524
		/* Add mode to the list */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1525
		mode_list[list_size].x = width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1526
		mode_list[list_size].y = height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1527
		list_size++;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1528
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1529
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1530
	/* Sort list smallest to largest */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1531
	{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1532
		int i, j;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1533
		for (i = 0; i < list_size; i++) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1534
			for (j = 0; j < list_size-1; j++) {
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1535
				if (mode_list[j].x > mode_list[j + 1].x || (
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1536
							mode_list[j].x == mode_list[j + 1].x &&
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1537
							mode_list[j].y >  mode_list[j + 1].y
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1538
						)) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1539
					uint tmpw = mode_list[j].x;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1540
					uint tmph = mode_list[j].y;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1541
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1542
					mode_list[j].x = mode_list[j + 1].x;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1543
					mode_list[j].y = mode_list[j + 1].y;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1544
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1545
					mode_list[j + 1].x = tmpw;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1546
					mode_list[j + 1].y = tmph;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1547
				}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1548
			}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1549
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1550
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1551
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1552
	return list_size;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1553
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1554
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1555
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1556
/******************************************************************************
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1557
 *                             Windowed and fullscreen common code            *
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1558
 ******************************************************************************/
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1559
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1560
static void QZ_UpdatePalette(uint start, uint count)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1561
{
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1562
	if (_cocoa_video_data.fullscreen) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1563
		QZ_UpdateFullscreenPalette(start, count);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1564
	} else {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1565
		QZ_UpdateWindowPalette(start, count);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1566
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1567
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1568
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1569
static void QZ_InitPalette(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1570
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1571
	QZ_UpdatePalette(0, 256);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1572
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1573
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1574
static void QZ_Draw(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1575
{
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1576
	if (_cocoa_video_data.fullscreen) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1577
		QZ_DrawScreen();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1578
	} else {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1579
		QZ_DrawWindow();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1580
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1581
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1582
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1583
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1584
static const OTTDPoint _default_resolutions[] = {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1585
	{ 640,  480},
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1586
	{ 800,  600},
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1587
	{1024,  768},
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1588
	{1152,  864},
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1589
	{1280,  800},
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1590
	{1280,  960},
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1591
	{1280, 1024},
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1592
	{1400, 1050},
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1593
	{1600, 1200},
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1594
	{1680, 1050},
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1595
	{1920, 1200}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1596
};
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1597
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1598
static void QZ_UpdateVideoModes(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1599
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1600
	uint i, j, count;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1601
	OTTDPoint modes[32];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1602
	const OTTDPoint *current_modes;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1603
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1604
	if (_cocoa_video_data.fullscreen) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1605
		count = QZ_ListFullscreenModes(modes, 32);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1606
		current_modes = modes;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1607
	} else {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1608
		count = lengthof(_default_resolutions);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1609
		current_modes = _default_resolutions;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1610
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1611
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1612
	for (i = 0, j = 0; j < lengthof(_resolutions) && i < count; i++) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1613
		if (_cocoa_video_data.fullscreen || (
3316
66b80af7608f (svn r4082) -Fix: [OSX] FS#80 Crash when switching from windowed to fullscreen
bjarni
parents: 3261
diff changeset
  1614
					(uint)current_modes[i].x < _cocoa_video_data.device_width &&
66b80af7608f (svn r4082) -Fix: [OSX] FS#80 Crash when switching from windowed to fullscreen
bjarni
parents: 3261
diff changeset
  1615
					(uint)current_modes[i].y < _cocoa_video_data.device_height)
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1616
				) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1617
			_resolutions[j][0] = current_modes[i].x;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1618
			_resolutions[j][1] = current_modes[i].y;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1619
			j++;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1620
		}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1621
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1622
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1623
	_num_resolutions = j;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1624
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1625
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1626
static void QZ_UnsetVideoMode(void)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1627
{
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1628
	if (_cocoa_video_data.fullscreen) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1629
		/* Release fullscreen resources */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1630
		OTTD_QuartzGammaTable gamma_table;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1631
		int gamma_error;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1632
		NSRect screen_rect;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1633
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1634
		gamma_error = QZ_FadeGammaOut(&gamma_table);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1635
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1636
		/* Restore original screen resolution/bpp */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1637
		CGDisplaySwitchToMode(_cocoa_video_data.display_id, _cocoa_video_data.save_mode);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1638
		CGReleaseAllDisplays();
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1639
		ShowMenuBar();
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1640
		/* Reset the main screen's rectangle
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1641
		 * See comment in QZ_SetVideoFullscreen for why we do this
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1642
		 */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1643
		screen_rect = NSMakeRect(0,0,_cocoa_video_data.device_width,_cocoa_video_data.device_height);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1644
		[ [ NSScreen mainScreen ] setFrame:screen_rect ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1645
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1646
		if (!gamma_error) QZ_FadeGammaIn(&gamma_table);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1647
	} else {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1648
		/* Release window mode resources */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1649
		[ _cocoa_video_data.window close ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1650
		_cocoa_video_data.window = nil;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1651
		_cocoa_video_data.qdview = nil;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1652
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1653
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1654
	free(_cocoa_video_data.pixels);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1655
	_cocoa_video_data.pixels = NULL;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1656
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1657
	/* Signal successful teardown */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1658
	_cocoa_video_data.isset = false;
3317
6aa52b41b084 (svn r4083) -Feature: [OSX] Ported r4075 (Undraw the mouse when it leaves the window and Draw it again when it enters).
egladil
parents: 3316
diff changeset
  1659
6aa52b41b084 (svn r4083) -Feature: [OSX] Ported r4075 (Undraw the mouse when it leaves the window and Draw it again when it enters).
egladil
parents: 3316
diff changeset
  1660
	QZ_ShowMouse();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1661
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1662
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1663
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1664
static const char* QZ_SetVideoMode(uint width, uint height, bool fullscreen)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1665
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1666
	const char *ret;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1667
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1668
	_cocoa_video_data.issetting = true;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1669
	if (fullscreen) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1670
		/* Setup full screen video */
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1671
		ret = QZ_SetVideoFullScreen(width, height);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1672
	} else {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1673
		/* Setup windowed video */
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1674
		ret = QZ_SetVideoWindowed(width, height);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1675
	}
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1676
	_cocoa_video_data.issetting = false;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1677
	if (ret != NULL) return ret;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1678
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1679
	/* Signal successful completion (used internally) */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1680
	_cocoa_video_data.isset = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1681
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1682
	/* Tell the game that the resolution has changed */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1683
	_screen.width = _cocoa_video_data.width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1684
	_screen.height = _cocoa_video_data.height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1685
	_screen.pitch = _cocoa_video_data.width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1686
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1687
	QZ_UpdateVideoModes();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1688
	GameSizeChanged();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1689
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1690
	QZ_InitPalette();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1691
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1692
	return NULL;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1693
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1694
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1695
static const char* QZ_SetVideoModeAndRestoreOnFailure(uint width, uint height, bool fullscreen)
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1696
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1697
	bool wasset = _cocoa_video_data.isset;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1698
	uint32 oldwidth = _cocoa_video_data.width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1699
	uint32 oldheight = _cocoa_video_data.height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1700
	bool oldfullscreen = _cocoa_video_data.fullscreen;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1701
	const char *ret;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1702
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1703
	ret = QZ_SetVideoMode(width, height, fullscreen);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1704
	if (ret != NULL && wasset) QZ_SetVideoMode(oldwidth, oldheight, oldfullscreen);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1705
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1706
	return ret;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1707
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1708
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1709
static void QZ_VideoInit(void)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1710
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1711
	memset(&_cocoa_video_data, 0, sizeof(_cocoa_video_data));
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1712
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1713
	/* Initialize the video settings; this data persists between mode switches */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1714
	_cocoa_video_data.display_id = kCGDirectMainDisplay;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1715
	_cocoa_video_data.save_mode  = CGDisplayCurrentMode(_cocoa_video_data.display_id);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1716
	_cocoa_video_data.mode_list  = CGDisplayAvailableModes(_cocoa_video_data.display_id);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1717
	_cocoa_video_data.palette    = CGPaletteCreateDefaultColorPalette();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1718
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1719
	/* Gather some information that is useful to know about the display */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1720
	/* Maybe this should be moved to QZ_SetVideoMode, in case this is changed after startup */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1721
	CFNumberGetValue(
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1722
		CFDictionaryGetValue(_cocoa_video_data.save_mode, kCGDisplayBitsPerPixel),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1723
		kCFNumberSInt32Type, &_cocoa_video_data.device_bpp
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1724
	);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1725
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1726
	CFNumberGetValue(
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1727
		CFDictionaryGetValue(_cocoa_video_data.save_mode, kCGDisplayWidth),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1728
		kCFNumberSInt32Type, &_cocoa_video_data.device_width
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1729
	);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1730
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1731
	CFNumberGetValue(
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1732
		CFDictionaryGetValue(_cocoa_video_data.save_mode, kCGDisplayHeight),
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1733
		kCFNumberSInt32Type, &_cocoa_video_data.device_height
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1734
	);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1735
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1736
	_cocoa_video_data.cursor_visible = true;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1737
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1738
	/* register for sleep notifications so wake from sleep generates SDL_VIDEOEXPOSE */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1739
//	QZ_RegisterForSleepNotifications();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1740
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1741
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1742
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1743
/* Convert local coordinate to window server (CoreGraphics) coordinate */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1744
static CGPoint QZ_PrivateLocalToCG(NSPoint* p)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1745
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1746
	CGPoint cgp;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1747
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1748
	if (!_cocoa_video_data.fullscreen) {
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1749
		*p = [ _cocoa_video_data.qdview convertPoint:*p toView: nil ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1750
		*p = [ _cocoa_video_data.window convertBaseToScreen:*p ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1751
		p->y = _cocoa_video_data.device_height - p->y;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1752
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1753
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1754
	cgp.x = p->x;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1755
	cgp.y = p->y;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1756
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1757
	return cgp;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1758
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1759
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1760
static void QZ_WarpCursor(int x, int y)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1761
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1762
	NSPoint p;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1763
	CGPoint cgp;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1764
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1765
	/* Only allow warping when in foreground */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1766
	if (![ NSApp isActive ]) return;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1767
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1768
	p = NSMakePoint(x, y);
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1769
	cgp = QZ_PrivateLocalToCG(&p);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1770
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1771
	/* this is the magic call that fixes cursor "freezing" after warp */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1772
	CGSetLocalEventsSuppressionInterval(0.0);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1773
	/* Do the actual warp */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1774
	CGWarpMouseCursorPosition(cgp);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1775
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1776
	/* Generate the mouse moved event */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1777
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1778
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1779
static void QZ_ShowMouse(void)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1780
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1781
	if (!_cocoa_video_data.cursor_visible) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1782
		[ NSCursor unhide ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1783
		_cocoa_video_data.cursor_visible = true;
3317
6aa52b41b084 (svn r4083) -Feature: [OSX] Ported r4075 (Undraw the mouse when it leaves the window and Draw it again when it enters).
egladil
parents: 3316
diff changeset
  1784
6aa52b41b084 (svn r4083) -Feature: [OSX] Ported r4075 (Undraw the mouse when it leaves the window and Draw it again when it enters).
egladil
parents: 3316
diff changeset
  1785
		// Hide the openttd cursor when leaving the window
6aa52b41b084 (svn r4083) -Feature: [OSX] Ported r4075 (Undraw the mouse when it leaves the window and Draw it again when it enters).
egladil
parents: 3316
diff changeset
  1786
		if (_cocoa_video_data.isset)
6aa52b41b084 (svn r4083) -Feature: [OSX] Ported r4075 (Undraw the mouse when it leaves the window and Draw it again when it enters).
egladil
parents: 3316
diff changeset
  1787
			UndrawMouseCursor();
6aa52b41b084 (svn r4083) -Feature: [OSX] Ported r4075 (Undraw the mouse when it leaves the window and Draw it again when it enters).
egladil
parents: 3316
diff changeset
  1788
		_cursor.in_window = false;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1789
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1790
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1791
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1792
static void QZ_HideMouse(void)
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1793
{
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1794
	if (_cocoa_video_data.cursor_visible) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1795
#ifndef _DEBUG
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1796
		[ NSCursor hide ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1797
#endif
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1798
		_cocoa_video_data.cursor_visible = false;
3317
6aa52b41b084 (svn r4083) -Feature: [OSX] Ported r4075 (Undraw the mouse when it leaves the window and Draw it again when it enters).
egladil
parents: 3316
diff changeset
  1799
6aa52b41b084 (svn r4083) -Feature: [OSX] Ported r4075 (Undraw the mouse when it leaves the window and Draw it again when it enters).
egladil
parents: 3316
diff changeset
  1800
		// Show the openttd cursor again
6aa52b41b084 (svn r4083) -Feature: [OSX] Ported r4075 (Undraw the mouse when it leaves the window and Draw it again when it enters).
egladil
parents: 3316
diff changeset
  1801
		_cursor.in_window = true;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1802
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1803
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1804
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1805
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1806
/******************************************************************************
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1807
 *                             OS X application creation                      *
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1808
 ******************************************************************************/
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1809
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1810
/* The main class of the application, the application's delegate */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1811
@implementation OTTDMain
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1812
/* Called when the internal event loop has just started running */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1813
- (void) applicationDidFinishLaunching: (NSNotification*) note
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1814
{
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  1815
	/* Hand off to main application code */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1816
	QZ_GameLoop();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1817
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1818
	/* We're done, thank you for playing */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1819
	[ NSApp stop:_ottd_main ];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1820
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1821
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1822
/* Display the in game quit confirmation dialog */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1823
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*) sender
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1824
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1825
4550
089509518963 (svn r6385) -Fix (r6380): one instance of QZ_AskQuit was left out in the conversion to HandleExitGameRequest.
rubidium
parents: 4549
diff changeset
  1826
	HandleExitGameRequest();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1827
4434
a08cb4b5c179 (svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents: 4300
diff changeset
  1828
	return NSTerminateCancel; // NSTerminateLater ?
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1829
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1830
@end
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1831
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1832
static void setApplicationMenu(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1833
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1834
	/* warning: this code is very odd */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1835
	NSMenu *appleMenu;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1836
	NSMenuItem *menuItem;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1837
	NSString *title;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1838
	NSString *appName;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1839
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1840
	appName = @"OTTD";
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1841
	appleMenu = [[NSMenu alloc] initWithTitle:appName];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1842
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1843
	/* Add menu items */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1844
	title = [@"About " stringByAppendingString:appName];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1845
	[appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1846
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1847
	[appleMenu addItem:[NSMenuItem separatorItem]];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1848
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1849
	title = [@"Hide " stringByAppendingString:appName];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1850
	[appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1851
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1852
	menuItem = (NSMenuItem*)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1853
	[menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1854
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1855
	[appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1856
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1857
	[appleMenu addItem:[NSMenuItem separatorItem]];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1858
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1859
	title = [@"Quit " stringByAppendingString:appName];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1860
	[appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1861
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1862
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1863
	/* Put menu into the menubar */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1864
	menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1865
	[menuItem setSubmenu:appleMenu];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1866
	[[NSApp mainMenu] addItem:menuItem];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1867
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1868
	/* Tell the application object that this is now the application menu */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1869
	[NSApp setAppleMenu:appleMenu];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1870
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1871
	/* Finally give up our references to the objects */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1872
	[appleMenu release];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1873
	[menuItem release];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1874
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1875
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1876
/* Create a window menu */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1877
static void setupWindowMenu(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1878
{
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1879
	NSMenu* windowMenu;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1880
	NSMenuItem* windowMenuItem;
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1881
	NSMenuItem* menuItem;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1882
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1883
	windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1884
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1885
	/* "Minimize" item */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1886
	menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1887
	[windowMenu addItem:menuItem];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1888
	[menuItem release];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1889
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1890
	/* Put menu into the menubar */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1891
	windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1892
	[windowMenuItem setSubmenu:windowMenu];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1893
	[[NSApp mainMenu] addItem:windowMenuItem];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1894
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1895
	/* Tell the application object that this is now the window menu */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1896
	[NSApp setWindowsMenu:windowMenu];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1897
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1898
	/* Finally give up our references to the objects */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1899
	[windowMenu release];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1900
	[windowMenuItem release];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1901
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1902
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1903
static void setupApplication(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1904
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1905
	CPSProcessSerNum PSN;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1906
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1907
	/* Ensure the application object is initialised */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1908
	[NSApplication sharedApplication];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1909
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1910
	/* Tell the dock about us */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1911
	if (!CPSGetCurrentProcess(&PSN) &&
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1912
			!CPSEnableForegroundOperation(&PSN, 0x03, 0x3C, 0x2C, 0x1103) &&
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1913
			!CPSSetFrontProcess(&PSN)) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1914
		[NSApplication sharedApplication];
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1915
	}
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1916
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1917
	/* Set up the menubar */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1918
	[NSApp setMainMenu:[[NSMenu alloc] init]];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1919
	setApplicationMenu();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1920
	setupWindowMenu();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1921
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1922
	/* Create OTTDMain and make it the app delegate */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1923
	_ottd_main = [[OTTDMain alloc] init];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1924
	[NSApp setDelegate:_ottd_main];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1925
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1926
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1927
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1928
/******************************************************************************
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1929
 *                             Video driver interface                         *
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1930
 ******************************************************************************/
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1931
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1932
static void CocoaVideoStop(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1933
{
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1934
	if (!_cocoa_video_started) return;
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  1935
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1936
	if (_cocoa_video_data.isset) QZ_UnsetVideoMode();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1937
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1938
	[_ottd_main release];
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  1939
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  1940
	_cocoa_video_started = false;
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1941
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1942
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1943
static const char *CocoaVideoStart(const char * const *parm)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1944
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1945
	const char *ret;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1946
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1947
	if (_cocoa_video_started) return "Already started";
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  1948
	_cocoa_video_started = true;
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  1949
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  1950
	memset(&_cocoa_video_data, 0, sizeof(_cocoa_video_data));
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  1951
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1952
	setupApplication();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1953
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  1954
	/* Don't create a window or enter fullscreen if we're just going to show a dialog. */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1955
	if (_cocoa_video_dialog) return NULL;
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  1956
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1957
	QZ_VideoInit();
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1958
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1959
	ret = QZ_SetVideoMode(_cur_resolution[0], _cur_resolution[1], _fullscreen);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1960
	if (ret != NULL) CocoaVideoStop();
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1961
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1962
	return ret;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1963
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1964
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1965
static void CocoaVideoMakeDirty(int left, int top, int width, int height)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1966
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1967
	if (_cocoa_video_data.num_dirty_rects < MAX_DIRTY_RECTS) {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1968
		_cocoa_video_data.dirty_rects[_cocoa_video_data.num_dirty_rects].left = left;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1969
		_cocoa_video_data.dirty_rects[_cocoa_video_data.num_dirty_rects].top = top;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1970
		_cocoa_video_data.dirty_rects[_cocoa_video_data.num_dirty_rects].right = left + width;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1971
		_cocoa_video_data.dirty_rects[_cocoa_video_data.num_dirty_rects].bottom = top + height;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1972
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1973
	_cocoa_video_data.num_dirty_rects++;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1974
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1975
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1976
static void CocoaVideoMainLoop(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1977
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1978
	/* Start the main event loop */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1979
	[NSApp run];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1980
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1981
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1982
static bool CocoaVideoChangeRes(int w, int h)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1983
{
5383
ba6d46dd90c3 (svn r7569) -Fix (r7565): cocoa files were (somehow) forgotten.
rubidium
parents: 5090
diff changeset
  1984
	const char *ret = QZ_SetVideoModeAndRestoreOnFailure((uint)w, (uint)h, _cocoa_video_data.fullscreen);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1985
	if (ret != NULL) {
5383
ba6d46dd90c3 (svn r7569) -Fix (r7565): cocoa files were (somehow) forgotten.
rubidium
parents: 5090
diff changeset
  1986
		DEBUG(driver, 0, "cocoa_v: CocoaVideoChangeRes failed with message: %s", ret);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1987
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1988
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1989
	return ret == NULL;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1990
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1991
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1992
static void CocoaVideoFullScreen(bool full_screen)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1993
{
5383
ba6d46dd90c3 (svn r7569) -Fix (r7565): cocoa files were (somehow) forgotten.
rubidium
parents: 5090
diff changeset
  1994
	const char *ret = QZ_SetVideoModeAndRestoreOnFailure(_cocoa_video_data.width, _cocoa_video_data.height, full_screen);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  1995
	if (ret != NULL) {
5383
ba6d46dd90c3 (svn r7569) -Fix (r7565): cocoa files were (somehow) forgotten.
rubidium
parents: 5090
diff changeset
  1996
		DEBUG(driver, 0, "cocoa_v: CocoaVideoFullScreen failed with message: %s", ret);
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1997
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1998
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  1999
	_fullscreen = _cocoa_video_data.fullscreen;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2000
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2001
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2002
const HalVideoDriver _cocoa_video_driver = {
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2003
	CocoaVideoStart,
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2004
	CocoaVideoStop,
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2005
	CocoaVideoMakeDirty,
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2006
	CocoaVideoMainLoop,
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2007
	CocoaVideoChangeRes,
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2008
	CocoaVideoFullScreen,
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2009
};
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2010
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2011
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2012
/* This is needed since sometimes assert is called before the videodriver is initialized */
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  2013
void CocoaDialog(const char* title, const char* message, const char* buttonLabel)
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2014
{
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2015
	bool wasstarted;
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2016
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2017
	_cocoa_video_dialog = true;
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2018
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2019
	wasstarted = _cocoa_video_started;
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  2020
	if (!_cocoa_video_started && CocoaVideoStart(NULL) != NULL) {
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2021
		fprintf(stderr, "%s: %s\n", title, message);
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2022
		return;
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2023
	}
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2024
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2025
	NSRunAlertPanel([NSString stringWithCString: title], [NSString stringWithCString: message], [NSString stringWithCString: buttonLabel], nil, nil);
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2026
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  2027
	if (!wasstarted) CocoaVideoStop();
2827
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2028
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2029
	_cocoa_video_dialog = false;
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2030
}
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2031
12c9eda7edcd (svn r3375) -Add: [ FS#29 ] show an error dialog for OSX cocoa driver (egladil)
truelight
parents: 2743
diff changeset
  2032
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2033
/* This is needed since OS X applications are started with the working dir set to / when double-clicked */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2034
void cocoaSetWorkingDirectory(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2035
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2036
	char parentdir[MAXPATHLEN];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2037
	int chdir_ret;
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2038
	CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2039
	CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
3036
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  2040
	if (CFURLGetFileSystemRepresentation(url2, true, (unsigned char*)parentdir, MAXPATHLEN)) {
953ecf98a096 (svn r3616) Style sweep
tron
parents: 3035
diff changeset
  2041
		chdir_ret = chdir(parentdir); /* chdir to the binary app's parent */
2736
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2042
		assert(chdir_ret == 0);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2043
	}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2044
	CFRelease(url);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2045
	CFRelease(url2);
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2046
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2047
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2048
/* These are called from main() to prevent a _NSAutoreleaseNoPool error when
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2049
 * exiting before the cocoa video driver has been loaded
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2050
 */
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2051
void cocoaSetupAutoreleasePool(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2052
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2053
	_ottd_autorelease_pool = [[NSAutoreleasePool alloc] init];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2054
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2055
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2056
void cocoaReleaseAutoreleasePool(void)
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2057
{
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2058
	[_ottd_autorelease_pool release];
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2059
}
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2060
3d6487cbbb69 (svn r3281) -Feature: [OSX] added native cocoa sound and video drivers (egladil)
bjarni
parents:
diff changeset
  2061
#endif /* WITH_COCOA */