mirror of https://github.com/buggins/dlangui.git
SDL: mouse is working
This commit is contained in:
parent
8ce36c6eed
commit
f548cb3ea6
|
@ -155,25 +155,50 @@ version(USE_SDL) {
|
||||||
|
|
||||||
ColorDrawBuf _drawbuf;
|
ColorDrawBuf _drawbuf;
|
||||||
|
|
||||||
bool _exposeSent;
|
//bool _exposeSent;
|
||||||
void processExpose() {
|
void processExpose() {
|
||||||
redraw();
|
redraw();
|
||||||
_exposeSent = false;
|
//_exposeSent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// request window redraw
|
/// request window redraw
|
||||||
override void invalidate() {
|
override void invalidate() {
|
||||||
if (_exposeSent)
|
//if (_exposeSent)
|
||||||
return;
|
// return;
|
||||||
_exposeSent = true;
|
//_exposeSent = true;
|
||||||
//TODO
|
//TODO optimize
|
||||||
|
redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ButtonDetails _lbutton;
|
protected ButtonDetails _lbutton;
|
||||||
protected ButtonDetails _mbutton;
|
protected ButtonDetails _mbutton;
|
||||||
protected ButtonDetails _rbutton;
|
protected ButtonDetails _rbutton;
|
||||||
void processMouseEvent(MouseAction action, ubyte detail, ushort state, short x, short y) {
|
ushort convertMouseFlags(uint flags) {
|
||||||
bool res = false; //dispatchMouseEvent(event);
|
ushort res = 0;
|
||||||
|
if (flags & SDL_BUTTON_LMASK)
|
||||||
|
res |= MouseFlag.LButton;
|
||||||
|
if (flags & SDL_BUTTON_RMASK)
|
||||||
|
res |= MouseFlag.RButton;
|
||||||
|
if (flags & SDL_BUTTON_MMASK)
|
||||||
|
res |= MouseFlag.MButton;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseButton convertMouseButton(uint button) {
|
||||||
|
if (button == SDL_BUTTON_LEFT)
|
||||||
|
return MouseButton.Left;
|
||||||
|
if (button == SDL_BUTTON_RIGHT)
|
||||||
|
return MouseButton.Right;
|
||||||
|
if (button == SDL_BUTTON_MIDDLE)
|
||||||
|
return MouseButton.Middle;
|
||||||
|
return MouseButton.None;
|
||||||
|
}
|
||||||
|
|
||||||
|
void processMouseEvent(MouseAction action, uint button, uint state, int x, int y) {
|
||||||
|
ushort flags = convertMouseFlags(state);
|
||||||
|
MouseButton btn = convertMouseButton(button);
|
||||||
|
MouseEvent event = new MouseEvent(action, btn, flags, cast(short)x, cast(short)y);
|
||||||
|
bool res = dispatchMouseEvent(event);
|
||||||
if (res) {
|
if (res) {
|
||||||
Log.d("Calling update() after mouse event");
|
Log.d("Calling update() after mouse event");
|
||||||
invalidate();
|
invalidate();
|
||||||
|
@ -293,6 +318,8 @@ version(USE_SDL) {
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_CLOSE:
|
case SDL_WINDOWEVENT_CLOSE:
|
||||||
Log.d("SDL_WINDOWEVENT_CLOSE win=", event.window.windowID);
|
Log.d("SDL_WINDOWEVENT_CLOSE win=", event.window.windowID);
|
||||||
|
_windowMap.remove(windowID);
|
||||||
|
destroy(w);
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_SHOWN:
|
case SDL_WINDOWEVENT_SHOWN:
|
||||||
Log.d("SDL_WINDOWEVENT_SHOWN");
|
Log.d("SDL_WINDOWEVENT_SHOWN");
|
||||||
|
@ -334,6 +361,7 @@ version(USE_SDL) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
break;
|
break;
|
||||||
|
@ -342,10 +370,22 @@ version(USE_SDL) {
|
||||||
case SDL_TEXTINPUT:
|
case SDL_TEXTINPUT:
|
||||||
break;
|
break;
|
||||||
case SDL_MOUSEMOTION:
|
case SDL_MOUSEMOTION:
|
||||||
|
SDLWindow w = getWindow(event.motion.windowID);
|
||||||
|
if (w) {
|
||||||
|
w.processMouseEvent(MouseAction.Move, 0, event.motion.state, event.motion.x, event.motion.y);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
|
SDLWindow w = getWindow(event.button.windowID);
|
||||||
|
if (w) {
|
||||||
|
w.processMouseEvent(MouseAction.ButtonDown, event.button.button, event.button.state, event.button.x, event.button.y);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_MOUSEBUTTONUP:
|
case SDL_MOUSEBUTTONUP:
|
||||||
|
SDLWindow w = getWindow(event.button.windowID);
|
||||||
|
if (w) {
|
||||||
|
w.processMouseEvent(MouseAction.ButtonUp, event.button.button, event.button.state, event.button.x, event.button.y);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_MOUSEWHEEL:
|
case SDL_MOUSEWHEEL:
|
||||||
break;
|
break;
|
||||||
|
@ -381,13 +421,15 @@ version(USE_SDL) {
|
||||||
pragma(lib, "user32.lib");
|
pragma(lib, "user32.lib");
|
||||||
extern(Windows)
|
extern(Windows)
|
||||||
int DLANGUIWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
int DLANGUIWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
||||||
LPSTR lpCmdLine, int nCmdShow) {
|
LPSTR lpCmdLine, int nCmdShow)
|
||||||
|
{
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Runtime.initialize();
|
Runtime.initialize();
|
||||||
result = myWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
|
result = myWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
|
||||||
|
Log.i("calling Runtime.terminate()");
|
||||||
Runtime.terminate();
|
Runtime.terminate();
|
||||||
}
|
}
|
||||||
catch (Throwable e) // catch any uncaught exceptions
|
catch (Throwable e) // catch any uncaught exceptions
|
||||||
|
|
Loading…
Reference in New Issue