nkeynes@964: /** nkeynes@964: * $Id$ nkeynes@964: * nkeynes@964: * The OS/X side of the video support (responsible for actually displaying / nkeynes@964: * rendering frames) nkeynes@964: * nkeynes@964: * Copyright (c) 2008 Nathan Keynes. nkeynes@964: * nkeynes@964: * This program is free software; you can redistribute it and/or modify nkeynes@964: * it under the terms of the GNU General Public License as published by nkeynes@964: * the Free Software Foundation; either version 2 of the License, or nkeynes@964: * (at your option) any later version. nkeynes@964: * nkeynes@964: * This program is distributed in the hope that it will be useful, nkeynes@964: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@964: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@964: * GNU General Public License for more details. nkeynes@964: */ nkeynes@964: nkeynes@964: #include nkeynes@964: #include nkeynes@964: #include "lxdream.h" nkeynes@964: #include "display.h" nkeynes@964: #include "dckeysyms.h" nkeynes@964: #include "cocoaui/cocoaui.h" nkeynes@964: #include "drivers/video_nsgl.h" nkeynes@964: #include "drivers/video_gl.h" nkeynes@964: #include "pvr2/pvr2.h" nkeynes@964: #import nkeynes@964: nkeynes@1086: #include "drivers/mac_keymap.h" nkeynes@964: nkeynes@964: #define MOUSE_X_SCALE 5 nkeynes@964: #define MOUSE_Y_SCALE 5 nkeynes@964: nkeynes@964: static gboolean video_osx_init(); nkeynes@964: static void video_osx_shutdown(); nkeynes@964: static void video_osx_display_blank( uint32_t colour ); nkeynes@964: static uint16_t video_osx_resolve_keysym( const gchar *keysym ); nkeynes@964: static uint16_t video_osx_keycode_to_dckeysym(uint16_t keycode); nkeynes@964: static gchar *video_osx_keycode_to_keysym(uint16_t keycode); nkeynes@964: nkeynes@964: struct display_driver display_osx_driver = { nkeynes@964: "osx", nkeynes@964: N_("OS X Cocoa GUI-based OpenGL driver"), nkeynes@964: video_osx_init, video_osx_shutdown, nkeynes@964: video_osx_resolve_keysym, nkeynes@964: video_osx_keycode_to_dckeysym, nkeynes@964: video_osx_keycode_to_keysym, nkeynes@964: NULL, NULL, NULL, NULL, NULL, nkeynes@964: NULL, nkeynes@964: video_osx_display_blank, NULL }; nkeynes@964: nkeynes@964: nkeynes@964: static NSView *video_view = NULL; nkeynes@964: int video_width = 640; nkeynes@964: int video_height = 480; nkeynes@964: nkeynes@964: #define MAX_MASK_KEYCODE 128 nkeynes@964: nkeynes@964: @interface LxdreamOSXView : LxdreamVideoView nkeynes@964: { nkeynes@964: int flagsMask[MAX_MASK_KEYCODE]; nkeynes@964: } nkeynes@964: @end nkeynes@964: nkeynes@964: @implementation LxdreamVideoView nkeynes@964: - (void)setIsGrabbed: (BOOL)grabbed nkeynes@964: { nkeynes@964: isGrabbed = grabbed; nkeynes@964: } nkeynes@964: - (void) setDelegate: (id)other nkeynes@964: { nkeynes@964: delegate = other; nkeynes@964: } nkeynes@964: - (id)delegate nkeynes@964: { nkeynes@964: return delegate; nkeynes@964: } nkeynes@964: @end nkeynes@964: nkeynes@964: @implementation LxdreamOSXView nkeynes@964: //-------------------------------------------------------------------- nkeynes@964: - (id)initWithFrame: (NSRect)contentRect nkeynes@964: { nkeynes@964: if( [super initWithFrame: contentRect] != nil ) { nkeynes@964: int i; nkeynes@964: isGrabbed = NO; nkeynes@964: for( i=0; iname); nkeynes@964: } nkeynes@964: nkeynes@964: static uint16_t video_osx_resolve_keysym( const gchar *keysym ) nkeynes@964: { nkeynes@964: struct mac_keymap_struct *result = bsearch( keysym, mac_keysyms, mac_keysym_count, sizeof(struct mac_keymap_struct), mac_keymap_cmp ); nkeynes@964: if( result == NULL ) { nkeynes@964: return 0; nkeynes@964: } else { nkeynes@964: return result->keycode + 1; nkeynes@964: } nkeynes@964: } nkeynes@964: nkeynes@964: static uint16_t video_osx_keycode_to_dckeysym(uint16_t keycode) nkeynes@964: { nkeynes@964: if( keycode < 1 || keycode > 128 ) { nkeynes@964: return DCKB_NONE; nkeynes@964: } else { nkeynes@964: return mac_keycode_to_dckeysym[keycode-1]; nkeynes@964: } nkeynes@964: } nkeynes@964: nkeynes@964: static gchar *video_osx_keycode_to_keysym(uint16_t keycode) nkeynes@964: { nkeynes@964: if( keycode < 1 || keycode > 128 ) { nkeynes@964: return NULL; nkeynes@964: } else { nkeynes@964: return g_strdup(mac_keysyms_by_keycode[keycode-1]); nkeynes@964: } nkeynes@964: }