Add dirty state into Gizmo (hint by @DavidKocik)

This commit is contained in:
Filip Sykala 2021-08-20 09:13:09 +02:00
parent cce3041a95
commit 8fab4885c7
4 changed files with 28 additions and 2 deletions

View File

@ -2239,6 +2239,8 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt)
bool mouse3d_controller_applied = wxGetApp().plater()->get_mouse3d_controller().apply(wxGetApp().plater()->get_camera());
m_dirty |= mouse3d_controller_applied;
m_dirty |= wxGetApp().plater()->get_notification_manager()->update_notifications(*this);
auto gizmo = wxGetApp().plater()->canvas3D()->get_gizmos_manager().get_current();
if (gizmo != nullptr) m_dirty |= gizmo->update_items_state();
if (!m_dirty)
return;
@ -2780,10 +2782,10 @@ void GLCanvas3D::on_timer(wxTimerEvent& evt)
void GLCanvas3D::on_render_timer(wxTimerEvent& evt)
{
m_dirty = true;
// wxWakeUpIdle();
// no need to wake up idle
// right after this event, idle event is fired
// m_dirty = true;
// wxWakeUpIdle();
}

View File

@ -85,6 +85,7 @@ GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, const std::string& icon_filename, u
, m_dragging(false)
, m_imgui(wxGetApp().imgui())
, m_first_input_window_render(true)
, m_dirty(false)
{
m_base_color = DEFAULT_BASE_COLOR;
m_drag_color = DEFAULT_DRAG_COLOR;
@ -154,6 +155,14 @@ void GLGizmoBase::update(const UpdateData& data)
on_update(data);
}
bool GLGizmoBase::update_items_state()
{
std::lock_guard<std::mutex> g(m_dirty_access);
bool res = m_dirty;
m_dirty = false;
return res;
};
std::array<float, 4> GLGizmoBase::picking_color_component(unsigned int id) const
{
static const float INV_255 = 1.0f / 255.0f;
@ -209,6 +218,11 @@ std::string GLGizmoBase::format(float value, unsigned int decimals) const
return Slic3r::string_printf("%.*f", decimals, value);
}
void GLGizmoBase::set_dirty() {
std::lock_guard<std::mutex> g(m_dirty_access);
m_dirty = true;
}
void GLGizmoBase::render_input_window(float x, float y, float bottom_limit)
{
on_render_input_window(x, y, bottom_limit);

View File

@ -1,6 +1,7 @@
#ifndef slic3r_GLGizmoBase_hpp_
#define slic3r_GLGizmoBase_hpp_
#include <mutex>
#include "libslic3r/Point.hpp"
#include "slic3r/GUI/I18N.hpp"
@ -153,6 +154,7 @@ public:
bool is_dragging() const { return m_dragging; }
void update(const UpdateData& data);
bool update_items_state();
void render() { m_tooltip.clear(); on_render(); }
void render_for_picking() { on_render_for_picking(); }
@ -187,6 +189,12 @@ protected:
void render_grabbers_for_picking(const BoundingBoxf3& box) const;
std::string format(float value, unsigned int decimals) const;
void set_dirty();
private:
std::mutex m_dirty_access;
bool m_dirty;
};
// Produce an alpha channel checksum for the red green blue components. The alpha channel may then be used to verify, whether the rgb components

View File

@ -266,6 +266,7 @@ void GLGizmoSimplify::process()
};
std::function<void(int)> statusfn = [&](int percent) {
m_progress = percent;
set_dirty();
m_parent.schedule_extra_frame(0);
};
@ -290,6 +291,7 @@ void GLGizmoSimplify::process()
m_state = State::settings;
}
// need to render last status fn to change bar graph to buttons
set_dirty();
m_parent.schedule_extra_frame(0);
});
}