From 78d813cbc9d9d046534c3ec1eb34fe899b2be2e7 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Thu, 25 Oct 2018 09:35:08 +0200 Subject: [PATCH] Tooltip when hovering on gizmo icons --- src/slic3r/GUI/GLCanvas3D.cpp | 55 ++++++++++++++++++++++++----------- src/slic3r/GUI/GLCanvas3D.hpp | 9 +++--- src/slic3r/GUI/GLGizmo.cpp | 23 ++++++++++++++- src/slic3r/GUI/GLGizmo.hpp | 8 +++++ src/slic3r/GUI/GLToolbar.cpp | 3 +- 5 files changed, 75 insertions(+), 23 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index f8f7cb0bc..465dd6800 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -18,7 +18,6 @@ #include #include -#include #include #include #include @@ -1904,13 +1903,21 @@ void GLCanvas3D::Gizmos::set_enabled(bool enable) } #if ENABLE_EXTENDED_SELECTION -void GLCanvas3D::Gizmos::update_hover_state(const GLCanvas3D& canvas, const Vec2d& mouse_pos, const GLCanvas3D::Selection& selection) +std::string GLCanvas3D::Gizmos::update_hover_state(const GLCanvas3D& canvas, const Vec2d& mouse_pos, const GLCanvas3D::Selection& selection) #else void GLCanvas3D::Gizmos::update_hover_state(const GLCanvas3D& canvas, const Vec2d& mouse_pos) #endif // ENABLE_EXTENDED_SELECTION { +#if ENABLE_EXTENDED_SELECTION + std::string name = ""; +#endif // ENABLE_EXTENDED_SELECTION + if (!m_enabled) +#if ENABLE_EXTENDED_SELECTION + return name; +#else return; +#endif // ENABLE_EXTENDED_SELECTION float cnv_h = (float)canvas.get_canvas_size().get_height(); float height = _get_total_overlay_height(); @@ -1932,9 +1939,17 @@ void GLCanvas3D::Gizmos::update_hover_state(const GLCanvas3D& canvas, const Vec2 { bool inside = (mouse_pos - Vec2d(OverlayOffsetX + half_tex_size, top_y + half_tex_size)).norm() < half_tex_size; it->second->set_state(inside ? GLGizmoBase::Hover : GLGizmoBase::Off); +#if ENABLE_EXTENDED_SELECTION + if (inside) + name = it->second->get_name(); +#endif // ENABLE_EXTENDED_SELECTION } top_y += (tex_size + OverlayGapY); } + +#if ENABLE_EXTENDED_SELECTION + return name; +#endif // ENABLE_EXTENDED_SELECTION } #if ENABLE_EXTENDED_SELECTION @@ -2715,7 +2730,6 @@ wxDEFINE_EVENT(EVT_GIZMO_FLATTEN, Vec3dEvent); GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas) : m_canvas(canvas) , m_context(nullptr) - , m_timer(nullptr) , m_toolbar(*this) , m_config(nullptr) , m_print(nullptr) @@ -2749,7 +2763,7 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas) #if !ENABLE_USE_UNIQUE_GLCONTEXT m_context = new wxGLContext(m_canvas); #endif // !ENABLE_USE_UNIQUE_GLCONTEXT - m_timer = new wxTimer(m_canvas); + m_timer.SetOwner(m_canvas); } #if ENABLE_EXTENDED_SELECTION @@ -2761,12 +2775,6 @@ GLCanvas3D::~GLCanvas3D() { reset_volumes(); - if (m_timer != nullptr) - { - delete m_timer; - m_timer = nullptr; - } - #if !ENABLE_USE_UNIQUE_GLCONTEXT if (m_context != nullptr) { @@ -3339,6 +3347,8 @@ void GLCanvas3D::render() float theta = m_camera.get_theta(); bool is_custom_bed = m_bed.is_custom(); + set_tooltip(""); + // picking pass _picking_pass(); @@ -4498,10 +4508,19 @@ void GLCanvas3D::reset_legend_texture() m_legend_texture.reset(); } -void GLCanvas3D::set_tooltip(const std::string& tooltip) +void GLCanvas3D::set_tooltip(const std::string& tooltip) const { if (m_canvas != nullptr) - m_canvas->SetToolTip(tooltip); + { + wxToolTip* t = m_canvas->GetToolTip(); + if (t != nullptr) + { + if (t->GetTip() != tooltip) + t->SetTip(tooltip); + } + else + m_canvas->SetToolTip(tooltip); + } } bool GLCanvas3D::_is_shown_on_screen() const @@ -4993,7 +5012,11 @@ void GLCanvas3D::_picking_pass() const // updates gizmos overlay #if ENABLE_EXTENDED_SELECTION if (!m_selection.is_empty()) - m_gizmos.update_hover_state(*this, pos, m_selection); + { + std::string name = m_gizmos.update_hover_state(*this, pos, m_selection); + if (!name.empty()) + set_tooltip(name); + } #else if (_get_first_selected_object_id() != -1) m_gizmos.update_hover_state(*this, pos); @@ -5361,14 +5384,12 @@ Linef3 GLCanvas3D::mouse_ray(const Point& mouse_pos) void GLCanvas3D::_start_timer() { - if (m_timer != nullptr) - m_timer->Start(100, wxTIMER_CONTINUOUS); + m_timer.Start(100, wxTIMER_CONTINUOUS); } void GLCanvas3D::_stop_timer() { - if (m_timer != nullptr) - m_timer->Stop(); + m_timer.Stop(); } #if !ENABLE_EXTENDED_SELECTION diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index c26dae098..8c889e2a2 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -7,8 +7,9 @@ #include "GLToolbar.hpp" #include "Event.hpp" +#include + class wxWindow; -class wxTimer; class wxSizeEvent; class wxIdleEvent; class wxKeyEvent; @@ -562,7 +563,7 @@ private: void set_enabled(bool enable); #if ENABLE_EXTENDED_SELECTION - void update_hover_state(const GLCanvas3D& canvas, const Vec2d& mouse_pos, const Selection& selection); + std::string update_hover_state(const GLCanvas3D& canvas, const Vec2d& mouse_pos, const Selection& selection); void update_on_off_state(const GLCanvas3D& canvas, const Vec2d& mouse_pos, const Selection& selection); void update_on_off_state(const Selection& selection); #else @@ -678,7 +679,7 @@ private: wxGLContext* m_context; LegendTexture m_legend_texture; WarningTexture m_warning_texture; - wxTimer* m_timer; + wxTimer m_timer; Camera m_camera; Bed m_bed; Axes m_axes; @@ -866,7 +867,7 @@ public: void reset_legend_texture(); - void set_tooltip(const std::string& tooltip); + void set_tooltip(const std::string& tooltip) const; private: bool _is_shown_on_screen() const; diff --git a/src/slic3r/GUI/GLGizmo.cpp b/src/slic3r/GUI/GLGizmo.cpp index c6740abc3..94a7a563f 100644 --- a/src/slic3r/GUI/GLGizmo.cpp +++ b/src/slic3r/GUI/GLGizmo.cpp @@ -1,6 +1,8 @@ #include "../../libslic3r/libslic3r.h" #include "GLGizmo.hpp" +#include "GUI.hpp" + #include "../../libslic3r/Utils.hpp" #if !ENABLE_EXTENDED_SELECTION #include "../../slic3r/GUI/GLCanvas3D.hpp" @@ -281,7 +283,6 @@ void GLGizmoBase::start_dragging(const BoundingBoxf3& box) void GLGizmoBase::stop_dragging() { m_dragging = false; - set_tooltip(""); for (int i = 0; i < (int)m_grabbers.size(); ++i) { @@ -725,6 +726,11 @@ bool GLGizmoRotate3D::on_init() return true; } +std::string GLGizmoRotate3D::on_get_name() const +{ + return L("Rotate"); +} + #if ENABLE_EXTENDED_SELECTION void GLGizmoRotate3D::on_start_dragging(const GLCanvas3D::Selection& selection) { @@ -817,6 +823,11 @@ bool GLGizmoScale3D::on_init() return true; } +std::string GLGizmoScale3D::on_get_name() const +{ + return L("Scale"); +} + #if ENABLE_EXTENDED_SELECTION void GLGizmoScale3D::on_start_dragging(const GLCanvas3D::Selection& selection) #else @@ -1254,6 +1265,11 @@ bool GLGizmoMove3D::on_init() return true; } +std::string GLGizmoMove3D::on_get_name() const +{ + return L("Move"); +} + #if ENABLE_EXTENDED_SELECTION void GLGizmoMove3D::on_start_dragging(const GLCanvas3D::Selection& selection) #else @@ -1480,6 +1496,11 @@ bool GLGizmoFlatten::on_init() return true; } +std::string GLGizmoFlatten::on_get_name() const +{ + return L("Flatten"); +} + #if ENABLE_EXTENDED_SELECTION void GLGizmoFlatten::on_start_dragging(const GLCanvas3D::Selection& selection) #else diff --git a/src/slic3r/GUI/GLGizmo.hpp b/src/slic3r/GUI/GLGizmo.hpp index 38f72598e..ab4850d2d 100644 --- a/src/slic3r/GUI/GLGizmo.hpp +++ b/src/slic3r/GUI/GLGizmo.hpp @@ -74,6 +74,8 @@ public: bool init() { return on_init(); } + std::string get_name() const { return on_get_name(); } + int get_group_id() const { return m_group_id; } void set_group_id(int id) { m_group_id = id; } @@ -119,6 +121,7 @@ public: protected: virtual bool on_init() = 0; + virtual std::string on_get_name() const = 0; virtual void on_set_state() {} virtual void on_set_hover_id() {} #if ENABLE_EXTENDED_SELECTION @@ -192,6 +195,7 @@ public: protected: virtual bool on_init(); + virtual std::string on_get_name() const { return ""; } #if ENABLE_EXTENDED_SELECTION virtual void on_start_dragging(const GLCanvas3D::Selection& selection); #else @@ -234,6 +238,7 @@ public: protected: virtual bool on_init(); + virtual std::string on_get_name() const; virtual void on_set_state() { for (GLGizmoRotate& g : m_gizmos) @@ -329,6 +334,7 @@ public: protected: virtual bool on_init(); + virtual std::string on_get_name() const; #if ENABLE_EXTENDED_SELECTION virtual bool on_is_activable(const GLCanvas3D::Selection& selection) const { return !selection.is_wipe_tower(); } #endif // ENABLE_EXTENDED_SELECTION @@ -389,6 +395,7 @@ public: protected: virtual bool on_init(); + virtual std::string on_get_name() const; #if ENABLE_EXTENDED_SELECTION virtual void on_start_dragging(const GLCanvas3D::Selection& selection); virtual void on_stop_dragging(); @@ -455,6 +462,7 @@ public: protected: virtual bool on_init(); + virtual std::string on_get_name() const; #if ENABLE_EXTENDED_SELECTION virtual bool on_is_activable(const GLCanvas3D::Selection& selection) const { return selection.is_single_full_instance(); } #endif // ENABLE_EXTENDED_SELECTION diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 71ff3cf48..265fc2042 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -512,7 +512,8 @@ void GLToolbar::update_hover_state_horizontal(const Vec2d& mouse_pos) } } - m_parent.set_tooltip(tooltip); + if (!tooltip.empty()) + m_parent.set_tooltip(tooltip); } void GLToolbar::update_hover_state_vertical(const Vec2d& mouse_pos)