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