Updated win32 to report Mouse deltas
This commit is contained in:
parent
fa1713c4e8
commit
38ebcf5fb3
|
@ -65,7 +65,6 @@ static int dy;
|
||||||
static int dz;
|
static int dz;
|
||||||
static int last_x;
|
static int last_x;
|
||||||
static int last_y;
|
static int last_y;
|
||||||
static int last_z;
|
|
||||||
static jbyte buttons[NUM_BUTTONS];
|
static jbyte buttons[NUM_BUTTONS];
|
||||||
static event_queue_t event_queue;
|
static event_queue_t event_queue;
|
||||||
static bool buffer_enabled;
|
static bool buffer_enabled;
|
||||||
|
@ -84,14 +83,12 @@ static void putEvent(jint button, jint state, jint dx, jint dy, jint dz) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setCursorPos(int x, int y) {
|
static void setCursorPos(int x, int y) {
|
||||||
int current_x = x;
|
jint event_dx = x - last_x;
|
||||||
int current_y = y;
|
jint event_dy = y - last_y;
|
||||||
jint event_dx = current_x - last_x;
|
|
||||||
jint event_dy = current_y - last_y;
|
|
||||||
dx += event_dx;
|
dx += event_dx;
|
||||||
dy += event_dy;
|
dy += event_dy;
|
||||||
last_x = current_x;
|
last_x = x;
|
||||||
last_y = current_y;
|
last_y = y;
|
||||||
putEvent(-1, 0, event_dx, -event_dy, 0);
|
putEvent(-1, 0, event_dx, -event_dy, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,7 +242,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nCreate
|
||||||
if (disp == NULL)
|
if (disp == NULL)
|
||||||
return;
|
return;
|
||||||
int i;
|
int i;
|
||||||
last_z = last_y = last_x = dx = dy = dz = 0;
|
last_y = last_x = dx = dy = dz = 0;
|
||||||
for (i = 0; i < NUM_BUTTONS; i++)
|
for (i = 0; i < NUM_BUTTONS; i++)
|
||||||
buttons[i] = 0;
|
buttons[i] = 0;
|
||||||
if (!blankCursor()) {
|
if (!blankCursor()) {
|
||||||
|
|
|
@ -43,6 +43,11 @@
|
||||||
#define _LWJGL_WINDOW_H_INCLUDED_
|
#define _LWJGL_WINDOW_H_INCLUDED_
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#define _WIN32_WINDOWS 0x0410
|
||||||
|
#define WINVER 0x0410
|
||||||
|
#define _WIN32_WINNT 0x0400
|
||||||
|
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
#include "extgl.h"
|
#include "extgl.h"
|
||||||
|
@ -66,6 +71,14 @@
|
||||||
|
|
||||||
WINDOW_H_API void closeWindow(HWND hwnd, HDC hdc);
|
WINDOW_H_API void closeWindow(HWND hwnd, HDC hdc);
|
||||||
|
|
||||||
|
WINDOW_H_API void handleMouseMoved(int x, int y);
|
||||||
|
|
||||||
|
WINDOW_H_API void handleMouseScrolled(int dwheel);
|
||||||
|
|
||||||
|
WINDOW_H_API void handleMouseButton(int button, int state);
|
||||||
|
|
||||||
|
WINDOW_H_API void handleMessages(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find a suitable pixel format
|
* Find a suitable pixel format
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,10 +39,9 @@
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windows.h>
|
#include "Window.h"
|
||||||
#include "org_lwjgl_Sys.h"
|
#include "org_lwjgl_Sys.h"
|
||||||
#include "common_tools.h"
|
#include "common_tools.h"
|
||||||
#include "Window.h"
|
|
||||||
|
|
||||||
unsigned __int64 hires_timer_freq = 0; // Hires timer frequency
|
unsigned __int64 hires_timer_freq = 0; // Hires timer frequency
|
||||||
unsigned __int64 hires_timer = 0; // Hires timer current time
|
unsigned __int64 hires_timer = 0; // Hires timer current time
|
||||||
|
|
|
@ -40,13 +40,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#include "org_lwjgl_input_Controller.h"
|
|
||||||
#include <windows.h>
|
|
||||||
#undef DIRECTINPUT_VERSION
|
#undef DIRECTINPUT_VERSION
|
||||||
#define DIRECTINPUT_VERSION 0x0500
|
#define DIRECTINPUT_VERSION 0x0500
|
||||||
#include <dinput.h>
|
|
||||||
#include "Window.h"
|
#include "Window.h"
|
||||||
|
#include "org_lwjgl_input_Controller.h"
|
||||||
|
#include <dinput.h>
|
||||||
#include "common_tools.h"
|
#include "common_tools.h"
|
||||||
|
|
||||||
#define CONTROLLER_AXISMAX 1000 // Maxmimum range to which we'll gauge the swing
|
#define CONTROLLER_AXISMAX 1000 // Maxmimum range to which we'll gauge the swing
|
||||||
|
|
|
@ -39,9 +39,8 @@
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include "org_lwjgl_input_Cursor.h"
|
|
||||||
#include "Window.h"
|
#include "Window.h"
|
||||||
|
#include "org_lwjgl_input_Cursor.h"
|
||||||
#include "common_tools.h"
|
#include "common_tools.h"
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_input_Cursor_nCreateCursor
|
JNIEXPORT void JNICALL Java_org_lwjgl_input_Cursor_nCreateCursor
|
||||||
|
|
|
@ -39,13 +39,11 @@
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#include <windows.h>
|
|
||||||
#undef DIRECTINPUT_VERSION
|
#undef DIRECTINPUT_VERSION
|
||||||
#define DIRECTINPUT_VERSION 0x0300
|
#define DIRECTINPUT_VERSION 0x0300
|
||||||
|
#include "Window.h"
|
||||||
#include <dinput.h>
|
#include <dinput.h>
|
||||||
#include "org_lwjgl_input_Keyboard.h"
|
#include "org_lwjgl_input_Keyboard.h"
|
||||||
#include "Window.h"
|
|
||||||
|
|
||||||
#include "common_tools.h"
|
#include "common_tools.h"
|
||||||
|
|
||||||
|
@ -199,10 +197,10 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nRead
|
||||||
0);
|
0);
|
||||||
|
|
||||||
if (ret == DI_OK) {
|
if (ret == DI_OK) {
|
||||||
unsigned char * buf = buffer_position + (unsigned char *)env->GetDirectBufferAddress(buffer_obj);
|
jint * buf = buffer_position + (jint *)env->GetDirectBufferAddress(buffer_obj);
|
||||||
int buffer_size = (int)env->GetDirectBufferCapacity(buffer_obj) - buffer_position;
|
int buffer_size = ((int)env->GetDirectBufferCapacity(buffer_obj))/sizeof(jint) - buffer_position;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
int event_size = translationEnabled ? 4 : 2;
|
int event_size = 3;
|
||||||
DWORD current_di_event = 0;
|
DWORD current_di_event = 0;
|
||||||
while (index + event_size <= buffer_size && current_di_event < num_di_events) {
|
while (index + event_size <= buffer_size && current_di_event < num_di_events) {
|
||||||
num_events++;
|
num_events++;
|
||||||
|
@ -232,25 +230,25 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nRead
|
||||||
buf[index++] = 0;
|
buf[index++] = 0;
|
||||||
buf[index++] = 0;
|
buf[index++] = 0;
|
||||||
}
|
}
|
||||||
|
jint ch_int;
|
||||||
if (useUnicode) {
|
if (useUnicode) {
|
||||||
wchar_t ch = transBufUnicode[current_char];
|
wchar_t ch = transBufUnicode[current_char];
|
||||||
buf[index++] = (unsigned char) (ch & 0xff);
|
ch_int = ((int)ch) & 0xFFFF;
|
||||||
buf[index++] = (unsigned char) ((ch & 0xff00) >> 8);
|
|
||||||
} else {
|
} else {
|
||||||
buf[index++] = (unsigned char)transBufAscii[current_char];
|
unsigned char ch = (unsigned char)transBufAscii[current_char];
|
||||||
buf[index++] = 0;
|
ch_int = ((int)ch) & 0xFF;
|
||||||
}
|
}
|
||||||
|
buf[index++] = ch_int;
|
||||||
current_char++;
|
current_char++;
|
||||||
} while (index + event_size <= buffer_size && current_char < num_chars);
|
} while (index + event_size <= buffer_size && current_char < num_chars);
|
||||||
} else {
|
} else {
|
||||||
buf[index++] = 0;
|
buf[index++] = 0;
|
||||||
buf[index++] = 0;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
buf[index++] = 0;
|
buf[index++] = 0;
|
||||||
buf[index++] = 0;
|
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
|
buf[index++] = 0;
|
||||||
current_di_event++;
|
current_di_event++;
|
||||||
}
|
}
|
||||||
} else if (ret == DI_BUFFEROVERFLOW) {
|
} else if (ret == DI_BUFFEROVERFLOW) {
|
||||||
|
|
|
@ -39,14 +39,12 @@
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#include "org_lwjgl_input_Mouse.h"
|
|
||||||
#include <windows.h>
|
|
||||||
#undef DIRECTINPUT_VERSION
|
#undef DIRECTINPUT_VERSION
|
||||||
#define DIRECTINPUT_VERSION 0x0300
|
#define DIRECTINPUT_VERSION 0x0300
|
||||||
#include <dinput.h>
|
|
||||||
#include "Window.h"
|
#include "Window.h"
|
||||||
|
#include <dinput.h>
|
||||||
#include "common_tools.h"
|
#include "common_tools.h"
|
||||||
|
#include "org_lwjgl_input_Mouse.h"
|
||||||
|
|
||||||
extern HINSTANCE dll_handle; // Handle to the LWJGL dll
|
extern HINSTANCE dll_handle; // Handle to the LWJGL dll
|
||||||
static LPDIRECTINPUT lpdi = NULL; // DirectInput
|
static LPDIRECTINPUT lpdi = NULL; // DirectInput
|
||||||
|
@ -57,10 +55,19 @@ static bool mHaswheel; // Temporary wheel check
|
||||||
static bool mCreate_success; // bool used to determine successfull creation
|
static bool mCreate_success; // bool used to determine successfull creation
|
||||||
static bool mFirstTimeInitialization = true; // boolean to determine first time initialization
|
static bool mFirstTimeInitialization = true; // boolean to determine first time initialization
|
||||||
|
|
||||||
static POINT cursorPos;
|
|
||||||
static bool mouse_grabbed;
|
static bool mouse_grabbed;
|
||||||
static int mouseMask = DISCL_NONEXCLUSIVE | DISCL_FOREGROUND;
|
static int mouseMask = DISCL_NONEXCLUSIVE | DISCL_FOREGROUND;
|
||||||
|
|
||||||
|
/* These deltas track the cursor position from Windows messages */
|
||||||
|
static int dx;
|
||||||
|
static int dy;
|
||||||
|
static int dwheel;
|
||||||
|
static int last_x;
|
||||||
|
static int last_y;
|
||||||
|
|
||||||
|
static event_queue_t event_queue;
|
||||||
|
static bool buffer_enabled;
|
||||||
|
|
||||||
// Function prototypes (defined in the cpp file, since header file is generic across platforms
|
// Function prototypes (defined in the cpp file, since header file is generic across platforms
|
||||||
void EnumerateMouseCapabilities();
|
void EnumerateMouseCapabilities();
|
||||||
BOOL CALLBACK EnumMouseObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef);
|
BOOL CALLBACK EnumMouseObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef);
|
||||||
|
@ -70,12 +77,22 @@ void SetupMouse();
|
||||||
void InitializeMouseFields();
|
void InitializeMouseFields();
|
||||||
void UpdateMouseFields(JNIEnv *env, jclass clsMouse, jobject coord_buffer_obj, jobject button_buffer_obj);
|
void UpdateMouseFields(JNIEnv *env, jclass clsMouse, jobject coord_buffer_obj, jobject button_buffer_obj);
|
||||||
|
|
||||||
|
static void putEvent(jint button, jint state, jint dx, jint dy, jint dz) {
|
||||||
|
if (buffer_enabled) {
|
||||||
|
putEventElement(&event_queue, button);
|
||||||
|
putEventElement(&event_queue, state);
|
||||||
|
putEventElement(&event_queue, dx);
|
||||||
|
putEventElement(&event_queue, dy);
|
||||||
|
putEventElement(&event_queue, dz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void resetCursorPos(void) {
|
static void resetCursorPos(void) {
|
||||||
/* Reset cursor position to middle of the window */
|
/* Reset cursor position to middle of the window */
|
||||||
RECT clientRect;
|
RECT clientRect;
|
||||||
GetClientRect(getCurrentHWND(), &clientRect);
|
GetClientRect(getCurrentHWND(), &clientRect);
|
||||||
cursorPos.x = (clientRect.left + clientRect.right)/2;
|
last_x = (clientRect.left + clientRect.right)/2;
|
||||||
cursorPos.y = clientRect.bottom - 1 - (clientRect.bottom - clientRect.top)/2;
|
last_y = clientRect.bottom - 1 - (clientRect.bottom - clientRect.top)/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nHasWheel(JNIEnv *, jclass) {
|
JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nHasWheel(JNIEnv *, jclass) {
|
||||||
|
@ -92,6 +109,11 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nGetButtonCount(JNIEnv *, jcla
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nCreate(JNIEnv *env, jclass clazz) {
|
JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nCreate(JNIEnv *env, jclass clazz) {
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
|
initEventQueue(&event_queue);
|
||||||
|
|
||||||
|
last_x = last_y = dx = dy = dwheel = 0;
|
||||||
|
buffer_enabled = false;
|
||||||
|
|
||||||
// Create input
|
// Create input
|
||||||
HRESULT ret = DirectInputCreate(dll_handle, DIRECTINPUT_VERSION, &lpdi, NULL);
|
HRESULT ret = DirectInputCreate(dll_handle, DIRECTINPUT_VERSION, &lpdi, NULL);
|
||||||
if (ret != DI_OK && ret != DIERR_BETADIRECTINPUTVERSION) {
|
if (ret != DI_OK && ret != DIERR_BETADIRECTINPUTVERSION) {
|
||||||
|
@ -128,51 +150,76 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nCreate(JNIEnv *env, jclass cl
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nEnableBuffer(JNIEnv * env, jclass clazz) {
|
JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nEnableBuffer(JNIEnv * env, jclass clazz) {
|
||||||
|
buffer_enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned char mapButton(DWORD button_id) {
|
void handleMouseScrolled(int event_dwheel) {
|
||||||
switch (button_id) {
|
dwheel += event_dwheel;
|
||||||
case DIMOFS_BUTTON0: return 0;
|
putEvent(-1, 0, 0, 0, event_dwheel);
|
||||||
case DIMOFS_BUTTON1: return 1;
|
|
||||||
case DIMOFS_BUTTON2: return 2;
|
|
||||||
case DIMOFS_BUTTON3: return 3;
|
|
||||||
/* case DIMOFS_BUTTON4: return 4;
|
|
||||||
case DIMOFS_BUTTON5: return 5;
|
|
||||||
case DIMOFS_BUTTON6: return 6;
|
|
||||||
case DIMOFS_BUTTON7: return 7;*/
|
|
||||||
default: return mButtoncount;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bufferButtons(int num_di_events, DIDEVICEOBJECTDATA *di_buffer, unsigned char *buffer, int buffer_size) {
|
void handleMouseMoved(int x, int y) {
|
||||||
|
int event_dx = x - last_x;
|
||||||
|
int event_dy = y - last_y;
|
||||||
|
dx += event_dx;
|
||||||
|
dy += event_dy;
|
||||||
|
putEvent(-1, 0, event_dx, -event_dy, 0);
|
||||||
|
last_x = x;
|
||||||
|
last_y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleMouseButton(int button, int state) {
|
||||||
|
putEvent(button, state, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void copyDXEvents(int num_di_events, DIDEVICEOBJECTDATA *di_buffer) {
|
||||||
int buffer_index = 0;
|
int buffer_index = 0;
|
||||||
|
int dx = 0, dy = 0, dwheel = 0;
|
||||||
for (int i = 0; i < num_di_events; i++) {
|
for (int i = 0; i < num_di_events; i++) {
|
||||||
unsigned char button = mapButton(di_buffer[i].dwOfs);
|
int button_state = (di_buffer[i].dwData & 0x80) != 0 ? 1 : 0;
|
||||||
if (button >= 0 && button < mButtoncount) {
|
switch (di_buffer[i].dwOfs) {
|
||||||
unsigned char state = (unsigned char)di_buffer[i].dwData & 0x80;
|
case DIMOFS_BUTTON0:
|
||||||
if (state != 0)
|
putEvent(0, button_state, dx, dy, dwheel);
|
||||||
state = 1;
|
dx = dy = dwheel = 0;
|
||||||
if (buffer_index == buffer_size)
|
break;
|
||||||
|
case DIMOFS_BUTTON1:
|
||||||
|
putEvent(1, button_state, dx, dy, dwheel);
|
||||||
|
dx = dy = dwheel = 0;
|
||||||
|
break;
|
||||||
|
case DIMOFS_BUTTON2:
|
||||||
|
putEvent(2, button_state, dx, dy, dwheel);
|
||||||
|
dx = dy = dwheel = 0;
|
||||||
|
break;
|
||||||
|
case DIMOFS_BUTTON3:
|
||||||
|
putEvent(3, button_state, dx, dy, dwheel);
|
||||||
|
dx = dy = dwheel = 0;
|
||||||
|
break;
|
||||||
|
case DIMOFS_X:
|
||||||
|
dx += di_buffer[i].dwData;
|
||||||
|
break;
|
||||||
|
case DIMOFS_Y:
|
||||||
|
dy += di_buffer[i].dwData;
|
||||||
|
break;
|
||||||
|
case DIMOFS_Z:
|
||||||
|
dwheel += di_buffer[i].dwData;
|
||||||
break;
|
break;
|
||||||
buffer[buffer_index++] = button;
|
|
||||||
buffer[buffer_index++] = state;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return buffer_index/2;
|
if (dx != 0 || dy != 0 || dwheel != 0)
|
||||||
|
putEvent(-1, 0, dx, -dy, dwheel);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nRead
|
static void readDXBuffer()
|
||||||
(JNIEnv * env, jclass clazz, jobject buffer_obj, jint buffer_position)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
static DIDEVICEOBJECTDATA rgdod[EVENT_BUFFER_SIZE];
|
DIDEVICEOBJECTDATA rgdod[EVENT_BUFFER_SIZE];
|
||||||
DWORD num_di_events = EVENT_BUFFER_SIZE;
|
DWORD num_di_events = EVENT_BUFFER_SIZE;
|
||||||
|
|
||||||
HRESULT ret;
|
HRESULT ret;
|
||||||
|
|
||||||
ret = mDIDevice->Acquire();
|
ret = mDIDevice->Acquire();
|
||||||
if (ret != DI_OK && ret != S_FALSE)
|
if (ret != DI_OK && ret != S_FALSE)
|
||||||
return 0;
|
return;
|
||||||
|
|
||||||
ret = mDIDevice->GetDeviceData(
|
ret = mDIDevice->GetDeviceData(
|
||||||
sizeof(DIDEVICEOBJECTDATA),
|
sizeof(DIDEVICEOBJECTDATA),
|
||||||
|
@ -181,9 +228,7 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nRead
|
||||||
0);
|
0);
|
||||||
|
|
||||||
if (ret == DI_OK) {
|
if (ret == DI_OK) {
|
||||||
unsigned char *buffer_ptr = buffer_position + (unsigned char*)env->GetDirectBufferAddress(buffer_obj);
|
copyDXEvents(num_di_events, rgdod);
|
||||||
int buffer_size = (int)env->GetDirectBufferCapacity(buffer_obj) - buffer_position;
|
|
||||||
return bufferButtons(num_di_events, rgdod, buffer_ptr, buffer_size);
|
|
||||||
} else if (ret == DI_BUFFEROVERFLOW) {
|
} else if (ret == DI_BUFFEROVERFLOW) {
|
||||||
printfDebug("Buffer overflowed\n");
|
printfDebug("Buffer overflowed\n");
|
||||||
} else if (ret == DIERR_INPUTLOST) {
|
} else if (ret == DIERR_INPUTLOST) {
|
||||||
|
@ -199,7 +244,19 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nRead
|
||||||
} else {
|
} else {
|
||||||
printfDebug("unknown keyboard error\n");
|
printfDebug("unknown keyboard error\n");
|
||||||
}
|
}
|
||||||
return 0;
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nRead
|
||||||
|
(JNIEnv * env, jclass clazz, jobject buffer_obj, jint buffer_position)
|
||||||
|
{
|
||||||
|
jint* buffer_ptr = (jint *)env->GetDirectBufferAddress(buffer_obj) + buffer_position;
|
||||||
|
int buffer_size = (env->GetDirectBufferCapacity(buffer_obj))/sizeof(jint) - buffer_position;
|
||||||
|
if (mouse_grabbed) {
|
||||||
|
readDXBuffer();
|
||||||
|
} else {
|
||||||
|
handleMessages();
|
||||||
|
}
|
||||||
|
return copyEvents(&event_queue, buffer_ptr, buffer_size, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nGetNativeCursorCaps
|
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nGetNativeCursorCaps
|
||||||
|
@ -378,7 +435,8 @@ static int cap(int val, int min, int max) {
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void getGDICursorDelta(int* return_dx, int* return_dy) {
|
/*static void getGDICursorDelta(int* return_dx, int* return_dy) {
|
||||||
|
|
||||||
int dx;
|
int dx;
|
||||||
int dy;
|
int dy;
|
||||||
|
|
||||||
|
@ -397,14 +455,15 @@ static void getGDICursorDelta(int* return_dx, int* return_dy) {
|
||||||
*return_dx = dx;
|
*return_dx = dx;
|
||||||
*return_dy = dy;
|
*return_dy = dy;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
/**
|
/**
|
||||||
* Updates the fields on the Mouse
|
* Updates the fields on the Mouse
|
||||||
*/
|
*/
|
||||||
static void UpdateMouseFields(JNIEnv *env, jclass clsMouse, jobject coord_buffer_obj, jobject button_buffer_obj) {
|
static void UpdateMouseFields(JNIEnv *env, jclass clsMouse, jobject coord_buffer_obj, jobject button_buffer_obj) {
|
||||||
HRESULT hRes;
|
HRESULT hRes;
|
||||||
DIMOUSESTATE diMouseState; // State of Mouse
|
DIMOUSESTATE diMouseState; // State of Mouse
|
||||||
int dx, dy;
|
|
||||||
|
handleMessages();
|
||||||
|
|
||||||
int *coords = (int *)env->GetDirectBufferAddress(coord_buffer_obj);
|
int *coords = (int *)env->GetDirectBufferAddress(coord_buffer_obj);
|
||||||
int coords_length = (int)env->GetDirectBufferCapacity(coord_buffer_obj);
|
int coords_length = (int)env->GetDirectBufferCapacity(coord_buffer_obj);
|
||||||
|
@ -435,16 +494,15 @@ static void UpdateMouseFields(JNIEnv *env, jclass clsMouse, jobject coord_buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mouse_grabbed) {
|
if (mouse_grabbed) {
|
||||||
dx = diMouseState.lX;
|
coords[0] = diMouseState.lX;
|
||||||
dy = diMouseState.lY;
|
coords[1] = -diMouseState.lY;
|
||||||
|
coords[2] = diMouseState.lZ;
|
||||||
} else {
|
} else {
|
||||||
getGDICursorDelta(&dx, &dy);
|
coords[0] = dx;
|
||||||
|
coords[1] = -dy;
|
||||||
|
coords[2] = dwheel;
|
||||||
|
dx = dy = dwheel = 0;
|
||||||
}
|
}
|
||||||
dy = -dy;
|
|
||||||
|
|
||||||
coords[0] = dx;
|
|
||||||
coords[1] = dy;
|
|
||||||
coords[2] = diMouseState.lZ;
|
|
||||||
|
|
||||||
for (int i = 0; i < mButtoncount; i++) {
|
for (int i = 0; i < mButtoncount; i++) {
|
||||||
if (diMouseState.rgbButtons[i] != 0) {
|
if (diMouseState.rgbButtons[i] != 0) {
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
|
|
||||||
#define _PRIVATE_WINDOW_H_
|
#define _PRIVATE_WINDOW_H_
|
||||||
#include "Window.h"
|
#include "Window.h"
|
||||||
|
#include <windowsx.h>
|
||||||
#include "extgl_wgl.h"
|
#include "extgl_wgl.h"
|
||||||
#include "common_tools.h"
|
#include "common_tools.h"
|
||||||
#include "extgl_wgl.h"
|
#include "extgl_wgl.h"
|
||||||
|
@ -322,6 +323,49 @@ LRESULT CALLBACK lwjglWindowProc(HWND hWnd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case WM_MOUSEMOVE:
|
||||||
|
{
|
||||||
|
int xPos = GET_X_LPARAM(lParam);
|
||||||
|
int yPos = GET_Y_LPARAM(lParam);
|
||||||
|
handleMouseMoved(xPos, yPos);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case WM_MOUSEWHEEL:
|
||||||
|
{
|
||||||
|
int dwheel = GET_WHEEL_DELTA_WPARAM(wParam);
|
||||||
|
handleMouseScrolled(dwheel);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
{
|
||||||
|
handleMouseButton(0, 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case WM_LBUTTONUP:
|
||||||
|
{
|
||||||
|
handleMouseButton(0, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case WM_RBUTTONDOWN:
|
||||||
|
{
|
||||||
|
handleMouseButton(1, 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case WM_RBUTTONUP:
|
||||||
|
{
|
||||||
|
handleMouseButton(1, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
{
|
||||||
|
handleMouseButton(2, 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case WM_MBUTTONUP:
|
||||||
|
{
|
||||||
|
handleMouseButton(2, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
case WM_ACTIVATE:
|
case WM_ACTIVATE:
|
||||||
{
|
{
|
||||||
switch(LOWORD(wParam)) {
|
switch(LOWORD(wParam)) {
|
||||||
|
@ -398,7 +442,7 @@ static bool registerWindow()
|
||||||
/*
|
/*
|
||||||
* Handle native Win32 messages
|
* Handle native Win32 messages
|
||||||
*/
|
*/
|
||||||
static void handleMessages(JNIEnv * env, jclass clazz)
|
void handleMessages(void)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Now's our chance to deal with Windows messages that are
|
* Now's our chance to deal with Windows messages that are
|
||||||
|
@ -496,7 +540,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Display_nSetTitle
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Display_nUpdate
|
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Display_nUpdate
|
||||||
(JNIEnv * env, jclass clazz)
|
(JNIEnv * env, jclass clazz)
|
||||||
{
|
{
|
||||||
handleMessages(env, clazz);
|
handleMessages();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue