Windows: Removed directinput files, since they are now unused. Fixed headers build.xml target
This commit is contained in:
parent
e50dc04191
commit
657bd156e2
|
@ -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" />
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue