forked from mirror/openmw-tes3mp
fix compile errors, work with unmodified SDL
This commit is contained in:
parent
6449f68d61
commit
3b1d285cf3
2 changed files with 62 additions and 10 deletions
|
@ -1,5 +1,15 @@
|
|||
#include "sdlinputwrapper.hpp"
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_syswm.h>
|
||||
|
||||
#include <OgrePlatform.h>
|
||||
|
||||
#if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
|
||||
# include <X11/Xlib.h>
|
||||
# include <X11/Xutil.h>
|
||||
# include <X11/Xos.h>
|
||||
#endif
|
||||
|
||||
|
||||
namespace MWInput
|
||||
{
|
||||
|
@ -62,9 +72,45 @@ namespace MWInput
|
|||
size_t windowHnd;
|
||||
mWindow->getCustomAttribute("WINDOW", &windowHnd);
|
||||
|
||||
//just use that one for input
|
||||
SDL_Init(flags);
|
||||
//kindly ask SDL not to trash our OGL context
|
||||
SDL_SetHint(SDL_HINT_RENDER_DRIVER, "software");
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
|
||||
//wrap our own event handler around ogre's
|
||||
mSDLWindow = SDL_CreateWindowFrom((void*)windowHnd);
|
||||
|
||||
#if OGRE_PLATFORM == OGRE_PLATFORM_LINUX
|
||||
//linux-specific event-handling fixups
|
||||
SDL_SysWMinfo wm_info;
|
||||
SDL_VERSION(&wm_info.version);
|
||||
|
||||
if(SDL_GetWindowWMInfo(mSDLWindow,&wm_info))
|
||||
{
|
||||
printf("SDL version %d.%d.%d\n", wm_info.version.major, wm_info.version.minor, wm_info.version.patch);
|
||||
|
||||
Display* display = wm_info.info.x11.display;
|
||||
Window w = wm_info.info.x11.window;
|
||||
|
||||
// Set the input hints so we get keyboard input
|
||||
XWMHints *wmhints = XAllocWMHints();
|
||||
if (wmhints) {
|
||||
wmhints->input = True;
|
||||
wmhints->flags = InputHint;
|
||||
XSetWMHints(display, w, wmhints);
|
||||
XFree(wmhints);
|
||||
}
|
||||
|
||||
//make sure to subscribe to XLib's events
|
||||
XSelectInput(display, w,
|
||||
(FocusChangeMask | EnterWindowMask | LeaveWindowMask |
|
||||
ExposureMask | ButtonPressMask | ButtonReleaseMask |
|
||||
PointerMotionMask | KeyPressMask | KeyReleaseMask |
|
||||
PropertyChangeMask | StructureNotifyMask |
|
||||
KeymapStateMask));
|
||||
|
||||
XFlush(display);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
22
extern/oics/OISCompat.h
vendored
22
extern/oics/OISCompat.h
vendored
|
@ -20,17 +20,12 @@ struct MWSDLMouseMotionEvent : SDL_MouseMotionEvent {
|
|||
|
||||
MWSDLMouseMotionEvent()
|
||||
{
|
||||
x = 0;
|
||||
y = 0;
|
||||
xrel = 0;
|
||||
yrel = 0;
|
||||
state = 0;
|
||||
zrel = 0;
|
||||
_init();
|
||||
}
|
||||
|
||||
MWSDLMouseMotionEvent( const SDL_MouseMotionEvent& evt) :
|
||||
MWSDLMouseMotionEvent()
|
||||
MWSDLMouseMotionEvent( const SDL_MouseMotionEvent& evt)
|
||||
{
|
||||
_init();
|
||||
x = evt.x;
|
||||
y = evt.y;
|
||||
xrel = evt.xrel;
|
||||
|
@ -41,8 +36,19 @@ struct MWSDLMouseMotionEvent : SDL_MouseMotionEvent {
|
|||
MWSDLMouseMotionEvent (const SDL_MouseWheelEvent& evt) :
|
||||
MWSDLMouseMotionEvent()
|
||||
{
|
||||
_init();
|
||||
zrel = evt.y;
|
||||
}
|
||||
|
||||
void _init()
|
||||
{
|
||||
x = 0;
|
||||
y = 0;
|
||||
xrel = 0;
|
||||
yrel = 0;
|
||||
state = 0;
|
||||
zrel = 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue