From f4654e376eabed8f9a72de1a4d1107302342e1fc Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 10 Oct 2019 10:49:47 +0200
Subject: [PATCH] ENABLE_3DCONNEXION_DEVICES -> Slightly increased camera
 target movement limits

---
 src/slic3r/GUI/Camera.cpp            | 15 ++++++++++++---
 src/slic3r/GUI/Mouse3DController.cpp | 21 ++-------------------
 src/slic3r/GUI/Mouse3DController.hpp | 28 ++++++++++++++++++++--------
 3 files changed, 34 insertions(+), 30 deletions(-)

diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp
index 4bb3e6ad5..e43b57636 100644
--- a/src/slic3r/GUI/Camera.cpp
+++ b/src/slic3r/GUI/Camera.cpp
@@ -85,10 +85,21 @@ void Camera::select_next_type()
 
 void Camera::set_target(const Vec3d& target)
 {
+#if ENABLE_3DCONNEXION_DEVICES
+    // We may let these factors be customizable
+    static const double ScaleFactor = 1.1;
+    BoundingBoxf3 test_box = m_scene_box;
+    test_box.scale(ScaleFactor);
+    m_target = target;
+    m_target(0) = clamp(test_box.min(0), test_box.max(0), m_target(0));
+    m_target(1) = clamp(test_box.min(1), test_box.max(1), m_target(1));
+    m_target(2) = clamp(test_box.min(2), test_box.max(2), m_target(2));
+#else
     m_target = target;
     m_target(0) = clamp(m_scene_box.min(0), m_scene_box.max(0), m_target(0));
     m_target(1) = clamp(m_scene_box.min(1), m_scene_box.max(1), m_target(1));
     m_target(2) = clamp(m_scene_box.min(2), m_scene_box.max(2), m_target(2));
+#endif // ENABLE_3DCONNEXION_DEVICES
 }
 
 void Camera::set_theta(float theta, bool apply_limit)
@@ -117,9 +128,7 @@ void Camera::set_zoom(double zoom)
         zoom = std::max(zoom, zoom_min * 0.7);
 
     // Don't allow to zoom too close to the scene.
-    zoom = std::min(zoom, 100.0);
-
-    m_zoom = zoom;
+    m_zoom = std::min(zoom, 100.0);
 }
 #else
 void Camera::set_zoom(double zoom, const BoundingBoxf3& max_box, int canvas_w, int canvas_h)
diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp
index f0b78a778..8cf7be33e 100644
--- a/src/slic3r/GUI/Mouse3DController.cpp
+++ b/src/slic3r/GUI/Mouse3DController.cpp
@@ -64,13 +64,11 @@ Mouse3DController::State::State()
     : m_translation_params(DefaultTranslationScale, DefaultTranslationDeadzone)
     , m_rotation_params(DefaultRotationScale, DefaultRotationDeadzone)
     , m_mouse_wheel_counter(0)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
     , m_translation_queue_max_size(0)
     , m_rotation_queue_max_size(0)
     , m_buttons_queue_max_size(0)
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
 }
 
@@ -289,22 +287,17 @@ void Mouse3DController::render_settings_dialog(unsigned int canvas_width, unsign
         m_state.set_rotation_deadzone(rotation_deadzone);
 
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     ImGui::Separator();
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     ImGui::Separator();
     ImGui::PushStyleColor(ImGuiCol_Text, color);
     imgui.text("DEBUG:");
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     imgui.text("Vectors:");
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     ImGui::PopStyleColor();
     Vec3f translation = m_state.get_translation().cast<float>();
     Vec3f rotation = m_state.get_rotation();
     ImGui::InputFloat3("Translation##3", translation.data(), "%.3f", ImGuiInputTextFlags_ReadOnly);
     ImGui::InputFloat3("Rotation##3", rotation.data(), "%.3f", ImGuiInputTextFlags_ReadOnly);
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     ImGui::PushStyleColor(ImGuiCol_Text, color);
     imgui.text("Queue size:");
     ImGui::PopStyleColor();
@@ -317,6 +310,7 @@ void Mouse3DController::render_settings_dialog(unsigned int canvas_width, unsign
     ImGui::InputInt2("Rotation##4", rotation_size, ImGuiInputTextFlags_ReadOnly);
     ImGui::InputInt2("Buttons", buttons_size, ImGuiInputTextFlags_ReadOnly);
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_QUEUE_MAX_SIZE
     int queue_size = (int)m_state.get_queues_max_size();
     if (ImGui::InputInt("Max size", &queue_size, 1, 1, ImGuiInputTextFlags_ReadOnly))
@@ -351,10 +345,8 @@ bool Mouse3DController::connect_device()
     unsigned short product_id = 0;
 
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     unsigned short usage_page = 0;
     unsigned short usage = 0;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     hid_device_info* cur = devices;
     while (cur != nullptr)
     {
@@ -387,12 +379,10 @@ bool Mouse3DController::connect_device()
                 if (_3DCONNEXION_DEVICES[i] == current->product_id)
                 {
                     product_id = current->product_id;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
                     usage_page = current->usage_page;
                     usage = current->usage;
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                     break;
                 }
             }
@@ -418,21 +408,16 @@ bool Mouse3DController::connect_device()
 
     if (m_device != nullptr)
     {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         std::vector<wchar_t> manufacturer(1024, 0);
         hid_get_manufacturer_string(m_device, manufacturer.data(), 1024);
         m_device_str = boost::nowide::narrow(manufacturer.data());
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
         std::vector<wchar_t> product(1024, 0);
         hid_get_product_string(m_device, product.data(), 1024);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         m_device_str += "/" + boost::nowide::narrow(product.data());
-//        m_device_str = boost::nowide::narrow(product.data());
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
         BOOST_LOG_TRIVIAL(info) << "Connected device: " << m_device_str;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
         std::cout << std::endl << "Connected device:" << std::endl;
         std::cout << "Manufacturer/product..........: " << m_device_str << std::endl;
@@ -441,8 +426,6 @@ bool Mouse3DController::connect_device()
         std::cout << "Usage page....................: " << usage_page << std::endl;
         std::cout << "Usage.........................: " << usage << std::endl;
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
 
         // get device parameters from the config, if present
         double translation_speed = 1.0;
diff --git a/src/slic3r/GUI/Mouse3DController.hpp b/src/slic3r/GUI/Mouse3DController.hpp
index a3eab740f..f31bdc913 100644
--- a/src/slic3r/GUI/Mouse3DController.hpp
+++ b/src/slic3r/GUI/Mouse3DController.hpp
@@ -78,20 +78,18 @@ class Mouse3DController
         // GLCanvas3D::on_idle() through the call to the apply() method
         unsigned int m_mouse_wheel_counter;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
         unsigned int m_translation_queue_max_size;
         unsigned int m_rotation_queue_max_size;
         unsigned int m_buttons_queue_max_size;
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     public:
         State();
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         void append_translation(const Vec3d& translation)
         {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_QUEUE_MAX_SIZE
             while (m_translation.queue.size() >= m_translation.max_size)
             {
@@ -102,15 +100,19 @@ class Mouse3DController
             m_translation_queue_max_size = std::max(m_translation_queue_max_size, (unsigned int)m_translation.queue.size());
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
 #else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             m_translation.push(translation);
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
             m_translation_queue_max_size = std::max(m_translation_queue_max_size, (unsigned int)m_translation.size());
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_QUEUE_MAX_SIZE
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         }
 
         void append_rotation(const Vec3f& rotation)
         {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_QUEUE_MAX_SIZE
             while (m_rotation.queue.size() >= m_rotation.max_size)
             {
@@ -123,17 +125,21 @@ class Mouse3DController
             if (rotation(0) != 0.0f)
                 ++m_mouse_wheel_counter;
 #else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             m_rotation.push(rotation);
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
             m_rotation_queue_max_size = std::max(m_rotation_queue_max_size, (unsigned int)m_rotation.size());
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
             if (rotation(0) != 0.0f)
                 ++m_mouse_wheel_counter;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_QUEUE_MAX_SIZE
-        }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+            }
         
         void append_button(unsigned int id)
         {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_QUEUE_MAX_SIZE
             while (m_buttons.queue.size() >= m_buttons.max_size)
             {
@@ -144,13 +150,15 @@ class Mouse3DController
             m_buttons_queue_max_size = std::max(m_buttons_queue_max_size, (unsigned int)m_buttons.queue.size());
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
 #else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             m_buttons.push(id);
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
             m_buttons_queue_max_size = std::max(m_buttons_queue_max_size, (unsigned int)m_buttons.size());
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
-#endif // ENABLE_QUEUE_MAX_SIZE
-        }
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_QUEUE_MAX_SIZE
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+        }
 
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_QUEUE_MAX_SIZE
@@ -158,9 +166,11 @@ class Mouse3DController
         bool has_rotation() const { return !m_rotation.queue.empty(); }
         bool has_button() const { return !m_buttons.queue.empty(); }
 #else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool has_translation() const { return !m_translation.empty(); }
         bool has_rotation() const { return !m_rotation.empty(); }
         bool has_button() const { return !m_buttons.empty(); }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_QUEUE_MAX_SIZE
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
@@ -194,23 +204,25 @@ class Mouse3DController
         float get_rotation_deadzone() const { return m_rotation_params.deadzone; }
         void set_rotation_deadzone(float deadzone) { m_rotation_params.deadzone = deadzone; }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_QUEUE_MAX_SIZE
         unsigned int get_translation_queue_size() const { return (unsigned int)m_translation.queue.size(); }
         unsigned int get_rotation_queue_size() const { return (unsigned int)m_rotation.queue.size(); }
         unsigned int get_buttons_queue_size() const { return (unsigned int)m_buttons.queue.size(); }
 #else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         unsigned int get_translation_queue_size() const { return (unsigned int)m_translation.size(); }
         unsigned int get_rotation_queue_size() const { return (unsigned int)m_rotation.size(); }
         unsigned int get_buttons_queue_size() const { return (unsigned int)m_buttons.size(); }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_QUEUE_MAX_SIZE
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
         unsigned int get_translation_queue_max_size() const { return m_translation_queue_max_size; }
         unsigned int get_rotation_queue_max_size() const { return m_rotation_queue_max_size; }
         unsigned int get_buttons_queue_max_size() const { return m_buttons_queue_max_size; }
 #endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_QUEUE_MAX_SIZE