Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'xs/src/slic3r/GUI/GLCanvas3D.cpp')
-rw-r--r--xs/src/slic3r/GUI/GLCanvas3D.cpp31
1 files changed, 18 insertions, 13 deletions
diff --git a/xs/src/slic3r/GUI/GLCanvas3D.cpp b/xs/src/slic3r/GUI/GLCanvas3D.cpp
index 6396233e8..46bcf4f44 100644
--- a/xs/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/xs/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2697,9 +2697,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
}
else if (evt.Leaving())
{
- // to remove hover when mouse goes out of this canvas
- m_mouse.position = Pointf((coordf_t)pos.x, (coordf_t)pos.y);
- render();
+ // to remove hover on objects when the mouse goes out of this canvas
+ m_mouse.position = Pointf(-1.0, -1.0);
+ m_dirty = true;
}
else if (evt.LeftDClick() && (m_hover_volume_id != -1))
m_on_double_click_callback.call();
@@ -3403,20 +3403,22 @@ void GLCanvas3D::_picking_pass() const
if (m_multisample_allowed)
::glEnable(GL_MULTISAMPLE);
- const Size& cnv_size = get_canvas_size();
-
- GLubyte color[4];
- ::glReadPixels(pos.x, cnv_size.get_height() - pos.y - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void*)color);
- int volume_id = color[0] + color[1] * 256 + color[2] * 256 * 256;
-
- m_hover_volume_id = -1;
-
+ int volume_id = -1;
for (GLVolume* vol : m_volumes.volumes)
{
vol->hover = false;
}
- if (volume_id < (int)m_volumes.volumes.size())
+ GLubyte color[4] = { 0, 0, 0, 0 };
+ const Size& cnv_size = get_canvas_size();
+ bool inside = (0 <= pos.x) && (pos.x < cnv_size.get_width()) && (0 <= pos.y) && (pos.y < cnv_size.get_height());
+ if (inside)
+ {
+ ::glReadPixels(pos.x, cnv_size.get_height() - pos.y - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void*)color);
+ volume_id = color[0] + color[1] * 256 + color[2] * 256 * 256;
+ }
+
+ if ((0 <= volume_id) && (volume_id < (int)m_volumes.volumes.size()))
{
m_hover_volume_id = volume_id;
m_volumes.volumes[volume_id]->hover = true;
@@ -3432,7 +3434,10 @@ void GLCanvas3D::_picking_pass() const
m_gizmos.set_hover_id(-1);
}
else
- m_gizmos.set_hover_id(254 - (int)color[2]);
+ {
+ m_hover_volume_id = -1;
+ m_gizmos.set_hover_id(inside ? (254 - (int)color[2]) : -1);
+ }
// updates gizmos overlay
if (_get_first_selected_object_id() != -1)