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; + } + } /**