From aa9994fa352b3cb319febe65d8399c1a1e1000fd Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 22 Feb 2019 10:01:34 +0100
Subject: [PATCH 01/11] Gizmos overlay using a single png texture

---
 resources/icons/gizmos.png     | Bin 0 -> 19859 bytes
 src/libslic3r/Technologies.hpp |  10 +
 src/slic3r/GUI/GLCanvas3D.cpp  | 330 ++++++++++++++++++++++++++-------
 src/slic3r/GUI/GLCanvas3D.hpp  |   5 +
 src/slic3r/GUI/GLGizmo.cpp     | 122 +++++++++++-
 src/slic3r/GUI/GLGizmo.hpp     |  74 +++++++-
 src/slic3r/GUI/GLToolbar.cpp   |  61 +++++-
 src/slic3r/GUI/GLToolbar.hpp   |  22 +++
 src/slic3r/GUI/Plater.cpp      |   6 +
 9 files changed, 562 insertions(+), 68 deletions(-)
 create mode 100644 resources/icons/gizmos.png

diff --git a/resources/icons/gizmos.png b/resources/icons/gizmos.png
new file mode 100644
index 0000000000000000000000000000000000000000..448e826b88957e45c9733632d69557aac2d746f6
GIT binary patch
literal 19859
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

literal 0
HcmV?d00001

diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 974037516..043dc41b2 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -63,4 +63,14 @@
 // Toolbar items hidden/shown in dependence of the user mode
 #define ENABLE_MODE_AWARE_TOOLBAR_ITEMS (1 && ENABLE_1_42_0_ALPHA5)
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+//====================
+// 1.42.0.alpha7 techs
+//====================
+#define ENABLE_1_42_0_ALPHA7 1
+
+// Toolbars, Gizmos and other GUI icons imported from svg files
+#define ENABLE_SVG_ICONS (1 && ENABLE_1_42_0_ALPHA7)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
 #endif // _technologies_h_
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index e68f3673b..49399fa7a 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -3019,72 +3019,20 @@ GLCanvas3D::Gizmos::~Gizmos()
 
 bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
 {
-    GLGizmoBase* gizmo = new GLGizmoMove3D(parent);
-    if (gizmo == nullptr)
-        return false;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    m_icons_texture.metadata.filename = "gizmos.png";
+    m_icons_texture.metadata.icon_size = 64;
 
-    if (!gizmo->init())
-        return false;
-
-    m_gizmos.insert(GizmosMap::value_type(Move, gizmo));
-
-    gizmo = new GLGizmoScale3D(parent);
-    if (gizmo == nullptr)
-        return false;
-
-    if (!gizmo->init())
-        return false;
-
-    m_gizmos.insert(GizmosMap::value_type(Scale, gizmo));
-
-    gizmo = new GLGizmoRotate3D(parent);
-    if (gizmo == nullptr)
+    if (!m_icons_texture.metadata.filename.empty())
     {
-        _reset();
-        return false;
+        if (!m_icons_texture.texture.load_from_file(resources_dir() + "/icons/" + m_icons_texture.metadata.filename, false))
+        {
+            _reset();
+            return false;
+        }
     }
 
-    if (!gizmo->init())
-    {
-        _reset();
-        return false;
-    }
-
-    m_gizmos.insert(GizmosMap::value_type(Rotate, gizmo));
-
-    gizmo = new GLGizmoFlatten(parent);
-    if (gizmo == nullptr)
-        return false;
-
-    if (!gizmo->init()) {
-        _reset();
-        return false;
-    }
-
-    m_gizmos.insert(GizmosMap::value_type(Flatten, gizmo));
-
-    gizmo = new GLGizmoCut(parent);
-    if (gizmo == nullptr)
-        return false;
-
-    if (!gizmo->init()) {
-        _reset();
-        return false;
-    }
-
-    m_gizmos.insert(GizmosMap::value_type(Cut, gizmo));
-
-    gizmo = new GLGizmoSlaSupports(parent);
-    if (gizmo == nullptr)
-        return false;
-
-    if (!gizmo->init()) {
-        _reset();
-        return false;
-    }
-
-    m_gizmos.insert(GizmosMap::value_type(SlaSupports, gizmo));
-
     m_background_texture.metadata.filename = "toolbar_background.png";
     m_background_texture.metadata.left = 16;
     m_background_texture.metadata.top = 16;
@@ -3100,6 +3048,139 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
         }
     }
 
+    GLGizmoBase* gizmo = new GLGizmoMove3D(parent, 0);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    GLGizmoBase* gizmo = new GLGizmoMove3D(parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    if (gizmo == nullptr)
+        return false;
+
+    if (!gizmo->init())
+        return false;
+
+    m_gizmos.insert(GizmosMap::value_type(Move, gizmo));
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    gizmo = new GLGizmoScale3D(parent, 1);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    gizmo = new GLGizmoScale3D(parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    if (gizmo == nullptr)
+        return false;
+
+    if (!gizmo->init())
+        return false;
+
+    m_gizmos.insert(GizmosMap::value_type(Scale, gizmo));
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    gizmo = new GLGizmoRotate3D(parent, 2);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    gizmo = new GLGizmoRotate3D(parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    if (gizmo == nullptr)
+    {
+        _reset();
+        return false;
+    }
+
+    if (!gizmo->init())
+    {
+        _reset();
+        return false;
+    }
+
+    m_gizmos.insert(GizmosMap::value_type(Rotate, gizmo));
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    gizmo = new GLGizmoFlatten(parent, 3);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    gizmo = new GLGizmoFlatten(parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    if (gizmo == nullptr)
+        return false;
+
+    if (!gizmo->init()) {
+        _reset();
+        return false;
+    }
+
+    m_gizmos.insert(GizmosMap::value_type(Flatten, gizmo));
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    gizmo = new GLGizmoCut(parent, 4);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    gizmo = new GLGizmoCut(parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    if (gizmo == nullptr)
+        return false;
+
+    if (!gizmo->init()) {
+        _reset();
+        return false;
+    }
+
+    m_gizmos.insert(GizmosMap::value_type(Cut, gizmo));
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    gizmo = new GLGizmoSlaSupports(parent, 5);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    gizmo = new GLGizmoSlaSupports(parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    if (gizmo == nullptr)
+        return false;
+
+    if (!gizmo->init()) {
+        _reset();
+        return false;
+    }
+
+    m_gizmos.insert(GizmosMap::value_type(SlaSupports, gizmo));
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    m_background_texture.metadata.filename = "toolbar_background.png";
+    m_background_texture.metadata.left = 16;
+    m_background_texture.metadata.top = 16;
+    m_background_texture.metadata.right = 16;
+    m_background_texture.metadata.bottom = 16;
+
+    if (!m_background_texture.metadata.filename.empty())
+    {
+        if (!m_background_texture.texture.load_from_file(resources_dir() + "/icons/" + m_background_texture.metadata.filename, false))
+        {
+            _reset();
+            return false;
+        }
+    }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     return true;
 }
 
@@ -3130,21 +3211,44 @@ std::string GLCanvas3D::Gizmos::update_hover_state(const GLCanvas3D& canvas, con
     float cnv_h = (float)canvas.get_canvas_size().get_height();
     float height = _get_total_overlay_height();
     float top_y = 0.5f * (cnv_h - height) + m_overlay_border;
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale;
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     for (GizmosMap::iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
         if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+        bool inside = (m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + scaled_icons_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + scaled_icons_size);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         float icon_size = (float)it->second->get_textures_size() * m_overlay_icons_scale;
 
         bool inside = (m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + icon_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + icon_size);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         if (inside)
             name = it->second->get_name();
 
         if (it->second->is_activable(selection) && (it->second->get_state() != GLGizmoBase::On))
             it->second->set_state(inside ? GLGizmoBase::Hover : GLGizmoBase::Off);
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+        top_y += (scaled_icons_size + m_overlay_gap_y);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         top_y += (icon_size + m_overlay_gap_y);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 
     return name;
@@ -3159,14 +3263,28 @@ void GLCanvas3D::Gizmos::update_on_off_state(const GLCanvas3D& canvas, const Vec
     float height = _get_total_overlay_height();
     float top_y = 0.5f * (cnv_h - height) + m_overlay_border;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale;
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     for (GizmosMap::iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
         if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+        bool inside = (m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + scaled_icons_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + scaled_icons_size);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         float icon_size = (float)it->second->get_textures_size() * m_overlay_icons_scale;
 
         bool inside = (m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + icon_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + icon_size);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         if (it->second->is_activable(selection) && inside)
         {
             if ((it->second->get_state() == GLGizmoBase::On))
@@ -3183,7 +3301,15 @@ void GLCanvas3D::Gizmos::update_on_off_state(const GLCanvas3D& canvas, const Vec
         else
             it->second->set_state(GLGizmoBase::Off);
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+        top_y += (scaled_icons_size + m_overlay_gap_y);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         top_y += (icon_size + m_overlay_gap_y);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 
     GizmosMap::iterator it = m_gizmos.find(m_current);
@@ -3256,17 +3382,35 @@ bool GLCanvas3D::Gizmos::overlay_contains_mouse(const GLCanvas3D& canvas, const
     float cnv_h = (float)canvas.get_canvas_size().get_height();
     float height = _get_total_overlay_height();
     float top_y = 0.5f * (cnv_h - height) + m_overlay_border;
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale;
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     for (GizmosMap::const_iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
         if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+        if ((m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + scaled_icons_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + scaled_icons_size))
+            return true;
+
+        top_y += (scaled_icons_size + m_overlay_gap_y);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         float icon_size = (float)it->second->get_textures_size() * m_overlay_icons_scale;
 
         if ((m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + icon_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + icon_size))
             return true;
 
         top_y += (icon_size + m_overlay_gap_y);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 
     return false;
@@ -3610,11 +3754,40 @@ void GLCanvas3D::Gizmos::_render_overlay(const GLCanvas3D& canvas, const GLCanva
     top_x += m_overlay_border * inv_zoom;
     top_y -= m_overlay_border * inv_zoom;
     float scaled_gap_y = m_overlay_gap_y * inv_zoom;
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale * inv_zoom;
+    unsigned int icons_texture_id = m_icons_texture.texture.get_id();
+    unsigned int texture_size = m_icons_texture.texture.get_width();
+    float inv_texture_size = (texture_size != 0) ? 1.0f / (float)texture_size : 0.0f;
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     for (GizmosMap::const_iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
         if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+        unsigned int sprite_id = it->second->get_sprite_id();
+        GLGizmoBase::EState state = it->second->get_state();
+
+        float uv_icon_size = (float)m_icons_texture.metadata.icon_size * inv_texture_size;
+        float top = sprite_id * uv_icon_size;
+        float left = state * uv_icon_size;
+        float bottom = top + uv_icon_size;
+        float right = left + uv_icon_size;
+
+        GLTexture::render_sub_texture(icons_texture_id, top_x, top_x + scaled_icons_size, top_y - scaled_icons_size, top_y, { { left, bottom }, { right, bottom }, { right, top }, { left, top } });
+#if ENABLE_IMGUI
+        if (it->second->get_state() == GLGizmoBase::On)
+            it->second->render_input_window(2.0f * m_overlay_border + scaled_icons_size * zoom, 0.5f * cnv_h - top_y * zoom, selection);
+#endif // ENABLE_IMGUI
+        top_y -= (scaled_icons_size + scaled_gap_y);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         float icon_size = (float)it->second->get_textures_size() * m_overlay_icons_scale * inv_zoom;
         GLTexture::render_texture(it->second->get_texture_id(), top_x, top_x + icon_size, top_y - icon_size, top_y);
 #if ENABLE_IMGUI
@@ -3622,6 +3795,9 @@ void GLCanvas3D::Gizmos::_render_overlay(const GLCanvas3D& canvas, const GLCanva
             it->second->render_input_window(2.0f * m_overlay_border + icon_size * zoom, 0.5f * cnv_h - top_y * zoom, selection);
 #endif // ENABLE_IMGUI
         top_y -= (icon_size + scaled_gap_y);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 }
 
@@ -3636,12 +3812,26 @@ float GLCanvas3D::Gizmos::_get_total_overlay_height() const
 {
     float height = 2.0f * m_overlay_border;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale;
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     for (GizmosMap::const_iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
         if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+        height += (scaled_icons_size + m_overlay_gap_y);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         height += (float)it->second->get_textures_size() * m_overlay_icons_scale + m_overlay_gap_y;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 
     return height - m_overlay_gap_y;
@@ -3649,6 +3839,11 @@ float GLCanvas3D::Gizmos::_get_total_overlay_height() const
 
 float GLCanvas3D::Gizmos::_get_total_overlay_width() const
 {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    float max_icon_width = std::max(max_icon_width, (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     float max_icon_width = 0.0f;
     for (GizmosMap::const_iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
@@ -3657,6 +3852,9 @@ float GLCanvas3D::Gizmos::_get_total_overlay_width() const
 
         max_icon_width = std::max(max_icon_width, (float)it->second->get_textures_size() * m_overlay_icons_scale);
     }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     return max_icon_width + 2.0f * m_overlay_border;
 }
@@ -6194,9 +6392,17 @@ bool GLCanvas3D::_init_toolbar()
 
     ItemsIconsTexture::Metadata icons_data;
     icons_data.filename = "toolbar.png";
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    icons_data.icon_size = 37;
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     icons_data.icon_size = 36;
     icons_data.icon_border_size = 1;
     icons_data.icon_gap_size = 1;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 //    icons_data.filename = "toolbar141.png";
 //    icons_data.icon_size = 52;
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 3d44aa13f..438b64120 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -749,6 +749,11 @@ private:
         bool m_enabled;
         typedef std::map<EType, GLGizmoBase*> GizmosMap;
         GizmosMap m_gizmos;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+        ItemsIconsTexture m_icons_texture;
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         BackgroundTexture m_background_texture;
         EType m_current;
 
diff --git a/src/slic3r/GUI/GLGizmo.cpp b/src/slic3r/GUI/GLGizmo.cpp
index 086dbfdb1..19b91e3c6 100644
--- a/src/slic3r/GUI/GLGizmo.cpp
+++ b/src/slic3r/GUI/GLGizmo.cpp
@@ -157,11 +157,24 @@ void GLGizmoBase::Grabber::render_face(float half_size) const
     ::glEnd();
 }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, unsigned int sprite_id)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 GLGizmoBase::GLGizmoBase(GLCanvas3D& parent)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     : m_parent(parent)
     , m_group_id(-1)
     , m_state(Off)
     , m_shortcut_key(0)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    , m_sprite_id(sprite_id)
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_hover_id(-1)
     , m_dragging(false)
 #if ENABLE_IMGUI
@@ -304,7 +317,15 @@ const unsigned int GLGizmoRotate::SnapRegionsCount = 8;
 const float GLGizmoRotate::GrabberOffset = 0.15f; // in percent of radius
 
 GLGizmoRotate::GLGizmoRotate(GLCanvas3D& parent, GLGizmoRotate::Axis axis)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    : GLGizmoBase(parent, -1)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     : GLGizmoBase(parent)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_axis(axis)
     , m_angle(0.0)
     , m_quadric(nullptr)
@@ -321,7 +342,15 @@ GLGizmoRotate::GLGizmoRotate(GLCanvas3D& parent, GLGizmoRotate::Axis axis)
 }
 
 GLGizmoRotate::GLGizmoRotate(const GLGizmoRotate& other)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    : GLGizmoBase(other.m_parent, other.m_sprite_id)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     : GLGizmoBase(other.m_parent)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_axis(other.m_axis)
     , m_angle(other.m_angle)
     , m_quadric(nullptr)
@@ -693,8 +722,17 @@ Vec3d GLGizmoRotate::mouse_position_in_local_plane(const Linef3& mouse_ray, cons
     return transform(mouse_ray, m).intersect_plane(0.0);
 }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+GLGizmoRotate3D::GLGizmoRotate3D(GLCanvas3D& parent, unsigned int sprite_id)
+    : GLGizmoBase(parent, sprite_id)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 GLGizmoRotate3D::GLGizmoRotate3D(GLCanvas3D& parent)
     : GLGizmoBase(parent)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     m_gizmos.emplace_back(parent, GLGizmoRotate::X);
     m_gizmos.emplace_back(parent, GLGizmoRotate::Y);
@@ -719,6 +757,9 @@ bool GLGizmoRotate3D::on_init()
         m_gizmos[i].set_highlight_color(AXES_COLOR[i]);
     }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     std::string path = resources_dir() + "/icons/overlay/";
 
     if (!m_textures[Off].load_from_file(path + "rotate_off.png", false))
@@ -729,6 +770,9 @@ bool GLGizmoRotate3D::on_init()
 
     if (!m_textures[On].load_from_file(path + "rotate_on.png", false))
         return false;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     m_shortcut_key = WXK_CONTROL_R;
 
@@ -784,8 +828,17 @@ void GLGizmoRotate3D::on_render_input_window(float x, float y, const GLCanvas3D:
 
 const float GLGizmoScale3D::Offset = 5.0f;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent, unsigned int sprite_id)
+    : GLGizmoBase(parent, sprite_id)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent)
     : GLGizmoBase(parent)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_scale(Vec3d::Ones())
     , m_snap_step(0.05)
     , m_starting_scale(Vec3d::Ones())
@@ -794,6 +847,9 @@ GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent)
 
 bool GLGizmoScale3D::on_init()
 {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     std::string path = resources_dir() + "/icons/overlay/";
 
     if (!m_textures[Off].load_from_file(path + "scale_off.png", false))
@@ -804,6 +860,9 @@ bool GLGizmoScale3D::on_init()
 
     if (!m_textures[On].load_from_file(path + "scale_on.png", false))
         return false;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     for (int i = 0; i < 10; ++i)
     {
@@ -1141,8 +1200,17 @@ double GLGizmoScale3D::calc_ratio(const UpdateData& data) const
 
 const double GLGizmoMove3D::Offset = 10.0;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+GLGizmoMove3D::GLGizmoMove3D(GLCanvas3D& parent, unsigned int sprite_id)
+    : GLGizmoBase(parent, sprite_id)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 GLGizmoMove3D::GLGizmoMove3D(GLCanvas3D& parent)
     : GLGizmoBase(parent)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_displacement(Vec3d::Zero())
     , m_snap_step(1.0)
     , m_starting_drag_position(Vec3d::Zero())
@@ -1163,6 +1231,9 @@ GLGizmoMove3D::~GLGizmoMove3D()
 
 bool GLGizmoMove3D::on_init()
 {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     std::string path = resources_dir() + "/icons/overlay/";
 
     if (!m_textures[Off].load_from_file(path + "move_off.png", false))
@@ -1173,6 +1244,9 @@ bool GLGizmoMove3D::on_init()
 
     if (!m_textures[On].load_from_file(path + "move_on.png", false))
         return false;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     for (int i = 0; i < 3; ++i)
     {
@@ -1389,8 +1463,17 @@ void GLGizmoMove3D::render_grabber_extension(Axis axis, const BoundingBoxf3& box
         ::glDisable(GL_LIGHTING);
 }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent, unsigned int sprite_id)
+    : GLGizmoBase(parent, sprite_id)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent)
     : GLGizmoBase(parent)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_normal(Vec3d::Zero())
     , m_starting_center(Vec3d::Zero())
 {
@@ -1398,6 +1481,9 @@ GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent)
 
 bool GLGizmoFlatten::on_init()
 {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     std::string path = resources_dir() + "/icons/overlay/";
 
     if (!m_textures[Off].load_from_file(path + "layflat_off.png", false))
@@ -1408,6 +1494,9 @@ bool GLGizmoFlatten::on_init()
 
     if (!m_textures[On].load_from_file(path + "layflat_on.png", false))
         return false;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     m_shortcut_key = WXK_CONTROL_F;
 
@@ -1740,8 +1829,18 @@ Vec3d GLGizmoFlatten::get_flattening_normal() const
     return out;
 }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, unsigned int sprite_id)
+    : GLGizmoBase(parent, sprite_id)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent)
-    : GLGizmoBase(parent), m_starting_center(Vec3d::Zero()), m_quadric(nullptr)
+    : GLGizmoBase(parent)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    , m_starting_center(Vec3d::Zero()), m_quadric(nullptr)
 {
     m_quadric = ::gluNewQuadric();
     if (m_quadric != nullptr)
@@ -1758,6 +1857,9 @@ GLGizmoSlaSupports::~GLGizmoSlaSupports()
 
 bool GLGizmoSlaSupports::on_init()
 {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     std::string path = resources_dir() + "/icons/overlay/";
 
     if (!m_textures[Off].load_from_file(path + "sla_support_points_off.png", false))
@@ -1768,6 +1870,9 @@ bool GLGizmoSlaSupports::on_init()
 
     if (!m_textures[On].load_from_file(path + "sla_support_points_on.png", false))
         return false;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     m_shortcut_key = WXK_CONTROL_L;
 
@@ -2559,8 +2664,17 @@ const double GLGizmoCut::Offset = 10.0;
 const double GLGizmoCut::Margin = 20.0;
 const std::array<float, 3> GLGizmoCut::GrabberColor = { 1.0, 0.5, 0.0 };
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+GLGizmoCut::GLGizmoCut(GLCanvas3D& parent, unsigned int sprite_id)
+    : GLGizmoBase(parent, sprite_id)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 GLGizmoCut::GLGizmoCut(GLCanvas3D& parent)
     : GLGizmoBase(parent)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_cut_z(0.0)
     , m_max_z(0.0)
 #if !ENABLE_IMGUI
@@ -2593,6 +2707,9 @@ void GLGizmoCut::create_external_gizmo_widgets(wxWindow *parent)
 
 bool GLGizmoCut::on_init()
 {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     // TODO: icon
 
     std::string path = resources_dir() + "/icons/overlay/";
@@ -2608,6 +2725,9 @@ bool GLGizmoCut::on_init()
     if (!m_textures[On].load_from_file(path + "cut_on.png", false)) {
         return false;
     }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     m_grabbers.emplace_back();
 
diff --git a/src/slic3r/GUI/GLGizmo.hpp b/src/slic3r/GUI/GLGizmo.hpp
index a24384012..fed848ae4 100644
--- a/src/slic3r/GUI/GLGizmo.hpp
+++ b/src/slic3r/GUI/GLGizmo.hpp
@@ -87,8 +87,16 @@ protected:
     int m_group_id;
     EState m_state;
     int m_shortcut_key;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    unsigned int m_sprite_id;
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     // textures are assumed to be square and all with the same size in pixels, no internal check is done
     GLTexture m_textures[Num_States];
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     int m_hover_id;
     bool m_dragging;
     float m_base_color[3];
@@ -100,7 +108,15 @@ protected:
 #endif // ENABLE_IMGUI
 
 public:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    GLGizmoBase(GLCanvas3D& parent, unsigned int sprite_id);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     explicit GLGizmoBase(GLCanvas3D& parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     virtual ~GLGizmoBase() {}
 
     bool init() { return on_init(); }
@@ -119,8 +135,16 @@ public:
     bool is_activable(const GLCanvas3D::Selection& selection) const { return on_is_activable(selection); }
     bool is_selectable() const { return on_is_selectable(); }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    unsigned int get_sprite_id() const { return m_sprite_id; }
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     unsigned int get_texture_id() const { return m_textures[m_state].get_id(); }
     int get_textures_size() const { return m_textures[Off].get_width(); }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     int get_hover_id() const { return m_hover_id; }
     void set_hover_id(int id);
@@ -244,7 +268,15 @@ class GLGizmoRotate3D : public GLGizmoBase
     std::vector<GLGizmoRotate> m_gizmos;
 
 public:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    GLGizmoRotate3D(GLCanvas3D& parent, unsigned int sprite_id);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     explicit GLGizmoRotate3D(GLCanvas3D& parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     Vec3d get_rotation() const { return Vec3d(m_gizmos[X].get_angle(), m_gizmos[Y].get_angle(), m_gizmos[Z].get_angle()); }
     void set_rotation(const Vec3d& rotation) { m_gizmos[X].set_angle(rotation(0)); m_gizmos[Y].set_angle(rotation(1)); m_gizmos[Z].set_angle(rotation(2)); }
@@ -315,7 +347,15 @@ class GLGizmoScale3D : public GLGizmoBase
     BoundingBoxf3 m_starting_box;
 
 public:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    GLGizmoScale3D(GLCanvas3D& parent, unsigned int sprite_id);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     explicit GLGizmoScale3D(GLCanvas3D& parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     double get_snap_step(double step) const { return m_snap_step; }
     void set_snap_step(double step) { m_snap_step = step; }
@@ -362,7 +402,15 @@ class GLGizmoMove3D : public GLGizmoBase
     GLUquadricObj* m_quadric;
 
 public:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    GLGizmoMove3D(GLCanvas3D& parent, unsigned int sprite_id);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     explicit GLGizmoMove3D(GLCanvas3D& parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     virtual ~GLGizmoMove3D();
 
     double get_snap_step(double step) const { return m_snap_step; }
@@ -417,7 +465,15 @@ private:
     bool is_plane_update_necessary() const;
 
 public:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    GLGizmoFlatten(GLCanvas3D& parent, unsigned int sprite_id);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     explicit GLGizmoFlatten(GLCanvas3D& parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     void set_flattening_data(const ModelObject* model_object);
     Vec3d get_flattening_normal() const;
@@ -437,8 +493,6 @@ protected:
     }
 };
 
-
-
 #define SLAGIZMO_IMGUI_MODAL 0
 class GLGizmoSlaSupports : public GLGizmoBase
 {
@@ -466,7 +520,15 @@ private:
     mutable Vec3d m_starting_center;
 
 public:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    GLGizmoSlaSupports(GLCanvas3D& parent, unsigned int sprite_id);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     explicit GLGizmoSlaSupports(GLCanvas3D& parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     virtual ~GLGizmoSlaSupports();
     void set_sla_support_data(ModelObject* model_object, const GLCanvas3D::Selection& selection);
     bool mouse_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down);
@@ -559,7 +621,15 @@ class GLGizmoCut : public GLGizmoBase
 #endif // not ENABLE_IMGUI
 
 public:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    GLGizmoCut(GLCanvas3D& parent, unsigned int sprite_id);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     explicit GLGizmoCut(GLCanvas3D& parent);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 #if !ENABLE_IMGUI
     virtual void create_external_gizmo_widgets(wxWindow *parent);
diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp
index 8d04868f8..63a8450a9 100644
--- a/src/slic3r/GUI/GLToolbar.cpp
+++ b/src/slic3r/GUI/GLToolbar.cpp
@@ -53,25 +53,60 @@ void GLToolbarItem::do_action(wxEvtHandler *target)
     wxPostEvent(target, SimpleEvent(m_data.action_event));
 }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+void GLToolbarItem::render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int icon_size) const
+{
+    GLTexture::render_sub_texture(tex_id, left, right, bottom, top, get_uvs(texture_size, icon_size));
+}
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 void GLToolbarItem::render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const
 {
     GLTexture::render_sub_texture(tex_id, left, right, bottom, top, get_uvs(texture_size, border_size, icon_size, gap_size));
 }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+GLTexture::Quad_UVs GLToolbarItem::get_uvs(unsigned int texture_size, unsigned int icon_size) const
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 GLTexture::Quad_UVs GLToolbarItem::get_uvs(unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     GLTexture::Quad_UVs uvs;
 
     float inv_texture_size = (texture_size != 0) ? 1.0f / (float)texture_size : 0.0f;
 
     float scaled_icon_size = (float)icon_size * inv_texture_size;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    float left = (float)m_state * scaled_icon_size;
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     float scaled_border_size = (float)border_size * inv_texture_size;
     float scaled_gap_size = (float)gap_size * inv_texture_size;
     float stride = scaled_icon_size + scaled_gap_size;
 
     float left = scaled_border_size + (float)m_state * stride;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     float right = left + scaled_icon_size;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    float top = (float)m_data.sprite_id * scaled_icon_size;
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     float top = scaled_border_size + (float)m_data.sprite_id * stride;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     float bottom = top + scaled_icon_size;
 
     uvs.left_top = { left, top };
@@ -85,8 +120,14 @@ GLTexture::Quad_UVs GLToolbarItem::get_uvs(unsigned int texture_size, unsigned i
 ItemsIconsTexture::Metadata::Metadata()
     : filename("")
     , icon_size(0)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , icon_border_size(0)
     , icon_gap_size(0)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
 }
 
@@ -610,7 +651,6 @@ std::string GLToolbar::update_hover_state_vertical(const Vec2d& mouse_pos, GLCan
     float scaled_separator_size = m_layout.separator_size * factor;
     float scaled_gap_size = m_layout.gap_size * factor;
     float scaled_border = m_layout.border * factor;
-
     float separator_stride = scaled_separator_size + scaled_gap_size;
     float icon_stride = scaled_icons_size + scaled_gap_size;
 
@@ -709,7 +749,6 @@ int GLToolbar::contains_mouse_horizontal(const Vec2d& mouse_pos, const GLCanvas3
     float scaled_separator_size = m_layout.separator_size * factor;
     float scaled_gap_size = m_layout.gap_size * factor;
     float scaled_border = m_layout.border * factor;
-
     float separator_stride = scaled_separator_size + scaled_gap_size;
     float icon_stride = scaled_icons_size + scaled_gap_size;
 
@@ -733,7 +772,7 @@ int GLToolbar::contains_mouse_horizontal(const Vec2d& mouse_pos, const GLCanvas3
         {
             float right = left + scaled_icons_size;
             float bottom = top - scaled_icons_size;
-            
+
             if ((left <= (float)scaled_mouse_pos(0)) && ((float)scaled_mouse_pos(0) <= right) && (bottom <= (float)scaled_mouse_pos(1)) && ((float)scaled_mouse_pos(1) <= top))
                 return id;
             
@@ -919,7 +958,15 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) const
             left += separator_stride;
         else
         {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_size);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_border_size, m_icons_texture.metadata.icon_size, m_icons_texture.metadata.icon_gap_size);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             left += icon_stride;
         }
     }
@@ -1050,7 +1097,15 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) const
             top -= separator_stride;
         else
         {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_size);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_border_size, m_icons_texture.metadata.icon_size, m_icons_texture.metadata.icon_gap_size);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             top -= icon_stride;
         }
     }
diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp
index 951d5e072..a5a912bfc 100644
--- a/src/slic3r/GUI/GLToolbar.hpp
+++ b/src/slic3r/GUI/GLToolbar.hpp
@@ -90,10 +90,26 @@ public:
 #endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     bool is_separator() const { return m_type == Separator; }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    void render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int icon_size) const;
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     void render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 private:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_SVG_ICONS
+    GLTexture::Quad_UVs get_uvs(unsigned int texture_size, unsigned int icon_size) const;
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     GLTexture::Quad_UVs get_uvs(unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 };
 
 // items icon textures are assumed to be square and all with the same size in pixels, no internal check is done
@@ -107,10 +123,16 @@ struct ItemsIconsTexture
         std::string filename;
         // size of the square icons, in pixels
         unsigned int icon_size;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         // size of the border, in pixels
         unsigned int icon_border_size;
         // distance between two adjacent icons (to avoid filtering artifacts), in pixels
         unsigned int icon_gap_size;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
         Metadata();
     };
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 4da9f6652..44b65b2b2 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2564,8 +2564,14 @@ void Plater::priv::init_view_toolbar()
     ItemsIconsTexture::Metadata icons_data;
     icons_data.filename = "view_toolbar.png";
     icons_data.icon_size = 64;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     icons_data.icon_border_size = 0;
     icons_data.icon_gap_size = 0;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // !ENABLE_SVG_ICONS
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     BackgroundTexture::Metadata background_data;
     background_data.filename = "toolbar_background.png";

From 03022ce12497b17e36f44de4006bfb9fc9d17449 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 22 Feb 2019 12:06:56 +0100
Subject: [PATCH 02/11] Code cleanup

---
 src/slic3r/GUI/GLCanvas3D.cpp | 186 --------------------------------
 src/slic3r/GUI/GLCanvas3D.hpp |   4 -
 src/slic3r/GUI/GLGizmo.cpp    | 193 ----------------------------------
 src/slic3r/GUI/GLGizmo.hpp    |  76 +------------
 src/slic3r/GUI/GLToolbar.cpp  |  63 -----------
 src/slic3r/GUI/GLToolbar.hpp  |  26 -----
 src/slic3r/GUI/Plater.cpp     |   8 --
 7 files changed, 1 insertion(+), 555 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index a93491ebd..879d1737a 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2419,8 +2419,6 @@ GLCanvas3D::Gizmos::~Gizmos()
 
 bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
 {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     m_icons_texture.metadata.filename = "gizmos.png";
     m_icons_texture.metadata.icon_size = 64;
 
@@ -2449,12 +2447,6 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
     }
 
     GLGizmoBase* gizmo = new GLGizmoMove3D(parent, 0);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    GLGizmoBase* gizmo = new GLGizmoMove3D(parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     if (gizmo == nullptr)
         return false;
 
@@ -2463,15 +2455,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
 
     m_gizmos.insert(GizmosMap::value_type(Move, gizmo));
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     gizmo = new GLGizmoScale3D(parent, 1);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    gizmo = new GLGizmoScale3D(parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     if (gizmo == nullptr)
         return false;
 
@@ -2480,15 +2464,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
 
     m_gizmos.insert(GizmosMap::value_type(Scale, gizmo));
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     gizmo = new GLGizmoRotate3D(parent, 2);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    gizmo = new GLGizmoRotate3D(parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     if (gizmo == nullptr)
     {
         _reset();
@@ -2503,15 +2479,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
 
     m_gizmos.insert(GizmosMap::value_type(Rotate, gizmo));
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     gizmo = new GLGizmoFlatten(parent, 3);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    gizmo = new GLGizmoFlatten(parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     if (gizmo == nullptr)
         return false;
 
@@ -2522,15 +2490,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
 
     m_gizmos.insert(GizmosMap::value_type(Flatten, gizmo));
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     gizmo = new GLGizmoCut(parent, 4);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    gizmo = new GLGizmoCut(parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     if (gizmo == nullptr)
         return false;
 
@@ -2541,15 +2501,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
 
     m_gizmos.insert(GizmosMap::value_type(Cut, gizmo));
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     gizmo = new GLGizmoSlaSupports(parent, 5);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    gizmo = new GLGizmoSlaSupports(parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     if (gizmo == nullptr)
         return false;
 
@@ -2560,27 +2512,6 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
 
     m_gizmos.insert(GizmosMap::value_type(SlaSupports, gizmo));
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    m_background_texture.metadata.filename = "toolbar_background.png";
-    m_background_texture.metadata.left = 16;
-    m_background_texture.metadata.top = 16;
-    m_background_texture.metadata.right = 16;
-    m_background_texture.metadata.bottom = 16;
-
-    if (!m_background_texture.metadata.filename.empty())
-    {
-        if (!m_background_texture.texture.load_from_file(resources_dir() + "/icons/" + m_background_texture.metadata.filename, false))
-        {
-            _reset();
-            return false;
-        }
-    }
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
     return true;
 }
 
@@ -2612,43 +2543,21 @@ std::string GLCanvas3D::Gizmos::update_hover_state(const GLCanvas3D& canvas, con
     float height = _get_total_overlay_height();
     float top_y = 0.5f * (cnv_h - height) + m_overlay_border;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale;
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     for (GizmosMap::iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
         if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
         bool inside = (m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + scaled_icons_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + scaled_icons_size);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-        float icon_size = (float)it->second->get_textures_size() * m_overlay_icons_scale;
-
-        bool inside = (m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + icon_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + icon_size);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         if (inside)
             name = it->second->get_name();
 
         if (it->second->is_activable(selection) && (it->second->get_state() != GLGizmoBase::On))
             it->second->set_state(inside ? GLGizmoBase::Hover : GLGizmoBase::Off);
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
         top_y += (scaled_icons_size + m_overlay_gap_y);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-        top_y += (icon_size + m_overlay_gap_y);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 
     return name;
@@ -2663,28 +2572,14 @@ void GLCanvas3D::Gizmos::update_on_off_state(const GLCanvas3D& canvas, const Vec
     float height = _get_total_overlay_height();
     float top_y = 0.5f * (cnv_h - height) + m_overlay_border;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale;
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     for (GizmosMap::iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
         if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
         bool inside = (m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + scaled_icons_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + scaled_icons_size);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-        float icon_size = (float)it->second->get_textures_size() * m_overlay_icons_scale;
-
-        bool inside = (m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + icon_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + icon_size);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         if (it->second->is_activable(selection) && inside)
         {
             if ((it->second->get_state() == GLGizmoBase::On))
@@ -2701,15 +2596,7 @@ void GLCanvas3D::Gizmos::update_on_off_state(const GLCanvas3D& canvas, const Vec
         else
             it->second->set_state(GLGizmoBase::Off);
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
         top_y += (scaled_icons_size + m_overlay_gap_y);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-        top_y += (icon_size + m_overlay_gap_y);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 
     GizmosMap::iterator it = m_gizmos.find(m_current);
@@ -2783,34 +2670,17 @@ bool GLCanvas3D::Gizmos::overlay_contains_mouse(const GLCanvas3D& canvas, const
     float height = _get_total_overlay_height();
     float top_y = 0.5f * (cnv_h - height) + m_overlay_border;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale;
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     for (GizmosMap::const_iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
         if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
         if ((m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + scaled_icons_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + scaled_icons_size))
             return true;
 
         top_y += (scaled_icons_size + m_overlay_gap_y);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-        float icon_size = (float)it->second->get_textures_size() * m_overlay_icons_scale;
-
-        if ((m_overlay_border <= (float)mouse_pos(0)) && ((float)mouse_pos(0) <= m_overlay_border + icon_size) && (top_y <= (float)mouse_pos(1)) && ((float)mouse_pos(1) <= top_y + icon_size))
-            return true;
-
-        top_y += (icon_size + m_overlay_gap_y);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 
     return false;
@@ -3155,22 +3025,16 @@ void GLCanvas3D::Gizmos::_render_overlay(const GLCanvas3D& canvas, const GLCanva
     top_y -= m_overlay_border * inv_zoom;
     float scaled_gap_y = m_overlay_gap_y * inv_zoom;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale * inv_zoom;
     unsigned int icons_texture_id = m_icons_texture.texture.get_id();
     unsigned int texture_size = m_icons_texture.texture.get_width();
     float inv_texture_size = (texture_size != 0) ? 1.0f / (float)texture_size : 0.0f;
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     for (GizmosMap::const_iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
         if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
         unsigned int sprite_id = it->second->get_sprite_id();
         GLGizmoBase::EState state = it->second->get_state();
 
@@ -3186,18 +3050,6 @@ void GLCanvas3D::Gizmos::_render_overlay(const GLCanvas3D& canvas, const GLCanva
             it->second->render_input_window(2.0f * m_overlay_border + scaled_icons_size * zoom, 0.5f * cnv_h - top_y * zoom, selection);
 #endif // ENABLE_IMGUI
         top_y -= (scaled_icons_size + scaled_gap_y);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-        float icon_size = (float)it->second->get_textures_size() * m_overlay_icons_scale * inv_zoom;
-        GLTexture::render_texture(it->second->get_texture_id(), top_x, top_x + icon_size, top_y - icon_size, top_y);
-#if ENABLE_IMGUI
-        if (it->second->get_state() == GLGizmoBase::On)
-            it->second->render_input_window(2.0f * m_overlay_border + icon_size * zoom, 0.5f * cnv_h - top_y * zoom, selection);
-#endif // ENABLE_IMGUI
-        top_y -= (icon_size + scaled_gap_y);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 }
 
@@ -3212,26 +3064,14 @@ float GLCanvas3D::Gizmos::_get_total_overlay_height() const
 {
     float height = 2.0f * m_overlay_border;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale;
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     for (GizmosMap::const_iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
         if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
         height += (scaled_icons_size + m_overlay_gap_y);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-        height += (float)it->second->get_textures_size() * m_overlay_icons_scale + m_overlay_gap_y;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 
     return height - m_overlay_gap_y;
@@ -3239,23 +3079,7 @@ float GLCanvas3D::Gizmos::_get_total_overlay_height() const
 
 float GLCanvas3D::Gizmos::_get_total_overlay_width() const
 {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     float max_icon_width = std::max(max_icon_width, (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    float max_icon_width = 0.0f;
-    for (GizmosMap::const_iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
-    {
-        if ((it->second == nullptr) || !it->second->is_selectable())
-            continue;
-
-        max_icon_width = std::max(max_icon_width, (float)it->second->get_textures_size() * m_overlay_icons_scale);
-    }
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
     return max_icon_width + 2.0f * m_overlay_border;
 }
 
@@ -5759,17 +5583,7 @@ bool GLCanvas3D::_init_toolbar()
 
     ItemsIconsTexture::Metadata icons_data;
     icons_data.filename = "toolbar.png";
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     icons_data.icon_size = 37;
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    icons_data.icon_size = 36;
-    icons_data.icon_border_size = 1;
-    icons_data.icon_gap_size = 1;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 //    icons_data.filename = "toolbar141.png";
 //    icons_data.icon_size = 52;
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index a7ed308cd..d322f5e30 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -647,11 +647,7 @@ private:
         bool m_enabled;
         typedef std::map<EType, GLGizmoBase*> GizmosMap;
         GizmosMap m_gizmos;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
         ItemsIconsTexture m_icons_texture;
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         BackgroundTexture m_background_texture;
         EType m_current;
 
diff --git a/src/slic3r/GUI/GLGizmo.cpp b/src/slic3r/GUI/GLGizmo.cpp
index c07523c4f..424ff612b 100644
--- a/src/slic3r/GUI/GLGizmo.cpp
+++ b/src/slic3r/GUI/GLGizmo.cpp
@@ -157,24 +157,12 @@ void GLGizmoBase::Grabber::render_face(float half_size) const
     ::glEnd();
 }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
 GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, unsigned int sprite_id)
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-GLGizmoBase::GLGizmoBase(GLCanvas3D& parent)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     : m_parent(parent)
     , m_group_id(-1)
     , m_state(Off)
     , m_shortcut_key(0)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     , m_sprite_id(sprite_id)
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_hover_id(-1)
     , m_dragging(false)
 #if ENABLE_IMGUI
@@ -317,15 +305,7 @@ const unsigned int GLGizmoRotate::SnapRegionsCount = 8;
 const float GLGizmoRotate::GrabberOffset = 0.15f; // in percent of radius
 
 GLGizmoRotate::GLGizmoRotate(GLCanvas3D& parent, GLGizmoRotate::Axis axis)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     : GLGizmoBase(parent, -1)
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    : GLGizmoBase(parent)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_axis(axis)
     , m_angle(0.0)
     , m_quadric(nullptr)
@@ -342,15 +322,7 @@ GLGizmoRotate::GLGizmoRotate(GLCanvas3D& parent, GLGizmoRotate::Axis axis)
 }
 
 GLGizmoRotate::GLGizmoRotate(const GLGizmoRotate& other)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     : GLGizmoBase(other.m_parent, other.m_sprite_id)
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    : GLGizmoBase(other.m_parent)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_axis(other.m_axis)
     , m_angle(other.m_angle)
     , m_quadric(nullptr)
@@ -722,17 +694,8 @@ Vec3d GLGizmoRotate::mouse_position_in_local_plane(const Linef3& mouse_ray, cons
     return transform(mouse_ray, m).intersect_plane(0.0);
 }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
 GLGizmoRotate3D::GLGizmoRotate3D(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-GLGizmoRotate3D::GLGizmoRotate3D(GLCanvas3D& parent)
-    : GLGizmoBase(parent)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     m_gizmos.emplace_back(parent, GLGizmoRotate::X);
     m_gizmos.emplace_back(parent, GLGizmoRotate::Y);
@@ -757,23 +720,6 @@ bool GLGizmoRotate3D::on_init()
         m_gizmos[i].set_highlight_color(AXES_COLOR[i]);
     }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    std::string path = resources_dir() + "/icons/overlay/";
-
-    if (!m_textures[Off].load_from_file(path + "rotate_off.png", false))
-        return false;
-
-    if (!m_textures[Hover].load_from_file(path + "rotate_hover.png", false))
-        return false;
-
-    if (!m_textures[On].load_from_file(path + "rotate_on.png", false))
-        return false;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
     m_shortcut_key = WXK_CONTROL_R;
 
     return true;
@@ -828,17 +774,8 @@ void GLGizmoRotate3D::on_render_input_window(float x, float y, const GLCanvas3D:
 
 const float GLGizmoScale3D::Offset = 5.0f;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
 GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent)
-    : GLGizmoBase(parent)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_scale(Vec3d::Ones())
     , m_snap_step(0.05)
     , m_starting_scale(Vec3d::Ones())
@@ -847,23 +784,6 @@ GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent)
 
 bool GLGizmoScale3D::on_init()
 {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    std::string path = resources_dir() + "/icons/overlay/";
-
-    if (!m_textures[Off].load_from_file(path + "scale_off.png", false))
-        return false;
-
-    if (!m_textures[Hover].load_from_file(path + "scale_hover.png", false))
-        return false;
-
-    if (!m_textures[On].load_from_file(path + "scale_on.png", false))
-        return false;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
     for (int i = 0; i < 10; ++i)
     {
         m_grabbers.push_back(Grabber());
@@ -1200,17 +1120,8 @@ double GLGizmoScale3D::calc_ratio(const UpdateData& data) const
 
 const double GLGizmoMove3D::Offset = 10.0;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
 GLGizmoMove3D::GLGizmoMove3D(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-GLGizmoMove3D::GLGizmoMove3D(GLCanvas3D& parent)
-    : GLGizmoBase(parent)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_displacement(Vec3d::Zero())
     , m_snap_step(1.0)
     , m_starting_drag_position(Vec3d::Zero())
@@ -1231,23 +1142,6 @@ GLGizmoMove3D::~GLGizmoMove3D()
 
 bool GLGizmoMove3D::on_init()
 {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    std::string path = resources_dir() + "/icons/overlay/";
-
-    if (!m_textures[Off].load_from_file(path + "move_off.png", false))
-        return false;
-
-    if (!m_textures[Hover].load_from_file(path + "move_hover.png", false))
-        return false;
-
-    if (!m_textures[On].load_from_file(path + "move_on.png", false))
-        return false;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
     for (int i = 0; i < 3; ++i)
     {
         m_grabbers.push_back(Grabber());
@@ -1463,17 +1357,8 @@ void GLGizmoMove3D::render_grabber_extension(Axis axis, const BoundingBoxf3& box
         ::glDisable(GL_LIGHTING);
 }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
 GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent)
-    : GLGizmoBase(parent)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_normal(Vec3d::Zero())
     , m_starting_center(Vec3d::Zero())
 {
@@ -1481,25 +1366,7 @@ GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent)
 
 bool GLGizmoFlatten::on_init()
 {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    std::string path = resources_dir() + "/icons/overlay/";
-
-    if (!m_textures[Off].load_from_file(path + "layflat_off.png", false))
-        return false;
-
-    if (!m_textures[Hover].load_from_file(path + "layflat_hover.png", false))
-        return false;
-
-    if (!m_textures[On].load_from_file(path + "layflat_on.png", false))
-        return false;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
     m_shortcut_key = WXK_CONTROL_F;
-
     return true;
 }
 
@@ -1829,17 +1696,8 @@ Vec3d GLGizmoFlatten::get_flattening_normal() const
     return out;
 }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
 GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent)
-    : GLGizmoBase(parent)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_starting_center(Vec3d::Zero()), m_quadric(nullptr)
 {
     m_quadric = ::gluNewQuadric();
@@ -1857,25 +1715,7 @@ GLGizmoSlaSupports::~GLGizmoSlaSupports()
 
 bool GLGizmoSlaSupports::on_init()
 {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    std::string path = resources_dir() + "/icons/overlay/";
-
-    if (!m_textures[Off].load_from_file(path + "sla_support_points_off.png", false))
-        return false;
-
-    if (!m_textures[Hover].load_from_file(path + "sla_support_points_hover.png", false))
-        return false;
-
-    if (!m_textures[On].load_from_file(path + "sla_support_points_on.png", false))
-        return false;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
     m_shortcut_key = WXK_CONTROL_L;
-
     return true;
 }
 
@@ -2666,17 +2506,8 @@ const double GLGizmoCut::Offset = 10.0;
 const double GLGizmoCut::Margin = 20.0;
 const std::array<float, 3> GLGizmoCut::GrabberColor = { 1.0, 0.5, 0.0 };
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
 GLGizmoCut::GLGizmoCut(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-GLGizmoCut::GLGizmoCut(GLCanvas3D& parent)
-    : GLGizmoBase(parent)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     , m_cut_z(0.0)
     , m_max_z(0.0)
 #if !ENABLE_IMGUI
@@ -2709,32 +2540,8 @@ void GLGizmoCut::create_external_gizmo_widgets(wxWindow *parent)
 
 bool GLGizmoCut::on_init()
 {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    // TODO: icon
-
-    std::string path = resources_dir() + "/icons/overlay/";
-
-    if (!m_textures[Off].load_from_file(path + "cut_off.png", false)) {
-        return false;
-    }
-
-    if (!m_textures[Hover].load_from_file(path + "cut_hover.png", false)) {
-        return false;
-    }
-
-    if (!m_textures[On].load_from_file(path + "cut_on.png", false)) {
-        return false;
-    }
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
     m_grabbers.emplace_back();
-
     m_shortcut_key = WXK_CONTROL_C;
-
     return true;
 }
 
diff --git a/src/slic3r/GUI/GLGizmo.hpp b/src/slic3r/GUI/GLGizmo.hpp
index fed848ae4..eed52b2fc 100644
--- a/src/slic3r/GUI/GLGizmo.hpp
+++ b/src/slic3r/GUI/GLGizmo.hpp
@@ -87,16 +87,7 @@ protected:
     int m_group_id;
     EState m_state;
     int m_shortcut_key;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     unsigned int m_sprite_id;
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    // textures are assumed to be square and all with the same size in pixels, no internal check is done
-    GLTexture m_textures[Num_States];
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     int m_hover_id;
     bool m_dragging;
     float m_base_color[3];
@@ -108,15 +99,7 @@ protected:
 #endif // ENABLE_IMGUI
 
 public:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     GLGizmoBase(GLCanvas3D& parent, unsigned int sprite_id);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    explicit GLGizmoBase(GLCanvas3D& parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     virtual ~GLGizmoBase() {}
 
     bool init() { return on_init(); }
@@ -135,16 +118,7 @@ public:
     bool is_activable(const GLCanvas3D::Selection& selection) const { return on_is_activable(selection); }
     bool is_selectable() const { return on_is_selectable(); }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     unsigned int get_sprite_id() const { return m_sprite_id; }
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    unsigned int get_texture_id() const { return m_textures[m_state].get_id(); }
-    int get_textures_size() const { return m_textures[Off].get_width(); }
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     int get_hover_id() const { return m_hover_id; }
     void set_hover_id(int id);
@@ -268,15 +242,7 @@ class GLGizmoRotate3D : public GLGizmoBase
     std::vector<GLGizmoRotate> m_gizmos;
 
 public:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     GLGizmoRotate3D(GLCanvas3D& parent, unsigned int sprite_id);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    explicit GLGizmoRotate3D(GLCanvas3D& parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     Vec3d get_rotation() const { return Vec3d(m_gizmos[X].get_angle(), m_gizmos[Y].get_angle(), m_gizmos[Z].get_angle()); }
     void set_rotation(const Vec3d& rotation) { m_gizmos[X].set_angle(rotation(0)); m_gizmos[Y].set_angle(rotation(1)); m_gizmos[Z].set_angle(rotation(2)); }
@@ -347,15 +313,7 @@ class GLGizmoScale3D : public GLGizmoBase
     BoundingBoxf3 m_starting_box;
 
 public:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
-    GLGizmoScale3D(GLCanvas3D& parent, unsigned int sprite_id);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    explicit GLGizmoScale3D(GLCanvas3D& parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+   GLGizmoScale3D(GLCanvas3D& parent, unsigned int sprite_id);
 
     double get_snap_step(double step) const { return m_snap_step; }
     void set_snap_step(double step) { m_snap_step = step; }
@@ -402,15 +360,7 @@ class GLGizmoMove3D : public GLGizmoBase
     GLUquadricObj* m_quadric;
 
 public:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     GLGizmoMove3D(GLCanvas3D& parent, unsigned int sprite_id);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    explicit GLGizmoMove3D(GLCanvas3D& parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     virtual ~GLGizmoMove3D();
 
     double get_snap_step(double step) const { return m_snap_step; }
@@ -465,15 +415,7 @@ private:
     bool is_plane_update_necessary() const;
 
 public:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     GLGizmoFlatten(GLCanvas3D& parent, unsigned int sprite_id);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    explicit GLGizmoFlatten(GLCanvas3D& parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     void set_flattening_data(const ModelObject* model_object);
     Vec3d get_flattening_normal() const;
@@ -520,15 +462,7 @@ private:
     mutable Vec3d m_starting_center;
 
 public:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     GLGizmoSlaSupports(GLCanvas3D& parent, unsigned int sprite_id);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    explicit GLGizmoSlaSupports(GLCanvas3D& parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     virtual ~GLGizmoSlaSupports();
     void set_sla_support_data(ModelObject* model_object, const GLCanvas3D::Selection& selection);
     bool mouse_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down);
@@ -621,15 +555,7 @@ class GLGizmoCut : public GLGizmoBase
 #endif // not ENABLE_IMGUI
 
 public:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     GLGizmoCut(GLCanvas3D& parent, unsigned int sprite_id);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    explicit GLGizmoCut(GLCanvas3D& parent);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 #if !ENABLE_IMGUI
     virtual void create_external_gizmo_widgets(wxWindow *parent);
diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp
index 63a8450a9..4cfa9a879 100644
--- a/src/slic3r/GUI/GLToolbar.cpp
+++ b/src/slic3r/GUI/GLToolbar.cpp
@@ -53,60 +53,21 @@ void GLToolbarItem::do_action(wxEvtHandler *target)
     wxPostEvent(target, SimpleEvent(m_data.action_event));
 }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
 void GLToolbarItem::render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int icon_size) const
 {
     GLTexture::render_sub_texture(tex_id, left, right, bottom, top, get_uvs(texture_size, icon_size));
 }
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-void GLToolbarItem::render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const
-{
-    GLTexture::render_sub_texture(tex_id, left, right, bottom, top, get_uvs(texture_size, border_size, icon_size, gap_size));
-}
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
 GLTexture::Quad_UVs GLToolbarItem::get_uvs(unsigned int texture_size, unsigned int icon_size) const
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-GLTexture::Quad_UVs GLToolbarItem::get_uvs(unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     GLTexture::Quad_UVs uvs;
 
     float inv_texture_size = (texture_size != 0) ? 1.0f / (float)texture_size : 0.0f;
 
     float scaled_icon_size = (float)icon_size * inv_texture_size;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     float left = (float)m_state * scaled_icon_size;
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    float scaled_border_size = (float)border_size * inv_texture_size;
-    float scaled_gap_size = (float)gap_size * inv_texture_size;
-    float stride = scaled_icon_size + scaled_gap_size;
-
-    float left = scaled_border_size + (float)m_state * stride;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     float right = left + scaled_icon_size;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     float top = (float)m_data.sprite_id * scaled_icon_size;
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    float top = scaled_border_size + (float)m_data.sprite_id * stride;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     float bottom = top + scaled_icon_size;
 
     uvs.left_top = { left, top };
@@ -120,14 +81,6 @@ GLTexture::Quad_UVs GLToolbarItem::get_uvs(unsigned int texture_size, unsigned i
 ItemsIconsTexture::Metadata::Metadata()
     : filename("")
     , icon_size(0)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    , icon_border_size(0)
-    , icon_gap_size(0)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
 }
 
@@ -958,15 +911,7 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) const
             left += separator_stride;
         else
         {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
             item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_size);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_border_size, m_icons_texture.metadata.icon_size, m_icons_texture.metadata.icon_gap_size);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             left += icon_stride;
         }
     }
@@ -1097,15 +1042,7 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) const
             top -= separator_stride;
         else
         {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
             item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_size);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_border_size, m_icons_texture.metadata.icon_size, m_icons_texture.metadata.icon_gap_size);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             top -= icon_stride;
         }
     }
diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp
index a5a912bfc..8a9ff783c 100644
--- a/src/slic3r/GUI/GLToolbar.hpp
+++ b/src/slic3r/GUI/GLToolbar.hpp
@@ -90,26 +90,10 @@ public:
 #endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     bool is_separator() const { return m_type == Separator; }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     void render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int icon_size) const;
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    void render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 private:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_SVG_ICONS
     GLTexture::Quad_UVs get_uvs(unsigned int texture_size, unsigned int icon_size) const;
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    GLTexture::Quad_UVs get_uvs(unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 };
 
 // items icon textures are assumed to be square and all with the same size in pixels, no internal check is done
@@ -123,16 +107,6 @@ struct ItemsIconsTexture
         std::string filename;
         // size of the square icons, in pixels
         unsigned int icon_size;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-        // size of the border, in pixels
-        unsigned int icon_border_size;
-        // distance between two adjacent icons (to avoid filtering artifacts), in pixels
-        unsigned int icon_gap_size;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
         Metadata();
     };
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 6ca527da7..57e18875d 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2615,14 +2615,6 @@ void Plater::priv::init_view_toolbar()
     ItemsIconsTexture::Metadata icons_data;
     icons_data.filename = "view_toolbar.png";
     icons_data.icon_size = 64;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-    icons_data.icon_border_size = 0;
-    icons_data.icon_gap_size = 0;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // !ENABLE_SVG_ICONS
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     BackgroundTexture::Metadata background_data;
     background_data.filename = "toolbar_background.png";

From f47fe861ac39258fe269c71f4c32132b04747740 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 26 Feb 2019 10:40:00 +0100
Subject: [PATCH 03/11] Allow non-squared textures for toolbars and gizmo icons

---
 src/slic3r/GUI/GLCanvas3D.cpp | 42 ++++++++++++++++++-------------
 src/slic3r/GUI/GLGizmo.cpp    | 30 +++++++++++-----------
 src/slic3r/GUI/GLGizmo.hpp    | 18 +++++++-------
 src/slic3r/GUI/GLTexture.cpp  |  4 +--
 src/slic3r/GUI/GLToolbar.cpp  | 47 +++++++++++++++++++++--------------
 src/slic3r/GUI/GLToolbar.hpp  |  8 +++---
 src/slic3r/GUI/Plater.cpp     |  4 +--
 7 files changed, 86 insertions(+), 67 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 9fc1d1e3a..c7c18bb8a 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -3146,7 +3146,10 @@ void GLCanvas3D::Gizmos::do_render_overlay(const GLCanvas3D& canvas, const GLCan
     float scaled_icons_size = m_overlay_icons_size * m_overlay_scale * inv_zoom;
     float scaled_stride_y = scaled_icons_size + scaled_gap_y;
     unsigned int icons_texture_id = m_icons_texture.get_id();
-    unsigned int texture_size = m_icons_texture.get_width();
+    unsigned int tex_width = m_icons_texture.get_width();
+    unsigned int tex_height = m_icons_texture.get_height();
+    float inv_tex_width = (tex_width != 0) ? 1.0f / (float)tex_width : 0.0f;
+    float inv_tex_height = (tex_height != 0) ? 1.0f / (float)tex_height : 0.0f;
 #else
     top_x += m_overlay_border * inv_zoom;
     top_y -= m_overlay_border * inv_zoom;
@@ -3155,11 +3158,11 @@ void GLCanvas3D::Gizmos::do_render_overlay(const GLCanvas3D& canvas, const GLCan
     float scaled_icons_size = (float)m_icons_texture.metadata.icon_size * m_overlay_icons_scale * inv_zoom;
     unsigned int icons_texture_id = m_icons_texture.texture.get_id();
     unsigned int texture_size = m_icons_texture.texture.get_width();
-#endif // ENABLE_SVG_ICONS
     float inv_texture_size = (texture_size != 0) ? 1.0f / (float)texture_size : 0.0f;
+#endif // ENABLE_SVG_ICONS
 
 #if ENABLE_SVG_ICONS
-    if ((icons_texture_id == 0) || (texture_size <= 0))
+    if ((icons_texture_id == 0) || (tex_width <= 0) || (tex_height <= 0))
         return;
 #endif // ENABLE_SVG_ICONS
 
@@ -3172,14 +3175,19 @@ void GLCanvas3D::Gizmos::do_render_overlay(const GLCanvas3D& canvas, const GLCan
         GLGizmoBase::EState state = it->second->get_state();
 
 #if ENABLE_SVG_ICONS
-        float uv_icon_size = m_overlay_icons_size * inv_texture_size;
+        float u_icon_size = m_overlay_icons_size * inv_tex_width;
+        float v_icon_size = m_overlay_icons_size * inv_tex_height;
+        float top = sprite_id * v_icon_size;
+        float left = state * u_icon_size;
+        float bottom = top + v_icon_size;
+        float right = left + u_icon_size;
 #else
         float uv_icon_size = (float)m_icons_texture.metadata.icon_size * inv_texture_size;
-#endif // ENABLE_SVG_ICONS
         float top = sprite_id * uv_icon_size;
         float left = state * uv_icon_size;
         float bottom = top + uv_icon_size;
         float right = left + uv_icon_size;
+#endif // ENABLE_SVG_ICONS
 
         GLTexture::render_sub_texture(icons_texture_id, top_x, top_x + scaled_icons_size, top_y - scaled_icons_size, top_y, { { left, bottom }, { right, bottom }, { right, top }, { left, top } });
 #if ENABLE_IMGUI
@@ -3262,9 +3270,9 @@ bool GLCanvas3D::Gizmos::generate_icons_texture() const
     {
         if (it->second != nullptr)
         {
-            const std::string& svg_file = it->second->get_svg_file();
-            if (!svg_file.empty())
-                filenames.push_back(path + svg_file);
+            const std::string& icon_filename = it->second->get_icon_filename();
+            if (!icon_filename.empty())
+                filenames.push_back(path + icon_filename);
         }
     }
 
@@ -5901,7 +5909,7 @@ bool GLCanvas3D::_init_toolbar()
 
     item.name = "add";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "add.svg";
+    item.icon_filename = "add.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Add...") + " [" + GUI::shortkey_ctrl_prefix() + "I]";
     item.sprite_id = 0;
@@ -5911,7 +5919,7 @@ bool GLCanvas3D::_init_toolbar()
 
     item.name = "delete";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "remove.svg";
+    item.icon_filename = "remove.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Delete") + " [Del]";
     item.sprite_id = 1;
@@ -5921,7 +5929,7 @@ bool GLCanvas3D::_init_toolbar()
 
     item.name = "deleteall";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "delete_all.svg";
+    item.icon_filename = "delete_all.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Delete all") + " [" + GUI::shortkey_ctrl_prefix() + "Del]";
     item.sprite_id = 2;
@@ -5931,7 +5939,7 @@ bool GLCanvas3D::_init_toolbar()
 
     item.name = "arrange";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "arrange.svg";
+    item.icon_filename = "arrange.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Arrange [A]");
     item.sprite_id = 3;
@@ -5944,7 +5952,7 @@ bool GLCanvas3D::_init_toolbar()
 
     item.name = "more";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "instance_add.svg";
+    item.icon_filename = "instance_add.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Add instance [+]");
     item.sprite_id = 4;
@@ -5954,7 +5962,7 @@ bool GLCanvas3D::_init_toolbar()
 
     item.name = "fewer";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "instance_remove.svg";
+    item.icon_filename = "instance_remove.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Remove instance [-]");
     item.sprite_id = 5;
@@ -5967,7 +5975,7 @@ bool GLCanvas3D::_init_toolbar()
 
     item.name = "splitobjects";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "split_objects.svg";
+    item.icon_filename = "split_objects.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Split to objects");
     item.sprite_id = 6;
@@ -5977,7 +5985,7 @@ bool GLCanvas3D::_init_toolbar()
 
     item.name = "splitvolumes";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "split_parts.svg";
+    item.icon_filename = "split_parts.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Split to parts");
     item.sprite_id = 8;
@@ -5990,7 +5998,7 @@ bool GLCanvas3D::_init_toolbar()
 
     item.name = "layersediting";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "layers.svg";
+    item.icon_filename = "layers.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Layers editing");
     item.sprite_id = 7;
diff --git a/src/slic3r/GUI/GLGizmo.cpp b/src/slic3r/GUI/GLGizmo.cpp
index b7573410b..b9018d0a1 100644
--- a/src/slic3r/GUI/GLGizmo.cpp
+++ b/src/slic3r/GUI/GLGizmo.cpp
@@ -158,7 +158,7 @@ void GLGizmoBase::Grabber::render_face(float half_size) const
 }
 
 #if ENABLE_SVG_ICONS
-GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id)
+GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id)
 #else
 GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, unsigned int sprite_id)
 #endif // ENABLE_SVG_ICONS
@@ -167,7 +167,7 @@ GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, unsigned int sprite_id)
     , m_state(Off)
     , m_shortcut_key(0)
 #if ENABLE_SVG_ICONS
-    , m_svg_file(svg_file)
+    , m_icon_filename(icon_filename)
 #endif // ENABLE_SVG_ICONS
     , m_sprite_id(sprite_id)
     , m_hover_id(-1)
@@ -334,7 +334,7 @@ GLGizmoRotate::GLGizmoRotate(GLCanvas3D& parent, GLGizmoRotate::Axis axis)
 
 GLGizmoRotate::GLGizmoRotate(const GLGizmoRotate& other)
 #if ENABLE_SVG_ICONS
-    : GLGizmoBase(other.m_parent, other.m_svg_file, other.m_sprite_id)
+    : GLGizmoBase(other.m_parent, other.m_icon_filename, other.m_sprite_id)
 #else
     : GLGizmoBase(other.m_parent, other.m_sprite_id)
 #endif // ENABLE_SVG_ICONS
@@ -710,8 +710,8 @@ Vec3d GLGizmoRotate::mouse_position_in_local_plane(const Linef3& mouse_ray, cons
 }
 
 #if ENABLE_SVG_ICONS
-GLGizmoRotate3D::GLGizmoRotate3D(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id)
-    : GLGizmoBase(parent, svg_file, sprite_id)
+GLGizmoRotate3D::GLGizmoRotate3D(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id)
+    : GLGizmoBase(parent, icon_filename, sprite_id)
 #else
 GLGizmoRotate3D::GLGizmoRotate3D(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
@@ -795,8 +795,8 @@ void GLGizmoRotate3D::on_render_input_window(float x, float y, const GLCanvas3D:
 const float GLGizmoScale3D::Offset = 5.0f;
 
 #if ENABLE_SVG_ICONS
-GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id)
-    : GLGizmoBase(parent, svg_file, sprite_id)
+GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id)
+    : GLGizmoBase(parent, icon_filename, sprite_id)
 #else
 GLGizmoScale3D::GLGizmoScale3D(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
@@ -1146,8 +1146,8 @@ double GLGizmoScale3D::calc_ratio(const UpdateData& data) const
 const double GLGizmoMove3D::Offset = 10.0;
 
 #if ENABLE_SVG_ICONS
-GLGizmoMove3D::GLGizmoMove3D(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id)
-    : GLGizmoBase(parent, svg_file, sprite_id)
+GLGizmoMove3D::GLGizmoMove3D(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id)
+    : GLGizmoBase(parent, icon_filename, sprite_id)
 #else
 GLGizmoMove3D::GLGizmoMove3D(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
@@ -1388,8 +1388,8 @@ void GLGizmoMove3D::render_grabber_extension(Axis axis, const BoundingBoxf3& box
 }
 
 #if ENABLE_SVG_ICONS
-GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id)
-    : GLGizmoBase(parent, svg_file, sprite_id)
+GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id)
+    : GLGizmoBase(parent, icon_filename, sprite_id)
 #else
 GLGizmoFlatten::GLGizmoFlatten(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
@@ -1732,8 +1732,8 @@ Vec3d GLGizmoFlatten::get_flattening_normal() const
 }
 
 #if ENABLE_SVG_ICONS
-GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id)
-    : GLGizmoBase(parent, svg_file, sprite_id)
+GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id)
+    : GLGizmoBase(parent, icon_filename, sprite_id)
 #else
 GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
@@ -2550,8 +2550,8 @@ const double GLGizmoCut::Margin = 20.0;
 const std::array<float, 3> GLGizmoCut::GrabberColor = { 1.0, 0.5, 0.0 };
 
 #if ENABLE_SVG_ICONS
-GLGizmoCut::GLGizmoCut(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id)
-    : GLGizmoBase(parent, svg_file, sprite_id)
+GLGizmoCut::GLGizmoCut(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id)
+    : GLGizmoBase(parent, icon_filename, sprite_id)
 #else
 GLGizmoCut::GLGizmoCut(GLCanvas3D& parent, unsigned int sprite_id)
     : GLGizmoBase(parent, sprite_id)
diff --git a/src/slic3r/GUI/GLGizmo.hpp b/src/slic3r/GUI/GLGizmo.hpp
index dc632fe80..e524c2381 100644
--- a/src/slic3r/GUI/GLGizmo.hpp
+++ b/src/slic3r/GUI/GLGizmo.hpp
@@ -88,7 +88,7 @@ protected:
     EState m_state;
     int m_shortcut_key;
 #if ENABLE_SVG_ICONS
-    std::string m_svg_file;
+    std::string m_icon_filename;
 #endif // ENABLE_SVG_ICONS
     unsigned int m_sprite_id;
     int m_hover_id;
@@ -103,7 +103,7 @@ protected:
 
 public:
 #if ENABLE_SVG_ICONS
-    GLGizmoBase(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id);
+    GLGizmoBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);
 #else
     GLGizmoBase(GLCanvas3D& parent, unsigned int sprite_id);
 #endif // ENABLE_SVG_ICONS
@@ -123,7 +123,7 @@ public:
     void set_shortcut_key(int key) { m_shortcut_key = key; }
 
 #if ENABLE_SVG_ICONS
-    const std::string& get_svg_file() const { return m_svg_file; }
+    const std::string& get_icon_filename() const { return m_icon_filename; }
 #endif // ENABLE_SVG_ICONS
 
     bool is_activable(const GLCanvas3D::Selection& selection) const { return on_is_activable(selection); }
@@ -254,7 +254,7 @@ class GLGizmoRotate3D : public GLGizmoBase
 
 public:
 #if ENABLE_SVG_ICONS
-    GLGizmoRotate3D(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id);
+    GLGizmoRotate3D(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);
 #else
     GLGizmoRotate3D(GLCanvas3D& parent, unsigned int sprite_id);
 #endif // ENABLE_SVG_ICONS
@@ -329,7 +329,7 @@ class GLGizmoScale3D : public GLGizmoBase
 
 public:
 #if ENABLE_SVG_ICONS
-    GLGizmoScale3D(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id);
+    GLGizmoScale3D(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);
 #else
     GLGizmoScale3D(GLCanvas3D& parent, unsigned int sprite_id);
 #endif // ENABLE_SVG_ICONS
@@ -380,7 +380,7 @@ class GLGizmoMove3D : public GLGizmoBase
 
 public:
 #if ENABLE_SVG_ICONS
-    GLGizmoMove3D(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id);
+    GLGizmoMove3D(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);
 #else
     GLGizmoMove3D(GLCanvas3D& parent, unsigned int sprite_id);
 #endif // ENABLE_SVG_ICONS
@@ -439,7 +439,7 @@ private:
 
 public:
 #if ENABLE_SVG_ICONS
-    GLGizmoFlatten(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id);
+    GLGizmoFlatten(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);
 #else
     GLGizmoFlatten(GLCanvas3D& parent, unsigned int sprite_id);
 #endif // ENABLE_SVG_ICONS
@@ -491,7 +491,7 @@ private:
 
 public:
 #if ENABLE_SVG_ICONS
-    GLGizmoSlaSupports(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id);
+    GLGizmoSlaSupports(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);
 #else
     GLGizmoSlaSupports(GLCanvas3D& parent, unsigned int sprite_id);
 #endif // ENABLE_SVG_ICONS
@@ -588,7 +588,7 @@ class GLGizmoCut : public GLGizmoBase
 
 public:
 #if ENABLE_SVG_ICONS
-    GLGizmoCut(GLCanvas3D& parent, const std::string& svg_file, unsigned int sprite_id);
+    GLGizmoCut(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);
 #else
     GLGizmoCut(GLCanvas3D& parent, unsigned int sprite_id);
 #endif // ENABLE_SVG_ICONS
diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp
index 9679680d0..7e822a4c1 100644
--- a/src/slic3r/GUI/GLTexture.cpp
+++ b/src/slic3r/GUI/GLTexture.cpp
@@ -148,8 +148,8 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
     if (filenames.empty() || (num_states == 0) || (sprite_size_px == 0))
         return false;
 
-    m_width = (int)sprite_size_px * std::max((int)(num_states), (int)(filenames.size()));
-    m_height = m_width;
+    m_width = (int)(sprite_size_px * num_states);
+    m_height = (int)(sprite_size_px * filenames.size());
     int n_pixels = m_width * m_height;
 
     if (n_pixels <= 0)
diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp
index deb287c6a..ab95b71db 100644
--- a/src/slic3r/GUI/GLToolbar.cpp
+++ b/src/slic3r/GUI/GLToolbar.cpp
@@ -33,7 +33,7 @@ wxDEFINE_EVENT(EVT_GLVIEWTOOLBAR_PREVIEW, SimpleEvent);
 GLToolbarItem::Data::Data()
     : name("")
 #if ENABLE_SVG_ICONS
-    , svg_file("")
+    , icon_filename("")
 #endif // ENABLE_SVG_ICONS
     , tooltip("")
     , sprite_id(-1)
@@ -56,22 +56,24 @@ void GLToolbarItem::do_action(wxEvtHandler *target)
     wxPostEvent(target, SimpleEvent(m_data.action_event));
 }
 
-void GLToolbarItem::render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int icon_size) const
+void GLToolbarItem::render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) const
 {
-    GLTexture::render_sub_texture(tex_id, left, right, bottom, top, get_uvs(texture_size, icon_size));
+    GLTexture::render_sub_texture(tex_id, left, right, bottom, top, get_uvs(tex_width, tex_height, icon_size));
 }
 
-GLTexture::Quad_UVs GLToolbarItem::get_uvs(unsigned int texture_size, unsigned int icon_size) const
+GLTexture::Quad_UVs GLToolbarItem::get_uvs(unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) const
 {
     GLTexture::Quad_UVs uvs;
 
-    float inv_texture_size = (texture_size != 0) ? 1.0f / (float)texture_size : 0.0f;
+    float inv_tex_width = (tex_width != 0) ? 1.0f / (float)tex_width : 0.0f;
+    float inv_tex_height = (tex_height != 0) ? 1.0f / (float)tex_height : 0.0f;
 
-    float scaled_icon_size = (float)icon_size * inv_texture_size;
-    float left = (float)m_state * scaled_icon_size;
-    float right = left + scaled_icon_size;
-    float top = (float)m_data.sprite_id * scaled_icon_size;
-    float bottom = top + scaled_icon_size;
+    float scaled_icon_width = (float)icon_size * inv_tex_width;
+    float scaled_icon_height = (float)icon_size * inv_tex_height;
+    float left = (float)m_state * scaled_icon_width;
+    float right = left + scaled_icon_width;
+    float top = (float)m_data.sprite_id * scaled_icon_height;
+    float bottom = top + scaled_icon_height;
 
     uvs.left_top = { left, top };
     uvs.left_bottom = { left, bottom };
@@ -907,7 +909,8 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) const
 {
 #if ENABLE_SVG_ICONS
     unsigned int tex_id = m_icons_texture.get_id();
-    int tex_size = m_icons_texture.get_width();
+    int tex_width = m_icons_texture.get_width();
+    int tex_height = m_icons_texture.get_height();
 #else
     unsigned int tex_id = m_icons_texture.texture.get_id();
     int tex_size = m_icons_texture.texture.get_width();
@@ -1032,7 +1035,7 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) const
     top -= scaled_border;
 
 #if ENABLE_SVG_ICONS
-    if ((tex_id == 0) || (tex_size <= 0))
+    if ((tex_id == 0) || (tex_width <= 0) || (tex_height <= 0))
         return;
 #endif // ENABLE_SVG_ICONS
 
@@ -1049,7 +1052,7 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) const
         else
         {
 #if ENABLE_SVG_ICONS
-            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, (unsigned int)m_layout.icons_size);
+            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_width, (unsigned int)tex_height, (unsigned int)(m_layout.icons_size * m_layout.scale));
 #else
             item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_size);
 #endif // ENABLE_SVG_ICONS
@@ -1062,14 +1065,17 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) const
 {
 #if ENABLE_SVG_ICONS
     unsigned int tex_id = m_icons_texture.get_id();
-    int tex_size = m_icons_texture.get_width();
+    int tex_width = m_icons_texture.get_width();
+    int tex_height = m_icons_texture.get_height();
 #else
     unsigned int tex_id = m_icons_texture.texture.get_id();
     int tex_size = m_icons_texture.texture.get_width();
 #endif // ENABLE_SVG_ICONS
 
+#if !ENABLE_SVG_ICONS
     if ((tex_id == 0) || (tex_size <= 0))
         return;
+#endif // !ENABLE_SVG_ICONS
 
     float zoom = parent.get_camera_zoom();
     float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
@@ -1184,6 +1190,11 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) const
     left += scaled_border;
     top -= scaled_border;
 
+#if ENABLE_SVG_ICONS
+    if ((tex_id == 0) || (tex_width <= 0) || (tex_height <= 0))
+        return;
+#endif // ENABLE_SVG_ICONS
+
     // renders icons
     for (const GLToolbarItem* item : m_items)
     {
@@ -1197,7 +1208,7 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) const
         else
         {
 #if ENABLE_SVG_ICONS
-            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, (unsigned int)(m_layout.icons_size * m_layout.scale));
+            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_width, (unsigned int)tex_height, (unsigned int)(m_layout.icons_size * m_layout.scale));
 #else
             item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_size);
 #endif // ENABLE_SVG_ICONS
@@ -1213,9 +1224,9 @@ bool GLToolbar::generate_icons_texture() const
     std::vector<std::string> filenames;
     for (GLToolbarItem* item : m_items)
     {
-        const std::string& svg_file = item->get_svg_file();
-        if (!svg_file.empty())
-            filenames.push_back(path + svg_file);
+        const std::string& icon_filename = item->get_icon_filename();
+        if (!icon_filename.empty())
+            filenames.push_back(path + icon_filename);
     }
 
     bool res = m_icons_texture.load_from_svg_files_as_sprites_array(filenames, GLToolbarItem::Num_States, (unsigned int)(m_layout.icons_size * m_layout.scale));
diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp
index b12b2693e..30a9ff04d 100644
--- a/src/slic3r/GUI/GLToolbar.hpp
+++ b/src/slic3r/GUI/GLToolbar.hpp
@@ -52,7 +52,7 @@ public:
     {
         std::string name;
 #if ENABLE_SVG_ICONS
-        std::string svg_file;
+        std::string icon_filename;
 #endif // ENABLE_SVG_ICONS
         std::string tooltip;
         unsigned int sprite_id;
@@ -78,7 +78,7 @@ public:
 
     const std::string& get_name() const { return m_data.name; }
 #if ENABLE_SVG_ICONS
-    const std::string& get_svg_file() const { return m_data.svg_file; }
+    const std::string& get_icon_filename() const { return m_data.icon_filename; }
 #endif // ENABLE_SVG_ICONS
     const std::string& get_tooltip() const { return m_data.tooltip; }
 
@@ -96,10 +96,10 @@ public:
 #endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     bool is_separator() const { return m_type == Separator; }
 
-    void render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int icon_size) const;
+    void render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) const;
 
 private:
-    GLTexture::Quad_UVs get_uvs(unsigned int texture_size, unsigned int icon_size) const;
+    GLTexture::Quad_UVs get_uvs(unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) const;
 };
 
 #if !ENABLE_SVG_ICONS
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index d17cce97d..6c2c3a1ea 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2651,7 +2651,7 @@ void Plater::priv::init_view_toolbar()
 
     item.name = "3D";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "add.svg";
+    item.icon_filename = "add.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("3D editor view") + " [" + GUI::shortkey_ctrl_prefix() + "5]";
     item.sprite_id = 0;
@@ -2662,7 +2662,7 @@ void Plater::priv::init_view_toolbar()
 
     item.name = "Preview";
 #if ENABLE_SVG_ICONS
-    item.svg_file = "remove.svg";
+    item.icon_filename = "remove.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Preview") + " [" + GUI::shortkey_ctrl_prefix() + "6]";
     item.sprite_id = 1;

From 987a83bb0c3f172dd349f8443695fa24d8195eb0 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 26 Feb 2019 10:57:37 +0100
Subject: [PATCH 04/11] Fixed build when ENABLE_SVG_ICONS is disabled

---
 src/slic3r/GUI/GLToolbar.cpp | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp
index ab95b71db..5f5350299 100644
--- a/src/slic3r/GUI/GLToolbar.cpp
+++ b/src/slic3r/GUI/GLToolbar.cpp
@@ -913,11 +913,12 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) const
     int tex_height = m_icons_texture.get_height();
 #else
     unsigned int tex_id = m_icons_texture.texture.get_id();
-    int tex_size = m_icons_texture.texture.get_width();
+    int tex_width = m_icons_texture.texture.get_width();
+    int tex_height = m_icons_texture.texture.get_height();
 #endif // ENABLE_SVG_ICONS
 
 #if !ENABLE_SVG_ICONS
-    if ((tex_id == 0) || (tex_size <= 0))
+    if ((tex_id == 0) || (tex_width <= 0) || (tex_height <= 0))
         return;
 #endif // !ENABLE_SVG_ICONS
 
@@ -1054,7 +1055,7 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) const
 #if ENABLE_SVG_ICONS
             item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_width, (unsigned int)tex_height, (unsigned int)(m_layout.icons_size * m_layout.scale));
 #else
-            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_size);
+            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_width, (unsigned int)tex_height, m_icons_texture.metadata.icon_size);
 #endif // ENABLE_SVG_ICONS
             left += icon_stride;
         }
@@ -1069,11 +1070,12 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) const
     int tex_height = m_icons_texture.get_height();
 #else
     unsigned int tex_id = m_icons_texture.texture.get_id();
-    int tex_size = m_icons_texture.texture.get_width();
+    int tex_width = m_icons_texture.texture.get_width();
+    int tex_height = m_icons_texture.texture.get_height();
 #endif // ENABLE_SVG_ICONS
 
 #if !ENABLE_SVG_ICONS
-    if ((tex_id == 0) || (tex_size <= 0))
+    if ((tex_id == 0) || (tex_width <= 0) || (tex_height <= 0))
         return;
 #endif // !ENABLE_SVG_ICONS
 
@@ -1210,7 +1212,7 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) const
 #if ENABLE_SVG_ICONS
             item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_width, (unsigned int)tex_height, (unsigned int)(m_layout.icons_size * m_layout.scale));
 #else
-            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.metadata.icon_size);
+            item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_width, (unsigned int)tex_height, m_icons_texture.metadata.icon_size);
 #endif // ENABLE_SVG_ICONS
             top -= icon_stride;
         }

From a8610f990eb47eadbf67fc7ae2381ff32a18a213 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 26 Feb 2019 12:56:13 +0100
Subject: [PATCH 05/11] Automatic generation of variants of icons for toolbars
 and gizmos

---
 src/slic3r/GUI/GLCanvas3D.cpp | 15 +++++--
 src/slic3r/GUI/GLTexture.cpp  | 73 +++++++++++++++++++++++++++++------
 src/slic3r/GUI/GLTexture.hpp  | 10 ++++-
 src/slic3r/GUI/GLToolbar.cpp  | 27 ++++++++++++-
 src/slic3r/GUI/GLToolbar.hpp  |  7 ++++
 src/slic3r/GUI/Plater.cpp     |  4 ++
 6 files changed, 120 insertions(+), 16 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index c7c18bb8a..253bb5bda 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -3276,7 +3276,12 @@ bool GLCanvas3D::Gizmos::generate_icons_texture() const
         }
     }
 
-    bool res = m_icons_texture.load_from_svg_files_as_sprites_array(filenames, GLGizmoBase::Num_States, (unsigned int)(m_overlay_icons_size * m_overlay_scale));
+    std::vector<std::pair<int, bool>> 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));
+
+    bool res = m_icons_texture.load_from_svg_files_as_sprites_array(filenames, states, (unsigned int)(m_overlay_icons_size * m_overlay_scale));
     if (res)
         m_icons_texture_dirty = false;
 
@@ -3713,7 +3718,11 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas)
 #endif
     , m_in_render(false)
     , m_bed(nullptr)
+#if ENABLE_SVG_ICONS
+    , m_toolbar(GLToolbar::Normal, "Top")
+#else
     , m_toolbar(GLToolbar::Normal)
+#endif // ENABLE_SVG_ICONS
     , m_view_toolbar(nullptr)
     , m_use_clipping_planes(false)
     , m_sidebar_field("")
@@ -5988,7 +5997,7 @@ bool GLCanvas3D::_init_toolbar()
     item.icon_filename = "split_parts.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Split to parts");
-    item.sprite_id = 8;
+    item.sprite_id = 7;
     item.action_event = EVT_GLTOOLBAR_SPLIT_VOLUMES;
     if (!m_toolbar.add_item(item))
         return false;
@@ -6001,7 +6010,7 @@ bool GLCanvas3D::_init_toolbar()
     item.icon_filename = "layers.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Layers editing");
-    item.sprite_id = 7;
+    item.sprite_id = 8;
     item.is_toggable = true;
     item.action_event = EVT_GLTOOLBAR_LAYERSEDITING;
     if (!m_toolbar.add_item(item))
diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp
index 7e822a4c1..2f1b68048 100644
--- a/src/slic3r/GUI/GLTexture.cpp
+++ b/src/slic3r/GUI/GLTexture.cpp
@@ -138,19 +138,19 @@ bool GLTexture::load_from_file(const std::string& filename, bool use_mipmaps)
 #endif // ENABLE_TEXTURES_FROM_SVG
 
 #if ENABLE_SVG_ICONS
-bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::string>& filenames, unsigned int num_states, unsigned int sprite_size_px)
+bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::string>& filenames, const std::vector<std::pair<int, bool>>& states, unsigned int sprite_size_px)
 {
-    static int pass = 0;
-    ++pass;
-
     reset();
 
-    if (filenames.empty() || (num_states == 0) || (sprite_size_px == 0))
+    if (filenames.empty() || states.empty() || (sprite_size_px == 0))
         return false;
 
-    m_width = (int)(sprite_size_px * num_states);
+    m_width = (int)(sprite_size_px * states.size());
     m_height = (int)(sprite_size_px * filenames.size());
     int n_pixels = m_width * m_height;
+    int sprite_n_pixels = sprite_size_px * sprite_size_px;
+    int sprite_bytes = sprite_n_pixels * 4;
+    int sprite_stride = sprite_size_px * 4;
 
     if (n_pixels <= 0)
     {
@@ -159,7 +159,10 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
     }
 
     std::vector<unsigned char> data(n_pixels * 4, 0);
-    std::vector<unsigned char> sprite_data(sprite_size_px * sprite_size_px * 4, 0);
+    std::vector<unsigned char> sprite_data(sprite_bytes, 0);
+    std::vector<unsigned char> sprite_white_only_data(sprite_bytes, 0);
+    std::vector<unsigned char> sprite_gray_only_data(sprite_bytes, 0);
+    std::vector<unsigned char> output_data(sprite_bytes, 0);
 
     NSVGrasterizer* rast = nsvgCreateRasterizer();
     if (rast == nullptr)
@@ -185,16 +188,58 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
 
         float scale = (float)sprite_size_px / std::max(image->width, image->height);
 
-        nsvgRasterize(rast, image, 0, 0, scale, sprite_data.data(), sprite_size_px, sprite_size_px, sprite_size_px * 4);
+        nsvgRasterize(rast, image, 0, 0, scale, sprite_data.data(), sprite_size_px, sprite_size_px, sprite_stride);
+
+        // makes white only copy of the sprite
+        ::memcpy((void*)sprite_white_only_data.data(), (const void*)sprite_data.data(), sprite_bytes);
+        for (int i = 0; i < sprite_n_pixels; ++i)
+        {
+            if (sprite_white_only_data.data()[i * 4] != 0)
+                ::memset((void*)&sprite_white_only_data.data()[i * 4], 255, 3);
+        }
+
+        // makes gray only copy of the sprite
+        ::memcpy((void*)sprite_gray_only_data.data(), (const void*)sprite_data.data(), sprite_bytes);
+        for (int i = 0; i < sprite_n_pixels; ++i)
+        {
+            if (sprite_gray_only_data.data()[i * 4] != 0)
+                ::memset((void*)&sprite_gray_only_data.data()[i * 4], 128, 3);
+        }
 
         int sprite_offset_px = sprite_id * sprite_size_px * m_width;
-        for (unsigned int i = 0; i < num_states; ++i)
+        int state_id = -1;
+        for (const std::pair<int, bool>& state : states)
         {
-            int state_offset_px = sprite_offset_px + i * sprite_size_px;
+            ++state_id;
+
+            // select the sprite variant
+            std::vector<unsigned char>* src = nullptr;
+            switch (state.first)
+            {
+            case 1: { src = &sprite_white_only_data; break; }
+            case 2: { src = &sprite_gray_only_data; break; }
+            default: { src = &sprite_data; break; }
+            }
+
+            ::memcpy((void*)output_data.data(), (const void*)src->data(), sprite_bytes);
+            // applies background, if needed
+            if (state.second)
+            {
+                for (int i = 0; i < sprite_n_pixels; ++i)
+                {
+                    float alpha = (float)output_data.data()[i * 4 + 3] / 255.0f;
+                    output_data.data()[i * 4 + 0] = (unsigned char)(0 * (1.0f - alpha) + output_data.data()[i * 4 + 0] * alpha);
+                    output_data.data()[i * 4 + 1] = (unsigned char)(0 * (1.0f - alpha) + output_data.data()[i * 4 + 1] * alpha);
+                    output_data.data()[i * 4 + 2] = (unsigned char)(0 * (1.0f - alpha) + output_data.data()[i * 4 + 2] * alpha);
+                    output_data.data()[i * 4 + 3] = (unsigned char)(128 * (1.0f - alpha) + output_data.data()[i * 4 + 3] * alpha);
+                }
+            }
+
+            int state_offset_px = sprite_offset_px + state_id * sprite_size_px;
             for (int j = 0; j < sprite_size_px; ++j)
             {
                 int data_offset = (state_offset_px + j * m_width) * 4;
-                ::memcpy((void*)&data.data()[data_offset], (const void*)&sprite_data.data()[j * sprite_size_px * 4], sprite_size_px * 4);
+                ::memcpy((void*)&data.data()[data_offset], (const void*)&output_data.data()[j * sprite_stride], sprite_stride);
             }
         }
 
@@ -216,6 +261,11 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
 
 
     m_source = filenames.front();
+    
+#if 0
+    // debug output
+    static int pass = 0;
+    ++pass;
 
     wxImage output(m_width, m_height);
     output.InitAlpha();
@@ -232,6 +282,7 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
     }
 
     output.SaveFile("C:/prusa/slic3r/svg_icons/temp/test_" + std::to_string(pass) + ".png", wxBITMAP_TYPE_PNG);
+#endif // 0
 
     return true;
 }
diff --git a/src/slic3r/GUI/GLTexture.hpp b/src/slic3r/GUI/GLTexture.hpp
index 55e5c4c07..9b1f04ea6 100644
--- a/src/slic3r/GUI/GLTexture.hpp
+++ b/src/slic3r/GUI/GLTexture.hpp
@@ -42,7 +42,15 @@ namespace GUI {
         bool load_from_svg_file(const std::string& filename, bool use_mipmaps, unsigned int max_size_px);
 #endif // ENABLE_TEXTURES_FROM_SVG
 #if ENABLE_SVG_ICONS
-        bool load_from_svg_files_as_sprites_array(const std::vector<std::string>& filenames, unsigned int num_states, unsigned int sprite_size_px);
+        // meanings of states: (std::pair<int, bool>)
+        // first field (int):
+        // 0 -> no changes
+        // 1 -> use white only color variant
+        // 2 -> use gray only color variant
+        // second field (bool):
+        // false -> no changes
+        // true -> add background color
+        bool load_from_svg_files_as_sprites_array(const std::vector<std::string>& filenames, const std::vector<std::pair<int, bool>>& states, unsigned int sprite_size_px);
 #endif // ENABLE_SVG_ICONS
         void reset();
 
diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp
index 5f5350299..144662c3f 100644
--- a/src/slic3r/GUI/GLToolbar.cpp
+++ b/src/slic3r/GUI/GLToolbar.cpp
@@ -124,8 +124,15 @@ GLToolbar::Layout::Layout()
 {
 }
 
+#if ENABLE_SVG_ICONS
+GLToolbar::GLToolbar(GLToolbar::EType type, const std::string& name)
+#else
 GLToolbar::GLToolbar(GLToolbar::EType type)
+#endif // ENABLE_SVG_ICONS
     : m_type(type)
+#if ENABLE_SVG_ICONS
+    , m_name(name)
+#endif // ENABLE_SVG_ICONS
     , m_enabled(false)
 #if ENABLE_SVG_ICONS
     , m_icons_texture_dirty(true)
@@ -1231,7 +1238,25 @@ bool GLToolbar::generate_icons_texture() const
             filenames.push_back(path + icon_filename);
     }
 
-    bool res = m_icons_texture.load_from_svg_files_as_sprites_array(filenames, GLToolbarItem::Num_States, (unsigned int)(m_layout.icons_size * m_layout.scale));
+    std::vector<std::pair<int, bool>> states;
+    if (m_name == "Top")
+    {
+        states.push_back(std::make_pair(1, false));
+        states.push_back(std::make_pair(0, false));
+        states.push_back(std::make_pair(2, false));
+        states.push_back(std::make_pair(0, false));
+        states.push_back(std::make_pair(0, false));
+    }
+    else if (m_name == "View")
+    {
+        states.push_back(std::make_pair(1, false));
+        states.push_back(std::make_pair(1, true));
+        states.push_back(std::make_pair(1, false));
+        states.push_back(std::make_pair(0, false));
+        states.push_back(std::make_pair(1, true));
+    }
+
+    bool res = m_icons_texture.load_from_svg_files_as_sprites_array(filenames, states, (unsigned int)(m_layout.icons_size * m_layout.scale));
     if (res)
         m_icons_texture_dirty = false;
 
diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp
index 30a9ff04d..e14f7b3bb 100644
--- a/src/slic3r/GUI/GLToolbar.hpp
+++ b/src/slic3r/GUI/GLToolbar.hpp
@@ -203,6 +203,9 @@ private:
     typedef std::vector<GLToolbarItem*> ItemsList;
 
     EType m_type;
+#if ENABLE_SVG_ICONS
+    std::string m_name;
+#endif // ENABLE_SVG_ICONS
     bool m_enabled;
 #if ENABLE_SVG_ICONS
     mutable GLTexture m_icons_texture;
@@ -216,7 +219,11 @@ private:
     ItemsList m_items;
 
 public:
+#if ENABLE_SVG_ICONS
+    GLToolbar(EType type, const std::string& name);
+#else
     explicit GLToolbar(EType type);
+#endif // ENABLE_SVG_ICONS
     ~GLToolbar();
 
 #if ENABLE_SVG_ICONS
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 6c2c3a1ea..24d366ced 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1178,7 +1178,11 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     , sidebar(new Sidebar(q))
     , delayed_scene_refresh(false)
     , project_filename(wxEmptyString)
+#if ENABLE_SVG_ICONS
+    , view_toolbar(GLToolbar::Radio, "View")
+#else
     , view_toolbar(GLToolbar::Radio)
+#endif // ENABLE_SVG_ICONS
 {
     arranging.store(false);
     rotoptimizing.store(false);

From f84591e570d0a68368c66ebe69beced189a1f411 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 26 Feb 2019 13:27:41 +0100
Subject: [PATCH 06/11] Fixed build on Mac and Linux

---
 src/slic3r/GUI/GLTexture.cpp | 81 ------------------------------------
 src/slic3r/GUI/GLTexture.hpp |  6 ---
 2 files changed, 87 deletions(-)

diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp
index 2f1b68048..168ad8b64 100644
--- a/src/slic3r/GUI/GLTexture.cpp
+++ b/src/slic3r/GUI/GLTexture.cpp
@@ -6,19 +6,15 @@
 #include <wx/image.h>
 
 #include <boost/filesystem.hpp>
-#if ENABLE_TEXTURES_FROM_SVG
 #include <boost/algorithm/string/predicate.hpp>
-#endif // ENABLE_TEXTURES_FROM_SVG
 
 #include <vector>
 #include <algorithm>
 
-#if ENABLE_TEXTURES_FROM_SVG
 #define NANOSVG_IMPLEMENTATION
 #include "nanosvg/nanosvg.h"
 #define NANOSVGRAST_IMPLEMENTATION
 #include "nanosvg/nanosvgrast.h"
-#endif // ENABLE_TEXTURES_FROM_SVG
 
 namespace Slic3r {
 namespace GUI {
@@ -38,7 +34,6 @@ GLTexture::~GLTexture()
     reset();
 }
 
-#if ENABLE_TEXTURES_FROM_SVG
 bool GLTexture::load_from_file(const std::string& filename, bool use_mipmaps)
 {
     reset();
@@ -64,80 +59,7 @@ bool GLTexture::load_from_svg_file(const std::string& filename, bool use_mipmaps
     else
         return false;
 }
-#else
-bool GLTexture::load_from_file(const std::string& filename, bool use_mipmaps)
-{
-    reset();
 
-    if (!boost::filesystem::exists(filename))
-        return false;
-
-    // Load a PNG with an alpha channel.
-    wxImage image;
-	if (!image.LoadFile(wxString::FromUTF8(filename.c_str()), wxBITMAP_TYPE_PNG))
-    {
-        reset();
-        return false;
-    }
-
-    m_width = image.GetWidth();
-    m_height = image.GetHeight();
-    int n_pixels = m_width * m_height;
-
-    if (n_pixels <= 0)
-    {
-        reset();
-        return false;
-    }
-
-    // Get RGB & alpha raw data from wxImage, pack them into an array.
-    unsigned char* img_rgb = image.GetData();
-    if (img_rgb == nullptr)
-    {
-        reset();
-        return false;
-    }
-
-    unsigned char* img_alpha = image.GetAlpha();
-
-    std::vector<unsigned char> data(n_pixels * 4, 0);
-    for (int i = 0; i < n_pixels; ++i)
-    {
-        int data_id = i * 4;
-        int img_id = i * 3;
-        data[data_id + 0] = img_rgb[img_id + 0];
-        data[data_id + 1] = img_rgb[img_id + 1];
-        data[data_id + 2] = img_rgb[img_id + 2];
-        data[data_id + 3] = (img_alpha != nullptr) ? img_alpha[i] : 255;
-    }
-
-    // sends data to gpu
-    ::glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-    ::glGenTextures(1, &m_id);
-    ::glBindTexture(GL_TEXTURE_2D, m_id);
-    ::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data());
-    if (use_mipmaps)
-    {
-        // we manually generate mipmaps because glGenerateMipmap() function is not reliable on all graphics cards
-        unsigned int levels_count = generate_mipmaps(image);
-        ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, levels_count);
-        ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
-    }
-    else
-    {
-        ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-        ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
-    }
-    ::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-
-    ::glBindTexture(GL_TEXTURE_2D, 0);
-
-    m_source = filename;
-    return true;
-}
-#endif // ENABLE_TEXTURES_FROM_SVG
-
-#if ENABLE_SVG_ICONS
 bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::string>& filenames, const std::vector<std::pair<int, bool>>& states, unsigned int sprite_size_px)
 {
     reset();
@@ -286,7 +208,6 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
 
     return true;
 }
-#endif // ENABLE_SVG_ICONS
 
 void GLTexture::reset()
 {
@@ -365,7 +286,6 @@ unsigned int GLTexture::generate_mipmaps(wxImage& image)
     return (unsigned int)level;
 }
 
-#if ENABLE_TEXTURES_FROM_SVG
 bool GLTexture::load_from_png(const std::string& filename, bool use_mipmaps)
 {
     // Load a PNG with an alpha channel.
@@ -510,7 +430,6 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, uns
 
     return true;
 }
-#endif // ENABLE_TEXTURES_FROM_SVG
 
 } // namespace GUI
 } // namespace Slic3r
diff --git a/src/slic3r/GUI/GLTexture.hpp b/src/slic3r/GUI/GLTexture.hpp
index 9b1f04ea6..017255647 100644
--- a/src/slic3r/GUI/GLTexture.hpp
+++ b/src/slic3r/GUI/GLTexture.hpp
@@ -38,10 +38,7 @@ namespace GUI {
         virtual ~GLTexture();
 
         bool load_from_file(const std::string& filename, bool use_mipmaps);
-#if ENABLE_TEXTURES_FROM_SVG
         bool load_from_svg_file(const std::string& filename, bool use_mipmaps, unsigned int max_size_px);
-#endif // ENABLE_TEXTURES_FROM_SVG
-#if ENABLE_SVG_ICONS
         // meanings of states: (std::pair<int, bool>)
         // first field (int):
         // 0 -> no changes
@@ -51,7 +48,6 @@ namespace GUI {
         // false -> no changes
         // true -> add background color
         bool load_from_svg_files_as_sprites_array(const std::vector<std::string>& filenames, const std::vector<std::pair<int, bool>>& states, unsigned int sprite_size_px);
-#endif // ENABLE_SVG_ICONS
         void reset();
 
         unsigned int get_id() const { return m_id; }
@@ -65,11 +61,9 @@ namespace GUI {
 
     protected:
         unsigned int generate_mipmaps(wxImage& image);
-#if ENABLE_TEXTURES_FROM_SVG
     private:
         bool load_from_png(const std::string& filename, bool use_mipmaps);
         bool load_from_svg(const std::string& filename, bool use_mipmaps, unsigned int max_size_px);
-#endif // ENABLE_TEXTURES_FROM_SVG
     };
 
 } // namespace GUI

From 8cc1486cabc672b9f0c8fd66c9e4a38dc0c5d405 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Wed, 27 Feb 2019 10:03:58 +0100
Subject: [PATCH 07/11] Fixed uv in gizmos overlay

---
 src/slic3r/GUI/GLCanvas3D.cpp |  4 ++--
 src/slic3r/GUI/GLTexture.cpp  | 38 +++++++++++++++++++----------------
 2 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 23f1502af..3e008df14 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -3175,8 +3175,8 @@ void GLCanvas3D::Gizmos::do_render_overlay(const GLCanvas3D& canvas, const GLCan
         GLGizmoBase::EState state = it->second->get_state();
 
 #if ENABLE_SVG_ICONS
-        float u_icon_size = m_overlay_icons_size * inv_tex_width;
-        float v_icon_size = m_overlay_icons_size * inv_tex_height;
+        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;
         float top = sprite_id * v_icon_size;
         float left = state * u_icon_size;
         float bottom = top + v_icon_size;
diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp
index 168ad8b64..36c40bb85 100644
--- a/src/slic3r/GUI/GLTexture.cpp
+++ b/src/slic3r/GUI/GLTexture.cpp
@@ -16,6 +16,8 @@
 #define NANOSVGRAST_IMPLEMENTATION
 #include "nanosvg/nanosvgrast.h"
 
+#include "libslic3r/utils.hpp"
+
 namespace Slic3r {
 namespace GUI {
 
@@ -116,16 +118,18 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
         ::memcpy((void*)sprite_white_only_data.data(), (const void*)sprite_data.data(), sprite_bytes);
         for (int i = 0; i < sprite_n_pixels; ++i)
         {
-            if (sprite_white_only_data.data()[i * 4] != 0)
-                ::memset((void*)&sprite_white_only_data.data()[i * 4], 255, 3);
+            int offset = i * 4;
+            if (sprite_white_only_data.data()[offset] != 0)
+                ::memset((void*)&sprite_white_only_data.data()[offset], 255, 3);
         }
 
         // makes gray only copy of the sprite
         ::memcpy((void*)sprite_gray_only_data.data(), (const void*)sprite_data.data(), sprite_bytes);
         for (int i = 0; i < sprite_n_pixels; ++i)
         {
-            if (sprite_gray_only_data.data()[i * 4] != 0)
-                ::memset((void*)&sprite_gray_only_data.data()[i * 4], 128, 3);
+            int offset = i * 4;
+            if (sprite_gray_only_data.data()[offset] != 0)
+                ::memset((void*)&sprite_gray_only_data.data()[offset], 128, 3);
         }
 
         int sprite_offset_px = sprite_id * sprite_size_px * m_width;
@@ -149,19 +153,19 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
             {
                 for (int i = 0; i < sprite_n_pixels; ++i)
                 {
-                    float alpha = (float)output_data.data()[i * 4 + 3] / 255.0f;
-                    output_data.data()[i * 4 + 0] = (unsigned char)(0 * (1.0f - alpha) + output_data.data()[i * 4 + 0] * alpha);
-                    output_data.data()[i * 4 + 1] = (unsigned char)(0 * (1.0f - alpha) + output_data.data()[i * 4 + 1] * alpha);
-                    output_data.data()[i * 4 + 2] = (unsigned char)(0 * (1.0f - alpha) + output_data.data()[i * 4 + 2] * alpha);
-                    output_data.data()[i * 4 + 3] = (unsigned char)(128 * (1.0f - alpha) + output_data.data()[i * 4 + 3] * alpha);
+                    int offset = i * 4;
+                    float alpha = (float)output_data.data()[offset + 3] / 255.0f;
+                    output_data.data()[offset + 0] = (unsigned char)(output_data.data()[offset + 0] * alpha);
+                    output_data.data()[offset + 1] = (unsigned char)(output_data.data()[offset + 1] * alpha);
+                    output_data.data()[offset + 2] = (unsigned char)(output_data.data()[offset + 2] * alpha);
+                    output_data.data()[offset + 3] = (unsigned char)(128 * (1.0f - alpha) + output_data.data()[offset + 3] * alpha);
                 }
             }
 
             int state_offset_px = sprite_offset_px + state_id * sprite_size_px;
             for (int j = 0; j < sprite_size_px; ++j)
             {
-                int data_offset = (state_offset_px + j * m_width) * 4;
-                ::memcpy((void*)&data.data()[data_offset], (const void*)&output_data.data()[j * sprite_stride], sprite_stride);
+                ::memcpy((void*)&data.data()[(state_offset_px + j * m_width) * 4], (const void*)&output_data.data()[j * sprite_stride], sprite_stride);
             }
         }
 
@@ -181,7 +185,6 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
 
     ::glBindTexture(GL_TEXTURE_2D, 0);
 
-
     m_source = filenames.front();
     
 #if 0
@@ -194,16 +197,17 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector<std::stri
 
     for (int h = 0; h < m_height; ++h)
     {
+        int px_h = h * m_width;
         for (int w = 0; w < m_width; ++w)
         {
-            int px = h * m_width + w;
-            int px_byte = px * 4;
-            output.SetRGB(w, h, data.data()[px_byte + 0], data.data()[px_byte + 1], data.data()[px_byte + 2]);
-            output.SetAlpha(w, h, data.data()[px_byte + 3]);
+            int offset = (px_h + w) * 4;
+            output.SetRGB(w, h, data.data()[offset + 0], data.data()[offset + 1], data.data()[offset + 2]);
+            output.SetAlpha(w, h, data.data()[offset + 3]);
         }
     }
 
-    output.SaveFile("C:/prusa/slic3r/svg_icons/temp/test_" + std::to_string(pass) + ".png", wxBITMAP_TYPE_PNG);
+    std::string out_filename = resources_dir() + "/icons/test_" + std::to_string(pass) + ".png";
+    output.SaveFile(out_filename, wxBITMAP_TYPE_PNG);
 #endif // 0
 
     return true;

From 5e9067d652e405dc22d935597f069c758a4eef6c Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Wed, 27 Feb 2019 10:28:36 +0100
Subject: [PATCH 08/11] Fixed build on Linux

---
 src/slic3r/GUI/GLTexture.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp
index 36c40bb85..9b4548686 100644
--- a/src/slic3r/GUI/GLTexture.cpp
+++ b/src/slic3r/GUI/GLTexture.cpp
@@ -16,7 +16,7 @@
 #define NANOSVGRAST_IMPLEMENTATION
 #include "nanosvg/nanosvgrast.h"
 
-#include "libslic3r/utils.hpp"
+#include "libslic3r/Utils.hpp"
 
 namespace Slic3r {
 namespace GUI {

From e5a2c0a8c8d8f24f3f96e28ce2725701e81563a8 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 28 Feb 2019 12:21:36 +0100
Subject: [PATCH 09/11] ENABLE_MODE_AWARE_TOOLBAR_ITEMS set as default

---
 src/libslic3r/Technologies.hpp |  8 --------
 src/slic3r/GUI/GLCanvas3D.cpp  |  4 ----
 src/slic3r/GUI/GLCanvas3D.hpp  |  2 --
 src/slic3r/GUI/GLToolbar.cpp   | 20 --------------------
 src/slic3r/GUI/GLToolbar.hpp   |  6 ------
 src/slic3r/GUI/GUI_Preview.cpp |  2 --
 src/slic3r/GUI/GUI_Preview.hpp |  2 --
 src/slic3r/GUI/Plater.cpp      |  2 --
 8 files changed, 46 deletions(-)

diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 9ca3daadb..451a0b27c 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -42,14 +42,6 @@
 #define ENABLE_VOLUMES_CENTERING_FIXES (1 && ENABLE_1_42_0_ALPHA4)
 
 
-//====================
-// 1.42.0.alpha5 techs
-//====================
-#define ENABLE_1_42_0_ALPHA5 1
-
-// Toolbar items hidden/shown in dependence of the user mode
-#define ENABLE_MODE_AWARE_TOOLBAR_ITEMS (1 && ENABLE_1_42_0_ALPHA5)
-
 //====================
 // 1.42.0.alpha7 techs
 //====================
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index d26a06a61..ae3e4dc70 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -4135,7 +4135,6 @@ void GLCanvas3D::update_volumes_colors_by_extruder()
         m_volumes.update_colors_by_extruder(m_config);
 }
 
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 void GLCanvas3D::update_toolbar_items_visibility()
 {
     ConfigOptionMode mode = wxGetApp().get_mode();
@@ -4144,7 +4143,6 @@ void GLCanvas3D::update_toolbar_items_visibility()
     m_toolbar.set_item_visible("splitvolumes", mode != comSimple);
     m_dirty = true;
 }
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
 // Returns a Rect object denoting size and position of the Reset button used by a gizmo.
 // Returns in either screen or viewport coords.
@@ -6056,9 +6054,7 @@ bool GLCanvas3D::_init_toolbar()
 
     enable_toolbar_item("add", true);
 
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     update_toolbar_items_visibility();
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
     return true;
 }
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 096789d4a..1659236c2 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -953,9 +953,7 @@ public:
 
     void update_volumes_colors_by_extruder();
 
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     void update_toolbar_items_visibility();
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
 #if !ENABLE_IMGUI
     Rect get_gizmo_reset_rect(const GLCanvas3D& canvas, bool viewport) const;
diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp
index 144662c3f..1b8ccc165 100644
--- a/src/slic3r/GUI/GLToolbar.cpp
+++ b/src/slic3r/GUI/GLToolbar.cpp
@@ -38,9 +38,7 @@ GLToolbarItem::Data::Data()
     , tooltip("")
     , sprite_id(-1)
     , is_toggable(false)
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     , visible(true)
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 {
 }
 
@@ -362,7 +360,6 @@ bool GLToolbar::is_item_disabled(const std::string& name) const
     return false;
 }
 
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 bool GLToolbar::is_item_visible(const std::string& name) const
 {
     for (GLToolbarItem* item : m_items)
@@ -400,7 +397,6 @@ void GLToolbar::set_item_visible(const std::string& name, bool visible)
     }
 
 }
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
 std::string GLToolbar::update_hover_state(const Vec2d& mouse_pos, GLCanvas3D& parent)
 {
@@ -547,10 +543,8 @@ float GLToolbar::get_main_size() const
     float size = 2.0f * m_layout.border;
     for (unsigned int i = 0; i < (unsigned int)m_items.size(); ++i)
     {
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
         if (!m_items[i]->is_visible())
             continue;
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
         if (m_items[i]->is_separator())
             size += m_layout.separator_size;
@@ -566,10 +560,8 @@ float GLToolbar::get_main_size() const
     float size = 2.0f * m_layout.border * m_layout.icons_scale;
     for (unsigned int i = 0; i < (unsigned int)m_items.size(); ++i)
     {
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
         if (!m_items[i]->is_visible())
             continue;
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
         if (m_items[i]->is_separator())
             size += m_layout.separator_size * m_layout.icons_scale;
@@ -618,10 +610,8 @@ std::string GLToolbar::update_hover_state_horizontal(const Vec2d& mouse_pos, GLC
         
     for (GLToolbarItem* item : m_items)
     {
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
         if (!item->is_visible())
             continue;
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
         if (item->is_separator())
             left += separator_stride;
@@ -724,10 +714,8 @@ std::string GLToolbar::update_hover_state_vertical(const Vec2d& mouse_pos, GLCan
 
     for (GLToolbarItem* item : m_items)
     {
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
         if (!item->is_visible())
             continue;
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
         if (item->is_separator())
             top -= separator_stride;
@@ -832,10 +820,8 @@ int GLToolbar::contains_mouse_horizontal(const Vec2d& mouse_pos, const GLCanvas3
     {
         ++id;
         
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
         if (!item->is_visible())
             continue;
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
         if (item->is_separator())
             left += separator_stride;
@@ -890,10 +876,8 @@ int GLToolbar::contains_mouse_vertical(const Vec2d& mouse_pos, const GLCanvas3D&
     {
         ++id;
 
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
         if (!item->is_visible())
             continue;
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
         if (item->is_separator())
             top -= separator_stride;
@@ -1050,10 +1034,8 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) const
     // renders icons
     for (const GLToolbarItem* item : m_items)
     {
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
         if (!item->is_visible())
             continue;
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
         if (item->is_separator())
             left += separator_stride;
@@ -1207,10 +1189,8 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) const
     // renders icons
     for (const GLToolbarItem* item : m_items)
     {
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
         if (!item->is_visible())
             continue;
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
         if (item->is_separator())
             top -= separator_stride;
diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp
index e14f7b3bb..4ca72fc4a 100644
--- a/src/slic3r/GUI/GLToolbar.hpp
+++ b/src/slic3r/GUI/GLToolbar.hpp
@@ -58,9 +58,7 @@ public:
         unsigned int sprite_id;
         bool is_toggable;
         wxEventType action_event;
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
         bool visible;
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
         Data();
     };
@@ -90,10 +88,8 @@ public:
     bool is_pressed() const { return (m_state == Pressed) || (m_state == HoverPressed); }
 
     bool is_toggable() const { return m_data.is_toggable; }
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     bool is_visible() const { return m_data.visible; }
     void set_visible(bool visible) { m_data.visible = visible; }
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     bool is_separator() const { return m_type == Separator; }
 
     void render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int tex_width, unsigned int tex_height, unsigned int icon_size) const;
@@ -263,10 +259,8 @@ public:
 
     bool is_item_pressed(const std::string& name) const;
     bool is_item_disabled(const std::string& name) const;
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     bool is_item_visible(const std::string& name) const;
     void set_item_visible(const std::string& name, bool visible);
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
     std::string update_hover_state(const Vec2d& mouse_pos, GLCanvas3D& parent);
 
diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp
index 549dbd7e6..dff03b51a 100644
--- a/src/slic3r/GUI/GUI_Preview.cpp
+++ b/src/slic3r/GUI/GUI_Preview.cpp
@@ -137,13 +137,11 @@ void View3D::mirror_selection(Axis axis)
         m_canvas->mirror_selection(axis);
 }
 
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 void View3D::update_toolbar_items_visibility()
 {
     if (m_canvas != nullptr)
         m_canvas->update_toolbar_items_visibility();
 }
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 
 void View3D::enable_toolbar_item(const std::string& name, bool enable)
 {
diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp
index 6cd67013c..e4c3fb60d 100644
--- a/src/slic3r/GUI/GUI_Preview.hpp
+++ b/src/slic3r/GUI/GUI_Preview.hpp
@@ -60,9 +60,7 @@ public:
     void delete_selected();
     void mirror_selection(Axis axis);
 
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     void update_toolbar_items_visibility();
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     void enable_toolbar_item(const std::string& name, bool enable);
     int check_volumes_outside_state() const;
 
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 24d366ced..bc2917fd0 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2763,10 +2763,8 @@ void Plater::priv::set_bed_shape(const Pointfs& shape)
 void Plater::priv::update_object_menu()
 {
     sidebar->obj_list()->append_menu_items_add_volume(&object_menu);
-#if ENABLE_MODE_AWARE_TOOLBAR_ITEMS
     if (view3D != nullptr)
         view3D->update_toolbar_items_visibility();
-#endif // ENABLE_MODE_AWARE_TOOLBAR_ITEMS
 }
 
 // Plater / Public

From 319a48f42df9ee99ab70d4fbeb07156442071a3b Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Mon, 4 Mar 2019 14:21:52 +0100
Subject: [PATCH 10/11] Added svg icons for view toolbar and gismos

---
 resources/icons/cut.svg          | 28 +++++++++++++++++++
 resources/icons/editor.svg       | 20 +++++++++++++
 resources/icons/move.svg         | 42 ++++++++++++++++++++++++++++
 resources/icons/place.svg        | 32 +++++++++++++++++++++
 resources/icons/preview.svg      | 48 ++++++++++++++++++++++++++++++++
 resources/icons/rotate.svg       | 25 +++++++++++++++++
 resources/icons/scale.svg        | 38 +++++++++++++++++++++++++
 resources/icons/sla_supports.svg | 42 ++++++++++++++++++++++++++++
 src/slic3r/GUI/GLCanvas3D.cpp    | 12 ++++----
 src/slic3r/GUI/Plater.cpp        |  4 +--
 10 files changed, 283 insertions(+), 8 deletions(-)
 create mode 100644 resources/icons/cut.svg
 create mode 100644 resources/icons/editor.svg
 create mode 100644 resources/icons/move.svg
 create mode 100644 resources/icons/place.svg
 create mode 100644 resources/icons/preview.svg
 create mode 100644 resources/icons/rotate.svg
 create mode 100644 resources/icons/scale.svg
 create mode 100644 resources/icons/sla_supports.svg

diff --git a/resources/icons/cut.svg b/resources/icons/cut.svg
new file mode 100644
index 000000000..c5c952742
--- /dev/null
+++ b/resources/icons/cut.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<g id="cut">
+	<g>
+		<path fill="#ED6B21" d="M118.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
+			S118.95,65.5,118.12,65.5z M98.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
+			S98.95,65.5,98.12,65.5z M78.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
+			S78.95,65.5,78.12,65.5z M58.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
+			S58.95,65.5,58.12,65.5z M38.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
+			S38.95,65.5,38.12,65.5z M18.12,65.5h-10c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10c0.83,0,1.5,0.67,1.5,1.5
+			S18.95,65.5,18.12,65.5z"/>
+	</g>
+	<g>
+		<g>
+			<path fill="#FFFFFF" d="M108.79,51.6H19.21c-1.93,0-3.5-1.57-3.5-3.5V10.12c0-1.93,1.57-3.5,3.5-3.5h89.57
+				c1.93,0,3.5,1.57,3.5,3.5V48.1C112.29,50.03,110.71,51.6,108.79,51.6z M19.21,9.62c-0.27,0-0.5,0.23-0.5,0.5V48.1
+				c0,0.27,0.23,0.5,0.5,0.5h89.57c0.27,0,0.5-0.23,0.5-0.5V10.12c0-0.27-0.23-0.5-0.5-0.5H19.21z"/>
+		</g>
+		<g>
+			<path fill="#FFFFFF" d="M108.79,121.38H19.21c-1.93,0-3.5-1.57-3.5-3.5V79.4c0-1.93,1.57-3.5,3.5-3.5h89.57
+				c1.93,0,3.5,1.57,3.5,3.5v38.49C112.29,119.81,110.71,121.38,108.79,121.38z M19.21,78.9c-0.27,0-0.5,0.23-0.5,0.5v38.49
+				c0,0.27,0.23,0.5,0.5,0.5h89.57c0.27,0,0.5-0.23,0.5-0.5V79.4c0-0.27-0.23-0.5-0.5-0.5H19.21z"/>
+		</g>
+	</g>
+</g>
+</svg>
diff --git a/resources/icons/editor.svg b/resources/icons/editor.svg
new file mode 100644
index 000000000..5866ce055
--- /dev/null
+++ b/resources/icons/editor.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<g id="editor">
+	<g>
+		<path fill="none" stroke="#ED6B21" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+			M118.68,8.83L92.1,37.03c-0.75,0.8-2.27,1.46-3.37,1.46H9.44"/>
+	</g>
+	<g>
+		
+			<line fill="none" stroke="#ED6B21" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="90.72" y1="118.69" x2="90.72" y2="38.81"/>
+	</g>
+	<g>
+		<path fill="none" stroke="#ED6B21" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+			M119.88,91.51v-81.4c0-1.1-0.9-2-2-2H42.92c-1.1,0-2.66,0.61-3.47,1.36L9.59,37.13c-0.81,0.75-1.47,2.26-1.47,3.36v77.39
+			c0,1.1,0.9,2,2,2h78.61c1.1,0,2.65-0.63,3.44-1.39l27.67-26.82"/>
+	</g>
+</g>
+</svg>
diff --git a/resources/icons/move.svg b/resources/icons/move.svg
new file mode 100644
index 000000000..019ea8ca7
--- /dev/null
+++ b/resources/icons/move.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<g id="move">
+	<g>
+		<path fill="#FFFFFF" d="M83.47,86.79H44.53c-1.83,0-3.32-1.49-3.32-3.32V44.53c0-1.83,1.49-3.32,3.32-3.32h38.94
+			c1.83,0,3.32,1.49,3.32,3.32v38.94C86.79,85.3,85.3,86.79,83.47,86.79z M44.53,44.21c-0.17,0-0.32,0.15-0.32,0.32v38.94
+			c0,0.17,0.15,0.32,0.32,0.32h38.94c0.17,0,0.32-0.15,0.32-0.32V44.53c0-0.17-0.15-0.32-0.32-0.32H44.53z"/>
+	</g>
+	<g>
+		<g>
+			<g>
+				<path fill="#ED6B21" d="M76.81,28.66H51.19c-1.06,0-1.9-0.46-2.31-1.25c-0.4-0.8-0.28-1.74,0.35-2.6L61.72,7.7
+					c0.57-0.78,1.4-1.22,2.28-1.22c0,0,0,0,0,0c0.89,0,1.72,0.45,2.28,1.22l12.48,17.1c0.63,0.86,0.75,1.81,0.35,2.6
+					C78.71,28.2,77.87,28.66,76.81,28.66z M52.33,25.66l23.34,0L64,9.67L52.33,25.66z"/>
+			</g>
+		</g>
+		<g>
+			<g>
+				<path fill="#ED6B21" d="M26.44,79.35c-0.54,0-1.1-0.2-1.63-0.58L7.7,66.28c-0.78-0.57-1.22-1.4-1.22-2.28s0.45-1.72,1.22-2.29
+					l17.1-12.48c0.86-0.62,1.81-0.75,2.6-0.35s1.25,1.25,1.25,2.31v25.61c0,1.06-0.46,1.9-1.25,2.31
+					C27.1,79.27,26.77,79.35,26.44,79.35z M9.67,64l15.99,11.67l0-23.34L9.67,64z"/>
+			</g>
+		</g>
+		<g>
+			<g>
+				<path fill="#ED6B21" d="M64,121.52c-0.89,0-1.72-0.45-2.28-1.22l-12.48-17.1c-0.63-0.86-0.75-1.81-0.35-2.6s1.25-1.25,2.31-1.25
+					h25.61c1.06,0,1.9,0.46,2.31,1.25c0.4,0.8,0.28,1.74-0.35,2.6l-12.48,17.1C65.72,121.07,64.89,121.52,64,121.52L64,121.52z
+					 M52.33,102.34L64,118.33l11.67-15.99L52.33,102.34z M76.87,102.34L76.87,102.34L76.87,102.34z"/>
+			</g>
+		</g>
+		<g>
+			<g>
+				<path fill="#ED6B21" d="M101.56,79.35c-0.34,0-0.67-0.08-0.97-0.23c-0.8-0.41-1.25-1.25-1.25-2.31V51.19
+					c0-1.06,0.46-1.9,1.25-2.31c0.8-0.41,1.75-0.28,2.6,0.35l17.1,12.48c0.78,0.57,1.22,1.4,1.22,2.29s-0.45,1.72-1.22,2.28
+					l-17.1,12.48C102.67,79.15,102.1,79.35,101.56,79.35z M102.34,52.33l0,23.34L118.33,64L102.34,52.33z"/>
+			</g>
+		</g>
+	</g>
+</g>
+</svg>
diff --git a/resources/icons/place.svg b/resources/icons/place.svg
new file mode 100644
index 000000000..6acc2451e
--- /dev/null
+++ b/resources/icons/place.svg
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<g id="place">
+	<g>
+		<path fill="#FFFFFF" d="M101.56,93.65c-0.28,0-0.57-0.04-0.85-0.1L37.65,77.82c-0.9-0.22-1.67-0.79-2.15-1.59s-0.62-1.74-0.4-2.65
+			l15.72-63.06c0.47-1.87,2.37-3.02,4.24-2.55l63.06,15.72c1.87,0.47,3.02,2.37,2.55,4.24l-15.72,63.06h0
+			c-0.23,0.91-0.79,1.67-1.59,2.15C102.8,93.47,102.18,93.65,101.56,93.65z M54.21,10.87c-0.22,0-0.43,0.15-0.49,0.38L38.01,74.31
+			c-0.04,0.17,0.02,0.31,0.06,0.38c0.04,0.07,0.13,0.19,0.31,0.23l63.06,15.72c0.17,0.04,0.31-0.02,0.38-0.06
+			c0.07-0.04,0.19-0.13,0.23-0.3c0,0,0,0,0,0l15.72-63.06c0.07-0.26-0.1-0.54-0.37-0.61L54.33,10.88
+			C54.29,10.87,54.25,10.87,54.21,10.87z"/>
+	</g>
+	<g>
+		<path fill="#ED6B21" d="M118.02,120.54H9.98c-1.93,0-3.5-1.57-3.5-3.5v-4c0-1.93,1.57-3.5,3.5-3.5h108.04c1.93,0,3.5,1.57,3.5,3.5
+			v4C121.52,118.97,119.95,120.54,118.02,120.54z M9.98,112.54c-0.27,0-0.5,0.23-0.5,0.5v4c0,0.27,0.23,0.5,0.5,0.5h108.04
+			c0.27,0,0.5-0.23,0.5-0.5v-4c0-0.27-0.23-0.5-0.5-0.5H9.98z"/>
+	</g>
+	<g>
+		<g>
+			<path fill="#ED6B21" d="M15.99,103.92c-0.08,0-0.15,0-0.23-0.01c-0.92-0.09-1.69-0.72-2.11-1.73L7.42,87.2
+				c-0.41-0.98-0.33-1.97,0.22-2.71c0.55-0.74,1.48-1.11,2.53-1L25.29,85c1.06,0.11,1.89,0.65,2.28,1.48
+				c0.39,0.84,0.27,1.82-0.32,2.71l-9.08,13.43C17.61,103.46,16.82,103.92,15.99,103.92z M10.4,86.52l5.72,13.77l8.36-12.35
+				L10.4,86.52z M24.81,87.43L24.81,87.43z"/>
+		</g>
+		<g>
+			<path fill="#ED6B21" d="M17.54,85.9c-0.83,0-1.5-0.67-1.5-1.5c0-8.88,8.1-24.47,17.34-25.5c0.82-0.09,1.56,0.5,1.66,1.33
+				c0.09,0.82-0.5,1.56-1.33,1.66c-6.94,0.77-14.67,14.08-14.67,22.52C19.04,85.22,18.37,85.9,17.54,85.9z"/>
+		</g>
+	</g>
+</g>
+</svg>
diff --git a/resources/icons/preview.svg b/resources/icons/preview.svg
new file mode 100644
index 000000000..658bba2c6
--- /dev/null
+++ b/resources/icons/preview.svg
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<g id="preview">
+	<g>
+		<path fill="#FFFFFF" d="M90.72,121.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
+			c0.59-0.58,1.54-0.57,2.12,0.02c0.58,0.59,0.57,1.54-0.02,2.12l-29.16,28.57C91.49,121.23,91.11,121.38,90.72,121.38z"/>
+	</g>
+	<g>
+		<path fill="#FFFFFF" d="M90.72,111.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.14
+			c0.59-0.58,1.54-0.57,2.12,0.02c0.58,0.59,0.57,1.54-0.02,2.12l-29.16,28.57C91.49,111.23,91.11,111.38,90.72,111.38z"/>
+	</g>
+	<g>
+		<path fill="#FFFFFF" d="M90.72,101.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.14
+			c0.59-0.58,1.54-0.57,2.12,0.02s0.57,1.54-0.02,2.12l-29.16,28.57C91.49,101.23,91.11,101.38,90.72,101.38z"/>
+	</g>
+	<g>
+		<path fill="#FFFFFF" d="M90.72,91.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
+			c0.59-0.58,1.54-0.57,2.12,0.02s0.57,1.54-0.02,2.12L91.77,90.95C91.49,91.23,91.11,91.38,90.72,91.38z"/>
+	</g>
+	<g>
+		<path fill="#FFFFFF" d="M90.72,81.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
+			c0.59-0.58,1.54-0.57,2.12,0.02c0.58,0.59,0.57,1.54-0.02,2.12L91.77,80.95C91.49,81.23,91.11,81.38,90.72,81.38z"/>
+	</g>
+	<g>
+		<path fill="#FFFFFF" d="M90.72,71.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
+			c0.59-0.58,1.54-0.57,2.12,0.02c0.58,0.59,0.57,1.54-0.02,2.12L91.77,70.95C91.49,71.23,91.11,71.38,90.72,71.38z"/>
+	</g>
+	<g>
+		<path fill="#ED6B21" d="M90.72,61.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
+			c0.59-0.58,1.54-0.57,2.12,0.02c0.58,0.59,0.57,1.54-0.02,2.12L91.77,60.95C91.49,61.23,91.11,61.38,90.72,61.38z"/>
+	</g>
+	<g>
+		<path fill="#FFFFFF" d="M90.72,51.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
+			c0.59-0.58,1.54-0.57,2.12,0.02s0.57,1.54-0.02,2.12L91.77,50.95C91.49,51.23,91.11,51.38,90.72,51.38z"/>
+	</g>
+	<g>
+		<g>
+			<path fill="#FFFFFF" d="M88.72,41.38H9.18c-1.68,0-2.22-0.95-2.37-1.36s-0.37-1.48,0.89-2.59L38.43,10.5
+				c1.1-0.96,3.03-1.69,4.49-1.69h75.85c1.65,0,2.22,0.94,2.38,1.34s0.42,1.47-0.75,2.63c0,0,0,0,0,0L93.2,39.55
+				C92.14,40.59,90.21,41.38,88.72,41.38z M11.17,38.38h77.55c0.71,0,1.87-0.47,2.37-0.97l26.01-25.6H42.92
+				c-0.74,0-1.96,0.46-2.51,0.95L11.17,38.38z M118.89,11.82C118.89,11.82,118.89,11.82,118.89,11.82
+				C118.89,11.82,118.89,11.82,118.89,11.82z M119.34,11.71L119.34,11.71L119.34,11.71z"/>
+		</g>
+	</g>
+</g>
+</svg>
diff --git a/resources/icons/rotate.svg b/resources/icons/rotate.svg
new file mode 100644
index 000000000..508c4f39d
--- /dev/null
+++ b/resources/icons/rotate.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<g id="rotate">
+	<g>
+		<path fill="#FFFFFF" d="M66.98,120.65c-0.9,0-1.79-0.34-2.47-1.02L25.27,80.4c-0.66-0.66-1.02-1.54-1.02-2.47s0.36-1.82,1.02-2.47
+			L64.5,36.22c1.37-1.36,3.58-1.36,4.95,0l39.23,39.23c1.36,1.36,1.36,3.58,0,4.95l-39.23,39.23
+			C68.77,120.31,67.88,120.65,66.98,120.65z M66.98,38.19c-0.13,0-0.26,0.05-0.35,0.14L27.39,77.57c-0.13,0.12-0.14,0.28-0.14,0.35
+			s0.02,0.23,0.14,0.35l39.23,39.23c0.19,0.19,0.52,0.19,0.71,0l39.23-39.23c0.19-0.19,0.19-0.52,0-0.71L67.33,38.34
+			C67.24,38.24,67.11,38.19,66.98,38.19z"/>
+	</g>
+	<g>
+		<path fill="#ED6B21" d="M11.27,78.49c-0.65,0-1.25-0.43-1.44-1.08c-1.45-5.02-2.19-10.21-2.19-15.41
+			c0-30.59,24.89-55.48,55.48-55.48c15.38,0,29.68,6.15,40.27,17.33c0.57,0.6,0.54,1.55-0.06,2.12c-0.6,0.57-1.55,0.54-2.12-0.06
+			C91.2,15.34,77.67,9.52,63.12,9.52c-28.94,0-52.48,23.54-52.48,52.48c0,4.92,0.7,9.82,2.07,14.58c0.23,0.8-0.23,1.63-1.03,1.86
+			C11.55,78.47,11.41,78.49,11.27,78.49z"/>
+	</g>
+	<g>
+		<path fill="#ED6B21" d="M117.27,42.19c-0.22,0-0.44-0.02-0.67-0.07l-23.34-4.67c-1.07-0.21-1.84-0.84-2.11-1.73
+			c-0.27-0.88,0.02-1.83,0.8-2.61l18.98-18.98c0.77-0.77,1.73-1.07,2.61-0.8c0.88,0.27,1.51,1.04,1.73,2.11v0l4.67,23.34
+			c0.2,1.01-0.06,1.97-0.71,2.62C118.72,41.92,118.03,42.19,117.27,42.19z M94.64,34.66l22.29,4.47l-4.45-22.3L94.64,34.66z"/>
+	</g>
+</g>
+</svg>
diff --git a/resources/icons/scale.svg b/resources/icons/scale.svg
new file mode 100644
index 000000000..ee9cef95a
--- /dev/null
+++ b/resources/icons/scale.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<g id="scale">
+	<g>
+		<path fill="#FFFFFF" d="M118.05,121.55H57.99c-1.93,0-3.5-1.57-3.5-3.5V57.99c0-1.93,1.57-3.5,3.5-3.5h60.06
+			c1.93,0,3.5,1.57,3.5,3.5v60.06C121.55,119.98,119.98,121.55,118.05,121.55z M57.99,57.49c-0.27,0-0.5,0.23-0.5,0.5v60.06
+			c0,0.27,0.23,0.5,0.5,0.5h60.06c0.27,0,0.5-0.23,0.5-0.5V57.99c0-0.27-0.23-0.5-0.5-0.5H57.99z"/>
+	</g>
+	<g>
+		<g>
+			<path fill="#ED6B21" d="M43.54,121.55h-10.5c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10.5c0.83,0,1.5,0.67,1.5,1.5
+				S44.37,121.55,43.54,121.55z"/>
+		</g>
+		<g>
+			<path fill="#ED6B21" d="M18.35,121.55h-8.4c-1.93,0-3.5-1.57-3.5-3.5v-10.5c0-0.83,0.67-1.5,1.5-1.5s1.5,0.67,1.5,1.5v10.5
+				c0,0.27,0.23,0.5,0.5,0.5h8.4c0.83,0,1.5,0.67,1.5,1.5S19.18,121.55,18.35,121.55z M7.95,94.36c-0.83,0-1.5-0.67-1.5-1.5V70.82
+				c0-0.83,0.67-1.5,1.5-1.5s1.5,0.67,1.5,1.5v22.04C9.45,93.69,8.78,94.36,7.95,94.36z M7.95,57.63c-0.83,0-1.5-0.67-1.5-1.5V34.1
+				c0-0.83,0.67-1.5,1.5-1.5s1.5,0.67,1.5,1.5v22.04C9.45,56.96,8.78,57.63,7.95,57.63z M7.95,20.91c-0.83,0-1.5-0.67-1.5-1.5V9.95
+				c0-1.93,1.57-3.5,3.5-3.5h9.44c0.83,0,1.5,0.67,1.5,1.5s-0.67,1.5-1.5,1.5H9.95c-0.27,0-0.5,0.23-0.5,0.5v9.46
+				C9.45,20.24,8.78,20.91,7.95,20.91z M120.05,19.83c-0.83,0-1.5-0.67-1.5-1.5V9.95c0-0.27-0.23-0.5-0.5-0.5h-10.52
+				c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h10.52c1.93,0,3.5,1.57,3.5,3.5v8.38C121.55,19.16,120.88,19.83,120.05,19.83z
+				 M92.84,9.45H70.81c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h22.04c0.83,0,1.5,0.67,1.5,1.5S93.67,9.45,92.84,9.45z
+				 M56.12,9.45H34.08c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h22.04c0.83,0,1.5,0.67,1.5,1.5S56.94,9.45,56.12,9.45z"/>
+		</g>
+		<g>
+			<path fill="#ED6B21" d="M120.05,45.04c-0.83,0-1.5-0.67-1.5-1.5v-10.5c0-0.83,0.67-1.5,1.5-1.5s1.5,0.67,1.5,1.5v10.5
+				C121.55,44.37,120.88,45.04,120.05,45.04z"/>
+		</g>
+	</g>
+	<g>
+		<path fill="#ED6B21" d="M49.38,44.41c0.78-0.78,0.78-2.05,0-2.83l-9.27-9.27c-0.78-0.78-0.78-2.05,0-2.83l4.95-4.95
+			c0.78-0.78,0.51-1.41-0.59-1.41H25.13c-1.1,0-2,0.9-2,2v19.34c0,1.1,0.64,1.36,1.41,0.59l4.95-4.95c0.78-0.78,2.05-0.78,2.83,0
+			l9.27,9.27c0.78,0.78,2.05,0.78,2.83,0L49.38,44.41z"/>
+	</g>
+</g>
+</svg>
diff --git a/resources/icons/sla_supports.svg b/resources/icons/sla_supports.svg
new file mode 100644
index 000000000..119fb6afc
--- /dev/null
+++ b/resources/icons/sla_supports.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
+<g id="SLA_supports">
+	<g>
+		<path fill="#FFFFFF" d="M117.02,121.54H11.12c-1.93,0-3.5-1.57-3.5-3.5v-3.99c0-1.93,1.57-3.5,3.5-3.5h105.9
+			c1.93,0,3.5,1.57,3.5,3.5v3.99C120.52,119.97,118.95,121.54,117.02,121.54z M11.12,113.55c-0.27,0-0.5,0.23-0.5,0.5v3.99
+			c0,0.27,0.23,0.5,0.5,0.5h105.9c0.27,0,0.5-0.23,0.5-0.5v-3.99c0-0.27-0.23-0.5-0.5-0.5H11.12z"/>
+	</g>
+	<g>
+		<path fill="#ED6B21" d="M32.08,108.06c-0.83,0-1.5-0.67-1.5-1.5v-18.8c0-0.83,0.67-1.5,1.5-1.5s1.5,0.67,1.5,1.5v18.8
+			C33.58,107.39,32.9,108.06,32.08,108.06z"/>
+	</g>
+	<g>
+		<path fill="#ED6B21" d="M48.02,108.06c-0.83,0-1.5-0.67-1.5-1.5v-8.14c0-0.83,0.67-1.5,1.5-1.5s1.5,0.67,1.5,1.5v8.14
+			C49.52,107.39,48.85,108.06,48.02,108.06z"/>
+	</g>
+	<g>
+		<path fill="#ED6B21" d="M88.04,108.06c-0.83,0-1.5-0.67-1.5-1.5V93.09c0-0.83,0.67-1.5,1.5-1.5s1.5,0.67,1.5,1.5v13.47
+			C89.54,107.39,88.87,108.06,88.04,108.06z"/>
+	</g>
+	<path fill="#FFFFFF" d="M70.36,95.12l-6.29,4.2l-14.45-9.63l-2.5,2.6l15.96,10.64c0.3,0.2,0.64,0.3,0.99,0.3s0.69-0.1,0.99-0.3
+		l7.9-5.27L70.36,95.12z"/>
+	<polygon fill="#FFFFFF" points="88.97,86.99 86.35,84.46 77.91,90.09 80.5,92.63 	"/>
+	<path fill="#FFFFFF" d="M103.99,35.1L65.05,9.14c-0.6-0.4-1.37-0.4-1.97,0L24.14,35.1c-0.49,0.33-0.79,0.88-0.79,1.48v38.91
+		c0,0.59,0.3,1.15,0.79,1.48l15.47,10.32l2.5-2.6L26.9,74.54V37.53l37.16-24.78l37.16,24.78v37.01l-7.32,4.88l2.61,2.53l7.46-4.98
+		c0.49-0.33,0.79-0.88,0.79-1.48V36.58C104.78,35.99,104.49,35.43,103.99,35.1z"/>
+	<g>
+		<path fill="#ED6B21" d="M96.16,108.06c-0.83,0-1.5-0.67-1.5-1.5V87.93L79,73.22c-0.6-0.57-0.63-1.52-0.07-2.12
+			c0.57-0.6,1.52-0.63,2.12-0.07l16.13,15.15c0.3,0.28,0.47,0.68,0.47,1.09v19.27C97.66,107.39,96.99,108.06,96.16,108.06z"/>
+	</g>
+	<g>
+		<path fill="#ED6B21" d="M40.08,108.06c-0.83,0-1.5-0.67-1.5-1.5V93.29c0-0.39,0.15-0.76,0.41-1.04l16.13-16.91
+			c0.57-0.6,1.52-0.62,2.12-0.05c0.6,0.57,0.62,1.52,0.05,2.12L41.58,93.89v12.67C41.58,107.39,40.91,108.06,40.08,108.06z"/>
+	</g>
+	<g>
+		<path fill="#ED6B21" d="M80.13,108.06c-0.83,0-1.5-0.67-1.5-1.5v-7.65L62.94,83.19c-0.59-0.59-0.58-1.54,0-2.12
+			c0.59-0.58,1.54-0.59,2.12,0l16.13,16.15c0.28,0.28,0.44,0.66,0.44,1.06v8.27C81.63,107.39,80.96,108.06,80.13,108.06z"/>
+	</g>
+</g>
+</svg>
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 4fba8009a..95c010c45 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2476,7 +2476,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
     }
 
 #if ENABLE_SVG_ICONS
-    GLGizmoBase* gizmo = new GLGizmoMove3D(parent, "add.svg", 0);
+    GLGizmoBase* gizmo = new GLGizmoMove3D(parent, "move.svg", 0);
 #else
     GLGizmoBase* gizmo = new GLGizmoMove3D(parent, 0);
 #endif // ENABLE_SVG_ICONS
@@ -2489,7 +2489,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
     m_gizmos.insert(GizmosMap::value_type(Move, gizmo));
 
 #if ENABLE_SVG_ICONS
-    gizmo = new GLGizmoScale3D(parent, "remove.svg", 1);
+    gizmo = new GLGizmoScale3D(parent, "scale.svg", 1);
 #else
     gizmo = new GLGizmoScale3D(parent, 1);
 #endif // ENABLE_SVG_ICONS
@@ -2502,7 +2502,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
     m_gizmos.insert(GizmosMap::value_type(Scale, gizmo));
 
 #if ENABLE_SVG_ICONS
-    gizmo = new GLGizmoRotate3D(parent, "delete_all.svg", 2);
+    gizmo = new GLGizmoRotate3D(parent, "rotate.svg", 2);
 #else
     gizmo = new GLGizmoRotate3D(parent, 2);
 #endif // ENABLE_SVG_ICONS
@@ -2521,7 +2521,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
     m_gizmos.insert(GizmosMap::value_type(Rotate, gizmo));
 
 #if ENABLE_SVG_ICONS
-    gizmo = new GLGizmoFlatten(parent, "arrange.svg", 3);
+    gizmo = new GLGizmoFlatten(parent, "place.svg", 3);
 #else
     gizmo = new GLGizmoFlatten(parent, 3);
 #endif // ENABLE_SVG_ICONS
@@ -2536,7 +2536,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
     m_gizmos.insert(GizmosMap::value_type(Flatten, gizmo));
 
 #if ENABLE_SVG_ICONS
-    gizmo = new GLGizmoCut(parent, "instance_add.svg", 4);
+    gizmo = new GLGizmoCut(parent, "cut.svg", 4);
 #else
     gizmo = new GLGizmoCut(parent, 4);
 #endif // ENABLE_SVG_ICONS
@@ -2551,7 +2551,7 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
     m_gizmos.insert(GizmosMap::value_type(Cut, gizmo));
 
 #if ENABLE_SVG_ICONS
-    gizmo = new GLGizmoSlaSupports(parent, "instance_remove.svg", 5);
+    gizmo = new GLGizmoSlaSupports(parent, "sla_supports.svg", 5);
 #else
     gizmo = new GLGizmoSlaSupports(parent, 5);
 #endif // ENABLE_SVG_ICONS
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index dccfa61a8..661af87f6 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2656,7 +2656,7 @@ void Plater::priv::init_view_toolbar()
 
     item.name = "3D";
 #if ENABLE_SVG_ICONS
-    item.icon_filename = "add.svg";
+    item.icon_filename = "editor.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("3D editor view") + " [" + GUI::shortkey_ctrl_prefix() + "5]";
     item.sprite_id = 0;
@@ -2667,7 +2667,7 @@ void Plater::priv::init_view_toolbar()
 
     item.name = "Preview";
 #if ENABLE_SVG_ICONS
-    item.icon_filename = "remove.svg";
+    item.icon_filename = "preview.svg";
 #endif // ENABLE_SVG_ICONS
     item.tooltip = GUI::L_str("Preview") + " [" + GUI::shortkey_ctrl_prefix() + "6]";
     item.sprite_id = 1;

From 826a3cdbd21c7e47e728b8e0564c03b7e99dd5f2 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Mon, 4 Mar 2019 16:05:29 +0100
Subject: [PATCH 11/11] Technology for svg icons moved to next alpha (8)

---
 src/libslic3r/Technologies.hpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 451a0b27c..e978b5838 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -49,7 +49,14 @@
 
 // Printbed textures generated from svg files
 #define ENABLE_TEXTURES_FROM_SVG (1 && ENABLE_1_42_0_ALPHA7)
+
+
+//====================
+// 1.42.0.alpha8 techs
+//====================
+#define ENABLE_1_42_0_ALPHA8 1
+
 // Toolbars and Gizmos use icons imported from svg files
-#define ENABLE_SVG_ICONS (1 && ENABLE_TEXTURES_FROM_SVG)
+#define ENABLE_SVG_ICONS (1 && ENABLE_1_42_0_ALPHA8 && ENABLE_TEXTURES_FROM_SVG)
 
 #endif // _technologies_h_