diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f869be448..3e59090e3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -139,6 +139,10 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Linux") # Workaround for an old CMake, which does not understand CMAKE_CXX_STANDARD. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") endif() + + # Boost on Raspberry-Pi does not link to pthreads. + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads REQUIRED) endif() if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUXX) diff --git a/deps/deps-windows.cmake b/deps/deps-windows.cmake index 0806c23887..b3b31e5f37 100644 --- a/deps/deps-windows.cmake +++ b/deps/deps-windows.cmake @@ -210,10 +210,12 @@ endif () ExternalProject_Add(dep_wxwidgets EXCLUDE_FROM_ALL 1 - URL "https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.1/wxWidgets-3.1.1.tar.bz2" - URL_HASH SHA256=c925dfe17e8f8b09eb7ea9bfdcfcc13696a3e14e92750effd839f5e10726159e + GIT_REPOSITORY "https://github.com/prusa3d/wxWidgets" + GIT_TAG v3.1.1-patched +# URL "https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.1/wxWidgets-3.1.1.tar.bz2" +# URL_HASH SHA256=c925dfe17e8f8b09eb7ea9bfdcfcc13696a3e14e92750effd839f5e10726159e BUILD_IN_SOURCE 1 - PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}\\wxwidgets-pngprefix.h" src\\png\\pngprefix.h +# PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}\\wxwidgets-pngprefix.h" src\\png\\pngprefix.h CONFIGURE_COMMAND "" BUILD_COMMAND cd build\\msw && nmake /f makefile.vc BUILD=release SHARED=0 UNICODE=1 USE_GUI=1 "${DEP_WXWIDGETS_TARGET}" INSTALL_COMMAND "${CMAKE_COMMAND}" -E copy_directory include "${DESTDIR}\\usr\\local\\include" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 45d6f81968..f5099c8bb5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,7 +12,6 @@ add_subdirectory(poly2tri) add_subdirectory(qhull) add_subdirectory(Shiny) add_subdirectory(semver) -add_subdirectory(imgui) # Adding libnest2d project for bin packing... set(LIBNEST2D_UNITTESTS ON CACHE BOOL "Force generating unittests for libnest2d") @@ -24,6 +23,8 @@ include_directories(${LIBDIR}/qhull/src) add_subdirectory(libslic3r) if (SLIC3R_GUI) + add_subdirectory(imgui) + if(WIN32) message(STATUS "WXWIN environment set to: $ENV{WXWIN}") elseif(UNIX) @@ -56,9 +57,10 @@ if (SLIC3R_GUI) endif() include(${wxWidgets_USE_FILE}) + + add_subdirectory(slic3r) endif() -add_subdirectory(slic3r) # Create a slic3r executable # Process mainfests for various platforms. @@ -88,7 +90,8 @@ elseif (MSVC) # Manifest is provided through slic3r.rc, don't generate your own. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO") else () - target_link_libraries(slic3r ${CMAKE_DL_LIBS} -lstdc++) + # Boost on Raspberry-Pi does not link to pthreads explicitely. + target_link_libraries(slic3r ${CMAKE_DL_LIBS} -lstdc++ Threads::Threads) endif () # Add the Slic3r GUI library, libcurl, OpenGL and GLU libraries. diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index df54f16d48..f9284a19b2 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -508,31 +508,15 @@ void ObjectManipulation::on_fill_empty_value(const std::string& opt_key) std::copy(opt_key.begin(), opt_key.end() - 2, std::back_inserter(param)); double value = 0.0; - - if (param == "position") { - int axis = opt_key.back() == 'x' ? 0 : - opt_key.back() == 'y' ? 1 : 2; - - value = m_cache.position(axis); - } - else if (param == "rotation") { - int axis = opt_key.back() == 'x' ? 0 : - opt_key.back() == 'y' ? 1 : 2; - - value = m_cache.rotation(axis); - } - else if (param == "scale") { - int axis = opt_key.back() == 'x' ? 0 : - opt_key.back() == 'y' ? 1 : 2; - - value = m_cache.scale(axis); - } - else if (param == "size") { - int axis = opt_key.back() == 'x' ? 0 : - opt_key.back() == 'y' ? 1 : 2; - - value = m_cache.size(axis); - } + auto opt_key_to_axis = [&opt_key]() { return opt_key.back() == 'x' ? 0 : opt_key.back() == 'y' ? 1 : 2; }; + if (param == "position") + value = m_cache.position(opt_key_to_axis()); + else if (param == "rotation") + value = m_cache.rotation(opt_key_to_axis()); + else if (param == "scale") + value = m_cache.scale(opt_key_to_axis()); + else if (param == "size") + value = m_cache.size(opt_key_to_axis()); m_og->set_value(opt_key, double_to_string(value)); } diff --git a/src/slic3r/GUI/OptionsGroup.hpp b/src/slic3r/GUI/OptionsGroup.hpp index dbe1ea1a20..e4ada3692e 100644 --- a/src/slic3r/GUI/OptionsGroup.hpp +++ b/src/slic3r/GUI/OptionsGroup.hpp @@ -86,6 +86,8 @@ public: wxSizer* sizer {nullptr}; column_t extra_column {nullptr}; t_change m_on_change { nullptr }; + // To be called when the field loses focus, to assign a new initial value to the field. + // Used by the relative position / rotation / scale manipulation fields of the Object Manipulation UI. t_kill_focus m_fill_empty_value { nullptr }; t_kill_focus m_set_focus { nullptr }; std::function m_get_initial_config{ nullptr };