diff --git a/src/imgui/imgui_widgets.cpp b/src/imgui/imgui_widgets.cpp index a9b59d241b..f729d652f0 100644 --- a/src/imgui/imgui_widgets.cpp +++ b/src/imgui/imgui_widgets.cpp @@ -3767,16 +3767,18 @@ bool ImGui::BBLSliderScalar(const char *label, ImGuiDataType data_type, void *p_ // Render grab if (grab_bb.Max.x > grab_bb.Min.x) { - float offset = 1.0f; - ImVec2 p1 = ImVec2((grab_bb.Min.x + grab_bb.Max.x) / 2, (grab_bb.Min.y + grab_bb.Max.y) / 2 - offset); - ImVec2 p2 = ImVec2(grab_bb.Min.x, grab_bb.Max.y); - ImVec2 p3 = ImVec2(grab_bb.Max.x, grab_bb.Max.y); + float line_high = 2.0f; + const float offset = 2.0f; + + ImVec2 p1 = ImVec2((grab_bb.Min.x + grab_bb.Max.x) / 2, (grab_bb.Min.y + grab_bb.Max.y) / 2 + offset); + ImVec2 p2 = ImVec2(grab_bb.Min.x, grab_bb.Max.y + offset); + ImVec2 p3 = ImVec2(grab_bb.Max.x, grab_bb.Max.y + offset); window->DrawList->AddTriangleFilled(p1, p2, p3, GetColorU32(ImGuiCol_SliderGrabActive)); ImVec2 start_pos = ImVec2(frame_bb.Min.x, frame_bb.GetCenter().y - offset); - ImVec2 curr_pos = ImVec2(grab_bb.GetCenter().x, frame_bb.GetCenter().y + offset); - ImVec2 end_pos = ImVec2(frame_bb.Max.x, frame_bb.GetCenter().y + offset); - window->DrawList->AddRectFilled(start_pos, curr_pos, GetColorU32(ImGuiCol_SliderGrabActive), style.GrabRounding); + ImVec2 curr_pos = ImVec2(grab_bb.GetCenter().x, frame_bb.GetCenter().y + line_high - offset); + ImVec2 end_pos = ImVec2(frame_bb.Max.x, frame_bb.GetCenter().y + line_high - offset); window->DrawList->AddRectFilled(start_pos, end_pos, GetColorU32(ImGuiCol_SliderGrab), style.GrabRounding); + window->DrawList->AddRectFilled(start_pos, curr_pos, GetColorU32(ImGuiCol_SliderGrabActive), style.GrabRounding); } if (label_size.x > 0.0f) RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 3636f3b436..c8a5b274fe 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -184,10 +184,10 @@ void AppConfig::set_defaults() #ifdef _WIN32 -#ifdef SUPPORT_3D_CONNEXION +//#ifdef SUPPORT_3D_CONNEXION if (get("use_legacy_3DConnexion").empty()) - set_bool("use_legacy_3DConnexion", false); -#endif + set_bool("use_legacy_3DConnexion", true); +//#endif #ifdef SUPPORT_DARK_MODE if (get("dark_color_mode").empty()) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index e8fe125247..fbbaccb051 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2292,30 +2292,25 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) case WXK_CONTROL_M: #endif /* __APPLE__ */ { -//#ifdef _WIN32 -// if (wxGetApp().app_config->get("use_legacy_3DConnexion") == "1") { -//#endif //_WIN32 -//#ifdef __APPLE__ -// // On OSX use Cmd+Shift+M to "Show/Hide 3Dconnexion devices settings dialog" -// if ((evt.GetModifiers() & shiftMask) != 0) { -//#endif // __APPLE__ -// -//#ifdef SUPPORT_3D_CONNEXION -// Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller(); -// controller.show_settings_dialog(!controller.is_settings_dialog_shown()); -// m_dirty = true; -//#endif - -//#ifdef __APPLE__ -// } -// else -// // and Cmd+M to minimize application -// wxGetApp().mainframe->Iconize(); -//#endif // __APPLE__ -//#ifdef _WIN32 -// } -//#endif //_WIN32 - post_event(SimpleEvent(EVT_GLTOOLBAR_CLONE)); +#ifdef _WIN32 + if (wxGetApp().app_config->get("use_legacy_3DConnexion") == "true") { +#endif //_WIN32 +#ifdef __APPLE__ + // On OSX use Cmd+Shift+M to "Show/Hide 3Dconnexion devices settings dialog" + if ((evt.GetModifiers() & shiftMask) != 0) { +#endif // __APPLE__ + Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller(); + controller.show_settings_dialog(!controller.is_settings_dialog_shown()); + m_dirty = true; +#ifdef __APPLE__ + } + else + // and Cmd+M to minimize application + wxGetApp().mainframe->Iconize(); +#endif // __APPLE__ +#ifdef _WIN32 + } +#endif //_WIN32 break; } #ifdef __APPLE__ diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index f3fe8d7704..55c29b9d40 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -543,7 +543,7 @@ bool ImGuiWrapper::bbl_slider_float_style(const std::string &label, float *v, fl ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 0.00f)); ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 0.00f)); - ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImVec4(0.81f, 0.81f, 0.81f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); bool ret = bbl_slider_float(label, v, v_min,v_max, format, power, clamp,tooltip); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 560ba34720..2499ce92de 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1821,7 +1821,7 @@ void MainFrame::init_menubar_as_editor() "menu_remove", nullptr, [this](){return can_delete_all(); }, this); editMenu->AppendSeparator(); // BBS Clone Selected - append_menu_item(editMenu, wxID_ANY, _L("Clone selected") + "\tCtrl+M", + append_menu_item(editMenu, wxID_ANY, _L("Clone selected") /*+ "\tCtrl+M"*/, _L("Clone copies of selections"),[this](wxCommandEvent&) { m_plater->clone_selection(); }, diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp index e5ad5d64f4..3ef0b096bb 100644 --- a/src/slic3r/GUI/Mouse3DController.cpp +++ b/src/slic3r/GUI/Mouse3DController.cpp @@ -448,9 +448,24 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const ImGuiWrapper& imgui = *wxGetApp().imgui(); imgui.set_next_window_pos(0.5f * (float)cnv_size.get_width(), 0.5f * (float)cnv_size.get_height(), ImGuiCond_Always, 0.5f, 0.5f); + float space_size = imgui.get_style_scaling() * 8; + + float speed_size = imgui.calc_text_size(_L("Speed:")).x + imgui.scaled(1.5f); + float dead_size = imgui.calc_text_size(_L("Deadzone:")).x + imgui.scaled(1.5f); + float option_size = imgui.calc_text_size(_L("Options:")).x + imgui.scaled(1.5f); + float max_left_size = std::max(speed_size,std::max(dead_size,option_size)) + space_size; + + float trans_size = imgui.calc_text_size(_L("Translate")).x + space_size; + float zoom_size = imgui.calc_text_size(_L("Zoom")).x + space_size; + float rota_size = imgui.calc_text_size(_L("Rotation")).x + space_size; + float trasn_zoom_size = imgui.calc_text_size(_L("Translation/Zoom")).x + space_size; + float max_slider_txt_size = std::max(std::max(trans_size,zoom_size),std::max(rota_size,trasn_zoom_size)); + + ImGuiWrapper::push_toolbar_style(wxGetApp().plater()->canvas3D()->get_scale()); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 20.0f)); static ImVec2 last_win_size(0.0f, 0.0f); bool shown = true; - if (imgui.begin(_L("3Dconnexion settings"), &shown, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse)) { + if (imgui.begin(_L("3Dconnexion settings"), &shown, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse || ImGuiWindowFlags_NoTitleBar)) { if (shown) { ImVec2 win_size = ImGui::GetWindowSize(); if (last_win_size.x != win_size.x || last_win_size.y != win_size.y) { @@ -460,52 +475,109 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const canvas.request_extra_frame(); } - const ImVec4& color = ImGui::GetStyleColorVec4(ImGuiCol_Separator); - imgui.text_colored(color, _L("Device:")); + const ImVec4& color = ImVec4(0.56f, 0.56f, 0.56f, 1.00f); + /*imgui.text(_L("Device:")); ImGui::SameLine(); - imgui.text(m_device_str); - - ImGui::Separator(); - imgui.text_colored(color, _L("Speed:")); + imgui.text(m_device_str);*/ + ImGui::AlignTextToFramePadding(); + imgui.text_colored(color,_L("Speed:")); + ImGui::SameLine(max_left_size + max_slider_txt_size - trans_size); + imgui.text(_L("Translate")); + ImGui::SameLine(max_left_size + max_slider_txt_size); + ImGui::PushItemWidth(imgui.scaled(6.0f)); float translation_scale = float(params_copy.translation.scale) / float(Params::DefaultTranslationScale); - if (imgui.slider_float(_L("Translation"), &translation_scale, float(Params::MinTranslationScale), float(Params::MaxTranslationScale), "%.1f")) { + bool b_translation = imgui.bbl_slider_float_style("##Translate", &translation_scale, float(Params::MinTranslationScale), float(Params::MaxTranslationScale), "%.1f"); + ImGui::SameLine(); + ImGui::PushItemWidth(imgui.scaled(3.0f)); + bool b_translation_dragfloat = ImGui::BBLDragFloat("##Translate_input", &translation_scale, float(Params::MinTranslationScale), float(Params::MaxTranslationScale),0.0, "%.1f"); + if (b_translation || b_translation_dragfloat) { params_copy.translation.scale = Params::DefaultTranslationScale * double(translation_scale); params_changed = true; } + ImGui::SameLine(); + ImGui::Dummy({space_size, 0.0}); + ImGui::Dummy({0.0, 0.0}); + ImGui::SameLine(max_left_size + max_slider_txt_size - rota_size); + ImGui::AlignTextToFramePadding(); + imgui.text(_L("Rotation")); + ImGui::SameLine(max_left_size + max_slider_txt_size); + ImGui::PushItemWidth(imgui.scaled(6.0f)); float rotation_scale = params_copy.rotation.scale / Params::DefaultRotationScale; - if (imgui.slider_float(_L("Rotation") + "##1", &rotation_scale, 0.1f, 10.0f, "%.1f")) { + bool b_rotation1 = imgui.bbl_slider_float_style("##Rotation1", &rotation_scale, 0.1f, 10.0f, "%.1f"); + ImGui::SameLine(); + ImGui::PushItemWidth(imgui.scaled(3.0f)); + bool b_rotation1_dragfloat = ImGui::BBLDragFloat("##Rotation1_input", &rotation_scale, 0.1f, 10.0f, 0.0, "%.1f"); + if (b_rotation1 || b_rotation1_dragfloat) { params_copy.rotation.scale = Params::DefaultRotationScale * rotation_scale; params_changed = true; } + ImGui::SameLine(); + ImGui::Dummy({space_size, 0.0}); + ImGui::Dummy({0.0, 0.0}); + ImGui::SameLine(max_left_size + max_slider_txt_size - zoom_size); + ImGui::AlignTextToFramePadding(); + imgui.text(_L("Zoom")); + ImGui::SameLine(max_left_size + max_slider_txt_size); + ImGui::PushItemWidth(imgui.scaled(6.0f)); float zoom_scale = params_copy.zoom.scale / Params::DefaultZoomScale; - if (imgui.slider_float(_L("Zoom"), &zoom_scale, 0.1f, 10.0f, "%.1f")) { + bool b_zoom = imgui.bbl_slider_float_style("##Zoom", &zoom_scale, 0.1f, 10.0f, "%.1f"); + ImGui::SameLine(); + ImGui::PushItemWidth(imgui.scaled(3.0f)); + bool b_zoom_dragfloat = ImGui::BBLDragFloat("##Zoom_input", &zoom_scale, 0.1f, 10.0f, 0.0, "%.1f"); + if (b_zoom || b_zoom_dragfloat) { params_copy.zoom.scale = Params::DefaultZoomScale * zoom_scale; params_changed = true; } ImGui::Separator(); - imgui.text_colored(color, _L("Deadzone:")); + ImGui::AlignTextToFramePadding(); + imgui.text_colored(color,_L("Deadzone:")); + ImGui::SameLine(max_left_size + max_slider_txt_size - trasn_zoom_size); + imgui.text(_L("Translation/Zoom")); + ImGui::SameLine(max_left_size + max_slider_txt_size); - float translation_deadzone = (float)params_copy.translation.deadzone; - if (imgui.slider_float(_L("Translation") + "/" + _L("Zoom"), &translation_deadzone, 0.0f, (float)Params::MaxTranslationDeadzone, "%.2f")) { - params_copy.translation.deadzone = (double)translation_deadzone; - params_changed = true; + ImGui::PushItemWidth(imgui.scaled(6.0f)); + float translation_deadzone = (float) params_copy.translation.deadzone; + bool b_tran_zoom = imgui.bbl_slider_float_style("##Translation/Zoom", &translation_deadzone, 0.0f, (float) Params::MaxTranslationDeadzone, "%.2f"); + ImGui::SameLine(); + ImGui::PushItemWidth(imgui.scaled(3.0f)); + bool b_tran_zoom_dragfloat = ImGui::BBLDragFloat("##Translation/Zoom_input", &translation_deadzone, 0.0f, (float) Params::MaxTranslationDeadzone, 0.0, "%.1f"); + if (b_tran_zoom || b_tran_zoom_dragfloat) { + params_copy.translation.deadzone = (double) translation_deadzone; + params_changed = true; } + ImGui::SameLine(); + ImGui::Dummy({space_size, 0.0}); + ImGui::Dummy({0.0, 0.0}); + ImGui::SameLine(max_left_size + max_slider_txt_size - rota_size); + ImGui::AlignTextToFramePadding(); + imgui.text(_L("Rotation")); + ImGui::SameLine(max_left_size + max_slider_txt_size); + ImGui::PushItemWidth(imgui.scaled(6.0f)); float rotation_deadzone = params_copy.rotation.deadzone; - if (imgui.slider_float(_L("Rotation") + "##2", &rotation_deadzone, 0.0f, Params::MaxRotationDeadzone, "%.2f")) { - params_copy.rotation.deadzone = rotation_deadzone; - params_changed = true; + bool b_rotation2 = imgui.bbl_slider_float_style("##Rotation2", &rotation_deadzone, 0.0f, Params::MaxRotationDeadzone, "%.2f"); + ImGui::SameLine(); + ImGui::PushItemWidth(imgui.scaled(3.0f)); + bool b_rotation2_dragfloat = ImGui::BBLDragFloat("##Rotation2_input", &rotation_deadzone, 0.0f, Params::MaxRotationDeadzone, 0.0, "%.1f"); + if (b_rotation2 || b_rotation2_dragfloat) { + params_copy.rotation.deadzone = rotation_deadzone; + params_changed = true; } + ImGui::SameLine(); + ImGui::Dummy({space_size, 0.0}); + ImGui::PopItemWidth(); ImGui::Separator(); - imgui.text_colored(color, _L("Options:")); + ImGui::AlignTextToFramePadding(); + imgui.text_colored(color,_L("Options:")); + ImGui::SameLine(max_left_size + max_slider_txt_size - imgui.get_slider_icon_size().x + + space_size); bool swap_yz = params_copy.swap_yz; - if (imgui.checkbox(_L("Swap Y/Z axes"), swap_yz)) { + if (imgui.bbl_checkbox(_L("Swap Y/Z axes"), swap_yz)) { params_copy.swap_yz = swap_yz; params_changed = true; } @@ -540,6 +612,9 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT ImGui::Separator(); + float window_width = ImGui::GetWindowWidth(); + ImGui::Dummy({0.0, 0.0}); + ImGui::SameLine((window_width - imgui.calc_text_size(_L("Close")).x)/2); if (imgui.button(_L("Close"))) { // the user clicked on the [Close] button m_settings_dialog_closed_by_user = true; @@ -554,7 +629,8 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const } imgui.end(); - + ImGui::PopStyleVar(1); + ImGuiWrapper::pop_toolbar_style(); if (params_changed) { // Synchronize front end parameters to back end. std::scoped_lock lock(m_params_ui_mutex);