diff --git a/CMakeLists.txt b/CMakeLists.txt index af78323a15..88cb23129e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,7 +124,6 @@ endif() option(SLIC3R_STATIC "Compile OrcaSlicer with static libraries (Boost, TBB, glew)" ${SLIC3R_STATIC_INITIAL}) option(SLIC3R_GUI "Compile OrcaSlicer with GUI components (OpenGL, wxWidgets)" 1) option(SLIC3R_FHS "Assume OrcaSlicer is to be installed in a FHS directory structure" 0) -option(SLIC3R_WX_STABLE "Build against wxWidgets stable (3.0) as oppsed to dev (3.1) on Linux" 0) option(SLIC3R_PROFILE "Compile OrcaSlicer with an invasive Shiny profiler" 0) option(SLIC3R_PCH "Use precompiled headers" 1) option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1) diff --git a/deps/wxWidgets/wxWidgets.cmake b/deps/wxWidgets/wxWidgets.cmake index e1c40cc287..4a1a4d9012 100644 --- a/deps/wxWidgets/wxWidgets.cmake +++ b/deps/wxWidgets/wxWidgets.cmake @@ -21,21 +21,13 @@ else () set(_wx_edge "-DwxUSE_WEBVIEW_EDGE=OFF") endif () -set(_wx_opengl_override "") -if(APPLE AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0") - set(_wx_opengl_override - -DOPENGL_gl_LIBRARY="-framework OpenGL" - -DOPENGL_glu_LIBRARY="-framework OpenGL" - ) -endif() - orcaslicer_add_cmake_project( wxWidgets GIT_REPOSITORY "https://github.com/SoftFever/Orca-deps-wxWidgets" + GIT_TAG v3.3.2 GIT_SHALLOW ON DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} ${JPEG_PKG} CMAKE_ARGS - ${_wx_opengl_override} -DwxBUILD_PRECOMP=ON ${_wx_toolkit} "-DCMAKE_DEBUG_POSTFIX:STRING=${_wx_debug_postfix}" @@ -44,7 +36,6 @@ orcaslicer_add_cmake_project( ${_wx_shared} -DwxUSE_MEDIACTRL=ON -DwxUSE_DETECT_SM=OFF - -DwxUSE_UNICODE=ON -DwxUSE_PRIVATE_FONTS=ON -DwxUSE_OPENGL=ON -DwxUSE_GLCANVAS_EGL=OFF @@ -62,6 +53,29 @@ orcaslicer_add_cmake_project( -DwxUSE_LIBJPEG=sys -DwxUSE_LIBTIFF=OFF -DwxUSE_EXPAT=sys + -DwxUSE_NANOSVG=OFF +) + +# wxWidgets 3.3 cmake install doesn't include private headers. +# OrcaSlicer uses some of the private headers (for accessibility support). +# Copy the private headers directory after install. +if(MSVC) + set(_wx_inc_dest ${DESTDIR}/include/wx) +else() + set(_wx_inc_dest ${DESTDIR}/include/wx-3.3/wx) +endif() +ExternalProject_Add_Step(dep_wxWidgets copy_private_headers + DEPENDEES install + COMMENT "Copying wxWidgets private headers" + COMMAND ${CMAKE_COMMAND} -E copy_directory + /include/wx/private + ${_wx_inc_dest}/private + COMMAND ${CMAKE_COMMAND} -E copy_directory + /include/wx/generic/private + ${_wx_inc_dest}/generic/private + COMMAND ${CMAKE_COMMAND} -E copy_directory + /include/wx/gtk/private + ${_wx_inc_dest}/gtk/private ) if (MSVC) diff --git a/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml b/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml index ba856cae2c..80ea2fb70a 100644 --- a/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml +++ b/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml @@ -97,7 +97,6 @@ modules: - -DBUILD_SHARED_LIBS=ON - -DwxUSE_MEDIACTRL=ON - -DwxUSE_DETECT_SM=OFF - - -DwxUSE_UNICODE=ON - -DwxUSE_PRIVATE_FONTS=ON - -DwxUSE_OPENGL=ON - -DwxUSE_GLCANVAS_EGL=OFF @@ -119,9 +118,12 @@ modules: - -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld - -DCMAKE_MODULE_LINKER_FLAGS=-fuse-ld=lld sources: - - type: archive - url: https://github.com/SoftFever/Orca-deps-wxWidgets/archive/refs/tags/orca-3.1.5-1.tar.gz - sha256: 1dc9d3865d899cb71c27a7e549aa5491e832ef6e81a7b6653ccb11f9c37fa99d + # Use git instead of archive: wxWidgets 3.3 relies on multiple git + # submodules (PCRE2, etc.) that are not included in GitHub tarballs. + - type: git + url: https://github.com/SoftFever/Orca-deps-wxWidgets.git + tag: orca-3.3.2 + commit: db1005db3dea2c37a46fb455a9a02e37aa360751 # OrcaSlicer C++ dependencies (built offline with pre-downloaded archives) - name: orca_deps diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 268d60d2df..9aff002178 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,20 +30,18 @@ if (SLIC3R_GUI) if (CMAKE_SYSTEM_NAME STREQUAL "Linux") set (wxWidgets_CONFIG_OPTIONS "--toolkit=gtk${SLIC3R_GTK}") - if (SLIC3R_WX_STABLE) - find_package(wxWidgets 3.0 REQUIRED COMPONENTS base core adv html gl aui net media webview) - else () - find_package(wxWidgets 3.1 REQUIRED COMPONENTS base core adv html gl aui net media webview) - endif () + find_package(wxWidgets 3.3 REQUIRED COMPONENTS base core adv html gl aui net media webview) else () - find_package(wxWidgets 3.1 REQUIRED COMPONENTS html adv gl core base webview aui net media) + find_package(wxWidgets 3.3 CONFIG REQUIRED COMPONENTS html adv gl core base webview aui net media) endif () if(UNIX) message(STATUS "wx-config path: ${wxWidgets_CONFIG_EXECUTABLE}") endif() - include(${wxWidgets_USE_FILE}) + if(wxWidgets_USE_FILE) + include(${wxWidgets_USE_FILE}) + endif() find_package(JPEG QUIET) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 35736348a0..caf6ebe45b 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -6,6 +6,7 @@ #define NOMINMAX #include #include + #include #ifdef SLIC3R_GUI extern "C" { diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index c28b588eb2..b8433b2656 100644 --- a/src/slic3r/GUI/AMSSetting.cpp +++ b/src/slic3r/GUI/AMSSetting.cpp @@ -618,7 +618,7 @@ void AMSSettingTypePanel::CreateGui() h_sizer->AddStretchSpacer(); h_sizer->Add(m_type_combobox, 0, wxEXPAND); h_sizer->Add(m_switching_icon, 0, wxALIGN_CENTER); - h_sizer->Add(m_switching_tips, 0, wxEXPAND | wxLEFT | wxALIGN_CENTER, FromDIP(8)); + h_sizer->Add(m_switching_tips, 0, wxEXPAND | wxLEFT, FromDIP(8)); SetSizer(h_sizer); Layout(); Fit(); @@ -754,7 +754,7 @@ void AMSSettingArrangeAMSOrder::CreateGui() m_btn_rearrange->Bind(wxEVT_BUTTON, &AMSSettingArrangeAMSOrder::OnBtnRearrangeClicked, this); h_sizer->Add(title, 0); h_sizer->AddStretchSpacer(); - h_sizer->Add(m_btn_rearrange, 0, wxEXPAND | wxALIGN_CENTER_VERTICAL); + h_sizer->Add(m_btn_rearrange, 0, wxEXPAND); SetSizer(h_sizer); Layout(); Fit(); diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index f4482ee6bd..74bfad013f 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -293,7 +293,8 @@ AboutDialog::AboutDialog() find_txt += text_list[i][o]; count_txt += text_list[i][o]; } else { - find_txt += std::string("\n") + text_list[i][o]; + find_txt += "\n"; + find_txt += text_list[i][o]; count_txt = text_list[i][o]; } } diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index bc9c52fc18..60ba9bd4f2 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -717,7 +717,7 @@ AmsMapingPopup::AmsMapingPopup(wxWindow *parent, bool use_in_sync_dialog) : m_sizer_ams_right_horizonal->AddStretchSpacer(); m_sizer_ams_right_horizonal->AddSpacer(FromDIP(5)); - m_sizer_ams_right_horizonal->Add(m_reset_btn, 0, wxALIGN_TOP | wxEXPAND ); + m_sizer_ams_right_horizonal->Add(m_reset_btn, 0, wxEXPAND ); m_reset_btn->Hide(); m_right_first_text_panel->SetSizer(m_sizer_ams_right_horizonal); const int same_height = 15; @@ -813,7 +813,7 @@ void AmsMapingPopup::msw_rescale() m_split_left_line->SetMaxSize(wxSize(-1, 1)); sizer_split_ams->Add(0, 0, 0, wxEXPAND, 0); sizer_split_ams->Add(ams_title_text, 0, wxALIGN_CENTER, 0); - sizer_split_ams->Add(m_split_left_line, 1, wxALIGN_CENTER_VERTICAL | wxEXPAND, 0); + sizer_split_ams->Add(m_split_left_line, 1, wxEXPAND, 0); return sizer_split_ams; } diff --git a/src/slic3r/GUI/Auxiliary.cpp b/src/slic3r/GUI/Auxiliary.cpp index 4deb621fd5..838f2739d1 100644 --- a/src/slic3r/GUI/Auxiliary.cpp +++ b/src/slic3r/GUI/Auxiliary.cpp @@ -368,7 +368,7 @@ void AuFile::on_input_enter(wxCommandEvent &evt) auto new_fullname = new_file_name + m_file_path.extension().string(); - wxString new_fullname_path = dir.wstring() + "/" + new_fullname; + wxString new_fullname_path = wxString(dir.wstring()) + "/" + new_fullname; fs::path new_dir_path(new_fullname_path.ToStdWstring()); @@ -955,7 +955,8 @@ void AuxiliaryPanel::on_import_file(wxCommandEvent &event) } if (!is_exist) { - dir_path += "/" + src_bfs_path.filename().generic_wstring(); + dir_path += "/"; + dir_path += src_bfs_path.filename().generic_wstring(); } else { time_t t1 = time(0); char ch1[64]; @@ -965,7 +966,7 @@ void AuxiliaryPanel::on_import_file(wxCommandEvent &event) wxString name = src_bfs_path.filename().generic_wstring(); auto before_name = replaceSpace(name.ToStdString(), src_bfs_path.extension().string(), ""); time_text = replaceSpace(time_text, ":", "_"); - dir_path += "/" + before_name + "_" + time_text + src_bfs_path.extension().wstring(); + dir_path += wxString("/") + before_name + "_" + time_text + src_bfs_path.extension().wstring(); } diff --git a/src/slic3r/GUI/AuxiliaryDataViewModel.cpp b/src/slic3r/GUI/AuxiliaryDataViewModel.cpp index cad5cf5455..a4268c7044 100644 --- a/src/slic3r/GUI/AuxiliaryDataViewModel.cpp +++ b/src/slic3r/GUI/AuxiliaryDataViewModel.cpp @@ -332,9 +332,12 @@ wxDataViewItemArray AuxiliaryModel::ImportFile(AuxiliaryModelNode* sel, wxArrayS // Copy imported file to project temp directory fs::path src_bfs_path(file_path.ToStdWstring()); wxString dir_path = m_root_dir; - if (sel != m_root) - dir_path += "\\" + sel->name; - dir_path += "\\" + src_bfs_path.filename().generic_wstring(); + if (sel != m_root) { + dir_path += "\\"; + dir_path += sel->name; + } + dir_path += "\\"; + dir_path += src_bfs_path.filename().generic_wstring(); boost::system::error_code ec; if (!fs::copy_file(src_bfs_path, fs::path(dir_path.ToStdWstring()), fs::copy_options::overwrite_existing, ec)) diff --git a/src/slic3r/GUI/BBLStatusBar.cpp b/src/slic3r/GUI/BBLStatusBar.cpp index 385dd07123..175e553dc1 100644 --- a/src/slic3r/GUI/BBLStatusBar.cpp +++ b/src/slic3r/GUI/BBLStatusBar.cpp @@ -55,9 +55,9 @@ BBLStatusBar::BBLStatusBar(wxWindow *parent, int id) m_cancelbutton->Hide(); }); - m_sizer->Add(m_object_info_sizer, 1, wxEXPAND | wxALL | wxALIGN_LEFT, 5); - m_sizer->Add(m_slice_info_sizer, 1, wxEXPAND | wxALL | wxALIGN_LEFT, 5); - m_sizer->Add(m_status_text, 1, wxEXPAND | wxALL | wxALIGN_LEFT, 5); + m_sizer->Add(m_object_info_sizer, 1, wxEXPAND | wxALL, 5); + m_sizer->Add(m_slice_info_sizer, 1, wxEXPAND | wxALL, 5); + m_sizer->Add(m_status_text, 1, wxEXPAND | wxALL, 5); m_sizer->Add(m_prog, 0, wxEXPAND | wxLEFT | wxALL, 5); m_sizer->Add(m_cancelbutton, 0, wxEXPAND | wxALL, 5); m_sizer->SetSizeHints(m_self); diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 65fcb2958c..38daf204fb 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -2,6 +2,7 @@ #include "wx/artprov.h" #include "wx/aui/framemanager.h" #include "wx/display.h" +#include #include "I18N.hpp" #include "GUI_App.hpp" #include "GUI.hpp" diff --git a/src/slic3r/GUI/BitmapComboBox.cpp b/src/slic3r/GUI/BitmapComboBox.cpp index 36c15343d3..c7911f4864 100644 --- a/src/slic3r/GUI/BitmapComboBox.cpp +++ b/src/slic3r/GUI/BitmapComboBox.cpp @@ -91,8 +91,9 @@ BitmapComboBox::~BitmapComboBox() } #ifdef __APPLE__ -bool BitmapComboBox::OnAddBitmap(const wxBitmap& bitmap) +bool BitmapComboBox::OnAddBitmap(const wxBitmapBundle& bundle) { + wxBitmap bitmap = bundle.GetBitmap(bundle.GetDefaultSize()); if (bitmap.IsOk()) { // we should use scaled! size values of bitmap @@ -131,7 +132,8 @@ void BitmapComboBox::OnDrawItem(wxDC& dc, int item, int flags) const { - const wxBitmap& bmp = *(static_cast(m_bitmaps[item])); + const wxBitmapBundle& bundle = m_bitmapbundles[item]; + wxBitmap bmp = bundle.GetBitmap(bundle.GetDefaultSize()); if (bmp.IsOk()) { // we should use scaled! size values of bitmap diff --git a/src/slic3r/GUI/BitmapComboBox.hpp b/src/slic3r/GUI/BitmapComboBox.hpp index a77bf401d6..14e7e74c93 100644 --- a/src/slic3r/GUI/BitmapComboBox.hpp +++ b/src/slic3r/GUI/BitmapComboBox.hpp @@ -47,7 +47,7 @@ protected: * For this purpose control drawing methods and * control size calculation methods (virtual) are overridden. **/ -bool OnAddBitmap(const wxBitmap& bitmap) override; +bool OnAddBitmap(const wxBitmapBundle& bitmap) override; void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const override; #endif diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index d944c8b2d1..ad62fd1aae 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -1139,8 +1139,8 @@ void CalibrationPresetPage::create_multi_extruder_filament_list_panel(wxWindow * else { m_main_sizer->GetStaticBox()->SetLabel(_L("Right Nozzle")); m_deputy_sizer->GetStaticBox()->SetLabel(_L("Left Nozzle")); - m_multi_exturder_ams_sizer->Add(m_deputy_sizer, 1, wxEXPAND | wxALL | wxALIGN_BOTTOM, 10); - m_multi_exturder_ams_sizer->Add(m_main_sizer, 1, wxEXPAND | wxALL | wxALIGN_BOTTOM, 10); + m_multi_exturder_ams_sizer->Add(m_deputy_sizer, 1, wxEXPAND | wxALL, 10); + m_multi_exturder_ams_sizer->Add(m_main_sizer, 1, wxEXPAND | wxALL, 10); } m_multi_extruder_ams_panel_sizer->Add(m_multi_exturder_ams_sizer); @@ -2152,8 +2152,8 @@ void CalibrationPresetPage::init_with_machine(MachineObject* obj) m_main_sizer->GetStaticBox()->SetLabel(_L("Right Nozzle")); m_deputy_sizer->GetStaticBox()->SetLabel(_L("Left Nozzle")); - m_multi_exturder_ams_sizer->Add(m_deputy_sizer, 1, wxEXPAND | wxALL | wxALIGN_BOTTOM, 10); - m_multi_exturder_ams_sizer->Add(m_main_sizer, 1, wxEXPAND | wxALL | wxALIGN_BOTTOM, 10); + m_multi_exturder_ams_sizer->Add(m_deputy_sizer, 1, wxEXPAND | wxALL, 10); + m_multi_exturder_ams_sizer->Add(m_main_sizer, 1, wxEXPAND | wxALL, 10); m_main_extruder_on_left = false; } @@ -2163,8 +2163,8 @@ void CalibrationPresetPage::init_with_machine(MachineObject* obj) m_main_sizer->GetStaticBox()->SetLabel(_L("Left Nozzle")); m_deputy_sizer->GetStaticBox()->SetLabel(_L("Right Nozzle")); - m_multi_exturder_ams_sizer->Add(m_main_sizer, 1, wxEXPAND | wxALL | wxALIGN_BOTTOM, 10); - m_multi_exturder_ams_sizer->Add(m_deputy_sizer, 1, wxEXPAND | wxALL | wxALIGN_BOTTOM, 10); + m_multi_exturder_ams_sizer->Add(m_main_sizer, 1, wxEXPAND | wxALL, 10); + m_multi_exturder_ams_sizer->Add(m_deputy_sizer, 1, wxEXPAND | wxALL, 10); m_main_extruder_on_left = true; } diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index 6d38182e33..f201cc2dfd 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "GUI_App.hpp" #include @@ -127,7 +128,7 @@ CameraPopup::CameraPopup(wxWindow *parent) top_sizer->Add(m_custom_camera_hint, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxALL, FromDIP(5)); top_sizer->Add(0, 0, wxALL, 0); - top_sizer->Add(m_custom_camera_input, 2, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxEXPAND | wxALL, FromDIP(5)); + top_sizer->Add(m_custom_camera_input, 2, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL, FromDIP(5)); top_sizer->Add(m_custom_camera_input_confirm, 1, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, FromDIP(5)); main_sizer->Add(top_sizer, 0, wxALL, FromDIP(10)); diff --git a/src/slic3r/GUI/CloneDialog.cpp b/src/slic3r/GUI/CloneDialog.cpp index 1ee3a74341..b5f506ae4e 100644 --- a/src/slic3r/GUI/CloneDialog.cpp +++ b/src/slic3r/GUI/CloneDialog.cpp @@ -46,7 +46,7 @@ CloneDialog::CloneDialog(wxWindow *parent) m_progress->SetProgressForedColour(StateColor::darkModeColorFor(wxColour("#DFDFDF"))); m_progress->SetDoubleBuffered(true); m_progress->Hide(); - bottom_sizer->Add(m_progress, 2, wxEXPAND | wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + bottom_sizer->Add(m_progress, 2, wxEXPAND | wxLEFT, FromDIP(10)); auto dlg_btns = new DialogButtons(this, {"Fill", "OK", "Cancel"}, "", 1 /*left_aligned*/); diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 58df5b1c09..e9767fd866 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -902,20 +902,7 @@ void PageMaterials::update_lists(int sel_type, int sel_vendor, int last_selected wxArrayInt sel_printers; int sel_printers_count = list_printer->GetSelections(sel_printers); - // Does our wxWidgets version support operator== for wxArrayInt ? -#if wxCHECK_VERSION(3, 1, 1) if (sel_printers != sel_printers_prev) { -#else - auto are_equal = [](const wxArrayInt& arr_first, const wxArrayInt& arr_second) { - if (arr_first.GetCount() != arr_second.GetCount()) - return false; - for (size_t i = 0; i < arr_first.GetCount(); i++) - if (arr_first[i] != arr_second[i]) - return false; - return true; - }; - if (!are_equal(sel_printers, sel_printers_prev)) { -#endif // Refresh type list list_type->Clear(); diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index dec4ea69b7..d60052b038 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include "libslic3r/PresetBundle.hpp" #include "I18N.hpp" @@ -770,7 +771,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_vendor_item() wxStaticText *static_vendor_text = new wxStaticText(this, wxID_ANY, _L("Vendor"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_vendor_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(5)); // Convert all std::any to std::string std::vector string_vendors; @@ -811,7 +812,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_vendor_item() event.Skip(); }); m_filament_custom_vendor_input->Hide(); - vendor_sizer->Add(textInputSizer, 0, wxEXPAND | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + vendor_sizer->Add(textInputSizer, 0, wxEXPAND, FromDIP(10)); wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *checkbox_sizer = new wxBoxSizer(wxHORIZONTAL); @@ -848,7 +849,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_vendor_item() comboBoxSizer->Add(vendor_sizer, 0, wxEXPAND | wxTOP, FromDIP(5)); comboBoxSizer->Add(checkbox_sizer, 0, wxEXPAND | wxTOP, FromDIP(5)); - horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL, FromDIP(5)); return horizontal_sizer; @@ -862,7 +863,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_type_item() wxStaticText *static_type_text = new wxStaticText(this, wxID_ANY, _L("Type"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_type_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(5)); wxArrayString filament_type; for (const wxString filament : m_system_filament_types_set) { @@ -876,7 +877,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_type_item() m_filament_type_combobox->SetLabelColor(DEFAULT_PROMPT_TEXT_COLOUR); m_filament_type_combobox->Set(filament_type); comboBoxSizer->Add(m_filament_type_combobox, 0, wxEXPAND | wxALL, 0); - horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL, FromDIP(5)); m_filament_type_combobox->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) { m_filament_type_combobox->SetLabelColor(*wxBLACK); @@ -908,7 +909,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_serial_item() wxStaticText *static_serial_text = new wxStaticText(this, wxID_ANY, _L("Serial"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_serial_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(5)); wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxVERTICAL); m_filament_serial_input = new TextInput(this, "", "", "", wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE, wxTE_PROCESS_ENTER); @@ -927,7 +928,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_serial_item() static_eg_text->SetForegroundColour(wxColour("#6B6B6B")); static_eg_text->SetFont(::Label::Body_12); comboBoxSizer->Add(static_eg_text, 0, wxEXPAND | wxTOP, FromDIP(5)); - horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL, FromDIP(5)); return horizontal_sizer; } @@ -940,7 +941,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_filament_preset_item() wxStaticText *static_filament_preset_text = new wxStaticText(this, wxID_ANY, _L("Filament Preset"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_filament_preset_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer * comboBoxSizer = new wxBoxSizer(wxVERTICAL); comboBoxSizer->Add(create_radio_item(m_create_type.base_filament, this, wxEmptyString, m_create_type_btns), 0, wxEXPAND | wxALL, 0); @@ -1015,7 +1016,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_filament_preset_item() comboBoxSizer->Add(create_radio_item(m_create_type.base_filament_preset, this, wxEmptyString, m_create_type_btns), 0, wxEXPAND | wxTOP, FromDIP(10)); - horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(comboBoxSizer, 0, wxEXPAND | wxALL, FromDIP(10)); horizontal_sizer->Add(0, 0, 0, wxLEFT, FromDIP(30)); @@ -1031,7 +1032,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_filament_preset_for_printer_item( m_filament_preset_panel->SetSize(PRINTER_LIST_SIZE); m_filament_presets_sizer = new wxGridSizer(3, FromDIP(5), FromDIP(5)); m_filament_preset_panel->SetSizer(m_filament_presets_sizer); - vertical_sizer->Add(m_filament_preset_panel, 0, wxEXPAND | wxTOP | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); + vertical_sizer->Add(m_filament_preset_panel, 0, wxEXPAND | wxTOP, FromDIP(5)); return vertical_sizer; } @@ -1647,16 +1648,16 @@ wxBoxSizer *CreatePrinterPresetDialog::create_step_switch_item() step_switch_panel->SetBackgroundColour(*wxWHITE); horizontal_sizer->Add(0, 0, 1, wxEXPAND,0); m_step_1 = new wxStaticBitmap(step_switch_panel, wxID_ANY, create_scaled_bitmap("step_1", nullptr, FromDIP(20)), wxDefaultPosition, wxDefaultSize); - horizontal_sizer->Add(m_step_1, 0, wxEXPAND | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(3)); + horizontal_sizer->Add(m_step_1, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(3)); wxStaticText *static_create_printer_text = new wxStaticText(step_switch_panel, wxID_ANY, m_create_type.create_printer, wxDefaultPosition, wxDefaultSize); - horizontal_sizer->Add(static_create_printer_text, 0, wxEXPAND | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(3)); + horizontal_sizer->Add(static_create_printer_text, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(3)); auto divider_line = new wxPanel(step_switch_panel, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(50), 1)); divider_line->SetBackgroundColour(PRINTER_LIST_COLOUR); horizontal_sizer->Add(divider_line, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(3)); m_step_2 = new wxStaticBitmap(step_switch_panel, wxID_ANY, create_scaled_bitmap("step_2_ready", nullptr, FromDIP(20)), wxDefaultPosition, wxDefaultSize); - horizontal_sizer->Add(m_step_2, 0, wxEXPAND | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(3)); + horizontal_sizer->Add(m_step_2, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(3)); wxStaticText *static_import_presets_text = new wxStaticText(step_switch_panel, wxID_ANY, _L("Import Preset"), wxDefaultPosition, wxDefaultSize); - horizontal_sizer->Add(static_import_presets_text, 0, wxEXPAND | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(3)); + horizontal_sizer->Add(static_import_presets_text, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(3)); horizontal_sizer->Add(0, 0, 1, wxEXPAND, 0); step_switch_panel->SetSizer(horizontal_sizer); @@ -1707,13 +1708,13 @@ wxBoxSizer *CreatePrinterPresetDialog::create_type_item(wxWindow *parent) wxStaticText *static_serial_text = new wxStaticText(parent, wxID_ANY, _L("Create Type"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_serial_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer *radioBoxSizer = new wxBoxSizer(wxVERTICAL); radioBoxSizer->Add(create_radio_item(m_create_type.create_printer, parent, wxEmptyString, m_create_type_btns), 0, wxEXPAND | wxALL, 0); radioBoxSizer->Add(create_radio_item(m_create_type.create_nozzle, parent, wxEmptyString, m_create_type_btns), 0, wxEXPAND | wxTOP, FromDIP(10)); - horizontal_sizer->Add(radioBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(radioBoxSizer, 0, wxEXPAND | wxALL, FromDIP(10)); return horizontal_sizer; } @@ -1726,7 +1727,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_item(wxWindow *parent) wxStaticText *static_vendor_text = new wxStaticText(parent, wxID_ANY, _L("Printer"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_vendor_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer *vertical_sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxHORIZONTAL); @@ -1854,7 +1855,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_item(wxWindow *parent) vertical_sizer->Add(checkbox_sizer, 0, wxEXPAND | wxTOP, FromDIP(5)); - horizontal_sizer->Add(vertical_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(vertical_sizer, 0, wxEXPAND | wxALL, FromDIP(10)); return horizontal_sizer; @@ -1868,7 +1869,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_nozzle_diameter_item(wxWindow *par wxStaticText *static_type_text = new wxStaticText(parent, wxID_ANY, _L("Nozzle Diameter"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_type_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer *vertical_sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxHORIZONTAL); @@ -1933,7 +1934,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_nozzle_diameter_item(wxWindow *par }); vertical_sizer->Add(checkbox_sizer, 0, wxEXPAND | wxTOP, FromDIP(5)); - horizontal_sizer->Add(vertical_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(vertical_sizer, 0, wxEXPAND | wxALL, FromDIP(10)); horizontal_sizer->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(200)); return horizontal_sizer; @@ -1947,12 +1948,12 @@ wxBoxSizer *CreatePrinterPresetDialog::create_bed_shape_item(wxWindow *parent) wxStaticText *static_type_text = new wxStaticText(parent, wxID_ANY, _L("Bed Shape"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_type_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer * bed_shape_sizer = new wxBoxSizer(wxVERTICAL); wxStaticText *static_bed_shape_text = new wxStaticText(parent, wxID_ANY, _L("Rectangle"), wxDefaultPosition, wxDefaultSize); bed_shape_sizer->Add(static_bed_shape_text, 0, wxEXPAND | wxALL, 0); - horizontal_sizer->Add(bed_shape_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(bed_shape_sizer, 0, wxEXPAND | wxALL, FromDIP(10)); return horizontal_sizer; } @@ -1965,26 +1966,26 @@ wxBoxSizer *CreatePrinterPresetDialog::create_bed_size_item(wxWindow *parent) wxStaticText *static_type_text = new wxStaticText(parent, wxID_ANY, _L("Printable Space"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_type_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer * length_sizer = new wxBoxSizer(wxVERTICAL); // ORCA use icon on input box to match style with other Point fields - horizontal_sizer->Add(length_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(length_sizer, 0, wxEXPAND | wxLEFT | wxTOP, FromDIP(10)); wxBoxSizer *length_input_sizer = new wxBoxSizer(wxVERTICAL); m_bed_size_x_input = new TextInput(parent, "200", _L("mm"), "inputbox_x", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); wxTextValidator validator(wxFILTER_DIGITS); m_bed_size_x_input->GetTextCtrl()->SetValidator(validator); length_input_sizer->Add(m_bed_size_x_input, 0, wxEXPAND | wxLEFT, FromDIP(5)); - horizontal_sizer->Add(length_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(length_input_sizer, 0, wxEXPAND | wxALL, FromDIP(5)); wxBoxSizer * width_sizer = new wxBoxSizer(wxVERTICAL); // ORCA use icon on input box to match style with other Point fields - horizontal_sizer->Add(width_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(width_sizer, 0, wxEXPAND | wxLEFT | wxTOP, FromDIP(10)); wxBoxSizer *width_input_sizer = new wxBoxSizer(wxVERTICAL); m_bed_size_y_input = new TextInput(parent, "200", _L("mm"), "inputbox_y", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); m_bed_size_y_input->GetTextCtrl()->SetValidator(validator); width_input_sizer->Add(m_bed_size_y_input, 0, wxEXPAND | wxALL, 0); - horizontal_sizer->Add(width_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(width_input_sizer, 0, wxEXPAND | wxALL, FromDIP(5)); return horizontal_sizer; @@ -1998,26 +1999,26 @@ wxBoxSizer *CreatePrinterPresetDialog::create_origin_item(wxWindow *parent) wxStaticText *static_type_text = new wxStaticText(parent, wxID_ANY, _L("Origin"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_type_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer * length_sizer = new wxBoxSizer(wxVERTICAL); // ORCA use icon on input box to match style with other Point fields - horizontal_sizer->Add(length_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(length_sizer, 0, wxEXPAND | wxLEFT | wxTOP, FromDIP(10)); wxBoxSizer *length_input_sizer = new wxBoxSizer(wxVERTICAL); m_bed_origin_x_input = new TextInput(parent, "0", _L("mm"), "inputbox_x", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); wxTextValidator validator(wxFILTER_DIGITS); m_bed_origin_x_input->GetTextCtrl()->SetValidator(validator); length_input_sizer->Add(m_bed_origin_x_input, 0, wxEXPAND | wxLEFT, FromDIP(5)); // Align with other - horizontal_sizer->Add(length_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(length_input_sizer, 0, wxEXPAND | wxALL, FromDIP(5)); wxBoxSizer * width_sizer = new wxBoxSizer(wxVERTICAL); // ORCA use icon on input box to match style with other Point fields - horizontal_sizer->Add(width_sizer, 0, wxEXPAND | wxLEFT | wxTOP | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(width_sizer, 0, wxEXPAND | wxLEFT | wxTOP, FromDIP(10)); wxBoxSizer *width_input_sizer = new wxBoxSizer(wxVERTICAL); m_bed_origin_y_input = new TextInput(parent, "0", _L("mm"), "inputbox_y", wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); m_bed_origin_y_input->GetTextCtrl()->SetValidator(validator); width_input_sizer->Add(m_bed_origin_y_input, 0, wxEXPAND | wxALL, 0); - horizontal_sizer->Add(width_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(width_input_sizer, 0, wxEXPAND | wxALL, FromDIP(5)); return horizontal_sizer; } @@ -2030,7 +2031,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_hot_bed_stl_item(wxWindow *parent) wxStaticText *static_type_text = new wxStaticText(parent, wxID_ANY, _L("Hot Bed STL"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_type_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer *hot_bed_stl_sizer = new wxBoxSizer(wxVERTICAL); @@ -2040,11 +2041,11 @@ wxBoxSizer *CreatePrinterPresetDialog::create_hot_bed_stl_item(wxWindow *parent) hot_bed_stl_sizer->Add(m_button_bed_stl, 0, wxEXPAND | wxALL, 0); - horizontal_sizer->Add(hot_bed_stl_sizer, 0, wxEXPAND | wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(hot_bed_stl_sizer, 0, wxEXPAND | wxLEFT, FromDIP(10)); m_upload_stl_tip_text = new wxStaticText(parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize); m_upload_stl_tip_text->SetLabelText(_L("Empty")); - horizontal_sizer->Add(m_upload_stl_tip_text, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(m_upload_stl_tip_text, 0, wxEXPAND | wxALL, FromDIP(10)); return horizontal_sizer; } @@ -2056,7 +2057,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_hot_bed_svg_item(wxWindow *parent) wxStaticText *static_type_text = new wxStaticText(parent, wxID_ANY, _L("Hot Bed SVG"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_type_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer *hot_bed_stl_sizer = new wxBoxSizer(wxVERTICAL); @@ -2066,11 +2067,11 @@ wxBoxSizer *CreatePrinterPresetDialog::create_hot_bed_svg_item(wxWindow *parent) hot_bed_stl_sizer->Add(m_button_bed_svg, 0, wxEXPAND | wxALL, 0); - horizontal_sizer->Add(hot_bed_stl_sizer, 0, wxEXPAND | wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(hot_bed_stl_sizer, 0, wxEXPAND | wxLEFT, FromDIP(10)); m_upload_svg_tip_text = new wxStaticText(parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize); m_upload_svg_tip_text->SetLabelText(_L("Empty")); - horizontal_sizer->Add(m_upload_svg_tip_text, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(m_upload_svg_tip_text, 0, wxEXPAND | wxALL, FromDIP(10)); return horizontal_sizer; } @@ -2082,14 +2083,14 @@ wxBoxSizer *CreatePrinterPresetDialog::create_max_print_height_item(wxWindow *pa wxStaticText *static_type_text = new wxStaticText(parent, wxID_ANY, _L("Max Print Height"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_type_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer *hight_input_sizer = new wxBoxSizer(wxVERTICAL); m_print_height_input = new TextInput(parent, "200", _L("mm"), wxEmptyString, wxDefaultPosition, PRINTER_SPACE_SIZE, wxTE_PROCESS_ENTER); // Use same alignment with all other input boxes wxTextValidator validator(wxFILTER_DIGITS); m_print_height_input->GetTextCtrl()->SetValidator(validator); hight_input_sizer->Add(m_print_height_input, 0, wxEXPAND | wxLEFT, FromDIP(5)); - horizontal_sizer->Add(hight_input_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + horizontal_sizer->Add(hight_input_sizer, 0, wxEXPAND | wxALL, FromDIP(5)); return horizontal_sizer; } @@ -2595,7 +2596,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_preset_item(wxWindow *pare wxStaticText *static_vendor_text = new wxStaticText(parent, wxID_ANY, _L("Printer Preset"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_vendor_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer * vertical_sizer = new wxBoxSizer(wxVERTICAL); wxStaticText *combobox_title = new wxStaticText(parent, wxID_ANY, m_create_type.base_curr_printer, wxDefaultPosition, wxDefaultSize, 0); @@ -2628,7 +2629,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_printer_preset_item(wxWindow *pare comboBox_sizer->Add(m_printer_model, 0, wxEXPAND | wxLEFT, FromDIP(10)); vertical_sizer->Add(comboBox_sizer, 0, wxEXPAND | wxTOP, FromDIP(5)); - horizontal_sizer->Add(vertical_sizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(vertical_sizer, 0, wxEXPAND | wxALL, FromDIP(10)); return horizontal_sizer; @@ -2642,13 +2643,13 @@ wxBoxSizer *CreatePrinterPresetDialog::create_presets_item(wxWindow *parent) wxStaticText *static_serial_text = new wxStaticText(parent, wxID_ANY, _L("Presets"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_serial_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer *radioBoxSizer = new wxBoxSizer(wxVERTICAL); radioBoxSizer->Add(create_radio_item(m_create_type.base_template, parent, wxEmptyString, m_create_presets_btns), 0, wxEXPAND | wxALL, 0); radioBoxSizer->Add(create_radio_item(m_create_type.base_curr_printer, parent, wxEmptyString, m_create_presets_btns), 0, wxEXPAND | wxTOP, FromDIP(10)); - horizontal_sizer->Add(radioBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(radioBoxSizer, 0, wxEXPAND | wxALL, FromDIP(10)); return horizontal_sizer; } @@ -2734,7 +2735,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_presets_template_item(wxWindow *pa m_preset_template_panel->SetSizer(m_filament_sizer); m_scrooled_preset_sizer->Add(m_preset_template_panel, 0, wxEXPAND | wxALL, 0); m_scrolled_preset_window->SetSizerAndFit(m_scrooled_preset_sizer); - vertical_sizer->Add(m_scrolled_preset_window, 0, wxEXPAND | wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + vertical_sizer->Add(m_scrolled_preset_window, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(10)); return vertical_sizer; } @@ -3721,7 +3722,7 @@ wxBoxSizer *ExportConfigsDialog::create_export_config_item(wxWindow *parent) wxStaticText *static_serial_text = new wxStaticText(parent, wxID_ANY, _L("Presets"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(static_serial_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); wxBoxSizer *radioBoxSizer = new wxBoxSizer(wxVERTICAL); @@ -3741,7 +3742,7 @@ wxBoxSizer *ExportConfigsDialog::create_export_config_item(wxWindow *parent) radioBoxSizer->Add(create_radio_item(m_exprot_type.printer_preset, parent, wxEmptyString, m_export_type_btns), 0, wxEXPAND | wxTOP, FromDIP(10)); radioBoxSizer->Add(create_radio_item(m_exprot_type.filament_preset, parent, wxEmptyString, m_export_type_btns), 0, wxEXPAND | wxTOP, FromDIP(10)); radioBoxSizer->Add(create_radio_item(m_exprot_type.process_preset, parent, wxEmptyString, m_export_type_btns), 0, wxEXPAND | wxTOP, FromDIP(10)); - horizontal_sizer->Add(radioBoxSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(radioBoxSizer, 0, wxEXPAND | wxALL, FromDIP(10)); return horizontal_sizer; } @@ -4284,7 +4285,7 @@ wxBoxSizer *ExportConfigsDialog::create_select_printer(wxWindow *parent) m_serial_text = new wxStaticText(parent, wxID_ANY, _L("Please select a type you want to export"), wxDefaultPosition, wxDefaultSize); optionSizer->Add(m_serial_text, 0, wxEXPAND | wxALL, 0); optionSizer->SetMinSize(OPTION_SIZE); - horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL, FromDIP(10)); m_scrolled_preset_window = new wxScrolledWindow(parent); m_scrolled_preset_window->SetScrollRate(5, 5); m_scrolled_preset_window->SetBackgroundColour(*wxWHITE); @@ -4453,7 +4454,7 @@ EditFilamentPresetDialog::EditFilamentPresetDialog(wxWindow *parent, Filamentinf m_main_sizer->Add(create_add_filament_btn(), 0, wxEXPAND | wxALL, 0); m_main_sizer->Add(create_preset_tree_sizer(), 0, wxEXPAND | wxALL, 0); m_note_text = new wxStaticText(this, wxID_ANY, _L("Note: If the only preset under this filament is deleted, the filament will be deleted after exiting the dialog.")); - m_main_sizer->Add(m_note_text, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + m_main_sizer->Add(m_note_text, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(10)); m_note_text->Hide(); m_main_sizer->Add(create_dialog_buttons(), 0, wxEXPAND); @@ -4655,31 +4656,31 @@ wxBoxSizer *EditFilamentPresetDialog::create_filament_basic_info() wxStaticText *static_vendor_text = new wxStaticText(this, wxID_ANY, _L("Vendor"), wxDefaultPosition, wxDefaultSize); vendor_key_sizer->Add(static_vendor_text, 0, wxEXPAND | wxALL, 0); vendor_key_sizer->SetMinSize(OPTION_SIZE); - vendor_sizer->Add(vendor_key_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + vendor_sizer->Add(vendor_key_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM, FromDIP(10)); wxBoxSizer *vendor_value_sizer = new wxBoxSizer(wxVERTICAL); wxStaticText *vendor_text = new wxStaticText(this, wxID_ANY, from_u8(m_vendor_name), wxDefaultPosition, wxDefaultSize); vendor_value_sizer->Add(vendor_text, 0, wxEXPAND | wxALL, 0); - vendor_sizer->Add(vendor_value_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + vendor_sizer->Add(vendor_value_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM, FromDIP(10)); //type wxBoxSizer * type_key_sizer = new wxBoxSizer(wxVERTICAL); wxStaticText *static_type_text = new wxStaticText(this, wxID_ANY, _L("Type"), wxDefaultPosition, wxDefaultSize); type_key_sizer->Add(static_type_text, 0, wxEXPAND | wxALL, 0); type_key_sizer->SetMinSize(OPTION_SIZE); - type_sizer->Add(type_key_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + type_sizer->Add(type_key_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM, FromDIP(10)); wxBoxSizer * type_value_sizer = new wxBoxSizer(wxVERTICAL); wxStaticText *type_text = new wxStaticText(this, wxID_ANY, from_u8(m_filament_type), wxDefaultPosition, wxDefaultSize); type_value_sizer->Add(type_text, 0, wxEXPAND | wxALL, 0); - type_sizer->Add(type_value_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + type_sizer->Add(type_value_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM, FromDIP(10)); //serial wxBoxSizer * serial_key_sizer = new wxBoxSizer(wxVERTICAL); wxStaticText *static_serial_text = new wxStaticText(this, wxID_ANY, _L("Serial"), wxDefaultPosition, wxDefaultSize); serial_key_sizer->Add(static_serial_text, 0, wxEXPAND | wxALL, 0); serial_key_sizer->SetMinSize(OPTION_SIZE); - serial_sizer->Add(serial_key_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + serial_sizer->Add(serial_key_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM, FromDIP(10)); wxBoxSizer * serial_value_sizer = new wxBoxSizer(wxVERTICAL); wxString full_filamnet_serial = from_u8(m_filament_serial); @@ -4691,7 +4692,7 @@ wxBoxSizer *EditFilamentPresetDialog::create_filament_basic_info() wxToolTip * toolTip = new wxToolTip(full_filamnet_serial); serial_text->SetToolTip(toolTip); serial_value_sizer->Add(serial_text, 0, wxEXPAND | wxALL, 0); - serial_sizer->Add(serial_value_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + serial_sizer->Add(serial_value_sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM, FromDIP(10)); basic_info_sizer->Add(vendor_sizer, 0, wxEXPAND | wxALL, 0); basic_info_sizer->Add(type_sizer, 0, wxEXPAND | wxALL, 0); @@ -4738,7 +4739,7 @@ wxBoxSizer *EditFilamentPresetDialog::create_preset_tree_sizer() wxBoxSizer* m_preset_tree_window_sizer = new wxBoxSizer(wxVERTICAL); m_preset_tree_window_sizer->Add(m_preset_tree_panel, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(10)); m_preset_tree_window->SetSizerAndFit(m_preset_tree_window_sizer); - filament_preset_tree_sizer->Add(m_preset_tree_window, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + filament_preset_tree_sizer->Add(m_preset_tree_window, 0, wxEXPAND | wxALL, FromDIP(10)); return filament_preset_tree_sizer; } diff --git a/src/slic3r/GUI/Downloader.cpp b/src/slic3r/GUI/Downloader.cpp index 63cd9dafc8..c61b2716fc 100644 --- a/src/slic3r/GUI/Downloader.cpp +++ b/src/slic3r/GUI/Downloader.cpp @@ -17,15 +17,13 @@ void open_folder(const std::string& path) // Code taken from NotificationManager.cpp // Execute command to open a file explorer, platform dependent. - // FIXME: The const_casts aren't needed in wxWidgets 3.1, remove them when we upgrade. - #ifdef _WIN32 const wxString widepath = from_u8(path); const wchar_t* argv[] = { L"explorer", widepath.GetData(), nullptr }; - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr); #elif __APPLE__ const char* argv[] = { "open", path.data(), nullptr }; - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr); #else const char* argv[] = { "xdg-open", path.data(), nullptr }; @@ -53,11 +51,11 @@ void open_folder(const std::string& path) exec_env.cwd = std::move(owd); } - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, &exec_env); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr, &exec_env); } else { // Looks like we're NOT running from AppImage, we'll make no changes to the environment. - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, nullptr); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr, nullptr); } #endif } diff --git a/src/slic3r/GUI/ExtraRenderers.hpp b/src/slic3r/GUI/ExtraRenderers.hpp index b778df4c49..f7be8040b7 100644 --- a/src/slic3r/GUI/ExtraRenderers.hpp +++ b/src/slic3r/GUI/ExtraRenderers.hpp @@ -5,7 +5,7 @@ #include -#if wxUSE_MARKUP && wxCHECK_VERSION(3, 1, 1) +#if wxUSE_MARKUP #define SUPPORTS_MARKUP #endif diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 93db4c32d2..bf3b2b8eda 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -2308,7 +2308,7 @@ void SliderCtrl::BUILD() m_textctrl->SetFont(Slic3r::GUI::wxGetApp().normal_font()); m_textctrl->SetBackgroundStyle(wxBG_STYLE_PAINT); - temp->Add(m_slider, 1, wxEXPAND | wxALIGN_CENTER_VERTICAL, 0); + temp->Add(m_slider, 1, wxEXPAND, 0); temp->Add(m_textctrl, 0, wxALIGN_CENTER_VERTICAL, 0); m_slider->Bind(wxEVT_SLIDER, ([this](wxCommandEvent e) { diff --git a/src/slic3r/GUI/FilamentMapDialog.cpp b/src/slic3r/GUI/FilamentMapDialog.cpp index c0120c2c80..f765e94aa6 100644 --- a/src/slic3r/GUI/FilamentMapDialog.cpp +++ b/src/slic3r/GUI/FilamentMapDialog.cpp @@ -169,9 +169,9 @@ FilamentMapDialog::FilamentMapDialog(wxWindow *parent, else m_default_map_panel = nullptr; - panel_sizer->Add(m_manual_map_panel, 0, wxALIGN_CENTER | wxEXPAND); - panel_sizer->Add(m_auto_map_panel, 0, wxALIGN_CENTER | wxEXPAND); - if (show_default) panel_sizer->Add(m_default_map_panel, 0, wxALIGN_CENTER | wxEXPAND); + panel_sizer->Add(m_manual_map_panel, 0, wxEXPAND); + panel_sizer->Add(m_auto_map_panel, 0, wxEXPAND); + if (show_default) panel_sizer->Add(m_default_map_panel, 0, wxEXPAND); main_sizer->Add(panel_sizer, 0, wxEXPAND); wxPanel* bottom_panel = new wxPanel(this); diff --git a/src/slic3r/GUI/FilamentMapPanel.cpp b/src/slic3r/GUI/FilamentMapPanel.cpp index 0f0fba61ac..59f6e5be6e 100644 --- a/src/slic3r/GUI/FilamentMapPanel.cpp +++ b/src/slic3r/GUI/FilamentMapPanel.cpp @@ -1,6 +1,7 @@ #include "FilamentMapPanel.hpp" #include "GUI_App.hpp" #include +#include #include "wx/graphics.h" namespace Slic3r { namespace GUI { @@ -54,14 +55,14 @@ FilamentMapManualPanel::FilamentMapManualPanel(wxWindow *p m_right_panel->SetMinSize({ FromDIP(260),-1 }); drag_sizer->AddStretchSpacer(); - drag_sizer->Add(m_left_panel, 1, wxALIGN_CENTER | wxEXPAND); + drag_sizer->Add(m_left_panel, 1, wxEXPAND); drag_sizer->AddSpacer(FromDIP(7)); drag_sizer->Add(m_switch_btn, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(1)); drag_sizer->AddSpacer(FromDIP(7)); - drag_sizer->Add(m_right_panel, 1, wxALIGN_CENTER | wxEXPAND); + drag_sizer->Add(m_right_panel, 1, wxEXPAND); drag_sizer->AddStretchSpacer(); - top_sizer->Add(drag_sizer, 0, wxALIGN_CENTER | wxEXPAND); + top_sizer->Add(drag_sizer, 0, wxEXPAND); m_tips = new Label(this, _L("Tip: You can drag the filaments to reassign them to different nozzles.")); m_tips->SetFont(Label::Body_14); @@ -133,14 +134,14 @@ GUI::FilamentMapBtnPanel::FilamentMapBtnPanel(wxWindow *parent, const wxString & auto label_sizer = new wxBoxSizer(wxHORIZONTAL); label_sizer->AddStretchSpacer(); - label_sizer->Add(m_btn, 0, wxALIGN_CENTER | wxEXPAND | wxLEFT, FromDIP(1)); - label_sizer->Add(m_label, 0, wxALIGN_CENTER | wxEXPAND| wxALL, FromDIP(3)); + label_sizer->Add(m_btn, 0, wxEXPAND | wxLEFT, FromDIP(1)); + label_sizer->Add(m_label, 0, wxEXPAND| wxALL, FromDIP(3)); label_sizer->AddStretchSpacer(); m_disable_tip = new Label(this, _L("(Sync with printer)")); sizer->AddSpacer(FromDIP(32)); - sizer->Add(label_sizer, 0, wxALIGN_CENTER | wxEXPAND); + sizer->Add(label_sizer, 0, wxEXPAND); sizer->Add(m_disable_tip, 0, wxALIGN_CENTER); sizer->AddSpacer(FromDIP(3)); @@ -154,7 +155,7 @@ GUI::FilamentMapBtnPanel::FilamentMapBtnPanel(wxWindow *parent, const wxString & detail_sizer->Add(m_detail, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, horizontal_margin); detail_sizer->AddStretchSpacer(); - sizer->Add(detail_sizer, 0, wxALIGN_CENTER | wxEXPAND); + sizer->Add(detail_sizer, 0, wxEXPAND); sizer->AddSpacer(FromDIP(10)); SetSizer(sizer); @@ -364,7 +365,7 @@ FilamentMapDefaultPanel::FilamentMapDefaultPanel(wxWindow *parent) : wxPanel(par m_label->Wrap(FromDIP(500)); sizer->AddStretchSpacer(); - sizer->Add(m_label, 1, wxEXPAND | wxALIGN_CENTER); + sizer->Add(m_label, 1, wxEXPAND); sizer->AddStretchSpacer(); SetSizerAndFit(sizer); diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index fe47b581c3..4814548a10 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index b9becfa63c..a19bed05a8 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -53,6 +53,7 @@ #include #include #include +#include #include // Print now includes tbb, and tbb includes Windows. This breaks compilation of wxWidgets if included before wx. #include "libslic3r/Print.hpp" @@ -78,6 +79,13 @@ #include +#ifdef __WXMSW__ +#if wxUSE_POPUPWIN +#include +extern wxPopupWindow* wxCurrentPopupWindow; +#endif +#endif + static constexpr const float TRACKBALLSIZE = 0.8f; static Slic3r::ColorRGBA DEFAULT_BG_LIGHT_COLOR = { 0.906f, 0.906f, 0.906f, 1.0f }; @@ -4257,14 +4265,21 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) if (evt.Entering()) { // Set focus in order to remove it from sidebar fields and ensure hotkeys work if (m_canvas != nullptr) { - // Only set focus if the top level window of this canvas is active. - auto p = dynamic_cast(evt.GetEventObject()); - while (p->GetParent()) - p = p->GetParent(); - auto *top_level_wnd = dynamic_cast(p); - //Orca: Set focus so hotkeys like 'tab' work when a notification is shown. - if (top_level_wnd != nullptr && top_level_wnd->IsActive()) - m_canvas->SetFocus(); +#if defined(__WXMSW__) && wxUSE_POPUPWIN + // Don't steal focus when a popup window is active (e.g., search dropdown). + // Stealing focus triggers MSWDismissUnfocusedPopup, closing the popup unexpectedly. + if (!wxCurrentPopupWindow) +#endif + { + // Only set focus if the top level window of this canvas is active. + auto p = dynamic_cast(evt.GetEventObject()); + while (p->GetParent()) + p = p->GetParent(); + auto *top_level_wnd = dynamic_cast(p); + //Orca: Set focus so hotkeys like 'tab' work when a notification is shown. + if (top_level_wnd != nullptr && top_level_wnd->IsActive()) + m_canvas->SetFocus(); + } m_mouse.position = pos.cast(); m_tooltip_enabled = false; // 1) forces a frame render to ensure that m_hover_volume_idxs is updated even when the user right clicks while @@ -4724,11 +4739,19 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) void GLCanvas3D::on_paint(wxPaintEvent& evt) { - if (m_initialized) + if (m_initialized) { +#ifdef __WXMSW__ + // Idle events are not dispatched during the Windows resize modal loop, + // so render immediately to avoid blank frames. + _refresh_if_shown_on_screen(); + m_dirty = false; +#else m_dirty = true; - else +#endif + } else { // Call render directly, so it gets initialized immediately, not from On Idle handler. this->render(); + } } void GLCanvas3D::force_set_focus() { diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index d133720c7e..328993beff 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -461,7 +461,7 @@ unsigned int combochecklist_get_flags(wxComboCtrl* comboCtrl) { unsigned int flags = 0; - wxCheckListBoxComboPopup* popup = wxDynamicCast(comboCtrl->GetPopupControl(), wxCheckListBoxComboPopup); + wxCheckListBoxComboPopup* popup = dynamic_cast(comboCtrl->GetPopupControl()); if (popup != nullptr) { for (unsigned int i = 0; i < popup->GetCount(); ++i) { if (popup->IsChecked(i)) @@ -474,7 +474,7 @@ unsigned int combochecklist_get_flags(wxComboCtrl* comboCtrl) void combochecklist_set_flags(wxComboCtrl* comboCtrl, unsigned int flags) { - wxCheckListBoxComboPopup* popup = wxDynamicCast(comboCtrl->GetPopupControl(), wxCheckListBoxComboPopup); + wxCheckListBoxComboPopup* popup = dynamic_cast(comboCtrl->GetPopupControl()); if (popup != nullptr) { for (unsigned int i = 0; i < popup->GetCount(); ++i) { popup->Check(i, (flags & (1 << i)) != 0); @@ -530,16 +530,14 @@ void login() void desktop_open_datadir_folder() { // Execute command to open a file explorer, platform dependent. - // FIXME: The const_casts aren't needed in wxWidgets 3.1, remove them when we upgrade. - const auto path = data_dir(); #ifdef _WIN32 const wxString widepath = from_u8(path); const wchar_t *argv[] = { L"explorer", widepath.GetData(), nullptr }; - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr); #elif __APPLE__ const char *argv[] = { "open", path.data(), nullptr }; - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr); #else const char *argv[] = { "xdg-open", path.data(), nullptr }; @@ -567,10 +565,10 @@ void desktop_open_datadir_folder() exec_env.cwd = std::move(owd); } - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, &exec_env); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr, &exec_env); } else { // Looks like we're NOT running from AppImage, we'll make no changes to the environment. - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, nullptr); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr, nullptr); } #endif } @@ -578,7 +576,6 @@ void desktop_open_datadir_folder() void desktop_open_any_folder( const std::string& path ) { // Execute command to open a file explorer, platform dependent. - // FIXME: The const_casts aren't needed in wxWidgets 3.1, remove them when we upgrade. #ifdef _WIN32 const wxString widepath = from_u8(path); @@ -619,10 +616,10 @@ void desktop_open_any_folder( const std::string& path ) exec_env.cwd = std::move(owd); } - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, &exec_env); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr, &exec_env); } else { // Looks like we're NOT running from AppImage, we'll make no changes to the environment. - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, nullptr); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr, nullptr); } #endif } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index fe7cfbd255..8fd8dd30a0 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -633,24 +633,6 @@ wxString file_wildcards(FileType file_type, const std::string &custom_extension) static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)).utf8_str().data(); } #ifdef WIN32 -#if !wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) -static void register_win32_dpi_event() -{ - enum { WM_DPICHANGED_ = 0x02e0 }; - - wxWindow::MSWRegisterMessageHandler(WM_DPICHANGED_, [](wxWindow *win, WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { - const int dpi = wParam & 0xffff; - const auto rect = reinterpret_cast(lParam); - const wxRect wxrect(wxPoint(rect->top, rect->left), wxPoint(rect->bottom, rect->right)); - - DpiChangedEvent evt(EVT_DPI_CHANGED_SLICER, dpi, wxrect); - win->GetEventHandler()->AddPendingEvent(evt); - - return true; - }); -} -#endif // !wxVERSION_EQUAL_OR_GREATER_THAN - static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 }; static void register_win32_device_notification_event() @@ -2726,11 +2708,15 @@ bool GUI_App::on_init_inner() #if defined(__WXGTK20__) || defined(__WXGTK3__) // Suppress harmless GTK critical warnings from the GTK3/wxWidgets interaction. - // These include widget allocation on hidden widgets and events on unrealized widgets. + // These include widget allocation on hidden widgets, events on unrealized widgets, + // and style context operations during widget construction (SetBackgroundColour + // before GTK widget realization). g_log_set_handler("Gtk", G_LOG_LEVEL_CRITICAL, [](const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { if (message && (strstr(message, "gtk_widget_set_allocation") || - strstr(message, "WIDGET_REALIZED_FOR_EVENT"))) + strstr(message, "WIDGET_REALIZED_FOR_EVENT") || + strstr(message, "gtk_widget_get_style_context") || + strstr(message, "gtk_style_context_add_provider"))) return; g_log_default_handler(log_domain, log_level, message, user_data); }, nullptr); @@ -2845,6 +2831,11 @@ bool GUI_App::on_init_inner() bool init_dark_color_mode = dark_mode(); bool init_sys_menu_enabled = app_config->get("sys_menu_enabled") == "1"; #ifdef __WINDOWS__ + // Inform wxWidgets 3.3's dark mode system so it tracks NppDarkMode's state. + // Must be called before NppDarkMode::InitDarkMode() so that NppDarkMode's + // SetPreferredAppMode(ForceDark) overrides the AllowDark state set here. + // Orca: todo switch to native dark mode support in wxWidgets and remove NppDarkMode + MSWEnableDarkMode(DarkMode_Auto); NppDarkMode::InitDarkMode(init_dark_color_mode, init_sys_menu_enabled); #endif // __WINDOWS__ @@ -3094,9 +3085,6 @@ bool GUI_App::on_init_inner() //} #ifdef WIN32 -#if !wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) - register_win32_dpi_event(); -#endif // !wxVERSION_EQUAL_OR_GREATER_THAN register_win32_device_notification_event(); #endif // WIN32 @@ -3657,9 +3645,15 @@ bool GUI_App::dark_mode() // proper dark mode was first introduced. return wxPlatformInfo::Get().CheckOSVersion(10, 14) && mac_dark_mode(); #else - return wxGetApp().app_config->get("dark_color_mode") == "1" ? true : check_dark_mode(); - //const unsigned luma = get_colour_approx_luma(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); - //return luma < 128; + // When the user has explicitly chosen a mode, honour it directly. + // Falling through to check_dark_mode() for an explicit "0" would query + // wxSystemSettings::GetAppearance().IsDark(), which is contaminated by + // wxWidgets 3.3's MSWEnableDarkMode(DarkMode_Auto) and can return true + // even though the user asked for light mode. + const auto &val = wxGetApp().app_config->get("dark_color_mode"); + if (val == "1") return true; + if (val == "0") return false; + return check_dark_mode(); #endif #else //BBS disable DarkUI mode @@ -4313,8 +4307,10 @@ void GUI_App::force_colors_update() #ifdef _MSW_DARK_MODE #ifdef __WINDOWS__ NppDarkMode::SetDarkMode(dark_mode()); +#if wxVERSION_NUMBER < 3300 if (WXHWND wxHWND = wxToolTip::GetToolTipCtrl()) NppDarkMode::SetDarkExplorerTheme((HWND)wxHWND); +#endif NppDarkMode::SetDarkTitleBar(mainframe->GetHWND()); diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index f89f583873..e89ac33cae 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -147,7 +147,7 @@ class GizmoObjectManipulation; static wxString dots("...", wxConvUTF8); // Does our wxWidgets version support markup? -#if wxUSE_MARKUP && wxCHECK_VERSION(3, 1, 1) +#if wxUSE_MARKUP #define SUPPORTS_MARKUP #endif diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 7e4853d19f..b20e26653a 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include "slic3r/Utils/FixModelByWin10.hpp" diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp index d9d4c8143c..5d7dde4d93 100644 --- a/src/slic3r/GUI/GUI_Utils.cpp +++ b/src/slic3r/GUI/GUI_Utils.cpp @@ -148,10 +148,6 @@ void on_window_geometry(wxTopLevelWindow *tlw, std::function callback) #endif } -#if !wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) -wxDEFINE_EVENT(EVT_DPI_CHANGED_SLICER, DpiChangedEvent); -#endif // !wxVERSION_EQUAL_OR_GREATER_THAN - #ifdef _WIN32 template typename F::FN winapi_get_function(const wchar_t *dll, const char *fn_name) { static HINSTANCE dll_handle = LoadLibraryExW(dll, nullptr, 0); @@ -247,12 +243,7 @@ bool check_dark_mode() { return value <= 0; } #endif -#if wxCHECK_VERSION(3,1,3) return wxSystemSettings::GetAppearance().IsDark(); -#else - const unsigned luma = wxGetApp().get_colour_approx_luma(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); - return luma < 128; -#endif } diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp index e831d51315..a3c6d1ce64 100644 --- a/src/slic3r/GUI/GUI_Utils.hpp +++ b/src/slic3r/GUI/GUI_Utils.hpp @@ -81,24 +81,6 @@ void update_dark_config(); void update_dark_ui(wxWindow* window); #endif -#if !wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) -struct DpiChangedEvent : public wxEvent { - int dpi; - wxRect rect; - - DpiChangedEvent(wxEventType eventType, int dpi, wxRect rect) - : wxEvent(0, eventType), dpi(dpi), rect(rect) - {} - - virtual wxEvent *Clone() const - { - return new DpiChangedEvent(*this); - } -}; - -wxDECLARE_EVENT(EVT_DPI_CHANGED_SLICER, DpiChangedEvent); -#endif // !wxVERSION_EQUAL_OR_GREATER_THAN - extern std::deque dialogStack; template class DPIAware : public P @@ -136,26 +118,12 @@ public: // recalc_font(); #ifndef __WXOSX__ -#if wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) this->Bind(wxEVT_DPI_CHANGED, [this](wxDPIChangedEvent& evt) { m_scale_factor = (float)evt.GetNewDPI().x / (float)DPI_DEFAULT; m_new_font_point_size = get_default_font_for_dpi(this, evt.GetNewDPI().x).GetPointSize(); if (m_can_rescale && (m_force_rescale || is_new_scale_factor())) rescale(wxRect()); }); -#else - this->Bind(EVT_DPI_CHANGED_SLICER, [this](const DpiChangedEvent& evt) { - m_scale_factor = (float)evt.dpi / (float)DPI_DEFAULT; - - m_new_font_point_size = get_default_font_for_dpi(this, evt.dpi).GetPointSize(); - - if (!m_can_rescale) - return; - - if (m_force_rescale || is_new_scale_factor()) - rescale(evt.rect); - }); -#endif // wxVERSION_EQUAL_OR_GREATER_THAN #endif // no __WXOSX__ this->Bind(wxEVT_MOVE_START, [this](wxMoveEvent& event) @@ -258,38 +226,11 @@ private: // check if new scale is differ from previous bool is_new_scale_factor() const { return fabs(m_scale_factor - m_prev_scale_factor) > 0.001; } - // function for a font scaling of the window - void scale_win_font(wxWindow *window, const int font_point_size) - { - wxFont new_font(window->GetFont()); - new_font.SetPointSize(font_point_size); - window->SetFont(new_font); - } - - // recursive function for scaling fonts for all controls in Window - void scale_controls_fonts(wxWindow *window, const int font_point_size) - { - auto children = window->GetChildren(); - - for (auto child : children) { - scale_controls_fonts(child, font_point_size); - scale_win_font(child, font_point_size); - } - - window->Layout(); - } - void rescale(const wxRect &suggested_rect) { this->Freeze(); m_force_rescale = false; -#if !wxVERSION_EQUAL_OR_GREATER_THAN(3,1,3) - // rescale fonts of all controls - scale_controls_fonts(this, m_new_font_point_size); - // rescale current window font - scale_win_font(this, m_new_font_point_size); -#endif // wxVERSION_EQUAL_OR_GREATER_THAN // set normal application font as a current window font m_normal_font = this->GetFont(); diff --git a/src/slic3r/GUI/I18N.hpp b/src/slic3r/GUI/I18N.hpp index c80c9a1659..4c71649408 100644 --- a/src/slic3r/GUI/I18N.hpp +++ b/src/slic3r/GUI/I18N.hpp @@ -64,11 +64,7 @@ namespace I18N { inline std::string translate_utf8(const std::wstring &s, const std::wstring &plural, unsigned int n) { return translate(s, plural, n).ToUTF8().data(); } inline std::string translate_utf8(const wxString &s, const wxString &plural, unsigned int n) { return translate(s, plural, n).ToUTF8().data(); } -#if wxCHECK_VERSION(3, 1, 1) - #define _wxGetTranslation_ctx(S, CTX) wxGetTranslation((S), wxEmptyString, (CTX)) -#else - #define _wxGetTranslation_ctx(S, CTX) ((void)(CTX), wxGetTranslation((S))) -#endif +#define _wxGetTranslation_ctx(S, CTX) wxGetTranslation((S), wxEmptyString, (CTX)) inline wxString translate(const char *s, const char* ctx) { return _wxGetTranslation_ctx(wxString(s, wxConvUTF8), ctx); } inline wxString translate(const wchar_t *s, const char* ctx) { return _wxGetTranslation_ctx(s, ctx); } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 7e7bdb04dc..6f8de35094 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -118,7 +118,7 @@ public: ResizeEdgePanel(MainFrame* frame, Edge edge) : wxPanel(frame, wxID_ANY, wxDefaultPosition, wxDefaultSize, - wxBORDER_NONE | wxTRANSPARENT_WINDOW) + wxBORDER_NONE) , m_frame(frame) , m_edge(edge) { @@ -524,25 +524,6 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ update_layout(); sizer->SetSizeHints(this); -#ifdef WIN32 - // SetMaximize causes the window to overlap the taskbar, due to the fact this window has wxMAXIMIZE_BOX off - // https://forums.wxwidgets.org/viewtopic.php?t=50634 - // Fix it here - this->Bind(wxEVT_MAXIMIZE, [this](auto &e) { - wxDisplay display(this); - auto size = display.GetClientArea().GetSize(); - auto pos = display.GetClientArea().GetPosition(); - HWND hWnd = GetHandle(); - RECT borderThickness; - SetRectEmpty(&borderThickness); - AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE), FALSE, 0); - const auto max_size = size + wxSize{-borderThickness.left + borderThickness.right, -borderThickness.top + borderThickness.bottom}; - const auto current_size = GetSize(); - SetSize({std::min(max_size.x, current_size.x), std::min(max_size.y, current_size.y)}); - Move(pos + wxPoint{borderThickness.left, borderThickness.top}); - e.Skip(); - }); -#endif // WIN32 // BBS Fit(); @@ -855,26 +836,31 @@ WXLRESULT MainFrame::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam its wParam value is TRUE and the return value is 0 */ case WM_NCCALCSIZE: if (wParam) { - /* Detect whether window is maximized or not. We don't need to change the resize border when win is - * maximized because all resize borders are gone automatically */ WINDOWPLACEMENT wPos; // GetWindowPlacement fail if this member is not set correctly. wPos.length = sizeof(wPos); GetWindowPlacement(hWnd, &wPos); + NCCALCSIZE_PARAMS *sz = reinterpret_cast(lParam); + RECT borderThickness; + SetRectEmpty(&borderThickness); + // Use & ~WS_CAPTION to get only the border thickness, not the caption height. + // wxWidgets 3.3 adds WS_CAPTION when wxMINIMIZE_BOX/wxMAXIMIZE_BOX/wxCLOSE_BOX is set, + // but we use a custom titlebar so we must exclude the caption from NC area calculations. + AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE) & ~WS_CAPTION, FALSE, NULL); + borderThickness.left *= -1; + borderThickness.top *= -1; if (wPos.showCmd != SW_SHOWMAXIMIZED) { - RECT borderThickness; - SetRectEmpty(&borderThickness); - AdjustWindowRectEx(&borderThickness, GetWindowLongPtr(hWnd, GWL_STYLE) & ~WS_CAPTION, FALSE, NULL); - borderThickness.left *= -1; - borderThickness.top *= -1; - NCCALCSIZE_PARAMS *sz = reinterpret_cast(lParam); // Add 1 pixel to the top border to make the window resizable from the top border - sz->rgrc[0].top += 1; // borderThickness.top; - sz->rgrc[0].left += borderThickness.left; - sz->rgrc[0].right -= borderThickness.right; - sz->rgrc[0].bottom -= borderThickness.bottom; - return 0; + sz->rgrc[0].top += 1; + } else { + // When maximized, Windows extends the window beyond the screen by the border thickness. + // Strip the full border overshoot so the client area matches the work area. + sz->rgrc[0].top += borderThickness.top; } + sz->rgrc[0].left += borderThickness.left; + sz->rgrc[0].right -= borderThickness.right; + sz->rgrc[0].bottom -= borderThickness.bottom; + return 0; } break; @@ -1802,8 +1788,10 @@ wxBoxSizer* MainFrame::create_side_tools() m_slice_select = eSlicePlate; m_print_select = ePrintPlate; - auto slice_panel = new wxPanel(this,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxTRANSPARENT_WINDOW); - auto print_panel = new wxPanel(this,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxTRANSPARENT_WINDOW); + auto slice_panel = new wxPanel(this,wxID_ANY,wxDefaultPosition,wxDefaultSize); + auto print_panel = new wxPanel(this,wxID_ANY,wxDefaultPosition,wxDefaultSize); + slice_panel->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#3B4446"))); + print_panel->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#3B4446"))); m_slice_btn = new SideButton(slice_panel, _L("Slice plate"), ""); m_slice_option_btn = new SideButton(slice_panel, "", "sidebutton_dropdown", 0, 14); @@ -2336,6 +2324,11 @@ void MainFrame::update_side_button_style() m_print_option_btn->SetExtraSize(wxSize(FromDIP(10), FromDIP(10))); m_print_option_btn->SetIconOffset(FromDIP(2)); m_print_option_btn->SetMinSize(wxSize(FromDIP(24), FromDIP(24))); + + // Keep panel backgrounds in sync with SideButton's darkModeColorFor(#3B4446) bottom strip + auto bg = StateColor::darkModeColorFor(wxColour("#3B4446")); + m_slice_btn->GetParent()->SetBackgroundColour(bg); + m_print_btn->GetParent()->SetBackgroundColour(bg); } void MainFrame::update_slice_print_status(SlicePrintEventType event, bool can_slice, bool can_print) diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index abd5a12373..ec592685a1 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -69,15 +69,13 @@ namespace { // Code taken from desktop_open_datadir_folder() // Execute command to open a file explorer, platform dependent. - // FIXME: The const_casts aren't needed in wxWidgets 3.1, remove them when we upgrade. - #ifdef _WIN32 const wxString widepath = from_u8(path); const wchar_t* argv[] = { L"explorer", widepath.GetData(), nullptr }; - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr); #elif __APPLE__ const char* argv[] = { "open", path.data(), nullptr }; - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr); #else const char* argv[] = { "xdg-open", path.data(), nullptr }; @@ -105,11 +103,11 @@ namespace { exec_env.cwd = std::move(owd); } - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, &exec_env); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr, &exec_env); } else { // Looks like we're NOT running from AppImage, we'll make no changes to the environment. - ::wxExecute(const_cast(argv), wxEXEC_ASYNC, nullptr, nullptr); + ::wxExecute(argv, wxEXEC_ASYNC, nullptr, nullptr); } #endif } diff --git a/src/slic3r/GUI/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp index ced23a8d37..94b3e2cb08 100644 --- a/src/slic3r/GUI/ObjColorDialog.cpp +++ b/src/slic3r/GUI/ObjColorDialog.cpp @@ -57,7 +57,7 @@ wxBoxSizer* ObjColorDialog::create_btn_sizer(long flags,bool exist_error) m_button_list[wxOK] = dlg_btns->GetOK(); m_button_list[wxCANCEL] = dlg_btns->GetCANCEL(); - btn_sizer->Add(dlg_btns, 0, wxEXPAND | wxALIGN_CENTER_VERTICAL); + btn_sizer->Add(dlg_btns, 0, wxEXPAND); return btn_sizer; } @@ -310,8 +310,8 @@ ObjColorPanel::ObjColorPanel(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, c wxBORDER_NONE | wxBU_AUTODRAW); m_image_button->SetBitmap(image); m_image_button->SetCanFocus(false); - icon_sizer->Add(m_image_button, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL, - FromDIP(0)); // wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL + icon_sizer->Add(m_image_button, 0, wxEXPAND | wxALL, + FromDIP(0)); // wxEXPAND | wxALL cur_combox->Raise();//for mac m_sizer_simple->Add(icon_sizer, FromDIP(0), wxALIGN_CENTER | wxALL, FromDIP(0)); diff --git a/src/slic3r/GUI/OpenGLManager.cpp b/src/slic3r/GUI/OpenGLManager.cpp index 17c372a59f..e820639899 100644 --- a/src/slic3r/GUI/OpenGLManager.cpp +++ b/src/slic3r/GUI/OpenGLManager.cpp @@ -19,9 +19,6 @@ #include "GUI_Init.hpp" #ifdef __APPLE__ -// Part of hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets -#include - #include "../Utils/MacDarkMode.hpp" #endif // __APPLE__ @@ -237,26 +234,12 @@ bool OpenGLManager::s_force_power_of_two_textures = false; OpenGLManager::EMultisampleState OpenGLManager::s_multisample = OpenGLManager::EMultisampleState::Unknown; OpenGLManager::EFramebufferType OpenGLManager::s_framebuffers_type = OpenGLManager::EFramebufferType::Unknown; -#ifdef __APPLE__ -// Part of hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets -OpenGLManager::OSInfo OpenGLManager::s_os_info; -#endif // __APPLE__ - OpenGLManager::~OpenGLManager() { m_shaders_manager.shutdown(); -#ifdef __APPLE__ - // This is an ugly hack needed to solve the crash happening when closing the application on OSX 10.9.5 with newer wxWidgets - // The crash is triggered inside wxGLContext destructor - if (s_os_info.major != 10 || s_os_info.minor != 9 || s_os_info.micro != 5) - { -#endif //__APPLE__ - if (m_context != nullptr) - delete m_context; -#ifdef __APPLE__ - } -#endif //__APPLE__ + if (m_context != nullptr) + delete m_context; } bool OpenGLManager::init_gl(bool popup_error) @@ -412,12 +395,6 @@ wxGLContext* OpenGLManager::init_glcontext(wxGLCanvas& canvas, const std::pairSetBackgroundStyle(wxBG_STYLE_PAINT); + return canvas; } void OpenGLManager::detect_multisample(int* attribList) diff --git a/src/slic3r/GUI/OpenGLManager.hpp b/src/slic3r/GUI/OpenGLManager.hpp index 030bd18ebd..b9ba064a59 100644 --- a/src/slic3r/GUI/OpenGLManager.hpp +++ b/src/slic3r/GUI/OpenGLManager.hpp @@ -62,16 +62,6 @@ public: void detect() const; }; -#ifdef __APPLE__ - // Part of hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets - struct OSInfo - { - int major{ 0 }; - int minor{ 0 }; - int micro{ 0 }; - }; -#endif //__APPLE__ - private: enum class EMultisampleState : unsigned char { @@ -84,10 +74,6 @@ private: wxGLContext* m_context{ nullptr }; GLShadersManager m_shaders_manager; static GLInfo s_gl_info; -#ifdef __APPLE__ - // Part of hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets - static OSInfo s_os_info; -#endif //__APPLE__ static bool s_compressed_textures_supported; static bool s_force_power_of_two_textures; diff --git a/src/slic3r/GUI/PartSkipDialog.cpp b/src/slic3r/GUI/PartSkipDialog.cpp index 051bb9b29c..12a794cfe2 100644 --- a/src/slic3r/GUI/PartSkipDialog.cpp +++ b/src/slic3r/GUI/PartSkipDialog.cpp @@ -197,9 +197,9 @@ PartSkipDialog::PartSkipDialog(wxWindow *parent) : DPIDialog(parent, wxID_ANY, _ #else m_dlg_btn_sizer->Add(m_tot_label, 0, wxALIGN_CENTER_VERTICAL, 0); #endif - m_dlg_btn_sizer->Add(0, 0, 1, wxEXPAND | wxALIGN_CENTER_VERTICAL, FromDIP(0)); + m_dlg_btn_sizer->Add(0, 0, 1, wxEXPAND, FromDIP(0)); m_dlg_btn_sizer->Add(m_apply_btn, 0, wxALIGN_CENTER_VERTICAL, FromDIP(0)); - m_dlg_btn_sizer->Add(0, 0, 0, wxLEFT | wxEXPAND | wxALIGN_CENTER_VERTICAL, FromDIP(24)); + m_dlg_btn_sizer->Add(0, 0, 0, wxLEFT | wxEXPAND, FromDIP(24)); m_dlg_placeholder = new wxPanel(m_book_third_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); m_dlg_placeholder->SetMinSize(wxSize(-1, FromDIP(15))); diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp index 8134e39cf9..034fb653cd 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -384,7 +384,7 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr auto txt = new wxStaticText(parent, wxID_ANY, from_u8((boost::format("%1%\n\t%2%") % info % ca_file_hint).str())); txt->SetFont(wxGetApp().normal_font()); auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(txt, 1, wxEXPAND|wxALIGN_LEFT); + sizer->Add(txt, 1, wxEXPAND); return sizer; }; m_optgroup->append_line(line); @@ -430,7 +430,7 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr // Always fill in the "printhost_port" combo box from the config and select it. { Choice* choice = dynamic_cast(m_optgroup->get_field("printhost_port")); - choice->set_values({ m_config->opt_string("printhost_port") }); + choice->set_values(std::vector{ m_config->opt_string("printhost_port") }); choice->set_selection(); } diff --git a/src/slic3r/GUI/PlateSettingsDialog.cpp b/src/slic3r/GUI/PlateSettingsDialog.cpp index 54887f9780..11847915e9 100644 --- a/src/slic3r/GUI/PlateSettingsDialog.cpp +++ b/src/slic3r/GUI/PlateSettingsDialog.cpp @@ -313,7 +313,7 @@ void OtherLayersSeqPanel::append_layer(const LayerSeqInfo* layer_info) single_layer_input_sizer->Add(end_layer_input, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER, FromDIP(5)); single_layer_input_sizer->AddStretchSpacer(); single_layer_input_sizer->Add(drag_canvas, 0, wxLEFT | wxALIGN_CENTER, FromDIP(5)); - layer_panel_sizer->Add(single_layer_input_sizer, 0, wxEXPAND | wxALIGN_CENTER | wxBOTTOM, FromDIP(10)); + layer_panel_sizer->Add(single_layer_input_sizer, 0, wxEXPAND | wxBOTTOM, FromDIP(10)); m_layer_input_sizer_list.push_back(single_layer_input_sizer); m_begin_layer_input_list.push_back(begin_layer_input); m_end_layer_input_list.push_back(end_layer_input); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 4534b0886a..c26215936e 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -529,7 +529,7 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual) //if (isBBL) { wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL); hsizer->Add(image_printer, 0, wxLEFT | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); - hsizer->Add(combo_printer, 1, wxEXPAND | wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, FromDIP(2)); + hsizer->Add(combo_printer, 1, wxEXPAND | wxALL, FromDIP(2)); hsizer->AddSpacer(FromDIP(2)); hsizer->Add(btn_edit_printer, 0, wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::IconSpacing())); //hsizer->Add(btn_connect_printer, 0, wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::IconSpacing())); @@ -1571,7 +1571,7 @@ void Sidebar::update_sync_ams_btn_enable(wxUpdateUIEvent &e) } Sidebar::Sidebar(Plater *parent) - : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(42 * wxGetApp().em_unit(), -1)), p(new priv(parent)) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(39 * wxGetApp().em_unit(), -1)), p(new priv(parent)) { Choice::register_dynamic_list("support_filament", &dynamic_filament_list); Choice::register_dynamic_list("support_interface_filament", &dynamic_filament_list); @@ -2186,7 +2186,7 @@ Sidebar::Sidebar(Plater *parent) auto search_sizer = new wxBoxSizer(wxHORIZONTAL); search_sizer->Add(new wxWindow(p->m_search_bar, wxID_ANY, wxDefaultPosition, wxSize(0, 0)), 0, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(1)); - search_sizer->Add(p->m_search_item, 1, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); + search_sizer->Add(p->m_search_item, 1, wxEXPAND | wxALL, FromDIP(2)); p->m_search_bar->SetSizer(search_sizer); p->m_search_bar->Layout(); search_sizer->Fit(p->m_search_bar); @@ -2789,7 +2789,7 @@ void Sidebar::update_filaments_area_height() void Sidebar::msw_rescale() { - SetMinSize(wxSize(42 * wxGetApp().em_unit(), -1)); + SetMinSize(wxSize(39 * wxGetApp().em_unit(), -1)); p->m_panel_printer_title->GetSizer()->SetMinSize(-1, 3 * wxGetApp().em_unit()); p->m_panel_filament_title->GetSizer() ->SetMinSize(-1, 3 * wxGetApp().em_unit()); @@ -4929,7 +4929,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) .TopDockable(false) .BottomDockable(false) .Floatable(true) - .BestSize(wxSize(42 * wxGetApp().em_unit(), 90 * wxGetApp().em_unit()))); + .BestSize(wxSize(39 * wxGetApp().em_unit(), 90 * wxGetApp().em_unit()))); auto* panel_sizer = new wxBoxSizer(wxHORIZONTAL); panel_sizer->Add(view3D, 1, wxEXPAND | wxALL, 0); @@ -5299,12 +5299,14 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) for (size_t i = 0; i < evt.data.size(); ++i) { input_files.push_back(from_u8(evt.data[i].string())); } + wxGetApp().mainframe->Show(); wxGetApp().mainframe->Raise(); this->q->load_files(input_files); }); this->q->Bind(EVT_START_DOWNLOAD_OTHER_INSTANCE, [](StartDownloadOtherInstanceEvent& evt) { BOOST_LOG_TRIVIAL(trace) << "Received url from other instance event."; + wxGetApp().mainframe->Show(); wxGetApp().mainframe->Raise(); for (size_t i = 0; i < evt.data.size(); ++i) { wxGetApp().start_download(evt.data[i]); @@ -11557,8 +11559,8 @@ void Plater::priv::bring_instance_forward() const { main_frame->Restore(); wxGetApp().GetTopWindow()->SetFocus(); // focus on my window - wxGetApp().GetTopWindow()->Raise(); // bring window to front wxGetApp().GetTopWindow()->Show(true); // show the window + wxGetApp().GetTopWindow()->Raise(); // bring window to front } } @@ -12110,7 +12112,7 @@ void Plater::import_model_id(wxString download_info) /* load project */ // Orca: If download is a zip file, treat it as if file has been drag and dropped on the plater if (target_path.extension() == ".zip") - this->load_files(wxArrayString(1, target_path.string())); + { wxArrayString arr; arr.Add(wxString::FromUTF8(target_path.string())); this->load_files(arr); } else this->load_project(target_path.wstring()); /*BBS set project info after load project, project info is reset in load project */ diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 1a52f886ca..42fa277cc3 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -284,7 +284,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS if (combobox->GetSelection() == m_current_language_selected) return; - if (e.GetString().mb_str() != app_config->get(param)) { + if (e.GetString().ToStdString() != app_config->get(param)) { { //check if the project has changed if (wxGetApp().plater()->is_project_dirty()) { diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index 1aef329297..cc3811d36e 100644 --- a/src/slic3r/GUI/Search.cpp +++ b/src/slic3r/GUI/Search.cpp @@ -184,7 +184,7 @@ bool OptionsSearcher::search(const std::string &search, bool force /* = false*/, found.clear(); bool full_list = search.empty(); - std::wstring sep = L" : "; + wxString sep = L" : "; auto get_label = [this, &sep](const Option &opt, bool marked = true) { std::wstring out; @@ -213,7 +213,7 @@ bool OptionsSearcher::search(const std::string &search, bool force /* = false*/, }; auto get_tooltip = [this, &sep](const Option &opt) { - return marker_by_type(opt.type, printer_technology) + opt.category_local + sep + opt.group_local + sep + opt.label_local; + return wxString(marker_by_type(opt.type, printer_technology)) + opt.category_local + sep + opt.group_local + sep + opt.label_local; }; std::vector matches, matches2; diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index 569f2d561d..3cf22ee9f2 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -449,12 +449,10 @@ PrintParams SendMultiMachinePage::request_params(MachineObject* obj) bool timelapse = app_config->get("print", "timelapse") == "1" ? true : false; auto use_ams = false; - AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); auto groupid = 0; - - while (node) { - AmsRadioSelector* rs = node->GetData(); + for (auto it = m_radio_group.begin(); it != m_radio_group.end(); ++it) { + AmsRadioSelector* rs = *it; if (rs->m_param_name == "use_ams" && rs->m_radiobox->GetValue()) { use_ams = true; } @@ -462,8 +460,6 @@ PrintParams SendMultiMachinePage::request_params(MachineObject* obj) if (rs->m_param_name == "use_extra" && rs->m_radiobox->GetValue()) { use_ams = false; } - - node = node->GetNext(); } //use ams @@ -938,7 +934,7 @@ wxBoxSizer* SendMultiMachinePage::create_item_radiobox(wxString title, wxWindow* void SendMultiMachinePage::OnSelectRadio(wxMouseEvent& event) { - AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + AmsRadioSelectorList::compatibility_iterator node = m_radio_group.GetFirst(); auto groupid = 0; //while (node) { @@ -975,7 +971,7 @@ void SendMultiMachinePage::OnSelectRadio(wxMouseEvent& event) void SendMultiMachinePage::on_select_radio(std::string param) { - AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + AmsRadioSelectorList::compatibility_iterator node = m_radio_group.GetFirst(); auto groupid = 0; while (node) { @@ -995,7 +991,7 @@ void SendMultiMachinePage::on_select_radio(std::string param) bool SendMultiMachinePage::get_value_radio(std::string param) { - AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + AmsRadioSelectorList::compatibility_iterator node = m_radio_group.GetFirst(); auto groupid = 0; while (node) { AmsRadioSelector* rs = node->GetData(); diff --git a/src/slic3r/GUI/SendSystemInfoDialog.cpp b/src/slic3r/GUI/SendSystemInfoDialog.cpp index cb8228ba28..a47119e429 100644 --- a/src/slic3r/GUI/SendSystemInfoDialog.cpp +++ b/src/slic3r/GUI/SendSystemInfoDialog.cpp @@ -481,7 +481,7 @@ static std::string generate_system_info_json() monitor_node.put("height", display.GetGeometry().GetHeight()); // Only get the scaling on Win, it is not reliable on other platforms. - #if defined(_WIN32) && wxCHECK_VERSION(3, 1, 2) + #if defined(_WIN32) double scaling = display.GetPPI().GetWidth() / 96.; std::stringstream ss; ss << std::setprecision(3) << scaling; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 651e1c6f5b..1e9bc53f47 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -783,7 +783,7 @@ void PrintingTaskPanel::create_panel(wxWindow* parent) printingstage_horizontal_sizer->Add(m_printing_stage_value, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0); printingstage_horizontal_sizer->Add(m_question_button, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); printingstage_vertical_sizer->Add(printingstage_horizontal_sizer, 0, wxALIGN_CENTER_VERTICAL, 0); - printingstage_vertical_sizer->Add(m_printing_stage_underline, 0, wxEXPAND |wxALIGN_TOP, 0); + printingstage_vertical_sizer->Add(m_printing_stage_underline, 0, wxEXPAND, 0); m_printing_stage_panel->SetSizer(printingstage_vertical_sizer); // Orca: display the end time of the print @@ -2122,7 +2122,7 @@ wxBoxSizer* StatusBasePanel::create_filament_group(wxWindow* parent) }); - sizer_box->Add(steps_sizer, 0, wxEXPAND | wxALIGN_LEFT | wxTOP, FromDIP(5)); + sizer_box->Add(steps_sizer, 0, wxEXPAND | wxTOP, FromDIP(5)); sizer_box->Add(m_button_retry, 0, wxLEFT, FromDIP(28)); sizer_box->Add(0, 0, 0, wxTOP, FromDIP(5)); m_filament_load_box->SetBackgroundColour(*wxWHITE); diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index 1e6f2256fe..a819464a86 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -495,7 +495,7 @@ void SyncAmsInfoDialog::add_two_image_control() m_swipe_left_button->SetBitmap(m_swipe_left_bmp_normal.bmp()); }); m_swipe_left_button->Bind(wxEVT_BUTTON, &SyncAmsInfoDialog::to_previous_plate, this); - swipe_left__sizer->Add(m_swipe_left_button, 0, wxALIGN_CENTER | wxEXPAND | wxALIGN_CENTER_VERTICAL); + swipe_left__sizer->Add(m_swipe_left_button, 0, wxEXPAND); swipe_left__sizer->AddStretchSpacer(); view_two_thumbnail_sizer->Add(swipe_left__sizer, 0, wxEXPAND); view_two_thumbnail_sizer->AddSpacer(FromDIP(24)); @@ -507,19 +507,19 @@ void SyncAmsInfoDialog::add_two_image_control() m_left_image_button = new wxButton(m_two_image_panel, wxID_ANY, {}, wxDefaultPosition, wxSize(FromDIP(LEFT_THUMBNAIL_SIZE_WIDTH), FromDIP(LEFT_THUMBNAIL_SIZE_WIDTH)), wxBORDER_NONE | wxBU_AUTODRAW); m_left_sizer_thumbnail = create_sizer_thumbnail(m_left_image_button, true); - m_two_image_panel_sizer->Add(m_left_sizer_thumbnail, FromDIP(0), wxALIGN_LEFT | wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, FromDIP(8)); + m_two_image_panel_sizer->Add(m_left_sizer_thumbnail, FromDIP(0), wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, FromDIP(8)); m_two_image_panel_sizer->AddSpacer(FromDIP(5)); m_right_image_button = new wxButton(m_two_image_panel, wxID_ANY, {}, wxDefaultPosition, wxSize(FromDIP(RIGHT_THUMBNAIL_SIZE_WIDTH), FromDIP(RIGHT_THUMBNAIL_SIZE_WIDTH)), wxBORDER_NONE | wxBU_AUTODRAW); m_right_sizer_thumbnail = create_sizer_thumbnail(m_right_image_button, false); - m_two_image_panel_sizer->Add(m_right_sizer_thumbnail, FromDIP(0), wxALIGN_LEFT | wxEXPAND | wxRIGHT | wxTOP | wxBOTTOM, FromDIP(8)); + m_two_image_panel_sizer->Add(m_right_sizer_thumbnail, FromDIP(0), wxEXPAND | wxRIGHT | wxTOP | wxBOTTOM, FromDIP(8)); m_two_image_panel->SetSizer(m_two_image_panel_sizer); m_two_image_panel->Layout(); m_two_image_panel->Fit(); - view_two_thumbnail_sizer->Add(m_two_image_panel, FromDIP(0), wxALIGN_LEFT | wxEXPAND | wxTOP, FromDIP(2)); + view_two_thumbnail_sizer->Add(m_two_image_panel, FromDIP(0), wxEXPAND | wxTOP, FromDIP(2)); } view_two_thumbnail_sizer->AddSpacer(FromDIP(20)); auto swipe_right__sizer = new wxBoxSizer(wxVERTICAL); @@ -536,7 +536,7 @@ void SyncAmsInfoDialog::add_two_image_control() }); m_swipe_right_button->Bind(wxEVT_BUTTON, &SyncAmsInfoDialog::to_next_plate, this); - swipe_right__sizer->Add(m_swipe_right_button, 0, wxALIGN_CENTER | wxEXPAND | wxALIGN_CENTER_VERTICAL); + swipe_right__sizer->Add(m_swipe_right_button, 0, wxEXPAND); swipe_right__sizer->AddStretchSpacer(); view_two_thumbnail_sizer->Add(swipe_right__sizer, 0, wxEXPAND); view_two_thumbnail_sizer->AddStretchSpacer(); @@ -546,7 +546,7 @@ void SyncAmsInfoDialog::add_two_image_control() m_choose_plate_sizer->AddStretchSpacer(); wxStaticText *chose_combox_title = new wxStaticText(m_two_thumbnail_panel, wxID_ANY, _CTX(L_CONTEXT("Plate", "Sync_AMS"), "Sync_AMS")); - m_choose_plate_sizer->Add(chose_combox_title, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxEXPAND | wxTOP, FromDIP(6)); + m_choose_plate_sizer->Add(chose_combox_title, 0, wxEXPAND | wxTOP, FromDIP(6)); m_choose_plate_sizer->AddSpacer(FromDIP(10)); m_combobox_plate = new ComboBox(m_two_thumbnail_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(60), -1), 0, NULL, wxCB_READONLY); @@ -563,7 +563,7 @@ void SyncAmsInfoDialog::add_two_image_control() m_two_thumbnail_panel->SetSizer(m_two_thumbnail_panel_sizer); m_two_thumbnail_panel->Layout(); m_two_thumbnail_panel->Fit(); - m_sizer_main->Add(m_two_thumbnail_panel, FromDIP(0), wxALIGN_CENTER | wxEXPAND | wxLEFT | wxRIGHT, FromDIP(25)); + m_sizer_main->Add(m_two_thumbnail_panel, FromDIP(0), wxEXPAND | wxLEFT | wxRIGHT, FromDIP(25)); update_swipe_button_state(); } @@ -717,9 +717,9 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_colormap_btn = new CapsuleButton(m_scrolledWindow, PageType::ptColorMap, _L("Mapping"), true); m_override_btn = new CapsuleButton(m_scrolledWindow, PageType::ptOverride, _L("Overwriting"), false); m_mode_combox_sizer->AddSpacer(SyncAmsInfoDialogWidth / 2.0f - FromDIP(8) / 2.0f - m_colormap_btn->GetSize().GetX()); - m_mode_combox_sizer->Add(m_colormap_btn, 0, wxALIGN_CENTER | wxEXPAND | wxALL, FromDIP(2)); + m_mode_combox_sizer->Add(m_colormap_btn, 0, wxEXPAND | wxALL, FromDIP(2)); m_mode_combox_sizer->AddSpacer(FromDIP(8)); - m_mode_combox_sizer->Add(m_override_btn, 0, wxALIGN_CENTER | wxEXPAND | wxALL, FromDIP(2)); + m_mode_combox_sizer->Add(m_override_btn, 0, wxEXPAND | wxALL, FromDIP(2)); m_mode_combox_sizer->AddSpacer(SyncAmsInfoDialogWidth / 2.0f - FromDIP(8) / 2.0f - m_override_btn->GetSize().GetX() - FromDIP(60)); m_reset_all_btn = new ScalableButton(m_scrolledWindow, wxID_ANY, "reset_gray", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 14); @@ -727,12 +727,12 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : m_reset_all_btn->SetBackgroundColour(*wxWHITE); m_reset_all_btn->SetToolTip(_L("Reset all filament mapping")); - m_mode_combox_sizer->Add(m_reset_all_btn, 0, wxALIGN_LEFT | wxEXPAND | wxALL, FromDIP(2)); + m_mode_combox_sizer->Add(m_reset_all_btn, 0, wxEXPAND | wxALL, FromDIP(2)); m_colormap_btn->Bind(wxEVT_BUTTON, &SyncAmsInfoDialog::update_when_change_map_mode,this); // update_when_change_map_mode(e.GetSelection()); m_override_btn->Bind(wxEVT_BUTTON, &SyncAmsInfoDialog::update_when_change_map_mode,this); - bSizer->Add(m_mode_combox_sizer, FromDIP(0), wxEXPAND | wxALIGN_LEFT | wxTOP, FromDIP(10)); + bSizer->Add(m_mode_combox_sizer, FromDIP(0), wxEXPAND | wxTOP, FromDIP(10)); } m_basic_panel = new wxPanel(m_scrolledWindow, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); @@ -1079,7 +1079,7 @@ void SyncAmsInfoDialog::check_empty_project() if (!temp_plate->get_objects_on_this_plate().empty()) { if (m_is_empty_project) { m_is_empty_project = false; } if (i < 9) { - m_plate_number_choices_str.Add("0" + std::to_wstring(i + 1)); + m_plate_number_choices_str.Add(wxString("0") + std::to_wstring(i + 1)); } else if (i == 9) { m_plate_number_choices_str.Add("10"); diff --git a/src/slic3r/GUI/SysInfoDialog.cpp b/src/slic3r/GUI/SysInfoDialog.cpp index 1e4fe64de2..933cfb4d7c 100644 --- a/src/slic3r/GUI/SysInfoDialog.cpp +++ b/src/slic3r/GUI/SysInfoDialog.cpp @@ -109,7 +109,7 @@ SysInfoDialog::SysInfoDialog() title_font.SetFamily(wxFONTFAMILY_ROMAN); title_font.SetPointSize(22); title->SetFont(title_font); - vsizer->Add(title, 0, wxEXPAND | wxALIGN_LEFT | wxTOP, wxGetApp().em_unit()/*50*/); + vsizer->Add(title, 0, wxEXPAND | wxTOP, wxGetApp().em_unit()/*50*/); } // main_info_text diff --git a/src/slic3r/GUI/TabButton.cpp b/src/slic3r/GUI/TabButton.cpp index 11da9db069..79b9f32d13 100644 --- a/src/slic3r/GUI/TabButton.cpp +++ b/src/slic3r/GUI/TabButton.cpp @@ -182,6 +182,7 @@ void TabButton::render(wxDC &dc) pt.y = (size.y - showimg.GetHeight()) / 2; dc.DrawBitmap(showimg, pt); } + } void TabButton::messureSize() diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 62b6d69fb7..396e8327e6 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -1078,7 +1078,7 @@ void AMSControl::createAmsPanel(wxSimplebook *parent, int &idx, std::vectorAdd(ams1, 0, wxLEFT, FromDIP(30)); - book_sizer->Add(ext_image, 0, wxEXPAND | wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(30)); + book_sizer->Add(ext_image, 0, wxEXPAND | wxLEFT, FromDIP(30)); ext_image->setTotalExtNum(series_name, printer_type, total_ext_num); m_ext_image_list[infos[0].ams_id] = ext_image; } diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index ef5eb4b339..9b6d793ccf 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -48,7 +48,7 @@ Button::Button(wxWindow* parent, wxString text, wxString icon, long style, int i bool Button::Create(wxWindow* parent, wxString text, wxString icon, long style, int iconSize, wxWindowID btn_id) { StaticBox::Create(parent, btn_id, wxDefaultPosition, wxDefaultSize, style); - state_handler.attach({&text_color}); + state_handler.attach(std::vector{&text_color}); state_handler.update_binds(); //BBS set default font SetFont(Label::Body_14); @@ -364,14 +364,6 @@ void Button::render(wxDC& dc) dc.SetBrush(*wxLIGHT_GREY); dc.SetPen(wxPen(*wxLIGHT_GREY)); dc.DrawRectangle(pt, textSize.GetSize()); -#endif -#ifdef __WXOSX__ - pt.y -= this->textSize.x / 2; -#endif -#ifdef __APPLE__ - if (Slic3r::is_mac_version_15()) { - pt.y -= FromDIP(1); - } #endif dc.DrawText(text, pt); } diff --git a/src/slic3r/GUI/Widgets/CheckBox.cpp b/src/slic3r/GUI/Widgets/CheckBox.cpp index 5c3baa2fc1..4e03f42187 100644 --- a/src/slic3r/GUI/Widgets/CheckBox.cpp +++ b/src/slic3r/GUI/Widgets/CheckBox.cpp @@ -24,9 +24,16 @@ CheckBox::CheckBox(wxWindow *parent, int id) Bind(wxEVT_ENTER_WINDOW, &CheckBox::updateBitmap, this); Bind(wxEVT_LEAVE_WINDOW, &CheckBox::updateBitmap, this); #endif + update(); +#ifdef __WXGTK__ + wxSize bestSize = GetBestSize(); + bestSize.IncTo(m_on.GetBmpSize()); + SetSize(bestSize); + SetMinSize(bestSize); +#else SetSize(m_on.GetBmpSize()); SetMinSize(m_on.GetBmpSize()); - update(); +#endif } void CheckBox::SetValue(bool value) @@ -54,8 +61,16 @@ void CheckBox::Rescale() m_on_focused.msw_rescale(); m_half_focused.msw_rescale(); m_off_focused.msw_rescale(); + update(); +#ifdef __WXGTK__ + wxSize bestSize = GetBestSize(); + bestSize.IncTo(m_on.GetBmpSize()); + SetSize(bestSize); + SetMinSize(bestSize); +#else SetSize(m_on.GetBmpSize()); - update(); + SetMinSize(m_on.GetBmpSize()); +#endif } void CheckBox::update() diff --git a/src/slic3r/GUI/Widgets/RadioBox.cpp b/src/slic3r/GUI/Widgets/RadioBox.cpp index 88427b0304..a8a1d8a1ef 100644 --- a/src/slic3r/GUI/Widgets/RadioBox.cpp +++ b/src/slic3r/GUI/Widgets/RadioBox.cpp @@ -13,9 +13,16 @@ RadioBox::RadioBox(wxWindow *parent) // SetBackgroundStyle(wxBG_STYLE_TRANSPARENT); if (parent) SetBackgroundColour(parent->GetBackgroundColour()); // Bind(wxEVT_TOGGLEBUTTON, [this](auto& e) { update(); e.Skip(); }); + update(); +#ifdef __WXGTK__ + wxSize bestSize = GetBestSize(); + bestSize.IncTo(m_on.GetBmpSize()); + SetSize(bestSize); + SetMinSize(bestSize); +#else SetSize(m_on.GetBmpSize()); SetMinSize(m_on.GetBmpSize()); - update(); +#endif } void RadioBox::SetValue(bool value) @@ -34,8 +41,16 @@ void RadioBox::Rescale() { m_on.msw_rescale(); m_off.msw_rescale(); - SetSize(m_on.GetBmpSize()); update(); +#ifdef __WXGTK__ + wxSize bestSize = GetBestSize(); + bestSize.IncTo(m_on.GetBmpSize()); + SetSize(bestSize); + SetMinSize(bestSize); +#else + SetSize(m_on.GetBmpSize()); + SetMinSize(m_on.GetBmpSize()); +#endif } void RadioBox::update() { diff --git a/src/slic3r/GUI/Widgets/SideButton.cpp b/src/slic3r/GUI/Widgets/SideButton.cpp index 7d600ef310..08c58309e5 100644 --- a/src/slic3r/GUI/Widgets/SideButton.cpp +++ b/src/slic3r/GUI/Widgets/SideButton.cpp @@ -278,13 +278,11 @@ void SideButton::dorender(wxDC& dc, wxDC& text_dc) auto text = GetLabel(); if (!text.IsEmpty()) { pt.y += (rcContent.height - textSize.y) / 2; -#ifdef __APPLE__ - pt.y -= FromDIP(2); -#endif text_dc.SetFont(GetFont()); text_dc.SetTextForeground(text_color.colorForStates(states)); text_dc.DrawText(text, pt); } + } void SideButton::messureSize() diff --git a/src/slic3r/GUI/Widgets/SwitchButton.cpp b/src/slic3r/GUI/Widgets/SwitchButton.cpp index 1c88d1afb0..3aafa0fbc1 100644 --- a/src/slic3r/GUI/Widgets/SwitchButton.cpp +++ b/src/slic3r/GUI/Widgets/SwitchButton.cpp @@ -180,8 +180,15 @@ void SwitchButton::Rescale() (i == 0 ? m_off : m_on).bmp() = bmp; } } - SetSize(m_on.GetBmpSize()); update(); +#ifdef __WXGTK__ + wxSize bestSize = GetBestSize(); + bestSize.IncTo(m_on.GetBmpSize()); + SetSize(bestSize); + SetMinSize(bestSize); +#else + SetSize(m_on.GetBmpSize()); +#endif } void SwitchButton::update() diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index 558587c8e2..82933b6069 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -173,6 +173,12 @@ private: class WebViewWebKit : public wxWebViewWebKit { +public: + WebViewWebKit() + : wxWebViewWebKit(wxWebView::NewConfiguration(wxWebViewBackendWebKit)) + { + } + ~WebViewWebKit() override { RemoveScriptMessageHandler("wx"); @@ -258,7 +264,7 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) #ifdef __WIN32__ wxWebView* webView = new WebViewEdge; #elif defined(__WXOSX__) - wxWebView *webView = new WebViewWebKit; + wxWebView* webView = new WebViewWebKit; #else auto webView = wxWebView::New(); #endif @@ -331,7 +337,7 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) bool WebView::CheckWebViewRuntime() { wxWebViewFactoryEdge factory; - auto wxVersion = factory.GetVersionInfo(); + auto wxVersion = factory.GetVersionInfo(wxVersionContext::RunTime); return wxVersion.GetMajor() != 0; } diff --git a/src/slic3r/GUI/wxinit.h b/src/slic3r/GUI/wxinit.h index b55681b92d..4c5ab9fb36 100644 --- a/src/slic3r/GUI/wxinit.h +++ b/src/slic3r/GUI/wxinit.h @@ -12,14 +12,4 @@ // later when we no longer need to undef _ #define __(s) wxGetTranslation((s)) -// legacy macros -// https://wiki.wxwidgets.org/EventTypes_and_Event-Table_Macros -#ifndef wxEVT_BUTTON -#define wxEVT_BUTTON wxEVT_COMMAND_BUTTON_CLICKED -#endif - -#ifndef wxEVT_HTML_LINK_CLICKED -#define wxEVT_HTML_LINK_CLICKED wxEVT_COMMAND_HTML_LINK_CLICKED -#endif - #endif