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

@ -435,7 +435,6 @@
<target name="headers" description="invokes javah on java classes" depends="compile">
<!-- platform specific classes -->
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/linux" force="yes">
<class name="org.lwjgl.opengl.LinuxAWTInput" />
<class name="org.lwjgl.opengl.LinuxEvent" />
<class name="org.lwjgl.opengl.LinuxMouse" />
<class name="org.lwjgl.opengl.LinuxKeyboard" />
@ -450,12 +449,7 @@
<javah classpath="${lwjgl.bin}" destdir="${lwjgl.src.native}/windows" force="yes">
<!-- OpenGL -->
<class name="org.lwjgl.opengl.WindowsAWTInput" />
<class name="org.lwjgl.opengl.WindowsKeyboard" />
<class name="org.lwjgl.opengl.WindowsDirectInput8" />
<class name="org.lwjgl.opengl.WindowsDirectInputDevice8" />
<class name="org.lwjgl.opengl.WindowsDirectInput3" />
<class name="org.lwjgl.opengl.WindowsDirectInputDevice3" />
<class name="org.lwjgl.opengl.WindowsPbufferPeerInfo" />
<class name="org.lwjgl.opengl.WindowsDisplay" />
<class name="org.lwjgl.opengl.WindowsRegistry" />

View File

@ -4,7 +4,7 @@
<property name="native" location="../../src/native"/>
<property environment="env"/>
<property name="dxhome" location="${env.DXSDK_DIR}"/>
<property name="sdkhome" location="${env.MSSdk}"/>
<property name="sdkhome" location="${env.MSSDK}"/>
<property name="program_files" location="${env.ProgramFiles}"/>
<property name="alhome" location="${program_files}\OpenAL 1.1 with EFX SDK"/>
<property name="dllname" value="lwjgl.dll"/>
@ -53,6 +53,9 @@
</target>
<target name="compile">
<echo message="${dxhome}"/>
<echo message="${sdkhome}"/>
<echo message="${program_files}"/>
<property name="libs" value="Kernel32.lib ole32.lib dinput.lib dxguid.lib OpenGL32.Lib Version.lib user32.lib Gdi32.lib Advapi32.lib jawt.lib delayimp.lib winmm.lib"/>
<antcall target="compile_dir"/>
<antcall target="link"/>

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);

View File

@ -1,88 +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.
*/
/**
* $Id: org_lwjgl_input_Keyboard.c 2385 2006-06-23 16:45:21Z elias_naur $
*
* @author elias_naur <elias_naur@users.sourceforge.net>
* @version $Revision: 2385 $
*/
#undef DIRECTINPUT_VERSION
#define DIRECTINPUT_VERSION 0x0300
#include "Window.h"
#include <dinput.h>
#include <jni.h>
#include "org_lwjgl_opengl_WindowsDirectInput3.h"
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDirectInput3_createDirectInput(JNIEnv *env, jobject unused, jlong hinst_int) {
HINSTANCE hinst = (HINSTANCE)(LONG_PTR)hinst_int;
LPDIRECTINPUT lpdi;
HRESULT ret;
ret = DirectInputCreate(hinst, DIRECTINPUT_VERSION, &lpdi, NULL);
if (ret != DI_OK) {
throwFormattedException(env, "Failed to create DirectInput (%x)", ret);
return (LONG_PTR)NULL;
}
return (LONG_PTR)lpdi;
}
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDirectInput3_nCreateDevice(JNIEnv *env, jclass unused, jlong di_interface, jint type) {
LPDIRECTINPUT lpdi = (LPDIRECTINPUT)(LONG_PTR)di_interface;
LPDIRECTINPUTDEVICE lpdevice;
GUID device_guid;
HRESULT ret;
switch (type) {
case org_lwjgl_opengl_WindowsDirectInput3_KEYBOARD_TYPE:
device_guid = GUID_SysKeyboard;
break;
case org_lwjgl_opengl_WindowsDirectInput3_MOUSE_TYPE:
device_guid = GUID_SysMouse;
break;
default:
throwFormattedException(env, "Unknown device type (%d)", type);
return (LONG_PTR)NULL;
}
ret = IDirectInput_CreateDevice(lpdi, &device_guid, &lpdevice, NULL);
if (ret != DI_OK) {
throwFormattedException(env, "Failed to create keyboard (%x).", ret);
return (LONG_PTR)NULL;
}
return (LONG_PTR)lpdevice;
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDirectInput3_release(JNIEnv *env, jobject unused, jlong di_interface) {
LPDIRECTINPUT lpdi = (LPDIRECTINPUT)(LONG_PTR)di_interface;
IDirectInput_Release(lpdi);
}

View File

@ -1,101 +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.
*/
/**
* $Id: org_lwjgl_input_Keyboard.c 2385 2006-06-23 16:45:21Z elias_naur $
*
* @author elias_naur <elias_naur@users.sourceforge.net>
* @version $Revision: 2385 $
*/
#undef DIRECTINPUT_VERSION
#define DIRECTINPUT_VERSION 0x0800
#include "Window.h"
#include <dinput.h>
#include <jni.h>
#include "org_lwjgl_opengl_WindowsDirectInput8.h"
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDirectInput8_createDirectInput(JNIEnv *env, jobject unused, jlong hinst_int) {
HINSTANCE hinst = (HINSTANCE)(LONG_PTR)hinst_int;
LPDIRECTINPUT8 lpdi;
HRESULT ret;
ret = CoInitialize(NULL);
if (ret != S_OK && ret != S_FALSE) {
throwFormattedException(env, "CoInitialize failed (%x)", ret);
return (LONG_PTR)NULL;
}
ret = CoCreateInstance(&CLSID_DirectInput8, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectInput8, (void *)&lpdi);
if (ret != DI_OK && ret != DIERR_BETADIRECTINPUTVERSION) {
throwFormattedException(env, "Failed to create DirectInput (%x)", ret);
return (LONG_PTR)NULL;
}
ret = IDirectInput8_Initialize(lpdi, hinst, DIRECTINPUT_VERSION);
if (FAILED(ret)) {
throwFormattedException(env, "Failed to initialize DirectInput (%x)", ret);
IDirectInput8_Release(lpdi);
return (LONG_PTR)NULL;
}
return (LONG_PTR)lpdi;
}
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_WindowsDirectInput8_nCreateDevice(JNIEnv *env, jclass unused, jlong di_interface, jint type) {
LPDIRECTINPUT8 lpdi = (LPDIRECTINPUT8)(LONG_PTR)di_interface;
LPDIRECTINPUTDEVICE8 lpdevice;
GUID device_guid;
HRESULT ret;
switch (type) {
case org_lwjgl_opengl_WindowsDirectInput8_KEYBOARD_TYPE:
device_guid = GUID_SysKeyboard;
break;
case org_lwjgl_opengl_WindowsDirectInput8_MOUSE_TYPE:
device_guid = GUID_SysMouse;
break;
default:
throwFormattedException(env, "Unknown device type (%d)", type);
return (LONG_PTR)NULL;
}
ret = IDirectInput8_CreateDevice(lpdi, &device_guid, &lpdevice, NULL);
if (ret != DI_OK) {
throwFormattedException(env, "Failed to create keyboard (%x).", ret);
return (LONG_PTR)NULL;
}
return (LONG_PTR)lpdevice;
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDirectInput8_release(JNIEnv *env, jobject unused, jlong di_interface) {
LPDIRECTINPUT8 lpdi = (LPDIRECTINPUT8)(LONG_PTR)di_interface;
IDirectInput8_Release(lpdi);
CoUninitialize();
}

View File

@ -1,160 +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.
*/
/**
* $Id: org_lwjgl_input_Keyboard.c 2385 2006-06-23 16:45:21Z elias_naur $
*
* @author elias_naur <elias_naur@users.sourceforge.net>
* @version $Revision: 2385 $
*/
#undef DIRECTINPUT_VERSION
#define DIRECTINPUT_VERSION 0x0300
#include "Window.h"
#include "dinputhelper.h"
#include <dinput.h>
#include <jni.h>
#include "org_lwjgl_opengl_WindowsDirectInput3.h"
#include "org_lwjgl_opengl_WindowsDirectInputDevice3.h"
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice3_unacquire(JNIEnv *env, jobject unused, jlong di_device) {
LPDIRECTINPUTDEVICE lpdevice = (LPDIRECTINPUTDEVICE)(LONG_PTR)di_device;
return IDirectInputDevice_Unacquire(lpdevice);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice3_setDataFormat(JNIEnv *env, jobject unused, jlong di_device, jint type) {
LPDIRECTINPUTDEVICE lpdevice = (LPDIRECTINPUTDEVICE)(LONG_PTR)di_device;
LPCDIDATAFORMAT format;
switch (type) {
case org_lwjgl_opengl_WindowsDirectInput3_KEYBOARD_TYPE:
format = &c_dfDIKeyboard;
break;
case org_lwjgl_opengl_WindowsDirectInput3_MOUSE_TYPE:
format = &c_dfDIMouse;
break;
default:
throwFormattedException(env, "Unknown device type (%d)", type);
return DIERR_INVALIDPARAM;
}
return IDirectInputDevice_SetDataFormat(lpdevice, format);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice3_getDeviceState(JNIEnv *env, jobject unused, jlong di_device, jobject buffer_obj, jint pos, jint size) {
LPDIRECTINPUTDEVICE lpdevice = (LPDIRECTINPUTDEVICE)(LONG_PTR)di_device;
jbyte *buffer = pos + (jbyte *)(*env)->GetDirectBufferAddress(env, buffer_obj);
return IDirectInputDevice_GetDeviceState(lpdevice, size, buffer);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice3_getEventSize(JNIEnv *env, jobject unused) {
return sizeof(DIDEVICEOBJECTDATA);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice3_getDeviceData(JNIEnv *env, jobject unused, jlong di_device, jobject event_buffer_obj, jint event_buffer_size, jobject buffer_obj, jint buffer_pos, jint buffer_size) {
LPDIRECTINPUTDEVICE lpdevice = (LPDIRECTINPUTDEVICE)(LONG_PTR)di_device;
jint *buffer = buffer_pos + (jint *)(*env)->GetDirectBufferAddress(env, buffer_obj);
DIDEVICEOBJECTDATA *event_buffer = (*env)->GetDirectBufferAddress(env, event_buffer_obj);
DIDEVICEOBJECTDATA *current_event;
DWORD num_events = event_buffer_size/sizeof(DIDEVICEOBJECTDATA);
HRESULT ret = IDirectInputDevice_GetDeviceData(lpdevice, sizeof(DIDEVICEOBJECTDATA), event_buffer, &num_events, 0);
jint num_buffer_events = buffer_size/org_lwjgl_opengl_WindowsDirectInputDevice3_DATA_SIZE;
jint i;
if (ret != DI_OK && ret != DI_BUFFEROVERFLOW)
return ret;
if (num_buffer_events < num_events) {
num_events = num_buffer_events;
ret = DI_BUFFEROVERFLOW;
}
for (i = 0; i < num_events; i++) {
current_event = event_buffer + i;
buffer[buffer_pos++] = current_event->dwOfs;
buffer[buffer_pos++] = current_event->dwData;
buffer[buffer_pos++] = current_event->dwTimeStamp;
}
positionBuffer(env, buffer_obj, buffer_pos);
return ret;
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice3_acquire(JNIEnv *env, jobject unused, jlong di_device) {
LPDIRECTINPUTDEVICE lpdevice = (LPDIRECTINPUTDEVICE)(LONG_PTR)di_device;
return IDirectInputDevice_Acquire(lpdevice);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice3_setBufferSize(JNIEnv *env, jobject unused, jlong di_device, jint buffer_size) {
LPDIRECTINPUTDEVICE lpdevice = (LPDIRECTINPUTDEVICE)(LONG_PTR)di_device;
DIPROPDWORD dipropdw;
dipropdw.diph.dwSize = sizeof(DIPROPDWORD);
dipropdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
dipropdw.diph.dwObj = 0;
dipropdw.diph.dwHow = DIPH_DEVICE;
dipropdw.dwData = buffer_size;
return IDirectInputDevice_SetProperty(lpdevice, DIPROP_BUFFERSIZE, &dipropdw.diph);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice3_setCooperativeLevel(JNIEnv *env, jobject unused, jlong di_device, jlong hwnd_int, jint flags) {
LPDIRECTINPUTDEVICE lpdevice = (LPDIRECTINPUTDEVICE)(LONG_PTR)di_device;
HWND hwnd = (HWND)(LONG_PTR)hwnd_int;
return IDirectInputDevice_SetCooperativeLevel(lpdevice, hwnd, flags);
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice3_release(JNIEnv *env, jobject unused, jlong di_device) {
LPDIRECTINPUTDEVICE lpdevice = (LPDIRECTINPUTDEVICE)(LONG_PTR)di_device;
IDirectInputDevice_Release(lpdevice);
}
static BOOL CALLBACK EnumMouseObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef) {
enum_context_t *enum_context = (enum_context_t *)pvRef;
jint object_type;
if (IsEqualGUID(&lpddoi->guidType, &GUID_Button)) {
object_type = org_lwjgl_opengl_WindowsDirectInputDevice3_GUID_Button;
} else if(IsEqualGUID(&lpddoi->guidType, &GUID_XAxis)) {
object_type = org_lwjgl_opengl_WindowsDirectInputDevice3_GUID_XAxis;
} else if(IsEqualGUID(&lpddoi->guidType, &GUID_YAxis)) {
object_type = org_lwjgl_opengl_WindowsDirectInputDevice3_GUID_YAxis;
} else if(IsEqualGUID(&lpddoi->guidType, &GUID_ZAxis)) {
object_type = org_lwjgl_opengl_WindowsDirectInputDevice3_GUID_ZAxis;
} else {
object_type = org_lwjgl_opengl_WindowsDirectInputDevice3_GUID_Unknown;
}
return objectCallback(enum_context->env, enum_context->enumerator, object_type, lpddoi->tszName) ? DIENUM_CONTINUE : DIENUM_STOP;
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice3_enumObjects(JNIEnv *env, jobject unused, jlong di_device, jobject enumerator) {
LPDIRECTINPUTDEVICE lpdevice = (LPDIRECTINPUTDEVICE)(LONG_PTR)di_device;
enum_context_t enum_context;
enum_context.env = env;
enum_context.enumerator = enumerator;
return IDirectInputDevice_EnumObjects(lpdevice, EnumMouseObjectsCallback, &enum_context, DIDFT_ALL);
}

View File

@ -1,165 +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.
*/
/**
* $Id: org_lwjgl_input_Keyboard.c 2385 2006-06-23 16:45:21Z elias_naur $
*
* @author elias_naur <elias_naur@users.sourceforge.net>
* @version $Revision: 2385 $
*/
#undef DIRECTINPUT_VERSION
#define DIRECTINPUT_VERSION 0x0800
#include "Window.h"
#include "dinputhelper.h"
#include <dinput.h>
#include <jni.h>
#include "org_lwjgl_opengl_WindowsDirectInput8.h"
#include "org_lwjgl_opengl_WindowsDirectInputDevice8.h"
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_unacquire(JNIEnv *env, jobject unused, jlong di_device) {
LPDIRECTINPUTDEVICE8 lpdevice = (LPDIRECTINPUTDEVICE8)(LONG_PTR)di_device;
return IDirectInputDevice8_Unacquire(lpdevice);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_poll(JNIEnv *env, jobject unused, jlong di_device) {
LPDIRECTINPUTDEVICE8 lpdevice = (LPDIRECTINPUTDEVICE8)(LONG_PTR)di_device;
return IDirectInputDevice8_Poll(lpdevice);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_setDataFormat(JNIEnv *env, jobject unused, jlong di_device, jint type) {
LPDIRECTINPUTDEVICE8 lpdevice = (LPDIRECTINPUTDEVICE8)(LONG_PTR)di_device;
LPCDIDATAFORMAT format;
switch (type) {
case org_lwjgl_opengl_WindowsDirectInput8_KEYBOARD_TYPE:
format = &c_dfDIKeyboard;
break;
case org_lwjgl_opengl_WindowsDirectInput8_MOUSE_TYPE:
format = &c_dfDIMouse;
break;
default:
throwFormattedException(env, "Unknown device type (%d)", type);
return DIERR_INVALIDPARAM;
}
return IDirectInputDevice8_SetDataFormat(lpdevice, format);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_getDeviceState(JNIEnv *env, jobject unused, jlong di_device, jobject buffer_obj, jint pos, jint size) {
LPDIRECTINPUTDEVICE8 lpdevice = (LPDIRECTINPUTDEVICE8)(LONG_PTR)di_device;
jbyte *buffer = pos + (jbyte *)(*env)->GetDirectBufferAddress(env, buffer_obj);
return IDirectInputDevice8_GetDeviceState(lpdevice, size, buffer);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_getEventSize(JNIEnv *env, jobject unused) {
return sizeof(DIDEVICEOBJECTDATA);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_getDeviceData(JNIEnv *env, jobject unused, jlong di_device, jobject event_buffer_obj, jint event_buffer_size, jobject buffer_obj, jint buffer_pos, jint buffer_size) {
LPDIRECTINPUTDEVICE8 lpdevice = (LPDIRECTINPUTDEVICE8)(LONG_PTR)di_device;
jint *buffer = buffer_pos + (jint *)(*env)->GetDirectBufferAddress(env, buffer_obj);
DIDEVICEOBJECTDATA *event_buffer = (*env)->GetDirectBufferAddress(env, event_buffer_obj);
DIDEVICEOBJECTDATA *current_event;
DWORD num_events = event_buffer_size/sizeof(DIDEVICEOBJECTDATA);
HRESULT ret = IDirectInputDevice8_GetDeviceData(lpdevice, sizeof(DIDEVICEOBJECTDATA), event_buffer, &num_events, 0);
jint num_buffer_events = buffer_size/org_lwjgl_opengl_WindowsDirectInputDevice8_DATA_SIZE;
jint i;
if (ret != DI_OK && ret != DI_BUFFEROVERFLOW)
return ret;
if (num_buffer_events < num_events) {
num_events = num_buffer_events;
ret = DI_BUFFEROVERFLOW;
}
for (i = 0; i < num_events; i++) {
current_event = event_buffer + i;
buffer[buffer_pos++] = current_event->dwOfs;
buffer[buffer_pos++] = current_event->dwData;
buffer[buffer_pos++] = current_event->dwTimeStamp;
}
positionBuffer(env, buffer_obj, buffer_pos);
return ret;
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_acquire(JNIEnv *env, jobject unused, jlong di_device) {
LPDIRECTINPUTDEVICE8 lpdevice = (LPDIRECTINPUTDEVICE8)(LONG_PTR)di_device;
return IDirectInputDevice8_Acquire(lpdevice);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_setBufferSize(JNIEnv *env, jobject unused, jlong di_device, jint buffer_size) {
LPDIRECTINPUTDEVICE8 lpdevice = (LPDIRECTINPUTDEVICE8)(LONG_PTR)di_device;
DIPROPDWORD dipropdw;
dipropdw.diph.dwSize = sizeof(DIPROPDWORD);
dipropdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
dipropdw.diph.dwObj = 0;
dipropdw.diph.dwHow = DIPH_DEVICE;
dipropdw.dwData = buffer_size;
return IDirectInputDevice8_SetProperty(lpdevice, DIPROP_BUFFERSIZE, &dipropdw.diph);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_setCooperativeLevel(JNIEnv *env, jobject unused, jlong di_device, jlong hwnd_int, jint flags) {
LPDIRECTINPUTDEVICE8 lpdevice = (LPDIRECTINPUTDEVICE8)(LONG_PTR)di_device;
HWND hwnd = (HWND)(LONG_PTR)hwnd_int;
return IDirectInputDevice8_SetCooperativeLevel(lpdevice, hwnd, flags);
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_release(JNIEnv *env, jobject unused, jlong di_device) {
LPDIRECTINPUTDEVICE8 lpdevice = (LPDIRECTINPUTDEVICE8)(LONG_PTR)di_device;
IDirectInputDevice8_Release(lpdevice);
}
static BOOL CALLBACK EnumMouseObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef) {
enum_context_t *enum_context = (enum_context_t *)pvRef;
jint object_type;
if (IsEqualGUID(&lpddoi->guidType, &GUID_Button)) {
object_type = org_lwjgl_opengl_WindowsDirectInputDevice8_GUID_Button;
} else if(IsEqualGUID(&lpddoi->guidType, &GUID_XAxis)) {
object_type = org_lwjgl_opengl_WindowsDirectInputDevice8_GUID_XAxis;
} else if(IsEqualGUID(&lpddoi->guidType, &GUID_YAxis)) {
object_type = org_lwjgl_opengl_WindowsDirectInputDevice8_GUID_YAxis;
} else if(IsEqualGUID(&lpddoi->guidType, &GUID_ZAxis)) {
object_type = org_lwjgl_opengl_WindowsDirectInputDevice8_GUID_ZAxis;
} else {
object_type = org_lwjgl_opengl_WindowsDirectInputDevice8_GUID_Unknown;
}
return objectCallback(enum_context->env, enum_context->enumerator, object_type, lpddoi->tszName) ? DIENUM_CONTINUE : DIENUM_STOP;
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_WindowsDirectInputDevice8_enumObjects(JNIEnv *env, jobject unused, jlong di_device, jobject enumerator) {
LPDIRECTINPUTDEVICE8 lpdevice = (LPDIRECTINPUTDEVICE8)(LONG_PTR)di_device;
enum_context_t enum_context;
enum_context.env = env;
enum_context.enumerator = enumerator;
return IDirectInputDevice8_EnumObjects(lpdevice, EnumMouseObjectsCallback, &enum_context, DIDFT_ALL);
}