diff --git a/build/vc2019/nana.sln b/build/vc2019/nana.sln
new file mode 100644
index 00000000..d01415ee
--- /dev/null
+++ b/build/vc2019/nana.sln
@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26228.4
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nana", "nana.vcxproj", "{42D0520F-EFA5-4831-84FE-2B9085301C5D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {42D0520F-EFA5-4831-84FE-2B9085301C5D}.Debug|x64.ActiveCfg = Debug|x64
+ {42D0520F-EFA5-4831-84FE-2B9085301C5D}.Debug|x64.Build.0 = Debug|x64
+ {42D0520F-EFA5-4831-84FE-2B9085301C5D}.Debug|x86.ActiveCfg = Debug|Win32
+ {42D0520F-EFA5-4831-84FE-2B9085301C5D}.Debug|x86.Build.0 = Debug|Win32
+ {42D0520F-EFA5-4831-84FE-2B9085301C5D}.Release|x64.ActiveCfg = Release|x64
+ {42D0520F-EFA5-4831-84FE-2B9085301C5D}.Release|x64.Build.0 = Release|x64
+ {42D0520F-EFA5-4831-84FE-2B9085301C5D}.Release|x86.ActiveCfg = Release|Win32
+ {42D0520F-EFA5-4831-84FE-2B9085301C5D}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/build/vc2019/nana.vcxproj b/build/vc2019/nana.vcxproj
new file mode 100644
index 00000000..34b0b29d
--- /dev/null
+++ b/build/vc2019/nana.vcxproj
@@ -0,0 +1,316 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 15.0
+ {42D0520F-EFA5-4831-84FE-2B9085301C5D}
+ Win32Proj
+ nana
+
+
+
+ StaticLibrary
+ true
+ v142
+ Unicode
+
+
+ StaticLibrary
+ false
+ v142
+ true
+ Unicode
+
+
+ StaticLibrary
+ true
+ v142
+ Unicode
+
+
+ StaticLibrary
+ false
+ v142
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\..\include;$(IncludePath)
+ ../bin/
+ ..\..\..\temp\$(ProjectName)\$(PlatformToolset)_$(Configuration)_$(PlatformShortName)\
+ $(ProjectName)_$(PlatformToolset)_$(Configuration)_$(PlatformShortName)
+
+
+ ..\..\include;$(IncludePath)
+ ../bin/
+ ..\..\..\temp\$(ProjectName)\$(PlatformToolset)_$(Configuration)_$(PlatformShortName)\
+ $(ProjectName)_$(PlatformToolset)_$(Configuration)_$(PlatformShortName)
+
+
+ ../bin/
+ ..\..\..\temp\$(ProjectName)\$(PlatformToolset)_$(Configuration)_$(PlatformShortName)\
+ $(ProjectName)_$(PlatformToolset)_$(Configuration)_$(PlatformShortName)
+ ..\..\include;$(IncludePath)
+
+
+ ../bin/
+ ..\..\..\temp\$(ProjectName)\$(PlatformToolset)_$(Configuration)_$(PlatformShortName)\
+ $(ProjectName)_$(PlatformToolset)_$(Configuration)_$(PlatformShortName)
+ ..\..\include;$(IncludePath)
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
+ MultiThreadedDebug
+ true
+ stdcpplatest
+
+
+ Windows
+
+
+
+
+
+
+ Level3
+ Disabled
+ _DEBUG;_LIB;%(PreprocessorDefinitions)
+ MultiThreadedDebug
+ true
+ stdcpplatest
+
+
+ Windows
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
+ MultiThreaded
+ true
+ stdcpplatest
+
+
+ Windows
+ true
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;_LIB;%(PreprocessorDefinitions)
+ MultiThreaded
+ true
+ stdcpplatest
+
+
+ Windows
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build/vc2019/nana.vcxproj.filters b/build/vc2019/nana.vcxproj.filters
new file mode 100644
index 00000000..4923833d
--- /dev/null
+++ b/build/vc2019/nana.vcxproj.filters
@@ -0,0 +1,489 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {81850bad-7436-405a-beb5-357c5e34f039}
+
+
+ {44582b36-4575-4663-ac02-e80417f95d05}
+
+
+ {b7e3cdb7-99ac-473d-86c8-53dddce70480}
+
+
+ {02fa693c-edc1-4e04-bf1d-ec3c2a89182a}
+
+
+ {cffe7506-b96c-42aa-a747-41b5115d9580}
+
+
+ {b6b2c032-c6a4-4884-8c14-eca4aa69ef0c}
+
+
+ {58f2e0f8-4d63-40db-807d-d7adf71c4ebe}
+
+
+ {f288a25d-3ce8-4c2e-a86f-9aeda44bc557}
+
+
+ {90b2da01-605d-489b-b6c5-2af8d3c2d8a6}
+
+
+ {430feed0-e1d9-45cb-8d59-e1a48a04d19f}
+
+
+ {dcf62634-a658-453b-a58d-f1a96a12a8b8}
+
+
+ {c1cdf46a-519f-422a-947f-39e173045414}
+
+
+ {d68bd89c-170f-445f-b79f-aa03c881ab6b}
+
+
+ {a5d87649-2cd1-4a8f-a1f9-7151eaf6c772}
+
+
+ {0e6a58ab-652c-45d7-b9aa-8d9f2fa80ea1}
+
+
+
+
+ Sources
+
+
+ Sources
+
+
+ Sources
+
+
+ Sources
+
+
+ Sources
+
+
+ Sources
+
+
+ Sources
+
+
+ Sources
+
+
+ Sources\audio\detail
+
+
+ Sources\audio\detail
+
+
+ Sources\audio\detail
+
+
+ Sources\audio
+
+
+ Sources\detail
+
+
+ Sources\filesystem
+
+
+ Sources\gui\detail
+
+
+ Sources\gui\detail
+
+
+ Sources\gui\detail
+
+
+ Sources\gui\detail
+
+
+ Sources\gui\detail
+
+
+ Sources\gui\detail
+
+
+ Sources\gui\detail
+
+
+ Sources\gui\detail
+
+
+ Sources\gui\detail
+
+
+ Sources\gui\detail
+
+
+ Sources\gui\widgets\skeletons
+
+
+ Sources\gui\widgets\skeletons
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\gui\widgets
+
+
+ Sources\paint\detail
+
+
+ Sources\paint\detail
+
+
+ Sources\paint
+
+
+ Sources\paint
+
+
+ Sources\paint
+
+
+ Sources\paint
+
+
+ Sources\paint
+
+
+ Sources\system
+
+
+ Sources\system
+
+
+ Sources\system
+
+
+ Sources\system
+
+
+ Sources\threads
+
+
+ Sources\detail
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+ Sources\gui
+
+
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui\widgets
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include\gui
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include
+
+
+ Include\gui
+
+
+
+
+ Include
+
+
+ Include
+
+
+
\ No newline at end of file
diff --git a/include/nana/deploy.hpp b/include/nana/deploy.hpp
index 168358c5..e3091d23 100644
--- a/include/nana/deploy.hpp
+++ b/include/nana/deploy.hpp
@@ -118,7 +118,5 @@ namespace nana
}
}
-#define NANA_RGB(a) (((DWORD)(a) & 0xFF)<<16) | ((DWORD)(a) & 0xFF00) | (((DWORD)(a) & 0xFF0000) >> 16 )
-
#include
#endif //NANA_DEPLOY_HPP
diff --git a/include/nana/gui.hpp b/include/nana/gui.hpp
index 70bcb077..09c2f7b9 100644
--- a/include/nana/gui.hpp
+++ b/include/nana/gui.hpp
@@ -1 +1,54 @@
-#include "gui/wvl.hpp"
\ No newline at end of file
+/**
+ * Nana GUI Header
+ * Nana C++ Library(http://www.nanapro.org)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
+ *
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * @file nana/gui.hpp
+ * @description
+ * the header file contains the files required for running of Nana.GUI
+ */
+
+#ifndef NANA_GUI_HPP
+#define NANA_GUI_HPP
+
+#include "gui/compact.hpp"
+#include "gui/screen.hpp"
+#include "gui/widgets/form.hpp"
+#include "gui/drawing.hpp"
+#include "gui/msgbox.hpp"
+#include "gui/place.hpp"
+
+
+namespace nana
+{
+#ifdef NANA_AUTOMATIC_GUI_TESTING
+
+ /// @brief Take control of the GUI and optionally automatically tests it.
+ ///
+ /// @detail It transfers to nana the program flow control, which begin pumping messages
+ /// from the underlying OS, interpreting and sending it with suitable arguments
+ /// to the nana widgets that registered a response in the corresponding event.
+ /// It also accept arguments to be used in case of automatic GUI testing.
+ /// Other Way the arguments are ignored.
+ void exec(
+ unsigned wait = 1, ///< for the GUI to be constructed, in seconds
+ unsigned wait_end = 1, ///< for the GUI to be destructed, in seconds
+ std::function = {} ///< emit events to mimics user actions and may assert results
+ );
+
+ /// send a click message to this widget - useful in GUI testing
+ void click(widget& w);
+
+ /// in seconds
+ void Wait(unsigned wait = 0);
+#else
+ void exec();
+#endif
+
+
+}//end namespace nana
+#endif
diff --git a/include/nana/gui/basis.hpp b/include/nana/gui/basis.hpp
index b868a00a..e6ee771c 100644
--- a/include/nana/gui/basis.hpp
+++ b/include/nana/gui/basis.hpp
@@ -24,10 +24,11 @@ namespace nana
{
namespace detail
{
- struct native_window_handle_impl{};
- struct window_handle_impl{};
- struct event_handle_impl{};
- struct native_drawable_impl{};
+ struct basic_window;
+
+ struct native_window_handle_impl;
+ struct native_drawable_impl;
+ struct event_handle_impl;
}
struct accel_key
@@ -87,10 +88,11 @@ namespace nana
struct root_tag : public widget_tag{ static const flags value = flags::root; };
}// end namespace category
- using native_window_type = detail::native_window_handle_impl*;
- using window = detail::window_handle_impl*; ///< \see [What is window class ](https://sourceforge.net/p/nanapro/discussion/general/thread/bd0fabfb/)
- using event_handle = detail::event_handle_impl*;
- using native_drawable_type = detail::native_drawable_impl*;
+ using window = detail::basic_window*; ///< The window handle type representing nana window objects
+ using native_window_type = detail::native_window_handle_impl*; ///< The native window handle type representing system native windows. E.g, HWND in windows, Window in X11
+
+ using event_handle = detail::event_handle_impl*; ///< The event handle type representing nana window events
+ using native_drawable_type = detail::native_drawable_impl*; ///< The drawable handle type representing system native drawable objects. E.g. HDC in windows, Drawable in X11
struct keyboard
diff --git a/include/nana/gui/compact.hpp b/include/nana/gui/compact.hpp
new file mode 100644
index 00000000..c4a9789a
--- /dev/null
+++ b/include/nana/gui/compact.hpp
@@ -0,0 +1,57 @@
+/**
+ * Nana GUI Library Definition
+ * Nana C++ Library(http://www.nanapro.org)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
+ *
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * @file nana/gui/compact.hpp
+ * @description
+ * the header file contains the files required for running of Nana.GUI
+ */
+
+#ifndef NANA_GUI_WVL_HPP
+#define NANA_GUI_WVL_HPP
+
+#include "programming_interface.hpp"
+
+namespace nana
+{
+ namespace detail
+ {
+ struct form_loader_private
+ {
+ template friend class form_loader;
+ private:
+ static void insert_form(::nana::widget*);
+ };
+
+ template
+ class form_loader
+ {
+ public:
+ template
+ Form & operator()(Args &&... args) const
+ {
+ auto p = new Form(std::forward(args)...);
+
+ if (p->empty())
+ throw std::runtime_error("form_loader failed to create the form");
+
+
+ detail::form_loader_private::insert_form(p);
+ if (IsVisible)
+ p->show();
+
+ return *p;
+ }
+
+ };
+ }
+
+ template
+ using form_loader = detail::form_loader