diff --git a/dlanguilib.visualdproj b/dlanguilib.visualdproj
index 6f78ec8a..063bfad9 100644
--- a/dlanguilib.visualdproj
+++ b/dlanguilib.visualdproj
@@ -53,7 +53,7 @@
$(CC) -c
1
$(DMDInstallDir)windows\bin\dmd.exe
- 3rdparty ../DerelictGL3/source ../DerelictUtil/source ../DerelictFT/source ../de_image/source/interfaces ../de_image/source/png $(SolutionDir)/../dlib $(SolutionDir)/../gl3n
+ 3rdparty ../DerelictGL3/source ../DerelictUtil/source ../DerelictFT/source ../de_image/source/interfaces ../de_image/source/png $(SolutionDir)/../dlib $(SolutionDir)/../gl3n $(SolutionDir)/../DSFML/src
$(SolutionDir)/views $(SolutionDir)/views/res $(SolutionDir)/views/res/i18n $(SolutionDir)/views/res/mdpi $(SolutionDir)/views/res/hdpi
$(ConfigurationName)
$(OutDir)
@@ -72,7 +72,7 @@
0
DebugFocus FontResources
0
- EmbedStandardResources Unicode USE_FREETYPE USE_OPENGL
+ EmbedStandardResources Unicode USE_FREETYPE USE_OPENGL USE_DSFML
0
0
1
@@ -403,6 +403,9 @@
+
+
+
diff --git a/src/dlangui/core/events.d b/src/dlangui/core/events.d
index 2bec74b0..ba40910f 100644
--- a/src/dlangui/core/events.d
+++ b/src/dlangui/core/events.d
@@ -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 {
diff --git a/src/dlangui/platforms/dsfml/dsfmlapp.d b/src/dlangui/platforms/dsfml/dsfmlapp.d
index 66237acd..07aa9e39 100644
--- a/src/dlangui/platforms/dsfml/dsfmlapp.d
+++ b/src/dlangui/platforms/dsfml/dsfmlapp.d
@@ -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;
+ }
+
}
/**