diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 3a87439c2..ca1fad284 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -46,4 +46,7 @@ // Enable adaptive layer height profile #define ENABLE_ADAPTIVE_LAYER_HEIGHT_PROFILE (1 && ENABLE_2_2_0_ALPHA1) +// Enable grayed variant for gizmos icons in non activable state +#define ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE (1 && ENABLE_2_2_0_ALPHA1) + #endif // _technologies_h_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp index 862ffe41a..fb4149a9f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp @@ -48,6 +48,13 @@ std::string GLGizmoMove3D::on_get_name() const return (_(L("Move")) + " [M]").ToUTF8().data(); } +#if ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE +bool GLGizmoMove3D::on_is_activable() const +{ + return !m_parent.get_selection().is_empty(); +} +#endif // ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE + void GLGizmoMove3D::on_start_dragging() { if (m_hover_id != -1) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp index 21b1d397b..3ffaa14be 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp @@ -33,6 +33,9 @@ public: protected: virtual bool on_init(); virtual std::string on_get_name() const; +#if ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE + virtual bool on_is_activable() const; +#endif // ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE virtual void on_start_dragging(); virtual void on_stop_dragging(); virtual void on_update(const UpdateData& data); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp index 9a2c72633..aa5530e76 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp @@ -449,6 +449,13 @@ std::string GLGizmoRotate3D::on_get_name() const return (_(L("Rotate")) + " [R]").ToUTF8().data(); } +#if ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE +bool GLGizmoRotate3D::on_is_activable() const +{ + return !m_parent.get_selection().is_empty(); +} +#endif // ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE + void GLGizmoRotate3D::on_start_dragging() { if ((0 <= m_hover_id) && (m_hover_id < 3)) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp index c856e5465..c80e48b02 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp @@ -104,6 +104,9 @@ protected: if (id < 3) m_gizmos[id].disable_grabber(0); } +#if ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE + virtual bool on_is_activable() const; +#endif // ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE virtual void on_start_dragging(); virtual void on_stop_dragging(); virtual void on_update(const UpdateData& data) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp index a685fb774..0d16b6fa8 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp @@ -49,7 +49,12 @@ std::string GLGizmoScale3D::on_get_name() const bool GLGizmoScale3D::on_is_activable() const { +#if ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE + const Selection& selection = m_parent.get_selection(); + return !selection.is_empty() && !selection.is_wipe_tower(); +#else return !m_parent.get_selection().is_wipe_tower(); +#endif // ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE } void GLGizmoScale3D::on_start_dragging() diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 0ac57da9f..473a48865 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -885,7 +885,11 @@ void GLGizmosManager::do_render_overlay() const GLGizmoBase* gizmo = m_gizmos[idx].get(); unsigned int sprite_id = gizmo->get_sprite_id(); +#if ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE + int icon_idx = (m_current == idx) ? 2 : ((m_hover == idx) ? 1 : (gizmo->is_activable()? 0 : 3)); +#else int icon_idx = m_current == idx ? 2 : (m_hover == idx ? 1 : 0); +#endif // ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE float u_icon_size = m_overlay_icons_size * m_overlay_scale * inv_tex_width; float v_icon_size = m_overlay_icons_size * m_overlay_scale * inv_tex_height; @@ -951,9 +955,12 @@ bool GLGizmosManager::generate_icons_texture() const } std::vector> states; - states.push_back(std::make_pair(1, false)); - states.push_back(std::make_pair(0, false)); - states.push_back(std::make_pair(0, true)); + states.push_back(std::make_pair(1, false)); // Activable + states.push_back(std::make_pair(0, false)); // Hovered + states.push_back(std::make_pair(0, true)); // Selected +#if ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE + states.push_back(std::make_pair(2, false)); // Disabled +#endif // ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE unsigned int sprite_size_px = (unsigned int)(m_overlay_icons_size * m_overlay_scale); // // force even size