mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-14 11:45:56 +08:00
DoubleSlider: ImGui rendering (WIP)
This commit is contained in:
parent
46e08ca9f1
commit
a5322ef970
@ -26,6 +26,7 @@
|
|||||||
#include <wx/statline.h>
|
#include <wx/statline.h>
|
||||||
#include <wx/dcclient.h>
|
#include <wx/dcclient.h>
|
||||||
#include <wx/colordlg.h>
|
#include <wx/colordlg.h>
|
||||||
|
#include <wx/glcanvas.h>
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <boost/algorithm/string/replace.hpp>
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
@ -34,6 +35,8 @@
|
|||||||
#include "format.hpp"
|
#include "format.hpp"
|
||||||
#include "NotificationManager.hpp"
|
#include "NotificationManager.hpp"
|
||||||
|
|
||||||
|
#include "ImGuiPureWrap.hpp"
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
|
|
||||||
using GUI::from_u8;
|
using GUI::from_u8;
|
||||||
@ -560,6 +563,34 @@ void Control::render()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Control::imgui_render(GUI::GLCanvas3D& canvas)
|
||||||
|
{
|
||||||
|
GUI::Size cnv_size = canvas.get_canvas_size();
|
||||||
|
ImVec2 mouse_pos = ImGui::GetMousePos();
|
||||||
|
const float width = get_min_size().x*5;
|
||||||
|
const float height = float(cnv_size.get_height());
|
||||||
|
|
||||||
|
ImVec2 win_pos(1.0f * (float)cnv_size.get_width(), 1.0f);
|
||||||
|
ImGuiPureWrap::set_next_window_pos(win_pos.x, win_pos.y, ImGuiCond_Always, 1.0f, 0.0f);
|
||||||
|
ImGuiPureWrap::set_next_window_size(width, height - 2.f, ImGuiCond_Always);
|
||||||
|
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImGui::GetStyleColorVec4(ImGuiCol_WindowBg));
|
||||||
|
|
||||||
|
// name of window indentifies window - has to be unique string
|
||||||
|
std::string name = "DblSlider";
|
||||||
|
|
||||||
|
int flags = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar |
|
||||||
|
ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize |
|
||||||
|
ImGuiWindowFlags_NoScrollbar |
|
||||||
|
ImGuiWindowFlags_NoScrollWithMouse |
|
||||||
|
ImGuiWindowFlags_NoFocusOnAppearing;
|
||||||
|
|
||||||
|
if (ImGuiPureWrap::begin(name, flags)) {
|
||||||
|
|
||||||
|
}
|
||||||
|
ImGuiPureWrap::end();
|
||||||
|
}
|
||||||
|
|
||||||
bool Control::is_wipe_tower_layer(int tick) const
|
bool Control::is_wipe_tower_layer(int tick) const
|
||||||
{
|
{
|
||||||
if (!m_is_wipe_tower || tick >= (int)m_values.size())
|
if (!m_is_wipe_tower || tick >= (int)m_values.size())
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "libslic3r/CustomGCode.hpp"
|
#include "libslic3r/CustomGCode.hpp"
|
||||||
#include "wxExtensions.hpp"
|
#include "wxExtensions.hpp"
|
||||||
|
#include "GLCanvas3D.hpp"
|
||||||
|
|
||||||
#include <wx/window.h>
|
#include <wx/window.h>
|
||||||
#include <wx/control.h>
|
#include <wx/control.h>
|
||||||
@ -302,7 +303,7 @@ public:
|
|||||||
void show_cog_icon_context_menu();
|
void show_cog_icon_context_menu();
|
||||||
void auto_color_change();
|
void auto_color_change();
|
||||||
|
|
||||||
ExtrudersSequence m_extruders_sequence;
|
void imgui_render(GUI::GLCanvas3D& canvas);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@ -431,6 +432,8 @@ private:
|
|||||||
|
|
||||||
std::vector<double> m_alternate_values;
|
std::vector<double> m_alternate_values;
|
||||||
|
|
||||||
|
ExtrudersSequence m_extruders_sequence;
|
||||||
|
|
||||||
// control's view variables
|
// control's view variables
|
||||||
wxCoord SLIDER_MARGIN; // margin around slider
|
wxCoord SLIDER_MARGIN; // margin around slider
|
||||||
|
|
||||||
|
@ -1950,6 +1950,8 @@ void GLCanvas3D::render()
|
|||||||
|
|
||||||
wxGetApp().plater()->get_notification_manager()->render_notifications(*this, get_overlay_window_width());
|
wxGetApp().plater()->get_notification_manager()->render_notifications(*this, get_overlay_window_width());
|
||||||
|
|
||||||
|
wxGetApp().plater()->render_imgui_double_slider(*this);
|
||||||
|
|
||||||
wxGetApp().imgui()->render();
|
wxGetApp().imgui()->render();
|
||||||
|
|
||||||
m_canvas->SwapBuffers();
|
m_canvas->SwapBuffers();
|
||||||
|
@ -347,6 +347,13 @@ void Preview::sys_color_changed()
|
|||||||
m_layers_slider->sys_color_changed();
|
m_layers_slider->sys_color_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Preview::render_imgui_double_slider(GLCanvas3D& canvas)
|
||||||
|
{
|
||||||
|
if (m_layers_slider && m_layers_slider->IsShown())
|
||||||
|
m_layers_slider->imgui_render(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
void Preview::jump_layers_slider(wxKeyEvent& evt)
|
void Preview::jump_layers_slider(wxKeyEvent& evt)
|
||||||
{
|
{
|
||||||
if (m_layers_slider) m_layers_slider->OnChar(evt);
|
if (m_layers_slider) m_layers_slider->OnChar(evt);
|
||||||
|
@ -140,6 +140,8 @@ public:
|
|||||||
void move_layers_slider(wxKeyEvent& evt);
|
void move_layers_slider(wxKeyEvent& evt);
|
||||||
void edit_layers_slider(wxKeyEvent& evt);
|
void edit_layers_slider(wxKeyEvent& evt);
|
||||||
|
|
||||||
|
void render_imgui_double_slider(GLCanvas3D& canvas);
|
||||||
|
|
||||||
bool is_loaded() const { return m_loaded; }
|
bool is_loaded() const { return m_loaded; }
|
||||||
|
|
||||||
void update_moves_slider(std::optional<int> visible_range_min = std::nullopt, std::optional<int> visible_range_max = std::nullopt);
|
void update_moves_slider(std::optional<int> visible_range_min = std::nullopt, std::optional<int> visible_range_max = std::nullopt);
|
||||||
|
@ -385,6 +385,7 @@ struct Plater::priv
|
|||||||
|
|
||||||
void set_current_canvas_as_dirty();
|
void set_current_canvas_as_dirty();
|
||||||
GLCanvas3D* get_current_canvas3D();
|
GLCanvas3D* get_current_canvas3D();
|
||||||
|
void render_imgui_double_slider(GLCanvas3D& canvas);
|
||||||
void unbind_canvas_event_handlers();
|
void unbind_canvas_event_handlers();
|
||||||
void reset_canvas_volumes();
|
void reset_canvas_volumes();
|
||||||
|
|
||||||
@ -3189,6 +3190,12 @@ GLCanvas3D* Plater::priv::get_current_canvas3D()
|
|||||||
return (current_panel == view3D) ? view3D->get_canvas3d() : ((current_panel == preview) ? preview->get_canvas3d() : nullptr);
|
return (current_panel == view3D) ? view3D->get_canvas3d() : ((current_panel == preview) ? preview->get_canvas3d() : nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Plater::priv::render_imgui_double_slider(GLCanvas3D& canvas)
|
||||||
|
{
|
||||||
|
if (current_panel == preview)
|
||||||
|
preview->render_imgui_double_slider(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
void Plater::priv::unbind_canvas_event_handlers()
|
void Plater::priv::unbind_canvas_event_handlers()
|
||||||
{
|
{
|
||||||
if (view3D != nullptr)
|
if (view3D != nullptr)
|
||||||
@ -6402,6 +6409,11 @@ GLCanvas3D* Plater::get_current_canvas3D()
|
|||||||
return p->get_current_canvas3D();
|
return p->get_current_canvas3D();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Plater::render_imgui_double_slider(GLCanvas3D& canvas)
|
||||||
|
{
|
||||||
|
p->render_imgui_double_slider(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
static std::string concat_strings(const std::set<std::string> &strings,
|
static std::string concat_strings(const std::set<std::string> &strings,
|
||||||
const std::string &delim = "\n")
|
const std::string &delim = "\n")
|
||||||
{
|
{
|
||||||
|
@ -271,6 +271,8 @@ public:
|
|||||||
GLCanvas3D* canvas3D();
|
GLCanvas3D* canvas3D();
|
||||||
const GLCanvas3D * canvas3D() const;
|
const GLCanvas3D * canvas3D() const;
|
||||||
GLCanvas3D* get_current_canvas3D();
|
GLCanvas3D* get_current_canvas3D();
|
||||||
|
|
||||||
|
void render_imgui_double_slider(GLCanvas3D& canvas);
|
||||||
|
|
||||||
void arrange();
|
void arrange();
|
||||||
void arrange(Worker &w, bool selected);
|
void arrange(Worker &w, bool selected);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user