*** empty log message ***

This commit is contained in:
Elias Naur 2003-10-01 09:02:52 +00:00
parent 1ba24e9bdf
commit 38c18eb35c
6 changed files with 80 additions and 169 deletions

View File

@ -7,7 +7,7 @@ NATIVE = \
org_lwjgl_Display.cpp \
org_lwjgl_Sys.cpp \
# org_lwjgl_input_Controller.cpp \
# org_lwjgl_input_Keyboard.cpp \
org_lwjgl_input_Keyboard.cpp \
# org_lwjgl_input_Mouse.cpp \
# org_lwjgl_input_Cursor.cpp \
org_lwjgl_opengl_Window.cpp

View File

@ -39,6 +39,11 @@
* @version $Revision$
*/
#include <IOKit/IOKitLib.h>
#include <IOKit/hid/IOHIDKeys.h>
#include <CoreFoundation/CoreFoundation.h>
#include <stdlib.h>
#include "tools.h"
#include "org_lwjgl_input_Keyboard.h"
#define KEYBOARD_BUFFER_SIZE 50
@ -55,6 +60,36 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_initIDs
{
}
static void printCFString(CFStringRef str) {
CFIndex buffer_size = CFStringGetLength(str) + 1;
char * buffer = (char *)malloc(buffer_size);
if (buffer != NULL) {
if (CFStringGetCString(str, buffer, buffer_size, CFStringGetSystemEncoding()))
printf("%s", buffer);
free(buffer);
}
}
static void printCFNumber(CFNumberRef num) {
long number;
if (CFNumberGetValue(num, kCFNumberLongType, &number))
printf("0x%lx (%ld)", number, number);
}
static void printProperty(CFDictionaryRef dict, CFStringRef key) {
CFTypeRef val = CFDictionaryGetValue(dict, key);
if (val != NULL) {
CFTypeID type = CFGetTypeID(val);
if (type == CFArrayGetTypeID()) printf("array\n");
else if (type == CFBooleanGetTypeID()) printf("boolean\n");
else if (type == CFDictionaryGetTypeID()) printf("dictionary\n");
else if (type == CFNumberGetTypeID()) printCFNumber((CFNumberRef)val);
else if (type == CFStringGetTypeID()) printCFString((CFStringRef)val);
else printf("<unknown object type>\n");
}
}
/*
* Class: org_lwjgl_input_Keyboard
* Method: nCreate
@ -63,6 +98,31 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_initIDs
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nCreate
(JNIEnv * env, jclass clazz)
{
io_iterator_t device_iterator;
io_object_t hid_device;
kern_return_t kern_err;
CFMutableDictionaryRef dev_props;
CFMutableDictionaryRef matching_dic = IOServiceMatching(kIOHIDDeviceKey);
IOReturn err = IOServiceGetMatchingServices(kIOMasterPortDefault, matching_dic, &device_iterator);
if (err != kIOReturnSuccess) {
throwException(env, "Could not find matching devices");
return;
}
while ((hid_device = IOIteratorNext(device_iterator)) != NULL) {
kern_err = IORegistryEntryCreateCFProperties(hid_device, &dev_props, kCFAllocatorDefault, kNilOptions);
IOObjectRelease(hid_device);
if (kern_err == KERN_SUCCESS && dev_props != NULL) {
printf("Device found: ");
printProperty(dev_props, CFSTR(kIOHIDProductKey));
printf(" usage ");
printProperty(dev_props, CFSTR(kIOHIDPrimaryUsageKey));
printf(" usage page ");
printProperty(dev_props, CFSTR(kIOHIDPrimaryUsagePageKey));
printf("\n");
CFRelease(dev_props);
}
}
IOObjectRelease(device_iterator);
}
/*
@ -90,16 +150,17 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nPoll
* Method: nRead
* Signature: (I)V
*/
JNIEXPORT int JNICALL Java_org_lwjgl_input_Keyboard_nRead
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nRead
(JNIEnv * env, jclass clazz)
{
}
/*
* Class: org_lwjgl_input_Keyboard
* Method: nEnableTranslation
* Signature: ()I
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Keyboard_nEnableTranslation
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nEnableTranslation
(JNIEnv *env, jclass clazz)
{
}

View File

@ -1,154 +0,0 @@
/*
* Copyright (c) 2002 Light Weight Java Game Library Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'Light Weight Java Game Library' nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* $Id$
*
* Base OSX functionality for GL.
*
* @author Gregory Pierce <me@gregorypierce.com>
* @version $Revision$
*/
#include "extgl.h"
#include "org_lwjgl_opengl_BaseGL.h"
#include <ApplicationServices/ApplicationServices.h>
#include <OpenGL/OpenGL.h>
static CGLContextObj contextObj;
static CGDirectDisplayID displayID = kCGDirectMainDisplay;
/*
* Utility function to throw an Exception
*/
void throwException(JNIEnv * env, const char * err)
{
jclass cls = env->FindClass("java/lang/Exception");
env->ThrowNew(cls, err);
env->DeleteLocalRef(cls);
}
/*
* Class: org_lwjgl_opengl_BaseGL
* Method: nCreate
* Signature: (Ljava/lang/String;IIIIIIIIZ)V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_BaseGL_nCreate
(JNIEnv * env, jobject obj, jstring title, jint x, jint y, jint width, jint height, jint bpp, jint alpha, jint depth, jint stencil, jboolean fullscreen)
{
CGLPixelFormatObj pixelFormatObj;
long numPixelFormats;
CFDictionaryRef displayMode;
if( extgl_Open() != 0 )
{
throwException( env, "Could not load gl libs" );
return;
}
displayMode = CGDisplayBestModeForParametersAndRefreshRate( displayID,
bpp,
width, height,
60,
NULL );
CGDisplaySwitchToMode( displayID, displayMode );
CGOpenGLDisplayMask displayMask = CGDisplayIDToOpenGLDisplayMask( kCGDirectMainDisplay ) ;
CGLPixelFormatAttribute attribs[] =
{
kCGLPFAFullScreen,
kCGLPFADoubleBuffer,
kCGLPFADisplayMask,
displayMask,
NULL
} ;
long swapInterval;
CGLChoosePixelFormat( attribs, &pixelFormatObj, &numPixelFormats );
if ( pixelFormatObj != NULL )
{
CGLCreateContext( pixelFormatObj, NULL, &contextObj );
CGLDestroyPixelFormat( pixelFormatObj );
swapInterval = 1;
CGLSetParameter( contextObj, kCGLCPSwapInterval, &swapInterval );
CGLSetCurrentContext( contextObj );
CGLSetFullScreen( contextObj );
if (extgl_Initialize() != 0)
{
// TODO: destroy stuff created this far
throwException( env, "Could not init gl function pointers\n");
CGLSetCurrentContext( NULL );
CGLClearDrawable( contextObj );
CGLDestroyContext( contextObj );
contextObj = NULL;
return;
}
}
else
{
throwException( env, "Failed to choose pixel format\n");
}
}
/*
* Class: org_lwjgl_opengl_BaseGL
* Method: nDestroyGL
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_BaseGL_nDestroyGL
(JNIEnv * env, jobject obj)
{
if ( contextObj != NULL )
{
CGLSetCurrentContext( NULL );
CGLClearDrawable( contextObj );
CGLDestroyContext( contextObj );
contextObj = NULL;
}
}
/*
* Class: org_lwjgl_opengl_BaseGL
* Method: swapBuffers
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_BaseGL_swapBuffers
(JNIEnv *, jobject)
{
CGLFlushDrawable( contextObj );
}

View File

@ -40,24 +40,14 @@
*/
#include <Carbon/Carbon.h>
#include <JavaVM/jni.h>
#include "org_lwjgl_opengl_Window.h"
#include "extgl.h"
#include "tools.h"
static WindowRef win_ref;
static AGLContext context;
static bool close_requested;
/*
* Utility function to throw an Exception
*/
static void throwException(JNIEnv * env, const char * err)
{
jclass cls = env->FindClass("java/lang/Exception");
env->ThrowNew(cls, err);
env->DeleteLocalRef(cls);
}
static void setWindowTitle(JNIEnv *env, jstring title_obj) {
const char* title = env->GetStringUTFChars(title_obj, NULL);
CFStringRef cf_title = CFStringCreateWithCString(NULL, title, kCFStringEncodingUTF8);
@ -184,7 +174,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Window_nCreate(JNIEnv *env, jclass
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Window_update
(JNIEnv *env, jclass clazz)
{
RunApplicationEventLoop();
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Window_swapBuffers(JNIEnv * env, jclass clazz)

View File

@ -0,0 +1,7 @@
#include "tools.h"
void throwException(JNIEnv* env, const char* msg) {
jclass cls = env->FindClass("java/lang/Exception");
env->ThrowNew(cls, err);
env->DeleteLocalRef(cls);
}

View File

@ -0,0 +1,8 @@
#ifndef TOOLS_H
#define TOOLS_H
#include <JavaVM/jni.h>
void throwException(JNIEnv* env, const char* msg);
#endif