diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..87593cf6 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,127 @@ +# CMake configuration for Nana +# Author: Andrew Kornilov(https://github.com/ierofant) +# Contributor: +# Robert Hauck - Enable support for PNG/Freetype + +project(nana) +cmake_minimum_required(VERSION 2.8) + + +#Select platform automatically +if(WIN32) + add_definitions(-DNANA_WINDOWS) + add_definitions(-DPLATFORM_SPEC_HPP=) + + #Test if it is MINGW + if(MINGW) + add_definitions(-DNANA_MINGW) + add_definitions(-DSTD_CODECVT_NOT_SUPPORTED) + option(NANA_THREAD_NOT_SUPPORTED "Use this flag if MinGW version is older than 4.8.1" ON) + if(NANA_THREAD_NOT_SUPPORTED) + add_definitions(-DSTD_THREAD_NOT_SUPPORTED) + endif() + endif() +endif() +if(UNIX) + add_definitions(-DNANA_LINUX) + add_definitions(-DNANA_X11) + add_definitions(-DPLATFORM_SPEC_HPP=) + add_definitions(-DSTD_CODECVT_NOT_SUPPORTED) +endif() + + +#Global MSVC definitions +if(WIN32) + if(MSVC) + option(WIN32_USE_MP "Set to ON to build nana with the /MP option (Visual Studio 2005 and above)." ON) + if(WIN32_USE_MP) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") + endif() + + # More MSVC specific compilation flags + add_definitions(-D_SCL_SECURE_NO_WARNINGS) + add_definitions(-D_CRT_SECURE_NO_DEPRECATE) + endif(MSVC) +endif(WIN32) + + +#Unicode +option(NANA_UNICODE "Use Unicode Character Set" ON) +if(NANA_UNICODE) + add_definitions(-DNANA_UNICODE) + if(WIN32) + add_definitions(-DUNICODE -D_UNICODE) + endif() +endif() + + +#Find PNG +if(UNIX) + find_package(Freetype) + if (FREETYPE_FOUND) + include_directories( ${FREETYPE_INCLUDE_DIRS}) + endif() +endif() + +option(NANA_ENABLE_PNG "Enable the use of PNG" ON) +if(NANA_ENABLE_PNG) + add_definitions(-DNANA_ENABLE_PNG) + + option(NANA_LIBPNG "Use the included libpng" ON) + if(NANA_LIBPNG) + add_definitions(-DNANA_LIBPNG) + else() + find_package(PNG) + if (PNG_FOUND) + include_directories( ${PNG_INCLUDE_DIRS}) + endif() + endif() +endif() + + + +#Copy our new config.hpp (with removed defines) +execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/build/cmake/config.hpp ${CMAKE_SOURCE_DIR}/include/nana/) + + +set(NANA_SOURCE_DIR ${CMAKE_SOURCE_DIR}/source) +set(NANA_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) + +if(CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") +endif(CMAKE_COMPILER_IS_GNUCXX) + +include_directories(${NANA_INCLUDE_DIR}) +aux_source_directory(${NANA_SOURCE_DIR} NANA_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/detail NANA_DETAIL_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/filesystem NANA_FILESYSTEM_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/audio NANA_AUDIO_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/audio/detail NANA_AUDIO_DETAIL_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/gui NANA_GUI_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/gui/detail NANA_GUI_DETAIL_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/gui/widgets NANA_GUI_WIDGETS_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/gui/widgets/skeletons NANA_GUI_WIDGETS_SKELETONS_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/paint NANA_PAINT_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/paint/detail NANA_PAINT_DETAIL_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/system NANA_SYSTEM_SOURCE) +aux_source_directory(${NANA_SOURCE_DIR}/threads NANA_THREADS_SOURCE) + +add_library(${PROJECT_NAME} ${NANA_SOURCE} + ${NANA_DETAIL_SOURCE} + ${NANA_FILESYSTEM_SOURCE} + ${NANA_AUDIO_SOURCE} + ${NANA_AUDIO_DETAIL_SOURCE} + ${NANA_GUI_SOURCE} + ${NANA_GUI_DETAIL_SOURCE} + ${NANA_GUI_WIDGETS_SOURCE} + ${NANA_GUI_WIDGETS_SKELETONS_SOURCE} + ${NANA_PAINT_SOURCE} + ${NANA_PAINT_DETAIL_SOURCE} + ${NANA_SYSTEM_SOURCE} + ${NANA_THREADS_SOURCE}) + + +install(TARGETS ${PROJECT_NAME} + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib) +install(DIRECTORY ${NANA_INCLUDE_DIR}/nana DESTINATION include) \ No newline at end of file diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt deleted file mode 100644 index e04ee417..00000000 --- a/build/cmake/CMakeLists.txt +++ /dev/null @@ -1,50 +0,0 @@ -# CMake configuration for Nana -# Author: ierofant(https://github.com/ierofant) - -project(nana) -cmake_minimum_required(VERSION 2.8) - -string(REGEX REPLACE "/[^/]*$" "" CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}) -string(REGEX REPLACE "/[^/]*$" "" CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}) - -set(NANA_SOURCE_DIR ${CMAKE_SOURCE_DIR}/source) -set(NANA_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include) - -if(CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") -endif(CMAKE_COMPILER_IS_GNUCXX) - -include_directories(${NANA_INCLUDE_DIR}) -aux_source_directory(${NANA_SOURCE_DIR} NANA_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/detail NANA_DETAIL_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/filesystem NANA_FILESYSTEM_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/audio NANA_AUDIO_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/audio/detail NANA_AUDIO_DETAIL_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/gui NANA_GUI_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/gui/detail NANA_GUI_DETAIL_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/gui/widgets NANA_GUI_WIDGETS_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/gui/widgets/skeletons NANA_GUI_WIDGETS_SKELETONS_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/paint NANA_PAINT_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/paint/detail NANA_PAINT_DETAIL_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/system NANA_SYSTEM_SOURCE) -aux_source_directory(${NANA_SOURCE_DIR}/threads NANA_THREADS_SOURCE) - -add_library(${PROJECT_NAME} ${NANA_SOURCE} - ${NANA_DETAIL_SOURCE} - ${NANA_FILESYSTEM_SOURCE} - ${NANA_AUDIO_SOURCE} - ${NANA_AUDIO_DETAIL_SOURCE} - ${NANA_GUI_SOURCE} - ${NANA_GUI_DETAIL_SOURCE} - ${NANA_GUI_WIDGETS_SOURCE} - ${NANA_GUI_WIDGETS_SKELETONS_SOURCE} - ${NANA_PAINT_SOURCE} - ${NANA_PAINT_DETAIL_SOURCE} - ${NANA_SYSTEM_SOURCE} - ${NANA_THREADS_SOURCE}) - - -install(TARGETS ${PROJECT_NAME} - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib) -install(DIRECTORY ${NANA_INCLUDE_DIR}/nana DESTINATION include) \ No newline at end of file diff --git a/build/cmake/config.hpp b/build/cmake/config.hpp new file mode 100644 index 00000000..08527a55 --- /dev/null +++ b/build/cmake/config.hpp @@ -0,0 +1,18 @@ +/* + * Nana Configuration + * Nana C++ Library(http://www.nanapro.org) + * Copyright(C) 2003-2014 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/config.hpp + */ + +#ifndef NANA_CONFIG_HPP +#define NANA_CONFIG_HPP + +//All defines have been moved to the CMakelists.txt in the root directory. + +#endif //NANA_CONFIG_HPP diff --git a/source/gui/detail/win32/bedrock.cpp b/source/gui/detail/win32/bedrock.cpp index 555fcbaf..7820227c 100644 --- a/source/gui/detail/win32/bedrock.cpp +++ b/source/gui/detail/win32/bedrock.cpp @@ -1320,6 +1320,7 @@ namespace detail arg.ignore = false; brock.emit(event_code::shortkey, msgwnd, arg, true, &context); } + def_window_proc = true; break; case WM_SYSKEYDOWN: if(brock.whether_keyboard_shortkey() == false) @@ -1340,6 +1341,7 @@ namespace detail else if(brock.get_menu()) brock.remove_menu(); } + def_window_proc = true; break; case WM_SYSKEYUP: if(brock.set_keyboard_shortkey(false) == false) @@ -1356,6 +1358,7 @@ namespace detail brock.emit(event_code::key_release, msgwnd, arg, true, &context); } } + def_window_proc = true; break; case WM_KEYDOWN: if(msgwnd->flags.enabled) diff --git a/source/gui/widgets/slider.cpp b/source/gui/widgets/slider.cpp index e0ca0442..23af12a4 100644 --- a/source/gui/widgets/slider.cpp +++ b/source/gui/widgets/slider.cpp @@ -198,12 +198,12 @@ namespace nana unsigned vcur() const { - return attr_.vcur; + return static_cast(attr_.vcur); } void resize() { - this->_m_mk_slider_pos_by_value(); + _m_mk_slider_pos_by_value(); attr_.adorn_pos = attr_.pos; } @@ -338,16 +338,18 @@ namespace nana unsigned move_step(bool forward) { - unsigned cmpvalue = attr_.vcur; + unsigned cmpvalue = static_cast(attr_.vcur); + auto value = cmpvalue; if(forward) { - if(attr_.vcur) - --attr_.vcur; + if (value) + --value; } - else if(attr_.vcur < attr_.vmax) - ++attr_.vcur; + else if (value < attr_.vmax) + ++value; - if(cmpvalue != attr_.vcur) + attr_.vcur = value; + if (cmpvalue != value) { _m_mk_slider_pos_by_value(); draw(); @@ -436,32 +438,29 @@ namespace nana return static_cast(_m_scale() * attr_.vcur / attr_.vmax); } - unsigned _m_mk_slider_value_by_pos() + void _m_mk_slider_value_by_pos() { if(_m_scale()) { - auto cmpvalue = attr_.vcur; - attr_.vcur = static_cast(attr_.pos * attr_.vmax / _m_scale()); - if (cmpvalue != attr_.vcur) + auto cmpvalue = static_cast(attr_.vcur); + attr_.vcur = (attr_.pos * attr_.vmax / _m_scale()); + if (cmpvalue != static_cast(attr_.vcur)) _m_emit_value_changed(); } - return attr_.vcur; } - int _m_mk_slider_pos_by_value() + void _m_mk_slider_pos_by_value() { attr_.pos = double(_m_scale()) * attr_.vcur / attr_.vmax; if(slider_state_.trace == slider_state_.TraceNone) attr_.adorn_pos = attr_.pos; - - return static_cast(attr_.pos); } unsigned _m_value_by_pos(double pos) const { if(_m_scale()) - return static_cast(pos * attr_.vmax / _m_scale()); + return static_cast(pos * attr_.vmax / _m_scale()); return 0; } @@ -548,7 +547,7 @@ namespace nana style dir; unsigned border; unsigned vmax; - unsigned vcur; + double vcur; double pos; bool is_draw_adorn; double adorn_pos;