diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index ca1fad284..7f2fae7aa 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -49,4 +49,7 @@ // Enable grayed variant for gizmos icons in non activable state #define ENABLE_GIZMO_ICONS_NON_ACTIVABLE_STATE (1 && ENABLE_2_2_0_ALPHA1) +// Enable fix for view toolbar background not showing up on Mac with dark mode +#define ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX (1 && ENABLE_2_2_0_ALPHA1) + #endif // _technologies_h_ diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 51c922915..c5b4b1650 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1337,7 +1337,9 @@ void GLCanvas3D::LegendTexture::render(const GLCanvas3D& canvas) const } } +#if !ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX wxDEFINE_EVENT(EVT_GLCANVAS_INIT, SimpleEvent); +#endif // !ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX wxDEFINE_EVENT(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_OBJECT_SELECT, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_RIGHT_CLICK, RBtnEvent); @@ -1507,7 +1509,9 @@ bool GLCanvas3D::init() if (m_selection.is_enabled() && !m_selection.init()) return false; +#if !ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX post_event(SimpleEvent(EVT_GLCANVAS_INIT)); +#endif // !ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX m_initialized = true; @@ -4222,6 +4226,11 @@ bool GLCanvas3D::_init_toolbars() if (!_init_undoredo_toolbar()) return false; +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + if (!_init_view_toolbar()) + return false; +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + return true; } @@ -4479,6 +4488,13 @@ bool GLCanvas3D::_init_undoredo_toolbar() return true; } +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX +bool GLCanvas3D::_init_view_toolbar() +{ + return wxGetApp().plater()->init_view_toolbar(); +} +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + bool GLCanvas3D::_set_current() { return m_context != nullptr && m_canvas->SetCurrent(*m_context); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index b56a3f1aa..b26111ced 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -83,7 +83,9 @@ template using Vec3dsEvent = ArrayEvent; using HeightProfileSmoothEvent = Event; +#if !ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX wxDECLARE_EVENT(EVT_GLCANVAS_INIT, SimpleEvent); +#endif // !ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX wxDECLARE_EVENT(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_RIGHT_CLICK, RBtnEvent); wxDECLARE_EVENT(EVT_GLCANVAS_REMOVE_OBJECT, SimpleEvent); @@ -681,6 +683,9 @@ private: bool _init_toolbars(); bool _init_main_toolbar(); bool _init_undoredo_toolbar(); +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + bool _init_view_toolbar(); +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX bool _set_current(); void _resize(unsigned int w, unsigned int h); diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp index 07da836fc..eb73dcdfd 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -293,6 +293,9 @@ public: bool is_any_item_pressed() const; +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + unsigned int get_items_count() const { return (unsigned int)m_items.size(); } +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX int get_item_id(const std::string& name) const; void force_left_action(int item_id, GLCanvas3D& parent) { do_action(GLToolbarItem::Left, item_id, parent, false); } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index b2d00e0d5..028414d60 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1819,6 +1819,10 @@ struct Plater::priv bool is_preview_loaded() const { return preview->is_loaded(); } bool is_view3D_shown() const { return current_panel == view3D; } +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + bool init_view_toolbar(); +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + void reset_all_gizmos(); void update_ui_from_settings(); ProgressStatusBar* statusbar(); @@ -1964,7 +1968,9 @@ private: bool complit_init_object_menu(); bool complit_init_sla_object_menu(); bool complit_init_part_menu(); +#if !ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX void init_view_toolbar(); +#endif // !ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX bool can_split() const; bool layers_height_allowed() const; @@ -2116,7 +2122,9 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) view3D_canvas->Bind(EVT_GLTOOLBAR_SPLIT_OBJECTS, &priv::on_action_split_objects, this); view3D_canvas->Bind(EVT_GLTOOLBAR_SPLIT_VOLUMES, &priv::on_action_split_volumes, this); view3D_canvas->Bind(EVT_GLTOOLBAR_LAYERSEDITING, &priv::on_action_layersediting, this); +#if !ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX view3D_canvas->Bind(EVT_GLCANVAS_INIT, [this](SimpleEvent&) { init_view_toolbar(); }); +#endif // !ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [this](SimpleEvent&) { set_bed_shape(config->option("bed_shape")->values, @@ -3832,8 +3840,18 @@ bool Plater::priv::complit_init_part_menu() return true; } +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX +bool Plater::priv::init_view_toolbar() +#else void Plater::priv::init_view_toolbar() +#endif //!ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX { +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + if (view_toolbar.get_items_count() > 0) + // already initialized + return true; +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + BackgroundTexture::Metadata background_data; background_data.filename = "toolbar_background.png"; background_data.left = 16; @@ -3842,7 +3860,11 @@ void Plater::priv::init_view_toolbar() background_data.bottom = 16; if (!view_toolbar.init(background_data)) +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + return false; +#else return; +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX view_toolbar.set_horizontal_orientation(GLToolbar::Layout::HO_Left); view_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Bottom); @@ -3857,7 +3879,11 @@ void Plater::priv::init_view_toolbar() item.sprite_id = 0; item.left.action_callback = [this]() { if (this->q != nullptr) wxPostEvent(this->q, SimpleEvent(EVT_GLVIEWTOOLBAR_3D)); }; if (!view_toolbar.add_item(item)) +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + return false; +#else return; +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX item.name = "Preview"; item.icon_filename = "preview.svg"; @@ -3865,10 +3891,18 @@ void Plater::priv::init_view_toolbar() item.sprite_id = 1; item.left.action_callback = [this]() { if (this->q != nullptr) wxPostEvent(this->q, SimpleEvent(EVT_GLVIEWTOOLBAR_PREVIEW)); }; if (!view_toolbar.add_item(item)) +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + return false; +#else return; +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX view_toolbar.select_item("3D"); view_toolbar.set_enabled(true); + +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + return true; +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX } bool Plater::priv::can_set_instance_to_object() const @@ -5241,6 +5275,13 @@ void Plater::msw_rescale() GetParent()->Layout(); } +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX +bool Plater::init_view_toolbar() +{ + return p->init_view_toolbar(); +} +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + const Camera& Plater::get_camera() const { return p->camera; diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 5c36dbf5e..33140c4f5 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -261,6 +261,10 @@ public: void msw_rescale(); +#if ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + bool init_view_toolbar(); +#endif // ENABLE_VIEW_TOOLBAR_BACKGROUND_FIX + const Camera& get_camera() const; const Mouse3DController& get_mouse3d_controller() const; Mouse3DController& get_mouse3d_controller();