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