mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 12:41:20 -06:00 
			
		
		
		
	Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer
This commit is contained in:
		
						commit
						0a43cf0674
					
				
					 9 changed files with 167 additions and 28 deletions
				
			
		|  | @ -67,6 +67,12 @@ void AppConfig::set_defaults() | |||
|     if (get("remember_output_path").empty()) | ||||
|         set("remember_output_path", "1"); | ||||
| 
 | ||||
|     if (get("use_custom_toolbar_size").empty()) | ||||
|         set("use_custom_toolbar_size", "0"); | ||||
| 
 | ||||
|     if (get("custom_toolbar_size").empty()) | ||||
|         set("custom_toolbar_size", "100"); | ||||
| 
 | ||||
|     // Remove legacy window positions/sizes
 | ||||
|     erase("", "main_frame_maximized"); | ||||
|     erase("", "main_frame_pos"); | ||||
|  |  | |||
|  | @ -1252,6 +1252,8 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar | |||
|         m_timer.SetOwner(m_canvas); | ||||
| #if ENABLE_RETINA_GL | ||||
|         m_retina_helper.reset(new RetinaHelper(canvas)); | ||||
|         // set default view_toolbar icons size equal to GLGizmosManager::Default_Icons_Size
 | ||||
|         m_view_toolbar.set_icons_size(GLGizmosManager::Default_Icons_Size); | ||||
| #endif | ||||
|     } | ||||
| 
 | ||||
|  | @ -3418,9 +3420,6 @@ bool GLCanvas3D::_init_toolbar() | |||
|         return true; | ||||
|     } | ||||
| 
 | ||||
| #if ENABLE_SVG_ICONS | ||||
|     m_toolbar.set_icons_size(40); | ||||
| #endif // ENABLE_SVG_ICONS
 | ||||
| //    m_toolbar.set_layout_type(GLToolbar::Layout::Vertical);
 | ||||
|     m_toolbar.set_layout_type(GLToolbar::Layout::Horizontal); | ||||
|     m_toolbar.set_layout_orientation(GLToolbar::Layout::Top); | ||||
|  | @ -4097,10 +4096,14 @@ void GLCanvas3D::_render_current_gizmo() const | |||
| void GLCanvas3D::_render_gizmos_overlay() const | ||||
| { | ||||
| #if ENABLE_RETINA_GL | ||||
|     m_gizmos.set_overlay_scale(m_retina_helper->get_scale_factor()); | ||||
| //     m_gizmos.set_overlay_scale(m_retina_helper->get_scale_factor());
 | ||||
|     const float scale = m_retina_helper->get_scale_factor()*wxGetApp().toolbar_icon_scale(); | ||||
|     m_gizmos.set_overlay_scale(scale); //! #ys_FIXME_experiment
 | ||||
| #else | ||||
| //     m_gizmos.set_overlay_scale(m_canvas->GetContentScaleFactor());
 | ||||
|     m_gizmos.set_overlay_scale(wxGetApp().em_unit()*0.1f);//! #ys_FIXME_experiment
 | ||||
| //     m_gizmos.set_overlay_scale(wxGetApp().em_unit()*0.1f);
 | ||||
|     const float size = int(GLGizmosManager::Default_Icons_Size*wxGetApp().toolbar_icon_scale()); | ||||
|     m_gizmos.set_overlay_icon_size(size); //! #ys_FIXME_experiment
 | ||||
| #endif /* __WXMSW__ */ | ||||
| 
 | ||||
|     m_gizmos.render_overlay(*this, m_selection); | ||||
|  | @ -4110,10 +4113,14 @@ void GLCanvas3D::_render_toolbar() const | |||
| { | ||||
| #if ENABLE_SVG_ICONS | ||||
| #if ENABLE_RETINA_GL | ||||
|     m_toolbar.set_scale(m_retina_helper->get_scale_factor()); | ||||
| //     m_toolbar.set_scale(m_retina_helper->get_scale_factor());
 | ||||
|     const float scale = m_retina_helper->get_scale_factor() * wxGetApp().toolbar_icon_scale(true); | ||||
|     m_toolbar.set_scale(scale); //! #ys_FIXME_experiment
 | ||||
| #else | ||||
| //     m_toolbar.set_scale(m_canvas->GetContentScaleFactor());
 | ||||
|     m_toolbar.set_scale(wxGetApp().em_unit()*0.1f);//! #ys_FIXME_experiment
 | ||||
| //     m_toolbar.set_scale(wxGetApp().em_unit()*0.1f);
 | ||||
|     const float size = int(GLToolbar::Default_Icons_Size * wxGetApp().toolbar_icon_scale(true)); | ||||
|     m_toolbar.set_icons_size(size); //! #ys_FIXME_experiment
 | ||||
| #endif // ENABLE_RETINA_GL
 | ||||
| 
 | ||||
|     Size cnv_size = get_canvas_size(); | ||||
|  | @ -4174,10 +4181,14 @@ void GLCanvas3D::_render_view_toolbar() const | |||
| { | ||||
| #if ENABLE_SVG_ICONS | ||||
| #if ENABLE_RETINA_GL | ||||
|     m_view_toolbar.set_scale(m_retina_helper->get_scale_factor()); | ||||
| //     m_view_toolbar.set_scale(m_retina_helper->get_scale_factor());
 | ||||
|     const float scale = m_retina_helper->get_scale_factor() * wxGetApp().toolbar_icon_scale(); | ||||
|     m_view_toolbar.set_scale(scale); //! #ys_FIXME_experiment
 | ||||
| #else | ||||
| //     m_view_toolbar.set_scale(m_canvas->GetContentScaleFactor());
 | ||||
|     m_view_toolbar.set_scale(wxGetApp().em_unit()*0.1f); //! #ys_FIXME_experiment
 | ||||
| //     m_view_toolbar.set_scale(wxGetApp().em_unit()*0.1f);
 | ||||
|     const float size = int(GLGizmosManager::Default_Icons_Size * wxGetApp().toolbar_icon_scale()); | ||||
|     m_view_toolbar.set_icons_size(size); //! #ys_FIXME_experiment
 | ||||
| #endif // ENABLE_RETINA_GL
 | ||||
| 
 | ||||
|     Size cnv_size = get_canvas_size(); | ||||
|  |  | |||
|  | @ -123,7 +123,7 @@ BackgroundTexture::Metadata::Metadata() | |||
| } | ||||
| 
 | ||||
| #if ENABLE_SVG_ICONS | ||||
| const float GLToolbar::Default_Icons_Size = 64.0f; | ||||
| const float GLToolbar::Default_Icons_Size = 40.0f; | ||||
| #endif // ENABLE_SVG_ICONS
 | ||||
| 
 | ||||
| GLToolbar::Layout::Layout() | ||||
|  |  | |||
|  | @ -390,6 +390,27 @@ void GUI_App::set_label_clr_sys(const wxColour& clr) { | |||
|     app_config->save(); | ||||
| } | ||||
| 
 | ||||
| float GUI_App::toolbar_icon_scale(const bool is_limited/* = false*/) const | ||||
| { | ||||
| #ifdef __APPLE__ | ||||
|     const float icon_sc = 1.0f; // for Retina display will be used its own scale
 | ||||
| #else | ||||
|     const float icon_sc = m_em_unit*0.1f; | ||||
| #endif // __APPLE__
 | ||||
| 
 | ||||
|     const std::string& use_val  = app_config->get("use_custom_toolbar_size"); | ||||
|     const std::string& val      = app_config->get("custom_toolbar_size"); | ||||
| 
 | ||||
|     if (val.empty() || use_val.empty() || use_val == "0") | ||||
|         return icon_sc; | ||||
| 
 | ||||
|     int int_val = atoi(val.c_str()); | ||||
|     if (is_limited && int_val < 50) | ||||
|         int_val = 50; | ||||
| 
 | ||||
|     return 0.01f * int_val * icon_sc; | ||||
| } | ||||
| 
 | ||||
| void GUI_App::recreate_GUI() | ||||
| { | ||||
|     // Weird things happen as the Paint messages are floating around the windows being destructed.
 | ||||
|  |  | |||
|  | @ -115,6 +115,7 @@ public: | |||
|     const wxFont&   normal_font()           { return m_normal_font; } | ||||
|     size_t          em_unit() const         { return m_em_unit; } | ||||
|     void            set_em_unit(const size_t em_unit)    { m_em_unit = em_unit; } | ||||
|     float           toolbar_icon_scale(const bool is_limited = false) const; | ||||
| 
 | ||||
|     void            recreate_GUI(); | ||||
|     void            system_info(); | ||||
|  |  | |||
|  | @ -354,8 +354,8 @@ DynamicPrintConfig& ObjectList::get_item_config(const wxDataViewItem& item) cons | |||
|     const int vol_idx = type & itVolume ? m_objects_model->GetVolumeIdByItem(item) : -1; | ||||
| 
 | ||||
|     assert(obj_idx >= 0 || ((type & itVolume) && vol_idx >=0)); | ||||
|     return type & itObject|itInstance ? (*m_objects)[obj_idx]->config : | ||||
|         (*m_objects)[obj_idx]->volumes[vol_idx]->config; | ||||
|     return type & itVolume ?(*m_objects)[obj_idx]->volumes[vol_idx]->config : | ||||
|                             (*m_objects)[obj_idx]->config; | ||||
| } | ||||
| 
 | ||||
| wxDataViewColumn* ObjectList::create_objects_list_extruder_column(int extruders_count) | ||||
|  |  | |||
|  | @ -259,29 +259,45 @@ wxBitmapComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(15 * | |||
|     if (preset_type == Slic3r::Preset::TYPE_FILAMENT) | ||||
|     { | ||||
|         Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &event) { | ||||
|             if (extruder_idx < 0 || event.GetLogicalPosition(wxClientDC(this)).x > 24) { | ||||
|             int shifl_Left = 0; | ||||
|             float scale = m_em_unit*0.1f; | ||||
| #if defined(wxBITMAPCOMBOBOX_OWNERDRAWN_BASED) | ||||
|             shifl_Left  = int(scale * 4 + 0.5f); // IMAGE_SPACING_RIGHT = 4 for wxBitmapComboBox -> Space left of image
 | ||||
| #endif | ||||
|             int icon_right_pos = int(scale * (24+4) + 0.5); | ||||
|             int mouse_pos = event.GetLogicalPosition(wxClientDC(this)).x; | ||||
| //             if (extruder_idx < 0 || event.GetLogicalPosition(wxClientDC(this)).x > 24) {
 | ||||
|             if ( extruder_idx < 0 || mouse_pos < shifl_Left || mouse_pos > icon_right_pos ) { | ||||
|                 // Let the combo box process the mouse click.
 | ||||
|                 event.Skip(); | ||||
|                 return; | ||||
|             } | ||||
|              | ||||
|             // Swallow the mouse click and open the color picker.
 | ||||
| 
 | ||||
|             // get current color
 | ||||
|             DynamicPrintConfig* cfg = wxGetApp().get_tab(Preset::TYPE_PRINTER)->get_config(); | ||||
|             auto colors = static_cast<ConfigOptionStrings*>(cfg->option("extruder_colour")->clone()); | ||||
|             wxColour clr(colors->values[extruder_idx]); | ||||
|             if (!clr.IsOk()) | ||||
|                 clr = wxTransparentColour; | ||||
| 
 | ||||
|             auto data = new wxColourData(); | ||||
|             data->SetChooseFull(1); | ||||
|             auto dialog = new wxColourDialog(/* wxGetApp().mainframe */this, data); | ||||
|             dialog->CenterOnParent(); | ||||
|             if (dialog->ShowModal() == wxID_OK) { | ||||
|                 DynamicPrintConfig cfg = *wxGetApp().get_tab(Preset::TYPE_PRINTER)->get_config();  | ||||
|             data->SetColour(clr); | ||||
| 
 | ||||
|                 //FIXME this is too expensive to call full_config to get just the extruder color!
 | ||||
|                 auto colors = static_cast<ConfigOptionStrings*>(wxGetApp().preset_bundle->full_config().option("extruder_colour")->clone()); | ||||
|             auto dialog = new wxColourDialog(this, data); | ||||
|             dialog->CenterOnParent(); | ||||
|             if (dialog->ShowModal() == wxID_OK) | ||||
|             { | ||||
|                 colors->values[extruder_idx] = dialog->GetColourData().GetColour().GetAsString(wxC2S_HTML_SYNTAX); | ||||
| 
 | ||||
|                 cfg.set_key_value("extruder_colour", colors); | ||||
|                 DynamicPrintConfig cfg_new = *cfg;  | ||||
|                 cfg_new.set_key_value("extruder_colour", colors); | ||||
| 
 | ||||
|                 wxGetApp().get_tab(Preset::TYPE_PRINTER)->load_config(cfg); | ||||
|                 wxGetApp().get_tab(Preset::TYPE_PRINTER)->load_config(cfg_new); | ||||
|                 wxGetApp().preset_bundle->update_platter_filament_ui(extruder_idx, this); | ||||
|                 wxGetApp().plater()->on_config_change(cfg); | ||||
|                 wxGetApp().plater()->on_config_change(cfg_new); | ||||
|             } | ||||
|             dialog->Destroy(); | ||||
|         }); | ||||
|  |  | |||
|  | @ -10,6 +10,9 @@ PreferencesDialog::PreferencesDialog(wxWindow* parent) : | |||
|     DPIDialog(parent, wxID_ANY, _(L("Preferences")), wxDefaultPosition,  | ||||
|               wxDefaultSize, wxDEFAULT_DIALOG_STYLE) | ||||
| { | ||||
| #ifdef __WXOSX__ | ||||
|     isOSX = true; | ||||
| #endif | ||||
| 	build(); | ||||
| } | ||||
| 
 | ||||
|  | @ -18,8 +21,13 @@ void PreferencesDialog::build() | |||
| 	auto app_config = get_app_config(); | ||||
| 	m_optgroup = std::make_shared<ConfigOptionsGroup>(this, _(L("General"))); | ||||
|     m_optgroup->label_width = 40; | ||||
| 	m_optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value){ | ||||
| 	m_optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value) { | ||||
| 		m_values[opt_key] = boost::any_cast<bool>(value) ? "1" : "0"; | ||||
| 
 | ||||
|         if (opt_key == "use_custom_toolbar_size") { | ||||
|             m_icon_size_sizer->ShowItems(boost::any_cast<bool>(value)); | ||||
|             this->layout(); | ||||
|         } | ||||
| 	}; | ||||
| 
 | ||||
| 	// TODO
 | ||||
|  | @ -109,6 +117,16 @@ void PreferencesDialog::build() | |||
| 	m_optgroup->append_single_option_line(option); | ||||
| #endif | ||||
| 
 | ||||
| 	def.label = L("Use custom size for toolbar icons"); | ||||
| 	def.type = coBool; | ||||
| 	def.tooltip = L("If enabled, you can change size of toolbar icons manually."); | ||||
| 	def.set_default_value(new ConfigOptionBool{ app_config->get("use_custom_toolbar_size") == "1" }); | ||||
| 	option = Option (def,"use_custom_toolbar_size"); | ||||
|     m_optgroup->append_single_option_line(option); | ||||
| 
 | ||||
|     create_icon_size_slider(); | ||||
|     m_icon_size_sizer->ShowItems(app_config->get("use_custom_toolbar_size") == "1"); | ||||
| 
 | ||||
| 	auto sizer = new wxBoxSizer(wxVERTICAL); | ||||
| 	sizer->Add(m_optgroup->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); | ||||
| 
 | ||||
|  | @ -145,17 +163,79 @@ void PreferencesDialog::on_dpi_changed(const wxRect &suggested_rect) | |||
| { | ||||
|     m_optgroup->msw_rescale(); | ||||
| 
 | ||||
|     msw_buttons_rescale(this, em_unit(), { wxID_OK, wxID_CANCEL }); | ||||
| 
 | ||||
|     layout(); | ||||
| } | ||||
| 
 | ||||
| void PreferencesDialog::layout() | ||||
| { | ||||
|     const int em = em_unit(); | ||||
| 
 | ||||
|     msw_buttons_rescale(this, em, { wxID_OK, wxID_CANCEL }); | ||||
| 
 | ||||
|     const wxSize& size = wxSize(47 * em, 28 * em); | ||||
| 
 | ||||
|     SetMinSize(size); | ||||
|     SetMinSize(wxSize(47 * em, 28 * em)); | ||||
|     Fit(); | ||||
| 
 | ||||
|     Refresh(); | ||||
| } | ||||
| 
 | ||||
| void PreferencesDialog::create_icon_size_slider() | ||||
| { | ||||
|     const auto app_config = get_app_config(); | ||||
| 
 | ||||
|     const int em = em_unit(); | ||||
| 
 | ||||
|     m_icon_size_sizer = new wxBoxSizer(wxHORIZONTAL); | ||||
| 
 | ||||
|     wxWindow* parent = m_optgroup->ctrl_parent(); | ||||
| 
 | ||||
|     if (isOSX) | ||||
|         // For correct rendering of the slider and value label under OSX
 | ||||
|         // we should use system default background
 | ||||
|         parent->SetBackgroundStyle(wxBG_STYLE_ERASE); | ||||
| 
 | ||||
|     auto label = new wxStaticText(parent, wxID_ANY, _(L("Icon size in a respect to the default size")) + " (%) :"); | ||||
| 
 | ||||
|     m_icon_size_sizer->Add(label, 0, wxALIGN_CENTER_VERTICAL| wxRIGHT | (isOSX ? 0 : wxLEFT), em); | ||||
| 
 | ||||
|     const int def_val = atoi(app_config->get("custom_toolbar_size").c_str()); | ||||
| 
 | ||||
|     long style = wxSL_HORIZONTAL; | ||||
|     if (!isOSX) | ||||
|         style |= wxSL_LABELS | wxSL_AUTOTICKS; | ||||
| 
 | ||||
|     auto slider = new wxSlider(parent, wxID_ANY, def_val, 30, 100,  | ||||
|                                wxDefaultPosition, wxDefaultSize, style); | ||||
| 
 | ||||
|     slider->SetTickFreq(10); | ||||
|     slider->SetPageSize(10); | ||||
|     slider->SetToolTip(_(L("Select toolbar icon size in respect to the default one."))); | ||||
| 
 | ||||
|     m_icon_size_sizer->Add(slider, 1, wxEXPAND); | ||||
| 
 | ||||
|     wxStaticText* val_label{ nullptr }; | ||||
|     if (isOSX) { | ||||
|         val_label = new wxStaticText(parent, wxID_ANY, wxString::Format("%d", def_val)); | ||||
|         m_icon_size_sizer->Add(val_label, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, em); | ||||
|     } | ||||
| 
 | ||||
|     slider->Bind(wxEVT_SLIDER, ([this, slider, val_label](wxCommandEvent e) { | ||||
|         auto val = slider->GetValue(); | ||||
|         m_values["custom_toolbar_size"] = (boost::format("%d") % val).str(); | ||||
| 
 | ||||
|         if (val_label) | ||||
|             val_label->SetLabelText(wxString::Format("%d", val)); | ||||
|     }), slider->GetId()); | ||||
| 
 | ||||
|     for (wxWindow* win : std::vector<wxWindow*>{ slider, label, val_label }) { | ||||
|         if (!win) continue;          | ||||
|         win->SetFont(wxGetApp().normal_font()); | ||||
| 
 | ||||
|         if (isOSX) continue; // under OSX we use wxBG_STYLE_ERASE
 | ||||
|         win->SetBackgroundStyle(wxBG_STYLE_PAINT); | ||||
|     } | ||||
| 
 | ||||
|     m_optgroup->sizer->Add(m_icon_size_sizer, 0, wxEXPAND | wxALL, em); | ||||
| } | ||||
| 
 | ||||
| } // GUI
 | ||||
| } // Slic3r
 | ||||
|  | @ -16,6 +16,8 @@ class PreferencesDialog : public DPIDialog | |||
| { | ||||
| 	std::map<std::string, std::string>	m_values; | ||||
| 	std::shared_ptr<ConfigOptionsGroup>	m_optgroup; | ||||
|     wxSizer*                            m_icon_size_sizer; | ||||
|     bool                                isOSX {false}; | ||||
| public: | ||||
| 	PreferencesDialog(wxWindow* parent); | ||||
| 	~PreferencesDialog() {} | ||||
|  | @ -25,6 +27,8 @@ public: | |||
| 
 | ||||
| protected: | ||||
|     void on_dpi_changed(const wxRect &suggested_rect) override; | ||||
|     void layout(); | ||||
|     void create_icon_size_slider(); | ||||
| }; | ||||
| 
 | ||||
| } // GUI
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bubnikv
						bubnikv