Windows: Removed directinput files, since they are now unused. Fixed headers build.xml target

This commit is contained in:
Elias Naur 2008-04-10 20:47:29 +00:00
parent e50dc04191
commit 657bd156e2
15 changed files with 4 additions and 1405 deletions

View file

@ -1,78 +0,0 @@
/*
* Copyright (c) 2002-2008 LWJGL 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 'LWJGL' 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.
*/
package org.lwjgl.opengl;
/**
* This is the DirectInput base class
* @author elias_naur
*/
import org.lwjgl.LWJGLException;
abstract class WindowsDirectInput {
public final static int KEYBOARD_TYPE = 1;
public final static int MOUSE_TYPE = 2;
/* DirectInput constants */
public final static int DI_OK = 0x00000000;
public final static int DI_NOEFFECT = 0x00000001;
public final static int DI_PROPNOEFFECT = 0x00000001;
public final static int DI_POLLEDDEVICE = 0x00000002;
public final static int DI_DOWNLOADSKIPPED = 0x00000003;
public final static int DI_EFFECTRESTARTED = 0x00000004;
public final static int DI_TRUNCATED = 0x00000008;
public final static int DI_SETTINGSNOTSAVED = 0x0000000B;
public final static int DI_TRUNCATEDANDRESTARTED = 0x0000000C;
public final static int DI_BUFFEROVERFLOW = 0x00000001;
public final static int DIERR_INPUTLOST = 0x8007001E;
public final static int DIERR_NOTACQUIRED = 0x8007001C;
public final static int DIERR_OTHERAPPHASPRIO = 0x80070005;
private final long di_interface;
public WindowsDirectInput(long hinst) throws LWJGLException {
di_interface = createDirectInput(hinst);
}
protected abstract long createDirectInput(long hinst) throws LWJGLException;
public WindowsDirectInputDevice createDevice(int type) throws LWJGLException {
return createDevice(di_interface, type);
}
protected abstract WindowsDirectInputDevice createDevice(long di_interface, int type) throws LWJGLException;
public void release() {
release(di_interface);
}
protected abstract void release(long di_interface);
}

View file

@ -1,59 +0,0 @@
/*
* Copyright (c) 2002-2008 LWJGL 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 'LWJGL' 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.
*/
package org.lwjgl.opengl;
/**
* This is the DirectInput3 interface
* @author elias_naur
*/
import org.lwjgl.LWJGLException;
final class WindowsDirectInput3 extends WindowsDirectInput {
/* Re-define device types to get them included in the native headers */
public final static int KEYBOARD_TYPE = WindowsDirectInput.KEYBOARD_TYPE;
public final static int MOUSE_TYPE = WindowsDirectInput.MOUSE_TYPE;
public WindowsDirectInput3(long hinst) throws LWJGLException {
super(hinst);
}
protected native long createDirectInput(long hinst) throws LWJGLException;
protected WindowsDirectInputDevice createDevice(long di_interface, int type) throws LWJGLException {
long device = nCreateDevice(di_interface, type);
return new WindowsDirectInputDevice3(device);
}
private static native long nCreateDevice(long di_interface, int type) throws LWJGLException;
protected native void release(long di_interface);
}

View file

@ -1,59 +0,0 @@
/*
* Copyright (c) 2002-2008 LWJGL 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 'LWJGL' 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.
*/
package org.lwjgl.opengl;
/**
* This is the DirectInput8 interface
* @author elias_naur
*/
import org.lwjgl.LWJGLException;
final class WindowsDirectInput8 extends WindowsDirectInput {
/* Re-define device types to get them included in the native headers */
public final static int KEYBOARD_TYPE = WindowsDirectInput.KEYBOARD_TYPE;
public final static int MOUSE_TYPE = WindowsDirectInput.MOUSE_TYPE;
public WindowsDirectInput8(long hinst) throws LWJGLException {
super(hinst);
}
protected native long createDirectInput(long hinst) throws LWJGLException;
protected WindowsDirectInputDevice createDevice(long di_interface, int type) throws LWJGLException {
long device = nCreateDevice(di_interface, type);
return new WindowsDirectInputDevice8(device);
}
private static native long nCreateDevice(long di_interface, int type) throws LWJGLException;
protected native void release(long di_interface);
}

View file

@ -1,132 +0,0 @@
/*
* Copyright (c) 2002-2008 LWJGL 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 'LWJGL' 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.
*/
package org.lwjgl.opengl;
/**
* This is the DirectInputDevice interface
* @author elias_naur
*/
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import org.lwjgl.LWJGLException;
import org.lwjgl.BufferUtils;
abstract class WindowsDirectInputDevice {
public final static int DISCL_EXCLUSIVE = 0x00000001;
public final static int DISCL_NONEXCLUSIVE = 0x00000002;
public final static int DISCL_FOREGROUND = 0x00000004;
public final static int DISCL_BACKGROUND = 0x00000008;
public final static int DISCL_NOWINKEY = 0x00000010;
public final static int GUID_XAxis = 1;
public final static int GUID_YAxis = 2;
public final static int GUID_ZAxis = 3;
public final static int GUID_Button = 4;
public final static int GUID_Unknown = 5;
public final static int DATA_SIZE = 3;
private final long di_device;
private ByteBuffer event_buffer;
public WindowsDirectInputDevice(long di_device) {
this.di_device = di_device;
}
public void release() {
release(di_device);
}
protected abstract void release(long di_device);
public int poll() {
return poll(di_device);
}
protected abstract int poll(long di_device);
public void setDataFormat(int type) throws LWJGLException {
int ret = setDataFormat(di_device, type);
if (ret != WindowsDirectInput.DI_OK)
throw new LWJGLException("Failed to set data format (" + Integer.toHexString(ret) + ")");
}
protected abstract int setDataFormat(long di_device, int type);
public void setCooperateLevel(long hwnd, int flags) throws LWJGLException {
int ret = setCooperativeLevel(di_device, hwnd, flags);
if (ret != WindowsDirectInput.DI_OK)
throw new LWJGLException("Failed to set cooperative level (" + Integer.toHexString(ret) + ")");
}
protected abstract int setCooperativeLevel(long di_device, long hwnd, int flags);
public int acquire() {
return acquire(di_device);
}
protected abstract int acquire(long di_device);
public void setBufferSize(int buffer_size) throws LWJGLException {
int ret = setBufferSize(di_device, buffer_size);
if (ret != WindowsDirectInput.DI_OK && ret != WindowsDirectInput.DI_PROPNOEFFECT && ret != WindowsDirectInput.DI_POLLEDDEVICE)
throw new LWJGLException("Failed to set buffer size (" + Integer.toHexString(ret) + ")");
int event_buffer_size = getEventSize()*buffer_size;
event_buffer = BufferUtils.createByteBuffer(event_buffer_size);
}
protected abstract int setBufferSize(long di_device, int buffer_size);
public int getDeviceData(IntBuffer buffer) {
int events_remaining = buffer.remaining()/DATA_SIZE;
if (event_buffer == null || events_remaining > event_buffer.remaining()/getEventSize())
event_buffer = BufferUtils.createByteBuffer(events_remaining*getEventSize());
return getDeviceData(di_device, event_buffer, event_buffer.capacity(), buffer, buffer.position(), buffer.remaining());
}
protected abstract int getDeviceData(long di_device, ByteBuffer event_buffer, int event_buffer_size, IntBuffer buffer, int position, int size);
/**
* Device data is returned in tuples of the form <dwOfs, dwData>.
* buffer position() is moved accordingly to number of events.
*/
public int getDeviceState(ByteBuffer buffer) {
return getDeviceState(di_device, buffer, buffer.position(), buffer.remaining());
}
protected abstract int getDeviceState(long di_device, ByteBuffer buffer, int position, int size);
public void unacquire() {
unacquire(di_device);
}
protected abstract int unacquire(long di_device);
public int enumObjects(WindowsDirectInputDeviceObjectCallback enumerator) {
return enumObjects(di_device, enumerator);
}
protected abstract int enumObjects(long di_device, WindowsDirectInputDeviceObjectCallback enumerator);
protected abstract int getEventSize();
}

View file

@ -1,78 +0,0 @@
/*
* Copyright (c) 2002-2008 LWJGL 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 'LWJGL' 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.
*/
package org.lwjgl.opengl;
/**
* This is the DirectInputDevice3 interface
* @author elias_naur
*/
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
final class WindowsDirectInputDevice3 extends WindowsDirectInputDevice {
/** Re-declare to get the constants into the native headers */
public final static int GUID_XAxis = WindowsDirectInputDevice.GUID_XAxis;
public final static int GUID_YAxis = WindowsDirectInputDevice.GUID_YAxis;
public final static int GUID_ZAxis = WindowsDirectInputDevice.GUID_ZAxis;
public final static int GUID_Button = WindowsDirectInputDevice.GUID_Button;
public final static int GUID_Unknown = WindowsDirectInputDevice.GUID_Unknown;
public final static int DATA_SIZE = WindowsDirectInputDevice.DATA_SIZE;
public WindowsDirectInputDevice3(long di_device) {
super(di_device);
}
protected native int setDataFormat(long di_device, int type);
protected native int setCooperativeLevel(long di_device, long hwnd, int flags);
protected native int acquire(long di_device);
protected native int getDeviceState(long di_device, ByteBuffer buffer, int position, int size);
protected native int getDeviceData(long di_device, ByteBuffer event_buffer, int event_buffer_size, IntBuffer buffer, int position, int size);
protected native int unacquire(long di_device);
protected int poll(long di_device) {
return WindowsDirectInput.DI_OK;
}
protected native int setBufferSize(long di_device, int buffer_size);
protected native int getEventSize();
protected native void release(long di_device);
protected native int enumObjects(long di_device, WindowsDirectInputDeviceObjectCallback enumerator);
}

View file

@ -1,76 +0,0 @@
/*
* Copyright (c) 2002-2008 LWJGL 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 'LWJGL' 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.
*/
package org.lwjgl.opengl;
/**
* This is the DirectInputDevice3 interface
* @author elias_naur
*/
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
final class WindowsDirectInputDevice8 extends WindowsDirectInputDevice {
/** Re-declare to get the constants into the native headers */
public final static int GUID_XAxis = WindowsDirectInputDevice.GUID_XAxis;
public final static int GUID_YAxis = WindowsDirectInputDevice.GUID_YAxis;
public final static int GUID_ZAxis = WindowsDirectInputDevice.GUID_ZAxis;
public final static int GUID_Button = WindowsDirectInputDevice.GUID_Button;
public final static int GUID_Unknown = WindowsDirectInputDevice.GUID_Unknown;
public final static int DATA_SIZE = WindowsDirectInputDevice.DATA_SIZE;
public WindowsDirectInputDevice8(long di_device) {
super(di_device);
}
protected native int setDataFormat(long di_device, int type);
protected native int setCooperativeLevel(long di_device, long hwnd, int flags);
protected native int acquire(long di_device);
protected native int getDeviceState(long di_device, ByteBuffer buffer, int position, int size);
protected native int getDeviceData(long di_device, ByteBuffer event_buffer, int event_buffer_size, IntBuffer buffer, int position, int size);
protected native int unacquire(long di_device);
protected native int poll(long di_device);
protected native int setBufferSize(long di_device, int buffer_size);
protected native int getEventSize();
protected native void release(long di_device);
protected native int enumObjects(long di_device, WindowsDirectInputDeviceObjectCallback enumerator);
}

View file

@ -1,41 +0,0 @@
/*
* Copyright (c) 2002-2008 LWJGL 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 'LWJGL' 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.
*/
package org.lwjgl.opengl;
/**
* This is the DirectInputDevice callback interface
* @author elias_naur
*/
interface WindowsDirectInputDeviceObjectCallback {
public boolean nextObject(int type, String name);
}

View file

@ -1,352 +0,0 @@
/*
* Copyright (c) 2002-2008 LWJGL 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 'LWJGL' 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.
*/
package org.lwjgl.opengl;
/**
* This is the Windows implementation of the Mouse.
* @author elias_naur
*/
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.LWJGLUtil;
import org.lwjgl.input.Mouse;
final class WindowsDirectInputMouse {
private final static int BUFFER_SIZE = 50;
private final static int BUTTON_STATES_SIZE = 7;
private final static int DIMOFS_X = 0;
private final static int DIMOFS_Y = 4;
private final static int DIMOFS_Z = 8;
private final static int DIMOFS_BUTTON0 = 12;
private final static int DIMOFS_BUTTON1 = 13;
private final static int DIMOFS_BUTTON2 = 14;
private final static int DIMOFS_BUTTON3 = 15;
private final long hwnd;
private final WindowsDirectInput dinput;
private final WindowsDirectInputDevice mouse;
private final int mouse_button_count;
private final boolean has_wheel;
private final EventQueue event_queue = new EventQueue(Mouse.EVENT_SIZE);
/* Buffer to hold a DIMOUSESTATE */
private final ByteBuffer mouse_state;
private final IntBuffer temp_data_buffer;
private final ByteBuffer mouse_event = ByteBuffer.allocate(Mouse.EVENT_SIZE);
private boolean mouse_grabbed;
private byte[] win32_message_button_states = new byte[BUTTON_STATES_SIZE];
private int accum_dwheel;
private int last_x;
private int last_y;
public WindowsDirectInputMouse(WindowsDirectInput dinput, long hwnd) throws LWJGLException {
this.hwnd = hwnd;
this.dinput = dinput;
try {
mouse = dinput.createDevice(WindowsDirectInput.MOUSE_TYPE);
try {
mouse.setDataFormat(WindowsDirectInput.MOUSE_TYPE);
mouse.setBufferSize(BUFFER_SIZE);
if (!acquireNonExclusive())
throw new LWJGLException("Failed to acquire mouse non-exclusive");
} catch (LWJGLException e) {
mouse.release();
throw e;
}
} catch (LWJGLException e) {
dinput.release();
throw e;
}
MouseEnumerator enumerator = new MouseEnumerator();
mouse.enumObjects(enumerator);
this.mouse_button_count = Math.min(enumerator.getButtonCount(), 4);
this.has_wheel = enumerator.hasWheel();
mouse_state = BufferUtils.createByteBuffer(3*4 + 4);
temp_data_buffer = BufferUtils.createIntBuffer(BUFFER_SIZE*WindowsDirectInputDevice.DATA_SIZE);
}
public boolean hasWheel() {
return has_wheel;
}
public int getButtonCount() {
return mouse_button_count;
}
private boolean acquire(int flags) {
try {
mouse.setCooperateLevel(hwnd, flags);
mouse.acquire();
return true;
} catch (LWJGLException e) {
LWJGLUtil.log("Failed to acquire mouse: " + e);
return false;
}
}
private boolean acquireNonExclusive() {
return acquire(WindowsDirectInputDevice.DISCL_NONEXCLUSIVE | WindowsDirectInputDevice.DISCL_FOREGROUND) ||
acquire(WindowsDirectInputDevice.DISCL_NONEXCLUSIVE | WindowsDirectInputDevice.DISCL_BACKGROUND);
}
public void destroy() {
mouse.unacquire();
mouse.release();
dinput.release();
}
public void poll(IntBuffer coord_buffer, ByteBuffer buttons) {
int ret = mouse.acquire();
if (ret != WindowsDirectInput.DI_OK && ret != WindowsDirectInput.DI_NOEFFECT)
return;
mouse.poll();
for (int i = 0; i < coord_buffer.remaining(); i++)
coord_buffer.put(coord_buffer.position() + i, 0);
mouse_state.clear();
ret = mouse.getDeviceState(mouse_state);
int mouse_state_lx = mouse_state.getInt();
int mouse_state_ly = mouse_state.getInt();
int mouse_state_lz = mouse_state.getInt();
int num_buttons = mouse_button_count;
if (mouse_grabbed || ret == WindowsDirectInput.DI_OK) {
if (ret != WindowsDirectInput.DI_OK) {
LWJGLUtil.log("Error getting mouse state: (0x" + Integer.toHexString(ret) + ")");
return;
}
coord_buffer.put(coord_buffer.position() + 2, mouse_state_lz);
if (num_buttons > buttons.remaining())
num_buttons = buttons.remaining();
for (int j = 0; j < num_buttons; j++) {
byte button_state = (mouse_state.get() & 0x80) != 0 ? (byte)1 : (byte)0;
buttons.put(buttons.position() + j, button_state);
// track the button state in the windows message buffer state array
// to get accurate button information when releasing a grab
win32_message_button_states[j] = button_state;
}
} else {
coord_buffer.put(coord_buffer.position() + 2, accum_dwheel);
if (num_buttons > win32_message_button_states.length)
num_buttons = win32_message_button_states.length;
for (int j = 0; j < num_buttons; j++) {
buttons.put(buttons.position() + j, win32_message_button_states[j]);
}
}
accum_dwheel = 0;
if (mouse_grabbed) {
coord_buffer.put(coord_buffer.position() + 0, mouse_state_lx);
coord_buffer.put(coord_buffer.position() + 1, -mouse_state_ly);
} else {
coord_buffer.put(coord_buffer.position() + 0, last_x);
coord_buffer.put(coord_buffer.position() + 1, last_y);
}
}
private void putMouseEventWithCoords(byte button, byte state, int coord1, int coord2, int dz, long nanos) {
mouse_event.clear();
mouse_event.put(button).put(state).putInt(coord1).putInt(coord2).putInt(dz).putLong(nanos);
mouse_event.flip();
event_queue.putEvent(mouse_event);
}
private void putMouseEvent(byte button, byte state, int dz, long nanos) {
if (mouse_grabbed)
putMouseEventWithCoords(button, state, 0, 0, dz, nanos);
else
putMouseEventWithCoords(button, state, last_x, last_y, dz, nanos);
}
private void copyDXEvents(IntBuffer buffer) {
int buffer_index = 0;
int dx = 0, dy = 0, dwheel = 0;
byte button_state;
int i;
long nanos = 0;
while (buffer.hasRemaining()) {
int dwOfs = buffer.get();
int dwData = buffer.get();
long dwTimeStamp = ((long)buffer.get()) & 0xFFFFFFFF;
nanos = dwTimeStamp*1000000;
button_state = (dwData & 0x80) != 0 ? (byte)1 : (byte)0;
switch (dwOfs) {
case DIMOFS_BUTTON0:
putMouseEventWithCoords((byte)0, button_state, dx, -dy, dwheel, nanos);
dx = dy = dwheel = 0;
break;
case DIMOFS_BUTTON1:
putMouseEventWithCoords((byte)1, button_state, dx, -dy, dwheel, nanos);
dx = dy = dwheel = 0;
break;
case DIMOFS_BUTTON2:
putMouseEventWithCoords((byte)2, button_state, dx, -dy, dwheel, nanos);
dx = dy = dwheel = 0;
break;
case DIMOFS_BUTTON3:
putMouseEventWithCoords((byte)3, button_state, dx, -dy, dwheel, nanos);
dx = dy = dwheel = 0;
break;
case DIMOFS_X:
dx += dwData;
break;
case DIMOFS_Y:
dy += dwData;
break;
case DIMOFS_Z:
dwheel += dwData;
break;
}
}
if (dx != 0 || dy != 0 || dwheel != 0)
putMouseEventWithCoords((byte)-1, (byte)0, dx, -dy, dwheel, nanos);
}
private void readDXBuffer() {
int ret = mouse.acquire();
if (ret != WindowsDirectInput.DI_OK && ret != WindowsDirectInput.DI_NOEFFECT)
return;
mouse.poll();
temp_data_buffer.clear();
ret = mouse.getDeviceData(temp_data_buffer);
switch (ret) {
case WindowsDirectInput.DI_OK:
break;
case WindowsDirectInput.DI_BUFFEROVERFLOW:
LWJGLUtil.log("Mouse buffer overflowed");
break;
case WindowsDirectInput.DIERR_INPUTLOST:
LWJGLUtil.log("Mouse input lost");
break;
case WindowsDirectInput.DIERR_NOTACQUIRED:
LWJGLUtil.log("Mouse not acquired");
break;
default:
LWJGLUtil.log("unknown mouse error (" + Integer.toHexString(ret) + ")");
break;
}
}
public final void flush() {
readDXBuffer();
temp_data_buffer.clear();
}
public void read(ByteBuffer buffer) {
readDXBuffer();
if (mouse_grabbed) {
temp_data_buffer.flip();
copyDXEvents(temp_data_buffer);
}
event_queue.copyEvents(buffer);
}
public void grab(boolean grab) {
if(grab) {
if (!mouse_grabbed) {
flush();
mouse_grabbed = true;
mouse.unacquire();
if (!acquire(WindowsDirectInputDevice.DISCL_EXCLUSIVE | WindowsDirectInputDevice.DISCL_FOREGROUND))
LWJGLUtil.log("Failed to reset cooperative mode");
}
} else {
if (mouse_grabbed) {
mouse_grabbed = false;
mouse.unacquire();
acquireNonExclusive();
}
}
event_queue.clearEvents();
}
public void handleMouseScrolled(int event_dwheel, long millis) {
accum_dwheel += event_dwheel;
putMouseEvent((byte)-1, (byte)0, event_dwheel, millis*1000000);
}
public void handleMouseMoved(int x, int y, long millis) {
int dx;
int dy;
dx = x - last_x;
dy = y - last_y;
last_x = x;
last_y = y;
long nanos = millis*1000000;
if (mouse_grabbed) {
putMouseEventWithCoords((byte)-1, (byte)0, dx, dy, 0, nanos);
} else {
putMouseEventWithCoords((byte)-1, (byte)0, x, y, 0, nanos);
}
}
public void handleMouseButton(byte button, byte state, long millis) {
putMouseEvent(button, state, 0, millis*1000000);
if (button < BUTTON_STATES_SIZE)
win32_message_button_states[button] = state != 0 ? (byte)1 : (byte)0;
}
private static class MouseEnumerator implements WindowsDirectInputDeviceObjectCallback {
private int button_count;
private boolean has_wheel;
public int getButtonCount() {
return button_count;
}
public boolean hasWheel() {
return has_wheel;
}
public boolean nextObject(int type, String name) {
LWJGLUtil.log("Found mouse object: " + name);
switch (type) {
case WindowsDirectInputDevice.GUID_ZAxis:
has_wheel = true;
break;
case WindowsDirectInputDevice.GUID_Button:
button_count++;
break;
default:
break;
}
return true;
}
}
}

View file

@ -205,15 +205,6 @@ final class WindowsDisplay implements DisplayImplementation {
rect.offset(offset_x, offset_y);
}
static WindowsDirectInput createDirectInput() throws LWJGLException {
try {
return new WindowsDirectInput8(getDllInstance());
} catch (LWJGLException e) {
LWJGLUtil.log("Failed to create DirectInput 8 interface, falling back to DirectInput 3");
return new WindowsDirectInput3(getDllInstance());
}
}
static void setupCursorClipping(long hwnd) throws LWJGLException {
cursor_clipped = true;
getGlobalClientRect(hwnd, rect);