mirror of
https://github.com/darlinghq/darling-glut.git
synced 2025-02-17 02:28:49 +00:00
126 lines
3.2 KiB
Objective-C
126 lines
3.2 KiB
Objective-C
|
|
/* Copyright (c) Dietmar Planitzer, 1998, 2002 */
|
|
|
|
/* This program is freely distributable without licensing fees
|
|
and is provided without guarantee or warrantee expressed or
|
|
implied. This program is -not- in the public domain. */
|
|
|
|
#import "macx_glut.h"
|
|
#import "GLUTView.h"
|
|
|
|
#import <IOKit/hidsystem/event_status_driver.h>
|
|
|
|
|
|
|
|
/* CENTRY */
|
|
void APIENTRY glutKeyboardFunc(void (*func)(unsigned char key, int x, int y))
|
|
{
|
|
GLUTAPI_DECLARATIONS_FAST
|
|
GLUTAPI_BEGIN_FAST
|
|
[__glutCurrentView setKeyDownCallback: func];
|
|
GLUTAPI_END_FAST
|
|
}
|
|
|
|
void APIENTRY glutSpecialFunc(void (*func)(int key, int x, int y))
|
|
{
|
|
GLUTAPI_DECLARATIONS_FAST
|
|
GLUTAPI_BEGIN_FAST
|
|
[__glutCurrentView setSpecialDownCallback: func];
|
|
GLUTAPI_END_FAST
|
|
}
|
|
|
|
void APIENTRY glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y))
|
|
{
|
|
GLUTAPI_DECLARATIONS_FAST
|
|
GLUTAPI_BEGIN_FAST
|
|
[__glutCurrentView setKeyUpCallback: func];
|
|
GLUTAPI_END_FAST
|
|
}
|
|
|
|
void APIENTRY glutSpecialUpFunc(void (*func)(int key, int x, int y))
|
|
{
|
|
GLUTAPI_DECLARATIONS_FAST
|
|
GLUTAPI_BEGIN_FAST
|
|
[__glutCurrentView setSpecialUpCallback: func];
|
|
GLUTAPI_END_FAST
|
|
}
|
|
|
|
void APIENTRY glutIgnoreKeyRepeat(int ignore)
|
|
{
|
|
GLUTAPI_DECLARATIONS_FAST
|
|
GLUTAPI_BEGIN_FAST
|
|
[__glutCurrentView setIgnoreKeyRepeats: (ignore != 0) ? YES : NO];
|
|
GLUTAPI_END_FAST
|
|
}
|
|
/* ENDCENTRY */
|
|
|
|
static double gDefaultKeyRepeatThreshold = -1;
|
|
void __glutResetKeyboard(void)
|
|
{
|
|
if(gDefaultKeyRepeatThreshold != -1) {
|
|
NXEventHandle eventHandle = NXOpenEventStatus();
|
|
|
|
if(eventHandle) {
|
|
NXSetKeyRepeatThreshold(eventHandle, gDefaultKeyRepeatThreshold);
|
|
NXCloseEventStatus(eventHandle);
|
|
}
|
|
}
|
|
}
|
|
|
|
int __glutGetDeviceKeyRepeat(void)
|
|
{
|
|
NXEventHandle eventHandle = NXOpenEventStatus();
|
|
int ival = GLUT_KEY_REPEAT_DEFAULT;
|
|
|
|
if(eventHandle) {
|
|
if(NXKeyRepeatThreshold(eventHandle) > 1000.0)
|
|
ival = GLUT_KEY_REPEAT_OFF;
|
|
else
|
|
ival = GLUT_KEY_REPEAT_ON;
|
|
NXCloseEventStatus(eventHandle);
|
|
}
|
|
|
|
return ival;
|
|
}
|
|
|
|
/* CENTRY */
|
|
void APIENTRY glutSetKeyRepeat(int repeatMode)
|
|
{
|
|
NXEventHandle eventHandle;
|
|
double threshold;
|
|
|
|
if(gDefaultKeyRepeatThreshold == -1) {
|
|
// remember current system key repeat threshold
|
|
eventHandle = NXOpenEventStatus();
|
|
if(eventHandle) {
|
|
gDefaultKeyRepeatThreshold = NXKeyRepeatThreshold(eventHandle);
|
|
NXCloseEventStatus(eventHandle);
|
|
}
|
|
}
|
|
|
|
eventHandle = NXOpenEventStatus();
|
|
if(eventHandle) {
|
|
switch(repeatMode) {
|
|
case GLUT_KEY_REPEAT_OFF:
|
|
threshold = 4500.0;
|
|
break;
|
|
|
|
case GLUT_KEY_REPEAT_ON:
|
|
threshold = (gDefaultKeyRepeatThreshold < 1000.0) ? gDefaultKeyRepeatThreshold : 0.03;
|
|
break;
|
|
|
|
case GLUT_KEY_REPEAT_DEFAULT:
|
|
threshold = gDefaultKeyRepeatThreshold;
|
|
break;
|
|
|
|
default:
|
|
__glutWarning("invalid glutSetKeyRepeat parameter: %d", repeatMode);
|
|
NXCloseEventStatus(eventHandle);
|
|
return;
|
|
}
|
|
NXSetKeyRepeatThreshold(eventHandle, threshold);
|
|
NXCloseEventStatus(eventHandle);
|
|
}
|
|
}
|
|
/* ENDCENTRY */
|