mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-26 09:41:05 +00:00
Remove dependency with DirectInput and delete winput.c file.
This commit is contained in:
parent
a877d52048
commit
9e4972fc53
@ -157,10 +157,9 @@ endif()
|
||||
|
||||
if(WIN32)
|
||||
find_package(DDraw)
|
||||
find_package(DInput)
|
||||
find_package(DXGuid)
|
||||
|
||||
if(NOT DDRAW_FOUND OR NOT DINPUT_FOUND OR NOT DXGUID_FOUND)
|
||||
if(NOT DDRAW_FOUND OR NOT DXGUID_FOUND)
|
||||
if(MSVC)
|
||||
message(FATAL_ERROR
|
||||
"DirectX required for Windows port. You might need to add DirectX include and lib directories to your INCLUDE and LIB environment variables.")
|
||||
@ -174,7 +173,6 @@ if(WIN32)
|
||||
|
||||
include_directories(SYSTEM
|
||||
${DDRAW_INCLUDE_DIR}
|
||||
${DINPUT_INCLUDE_DIR}
|
||||
${DXGUID_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
@ -184,7 +182,6 @@ if(WIN32)
|
||||
gdi32
|
||||
comdlg32
|
||||
ole32
|
||||
${DINPUT_LIBRARIES}
|
||||
${DDRAW_LIBRARIES}
|
||||
${DXGUID_LIBRARIES}
|
||||
winmm
|
||||
|
@ -1,34 +0,0 @@
|
||||
# - Find DirectInput
|
||||
# Find the DirectInput includes and libraries
|
||||
#
|
||||
# DINPUT_INCLUDE_DIR - where to find dinput.h
|
||||
# DINPUT_LIBRARIES - List of libraries when using dinput.
|
||||
# DINPUT_FOUND - True if dinput found.
|
||||
|
||||
if(DINPUT_INCLUDE_DIR)
|
||||
# Already in cache, be silent
|
||||
set(DINPUT_FIND_QUIETLY TRUE)
|
||||
endif(DINPUT_INCLUDE_DIR)
|
||||
|
||||
find_path(DINPUT_INCLUDE_DIR dinput.h
|
||||
PATH $ENV{DXSDK_DIR}/Include
|
||||
)
|
||||
|
||||
find_library(DINPUT_LIBRARY
|
||||
NAMES dinput8
|
||||
PATHS "$ENV{DXSDK_DIR}/Lib/$ENV{PROCESSOR_ARCHITECTURE}"
|
||||
)
|
||||
|
||||
# Handle the QUIETLY and REQUIRED arguments and set DINPUT_FOUND to TRUE if
|
||||
# all listed variables are TRUE.
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(DINPUT DEFAULT_MSG
|
||||
DINPUT_INCLUDE_DIR DINPUT_LIBRARY)
|
||||
|
||||
if(DINPUT_FOUND)
|
||||
set(DINPUT_LIBRARIES ${DINPUT_LIBRARY})
|
||||
else(DINPUT_FOUND)
|
||||
set(DINPUT_LIBRARIES)
|
||||
endif(DINPUT_FOUND)
|
||||
|
||||
mark_as_advanced(DINPUT_INCLUDE_DIR DINPUT_LIBRARY)
|
@ -106,7 +106,6 @@ set(ALLEGRO_SRC_WIN_FILES
|
||||
src/win/wfile.c
|
||||
src/win/wgdi.c
|
||||
src/win/wgfxdrv.c
|
||||
src/win/winput.c
|
||||
src/win/wkeybd.c
|
||||
src/win/wmouse.c
|
||||
src/win/wsystem.c
|
||||
|
@ -109,18 +109,6 @@ AL_FUNC(int, wnd_call_proc, (int (*proc)(void)));
|
||||
AL_FUNC(void, wnd_schedule_proc, (int (*proc)(void)));
|
||||
|
||||
|
||||
/* input routines */
|
||||
AL_VAR(int, _win_input_events);
|
||||
AL_ARRAY(HANDLE, _win_input_event_id);
|
||||
AL_FUNCPTRARRAY(void, _win_input_event_handler, (void));
|
||||
|
||||
AL_FUNC(void, _win_input_init, (int need_thread));
|
||||
AL_FUNC(void, _win_input_exit, (void));
|
||||
AL_FUNC(int, _win_input_register_event, (HANDLE event_id, void (*event_handler)(void)));
|
||||
AL_FUNC(void, _win_input_unregister_event, (HANDLE event_id));
|
||||
|
||||
|
||||
|
||||
/* mouse routines */
|
||||
AL_VAR(HCURSOR, _win_hcursor);
|
||||
AL_FUNC(int, mouse_set_syscursor, (void));
|
||||
|
@ -1,226 +0,0 @@
|
||||
/* ______ ___ ___
|
||||
* /\ _ \ /\_ \ /\_ \
|
||||
* \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___
|
||||
* \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\
|
||||
* \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \
|
||||
* \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
|
||||
* \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
|
||||
* /\____/
|
||||
* \_/__/
|
||||
*
|
||||
* Input management functions.
|
||||
*
|
||||
* By Eric Botcazou.
|
||||
*
|
||||
* See readme.txt for copyright information.
|
||||
*/
|
||||
|
||||
|
||||
#include "allegro.h"
|
||||
#include "allegro/internal/aintern.h"
|
||||
#include "allegro/platform/aintwin.h"
|
||||
|
||||
#ifndef SCAN_DEPEND
|
||||
#include <process.h>
|
||||
#endif
|
||||
|
||||
#ifndef ALLEGRO_WINDOWS
|
||||
#error something is wrong with the makefile
|
||||
#endif
|
||||
|
||||
#define PREFIX_I "al-winput INFO: "
|
||||
#define PREFIX_W "al-winput WARNING: "
|
||||
#define PREFIX_E "al-winput ERROR: "
|
||||
|
||||
|
||||
#define MAX_EVENTS 8
|
||||
|
||||
/* input thread event queue */
|
||||
int _win_input_events;
|
||||
HANDLE _win_input_event_id[MAX_EVENTS];
|
||||
void (*_win_input_event_handler[MAX_EVENTS])(void);
|
||||
|
||||
/* pending event waiting for being processed */
|
||||
static HANDLE pending_event_id;
|
||||
static void (*pending_event_handler)(void);
|
||||
|
||||
/* internal input thread management */
|
||||
static HANDLE ack_event = NULL;
|
||||
static int reserved_events = 0;
|
||||
static int input_need_thread = FALSE;
|
||||
static HANDLE input_thread = NULL;
|
||||
|
||||
|
||||
|
||||
/* input_thread_proc: [input thread]
|
||||
* Thread function that handles the input when there is
|
||||
* no dedicated window thread because the library has
|
||||
* been attached to an external window.
|
||||
*/
|
||||
static void input_thread_proc(LPVOID unused)
|
||||
{
|
||||
int result;
|
||||
|
||||
_win_thread_init();
|
||||
_TRACE(PREFIX_I "input thread starts\n");
|
||||
|
||||
/* event loop */
|
||||
while (TRUE) {
|
||||
result = WaitForMultipleObjects(_win_input_events, _win_input_event_id, FALSE, INFINITE);
|
||||
if (result == WAIT_OBJECT_0 + 2)
|
||||
break; /* thread suicide */
|
||||
else if ((result >= WAIT_OBJECT_0) && (result < WAIT_OBJECT_0 + _win_input_events))
|
||||
(*_win_input_event_handler[result - WAIT_OBJECT_0])();
|
||||
}
|
||||
|
||||
_TRACE(PREFIX_I "input thread exits\n");
|
||||
_win_thread_exit();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* register_pending_event: [input thread]
|
||||
* Registers effectively the pending event.
|
||||
*/
|
||||
static void register_pending_event(void)
|
||||
{
|
||||
/* add the pending event to the queue */
|
||||
_win_input_event_id[_win_input_events] = pending_event_id;
|
||||
_win_input_event_handler[_win_input_events] = pending_event_handler;
|
||||
|
||||
/* adjust the size of the queue */
|
||||
_win_input_events++;
|
||||
|
||||
/* acknowledge the registration */
|
||||
SetEvent(ack_event);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* unregister_pending_event: [input thread]
|
||||
* Unregisters effectively the pending event.
|
||||
*/
|
||||
static void unregister_pending_event(void)
|
||||
{
|
||||
int i, found = -1;
|
||||
|
||||
/* look for the pending event in the event queue */
|
||||
for (i=reserved_events; i<_win_input_events; i++) {
|
||||
if (_win_input_event_id[i] == pending_event_id) {
|
||||
found = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (found >= 0) {
|
||||
/* shift the queue to the left */
|
||||
for (i=found; i<_win_input_events-1; i++) {
|
||||
_win_input_event_id[i] = _win_input_event_id[i+1];
|
||||
_win_input_event_handler[i] = _win_input_event_handler[i+1];
|
||||
}
|
||||
|
||||
/* adjust the size of the queue */
|
||||
_win_input_events--;
|
||||
}
|
||||
|
||||
/* acknowledge the unregistration */
|
||||
SetEvent(ack_event);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* _win_input_register_event: [primary thread]
|
||||
* Adds an event to the input thread event queue.
|
||||
*/
|
||||
int _win_input_register_event(HANDLE event_id, void (*event_handler)(void))
|
||||
{
|
||||
if (_win_input_events == MAX_EVENTS)
|
||||
return -1;
|
||||
|
||||
/* record the event */
|
||||
pending_event_id = event_id;
|
||||
pending_event_handler = event_handler;
|
||||
|
||||
/* create the input thread if none */
|
||||
if (input_need_thread && !input_thread)
|
||||
input_thread = (HANDLE) _beginthread(input_thread_proc, 0, NULL);
|
||||
|
||||
/* ask the input thread to register the pending event */
|
||||
SetEvent(_win_input_event_id[0]);
|
||||
|
||||
/* wait for the input thread to acknowledge */
|
||||
WaitForSingleObject(ack_event, INFINITE);
|
||||
|
||||
_TRACE(PREFIX_I "1 input event registered (total = %d)\n", _win_input_events-reserved_events);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* _win_input_unregister_event: [primary thread]
|
||||
* Removes an event from the input thread event queue.
|
||||
*/
|
||||
void _win_input_unregister_event(HANDLE event_id)
|
||||
{
|
||||
/* record the event */
|
||||
pending_event_id = event_id;
|
||||
|
||||
/* ask the input thread to unregister the pending event */
|
||||
SetEvent(_win_input_event_id[1]);
|
||||
|
||||
/* wait for the input thread to acknowledge */
|
||||
WaitForSingleObject(ack_event, INFINITE);
|
||||
|
||||
/* kill the input thread if no more event */
|
||||
if (input_need_thread && (_win_input_events == reserved_events)) {
|
||||
SetEvent(_win_input_event_id[2]); /* thread suicide */
|
||||
input_thread = NULL;
|
||||
}
|
||||
|
||||
_TRACE(PREFIX_I "1 input event unregistered (total = %d)\n", _win_input_events-reserved_events);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* _win_input_init: [primary thread]
|
||||
* Initializes the module.
|
||||
*/
|
||||
void _win_input_init(int need_thread)
|
||||
{
|
||||
_win_input_event_id[0] = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
_win_input_event_handler[0] = register_pending_event;
|
||||
_win_input_event_id[1] = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
_win_input_event_handler[1] = unregister_pending_event;
|
||||
|
||||
if (need_thread) {
|
||||
input_need_thread = TRUE;
|
||||
_win_input_event_id[2] = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
reserved_events = 3;
|
||||
}
|
||||
else {
|
||||
input_need_thread = FALSE;
|
||||
reserved_events = 2;
|
||||
}
|
||||
|
||||
_win_input_events = reserved_events;
|
||||
|
||||
ack_event = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* _win_input_exit: [primary thread]
|
||||
* Shuts down the module.
|
||||
*/
|
||||
void _win_input_exit(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i<reserved_events; i++)
|
||||
CloseHandle(_win_input_event_id[i]);
|
||||
|
||||
_win_input_events = 0;
|
||||
|
||||
CloseHandle(ack_event);
|
||||
}
|
||||
|
@ -472,7 +472,6 @@ static HWND create_directx_window(void)
|
||||
*/
|
||||
static void wnd_thread_proc(HANDLE setup_event)
|
||||
{
|
||||
int result;
|
||||
MSG msg;
|
||||
|
||||
_win_thread_init();
|
||||
@ -491,24 +490,8 @@ static void wnd_thread_proc(HANDLE setup_event)
|
||||
SetEvent(setup_event);
|
||||
|
||||
/* message loop */
|
||||
while (TRUE) {
|
||||
result = MsgWaitForMultipleObjects(_win_input_events, _win_input_event_id, FALSE, INFINITE, QS_ALLINPUT);
|
||||
if ((result >= WAIT_OBJECT_0) && (result < WAIT_OBJECT_0 + _win_input_events)) {
|
||||
/* one of the registered events is in signaled state */
|
||||
(*_win_input_event_handler[result - WAIT_OBJECT_0])();
|
||||
}
|
||||
else if (result == WAIT_OBJECT_0 + _win_input_events) {
|
||||
/* messages are waiting in the queue */
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
|
||||
if (GetMessage(&msg, NULL, 0, 0)) {
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
else {
|
||||
goto End;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
End:
|
||||
_TRACE(PREFIX_I "window thread exits\n");
|
||||
@ -535,9 +518,6 @@ int init_directx_window(void)
|
||||
msg_suicide = RegisterWindowMessage("Allegro window suicide");
|
||||
|
||||
if (user_wnd) {
|
||||
/* initializes input module and requests dedicated thread */
|
||||
_win_input_init(TRUE);
|
||||
|
||||
/* hook the user window */
|
||||
user_wnd_proc = (WNDPROC) SetWindowLong(user_wnd, GWL_WNDPROC, (long)directx_wnd_proc);
|
||||
if (!user_wnd_proc)
|
||||
@ -555,9 +535,6 @@ int init_directx_window(void)
|
||||
wnd_height = win_rect.r.bottom - win_rect.r.top;
|
||||
}
|
||||
else {
|
||||
/* initializes input module without dedicated thread */
|
||||
_win_input_init(FALSE);
|
||||
|
||||
/* create window thread */
|
||||
events[0] = CreateEvent(NULL, FALSE, FALSE, NULL); /* acknowledges that thread is up */
|
||||
events[1] = (HANDLE) _beginthread(wnd_thread_proc, 0, events[0]);
|
||||
@ -613,8 +590,6 @@ void exit_directx_window(void)
|
||||
|
||||
DeleteCriticalSection(&gfx_crit_sect);
|
||||
|
||||
_win_input_exit();
|
||||
|
||||
window_is_initialized = FALSE;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user