diff --git a/dlangui-msvc.sln b/dlangui-msvc.sln
index 4fdec005..ac22fb8c 100644
--- a/dlangui-msvc.sln
+++ b/dlangui-msvc.sln
@@ -69,6 +69,8 @@ Global
ConsoleDebug|x64 = ConsoleDebug|x64
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
+ DSFMLDebug|Win32 = DSFMLDebug|Win32
+ DSFMLDebug|x64 = DSFMLDebug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
Unittest|Win32 = Unittest|Win32
@@ -83,6 +85,10 @@ Global
{52A2ABB9-2CF7-4D5F-AE8C-75B21F8585A5}.Debug|Win32.Build.0 = Debug|Win32
{52A2ABB9-2CF7-4D5F-AE8C-75B21F8585A5}.Debug|x64.ActiveCfg = Debug|x64
{52A2ABB9-2CF7-4D5F-AE8C-75B21F8585A5}.Debug|x64.Build.0 = Debug|x64
+ {52A2ABB9-2CF7-4D5F-AE8C-75B21F8585A5}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {52A2ABB9-2CF7-4D5F-AE8C-75B21F8585A5}.DSFMLDebug|Win32.Build.0 = DSFMLDebug|Win32
+ {52A2ABB9-2CF7-4D5F-AE8C-75B21F8585A5}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
+ {52A2ABB9-2CF7-4D5F-AE8C-75B21F8585A5}.DSFMLDebug|x64.Build.0 = DSFMLDebug|x64
{52A2ABB9-2CF7-4D5F-AE8C-75B21F8585A5}.Release|Win32.ActiveCfg = Release|Win32
{52A2ABB9-2CF7-4D5F-AE8C-75B21F8585A5}.Release|Win32.Build.0 = Release|Win32
{52A2ABB9-2CF7-4D5F-AE8C-75B21F8585A5}.Release|x64.ActiveCfg = Release|x64
@@ -99,6 +105,10 @@ Global
{1C8C4726-B356-4533-90C7-88BDA875BF30}.Debug|Win32.Build.0 = Debug|Win32
{1C8C4726-B356-4533-90C7-88BDA875BF30}.Debug|x64.ActiveCfg = Debug|x64
{1C8C4726-B356-4533-90C7-88BDA875BF30}.Debug|x64.Build.0 = Debug|x64
+ {1C8C4726-B356-4533-90C7-88BDA875BF30}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {1C8C4726-B356-4533-90C7-88BDA875BF30}.DSFMLDebug|Win32.Build.0 = DSFMLDebug|Win32
+ {1C8C4726-B356-4533-90C7-88BDA875BF30}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
+ {1C8C4726-B356-4533-90C7-88BDA875BF30}.DSFMLDebug|x64.Build.0 = DSFMLDebug|x64
{1C8C4726-B356-4533-90C7-88BDA875BF30}.Release|Win32.ActiveCfg = Release|Win32
{1C8C4726-B356-4533-90C7-88BDA875BF30}.Release|Win32.Build.0 = Release|Win32
{1C8C4726-B356-4533-90C7-88BDA875BF30}.Release|x64.ActiveCfg = Release|x64
@@ -115,6 +125,10 @@ Global
{79EA1B6E-D87E-4C45-A12D-7AD00C398F1F}.Debug|Win32.Build.0 = Debug|Win32
{79EA1B6E-D87E-4C45-A12D-7AD00C398F1F}.Debug|x64.ActiveCfg = Debug|x64
{79EA1B6E-D87E-4C45-A12D-7AD00C398F1F}.Debug|x64.Build.0 = Debug|x64
+ {79EA1B6E-D87E-4C45-A12D-7AD00C398F1F}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {79EA1B6E-D87E-4C45-A12D-7AD00C398F1F}.DSFMLDebug|Win32.Build.0 = DSFMLDebug|Win32
+ {79EA1B6E-D87E-4C45-A12D-7AD00C398F1F}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
+ {79EA1B6E-D87E-4C45-A12D-7AD00C398F1F}.DSFMLDebug|x64.Build.0 = DSFMLDebug|x64
{79EA1B6E-D87E-4C45-A12D-7AD00C398F1F}.Release|Win32.ActiveCfg = Release|Win32
{79EA1B6E-D87E-4C45-A12D-7AD00C398F1F}.Release|Win32.Build.0 = Release|Win32
{79EA1B6E-D87E-4C45-A12D-7AD00C398F1F}.Release|x64.ActiveCfg = Release|x64
@@ -131,6 +145,10 @@ Global
{B1CA031C-C195-4938-8F3E-8BFF7DA68933}.Debug|Win32.Build.0 = Debug|Win32
{B1CA031C-C195-4938-8F3E-8BFF7DA68933}.Debug|x64.ActiveCfg = Debug|x64
{B1CA031C-C195-4938-8F3E-8BFF7DA68933}.Debug|x64.Build.0 = Debug|x64
+ {B1CA031C-C195-4938-8F3E-8BFF7DA68933}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {B1CA031C-C195-4938-8F3E-8BFF7DA68933}.DSFMLDebug|Win32.Build.0 = DSFMLDebug|Win32
+ {B1CA031C-C195-4938-8F3E-8BFF7DA68933}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
+ {B1CA031C-C195-4938-8F3E-8BFF7DA68933}.DSFMLDebug|x64.Build.0 = DSFMLDebug|x64
{B1CA031C-C195-4938-8F3E-8BFF7DA68933}.Release|Win32.ActiveCfg = Release|Win32
{B1CA031C-C195-4938-8F3E-8BFF7DA68933}.Release|Win32.Build.0 = Release|Win32
{B1CA031C-C195-4938-8F3E-8BFF7DA68933}.Release|x64.ActiveCfg = Release|x64
@@ -147,6 +165,10 @@ Global
{9F5147FF-DB71-4CEC-BF2F-803143E42BCD}.Debug|Win32.Build.0 = Debug|Win32
{9F5147FF-DB71-4CEC-BF2F-803143E42BCD}.Debug|x64.ActiveCfg = Debug|x64
{9F5147FF-DB71-4CEC-BF2F-803143E42BCD}.Debug|x64.Build.0 = Debug|x64
+ {9F5147FF-DB71-4CEC-BF2F-803143E42BCD}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {9F5147FF-DB71-4CEC-BF2F-803143E42BCD}.DSFMLDebug|Win32.Build.0 = DSFMLDebug|Win32
+ {9F5147FF-DB71-4CEC-BF2F-803143E42BCD}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
+ {9F5147FF-DB71-4CEC-BF2F-803143E42BCD}.DSFMLDebug|x64.Build.0 = DSFMLDebug|x64
{9F5147FF-DB71-4CEC-BF2F-803143E42BCD}.Release|Win32.ActiveCfg = Release|Win32
{9F5147FF-DB71-4CEC-BF2F-803143E42BCD}.Release|Win32.Build.0 = Release|Win32
{9F5147FF-DB71-4CEC-BF2F-803143E42BCD}.Release|x64.ActiveCfg = Release|x64
@@ -163,6 +185,10 @@ Global
{954B6A84-1EEC-42B0-B215-2A17842B1101}.Debug|Win32.Build.0 = Debug|Win32
{954B6A84-1EEC-42B0-B215-2A17842B1101}.Debug|x64.ActiveCfg = Debug|x64
{954B6A84-1EEC-42B0-B215-2A17842B1101}.Debug|x64.Build.0 = Debug|x64
+ {954B6A84-1EEC-42B0-B215-2A17842B1101}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {954B6A84-1EEC-42B0-B215-2A17842B1101}.DSFMLDebug|Win32.Build.0 = DSFMLDebug|Win32
+ {954B6A84-1EEC-42B0-B215-2A17842B1101}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
+ {954B6A84-1EEC-42B0-B215-2A17842B1101}.DSFMLDebug|x64.Build.0 = DSFMLDebug|x64
{954B6A84-1EEC-42B0-B215-2A17842B1101}.Release|Win32.ActiveCfg = Release|Win32
{954B6A84-1EEC-42B0-B215-2A17842B1101}.Release|Win32.Build.0 = Release|Win32
{954B6A84-1EEC-42B0-B215-2A17842B1101}.Release|x64.ActiveCfg = Release|x64
@@ -178,6 +204,8 @@ Global
{DA4E9F22-21EB-4A71-AF1F-3B5BC370CBA0}.Debug|Win32.ActiveCfg = Debug|Win32
{DA4E9F22-21EB-4A71-AF1F-3B5BC370CBA0}.Debug|Win32.Build.0 = Debug|Win32
{DA4E9F22-21EB-4A71-AF1F-3B5BC370CBA0}.Debug|x64.ActiveCfg = Debug|x64
+ {DA4E9F22-21EB-4A71-AF1F-3B5BC370CBA0}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {DA4E9F22-21EB-4A71-AF1F-3B5BC370CBA0}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
{DA4E9F22-21EB-4A71-AF1F-3B5BC370CBA0}.Release|Win32.ActiveCfg = Release|Win32
{DA4E9F22-21EB-4A71-AF1F-3B5BC370CBA0}.Release|Win32.Build.0 = Release|Win32
{DA4E9F22-21EB-4A71-AF1F-3B5BC370CBA0}.Release|x64.ActiveCfg = Release|x64
@@ -193,6 +221,10 @@ Global
{533AF38D-98E7-446F-9689-805BDFF3CE84}.Debug|Win32.Build.0 = Debug|Win32
{533AF38D-98E7-446F-9689-805BDFF3CE84}.Debug|x64.ActiveCfg = Debug|x64
{533AF38D-98E7-446F-9689-805BDFF3CE84}.Debug|x64.Build.0 = Debug|x64
+ {533AF38D-98E7-446F-9689-805BDFF3CE84}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {533AF38D-98E7-446F-9689-805BDFF3CE84}.DSFMLDebug|Win32.Build.0 = DSFMLDebug|Win32
+ {533AF38D-98E7-446F-9689-805BDFF3CE84}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
+ {533AF38D-98E7-446F-9689-805BDFF3CE84}.DSFMLDebug|x64.Build.0 = DSFMLDebug|x64
{533AF38D-98E7-446F-9689-805BDFF3CE84}.Release|Win32.ActiveCfg = Release|Win32
{533AF38D-98E7-446F-9689-805BDFF3CE84}.Release|Win32.Build.0 = Release|Win32
{533AF38D-98E7-446F-9689-805BDFF3CE84}.Release|x64.ActiveCfg = Release|x64
@@ -207,6 +239,8 @@ Global
{29CF2CAC-2C0C-4F17-9292-E1706AC7EBBF}.Debug|Win32.ActiveCfg = Debug|Win32
{29CF2CAC-2C0C-4F17-9292-E1706AC7EBBF}.Debug|Win32.Build.0 = Debug|Win32
{29CF2CAC-2C0C-4F17-9292-E1706AC7EBBF}.Debug|x64.ActiveCfg = Debug|x64
+ {29CF2CAC-2C0C-4F17-9292-E1706AC7EBBF}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {29CF2CAC-2C0C-4F17-9292-E1706AC7EBBF}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
{29CF2CAC-2C0C-4F17-9292-E1706AC7EBBF}.Release|Win32.ActiveCfg = Release|Win32
{29CF2CAC-2C0C-4F17-9292-E1706AC7EBBF}.Release|Win32.Build.0 = Release|Win32
{29CF2CAC-2C0C-4F17-9292-E1706AC7EBBF}.Release|x64.ActiveCfg = Release|x64
@@ -221,6 +255,8 @@ Global
{20722E6B-CA27-467F-8BB8-07F80106B478}.Debug|Win32.ActiveCfg = Debug|Win32
{20722E6B-CA27-467F-8BB8-07F80106B478}.Debug|Win32.Build.0 = Debug|Win32
{20722E6B-CA27-467F-8BB8-07F80106B478}.Debug|x64.ActiveCfg = Debug|x64
+ {20722E6B-CA27-467F-8BB8-07F80106B478}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {20722E6B-CA27-467F-8BB8-07F80106B478}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
{20722E6B-CA27-467F-8BB8-07F80106B478}.Release|Win32.ActiveCfg = Release|Win32
{20722E6B-CA27-467F-8BB8-07F80106B478}.Release|Win32.Build.0 = Release|Win32
{20722E6B-CA27-467F-8BB8-07F80106B478}.Release|x64.ActiveCfg = Release|Win32
@@ -235,6 +271,8 @@ Global
{5F443F6A-6612-4404-B89E-D0D0205DC8E5}.Debug|Win32.ActiveCfg = Debug|Win32
{5F443F6A-6612-4404-B89E-D0D0205DC8E5}.Debug|Win32.Build.0 = Debug|Win32
{5F443F6A-6612-4404-B89E-D0D0205DC8E5}.Debug|x64.ActiveCfg = Debug|x64
+ {5F443F6A-6612-4404-B89E-D0D0205DC8E5}.DSFMLDebug|Win32.ActiveCfg = Debug|Win32
+ {5F443F6A-6612-4404-B89E-D0D0205DC8E5}.DSFMLDebug|x64.ActiveCfg = Debug|x64
{5F443F6A-6612-4404-B89E-D0D0205DC8E5}.Release|Win32.ActiveCfg = Release|Win32
{5F443F6A-6612-4404-B89E-D0D0205DC8E5}.Release|Win32.Build.0 = Release|Win32
{5F443F6A-6612-4404-B89E-D0D0205DC8E5}.Release|x64.ActiveCfg = Release|Win32
@@ -249,6 +287,8 @@ Global
{5F443F6A-6612-4404-B89E-D0D0205DC812}.Debug|Win32.ActiveCfg = Debug|Win32
{5F443F6A-6612-4404-B89E-D0D0205DC812}.Debug|Win32.Build.0 = Debug|Win32
{5F443F6A-6612-4404-B89E-D0D0205DC812}.Debug|x64.ActiveCfg = Debug|x64
+ {5F443F6A-6612-4404-B89E-D0D0205DC812}.DSFMLDebug|Win32.ActiveCfg = DSFMLDebug|Win32
+ {5F443F6A-6612-4404-B89E-D0D0205DC812}.DSFMLDebug|x64.ActiveCfg = DSFMLDebug|x64
{5F443F6A-6612-4404-B89E-D0D0205DC812}.Release|Win32.ActiveCfg = Release|Win32
{5F443F6A-6612-4404-B89E-D0D0205DC812}.Release|Win32.Build.0 = Release|Win32
{5F443F6A-6612-4404-B89E-D0D0205DC812}.Release|x64.ActiveCfg = Release|Win32
diff --git a/dlangui-msvc.visualdproj b/dlangui-msvc.visualdproj
index 37e6d5b9..6fe4e786 100644
--- a/dlangui-msvc.visualdproj
+++ b/dlangui-msvc.visualdproj
@@ -824,6 +824,212 @@
*.obj;*.cmd;*.build;*.json;*.dep
+
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ $(CC) -c
+ 1
+ 0
+ $(DMDInstallDir)windows\bin\dmd.exe
+
+ views
+ $(ConfigurationName)
+ $(OutDir)
+
+
+ 0
+
+
+
+
+ 0
+
+
+ 1
+ $(IntDir)\$(TargetName).json
+ 0
+ KeyInput
+ 0
+ EmbedStandardResources ForceLogs USE_FREETYPE NO_OPENGL
+ 0
+ 0
+ 0
+
+
+
+ 0
+
+ 1
+ $(VisualDInstallDir)cv2pdb\cv2pdb.exe
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+ $(OutDir)\$(ProjectName).lib
+ 1
+ 2
+ 0
+
+
+
+ *.obj;*.cmd;*.build;*.json;*.dep
+
+
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ $(CC) -c
+ 1
+ 0
+ $(DMDInstallDir)windows\bin\dmd.exe
+
+ views
+ $(ConfigurationName)
+ $(OutDir)
+
+
+ 0
+
+
+
+
+ 0
+
+
+ 1
+ $(IntDir)\$(TargetName).json
+ 0
+ KeyInput
+ 0
+ EmbedStandardResources ForceLogs USE_FREETYPE NO_OPENGL
+ 0
+ 0
+ 0
+
+
+
+ 0
+
+ 1
+ $(VisualDInstallDir)cv2pdb\cv2pdb.exe
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+ $(OutDir)\$(ProjectName).lib
+ 1
+ 2
+ 0
+
+
+
+ *.obj;*.cmd;*.build;*.json;*.dep
+
@@ -880,82 +1086,82 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+