dsfml support - mouse events and window resize

This commit is contained in:
Vadim Lopatin 2015-03-27 18:22:26 +03:00
parent 27d07cc6d5
commit 460f02cd57
3 changed files with 77 additions and 2 deletions

View File

@ -53,7 +53,7 @@
<cccmd>$(CC) -c</cccmd>
<ccTransOpt>1</ccTransOpt>
<program>$(DMDInstallDir)windows\bin\dmd.exe</program>
<imppath>3rdparty ../DerelictGL3/source ../DerelictUtil/source ../DerelictFT/source ../de_image/source/interfaces ../de_image/source/png $(SolutionDir)/../dlib $(SolutionDir)/../gl3n</imppath>
<imppath>3rdparty ../DerelictGL3/source ../DerelictUtil/source ../DerelictFT/source ../de_image/source/interfaces ../de_image/source/png $(SolutionDir)/../dlib $(SolutionDir)/../gl3n $(SolutionDir)/../DSFML/src</imppath>
<fileImppath>$(SolutionDir)/views $(SolutionDir)/views/res $(SolutionDir)/views/res/i18n $(SolutionDir)/views/res/mdpi $(SolutionDir)/views/res/hdpi</fileImppath>
<outdir>$(ConfigurationName)</outdir>
<objdir>$(OutDir)</objdir>
@ -72,7 +72,7 @@
<debuglevel>0</debuglevel>
<debugids>DebugFocus FontResources</debugids>
<versionlevel>0</versionlevel>
<versionids>EmbedStandardResources Unicode USE_FREETYPE USE_OPENGL</versionids>
<versionids>EmbedStandardResources Unicode USE_FREETYPE USE_OPENGL USE_DSFML</versionids>
<dump_source>0</dump_source>
<mapverbosity>0</mapverbosity>
<createImplib>1</createImplib>
@ -403,6 +403,9 @@
<Folder name="common">
<File path="src\dlangui\platforms\common\platform.d" />
</Folder>
<Folder name="dsfml">
<File path="src\dlangui\platforms\dsfml\dsfmlapp.d" />
</Folder>
<Folder name="sdl">
<File path="src\dlangui\platforms\sdl\sdlapp.d" />
</Folder>

View File

@ -482,6 +482,17 @@ enum MouseButton : ubyte {
XButton2 = MouseFlag.XButton2, // additional button 2
}
/// converts MouseButton to MouseFlag
ushort mouseButtonToFlag(MouseButton btn) {
switch(btn) with (MouseButton) {
case Left: return MouseFlag.LButton;
case Right: return MouseFlag.RButton;
case Middle: return MouseFlag.MButton;
case XButton1: return MouseFlag.XButton1;
case XButton2: return MouseFlag.XButton2;
default: return 0;
}
}
/// Mouse button state details for MouseEvent
struct ButtonDetails {

View File

@ -102,6 +102,67 @@ class DSFMLWindow : dlangui.platforms.common.platform.Window {
buf.afterDrawing();
}
private MouseButton translateButton(uint btn) {
switch(btn) {
default:
case Mouse.Button.Left:
return MouseButton.Left;
case Mouse.Button.Right:
return MouseButton.Right;
case Mouse.Button.Middle:
return MouseButton.Middle;
case Mouse.Button.XButton1:
return MouseButton.XButton1;
case Mouse.Button.XButton2:
return MouseButton.XButton2;
}
}
private ushort mouseFlags;
bool handleEvent(ref Event event) {
switch (event.type) {
case(event.EventType.Closed): {
break;
}
case(event.EventType.Resized): {
onResize(event.size.width, event.size.height);
break;
}
case(event.EventType.MouseButtonPressed): {
auto btn = translateButton(event.mouseButton.button);
mouseFlags |= mouseButtonToFlag(btn);
MouseEvent ev = new MouseEvent(MouseAction.ButtonDown, btn, mouseFlags, cast(short)event.mouseButton.x, cast(short)event.mouseButton.y);
dispatchMouseEvent(ev);
break;
}
case(event.EventType.MouseButtonReleased): {
auto btn = translateButton(event.mouseButton.button);
mouseFlags &= ~mouseButtonToFlag(btn);
MouseEvent ev = new MouseEvent(MouseAction.ButtonUp, btn, mouseFlags, cast(short)event.mouseButton.x, cast(short)event.mouseButton.y);
dispatchMouseEvent(ev);
break;
}
case(event.EventType.MouseMoved): {
MouseEvent ev = new MouseEvent(MouseAction.Move, MouseButton.None, mouseFlags, cast(short)event.mouseMove.x, cast(short)event.mouseMove.y);
dispatchMouseEvent(ev);
break;
}
case(event.EventType.MouseEntered): {
break;
}
case(event.EventType.MouseLeft): {
break;
}
case(event.EventType.MouseWheelMoved): {
break;
}
default:
break;
}
return true;
}
}
/**