From e97e8c6af61c6c18634da46ad92b5aec1b932158 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Thu, 18 Apr 2019 02:03:40 +0200 Subject: [PATCH] Overrided on_dpi_changed() for some Dialogs: BedShapeDialog, KBShortcutsDialog, ConfigWizard, Preferences --- src/slic3r/GUI/BedShapeDialog.cpp | 19 +++++++++- src/slic3r/GUI/BedShapeDialog.hpp | 14 +++++--- src/slic3r/GUI/ConfigWizard.cpp | 42 ++++++++++++++++++++-- src/slic3r/GUI/ConfigWizard.hpp | 8 ++++- src/slic3r/GUI/ConfigWizard_private.hpp | 12 ++++++- src/slic3r/GUI/GUI_App.cpp | 12 ++++--- src/slic3r/GUI/GUI_App.hpp | 2 +- src/slic3r/GUI/KBShortcutsDialog.cpp | 46 ++++++++++++++++++------- src/slic3r/GUI/KBShortcutsDialog.hpp | 21 +++++++++-- src/slic3r/GUI/MainFrame.cpp | 16 ++++----- src/slic3r/GUI/OptionsGroup.cpp | 6 ++-- src/slic3r/GUI/Preferences.cpp | 19 ++++++++-- src/slic3r/GUI/Preferences.hpp | 6 +++- 13 files changed, 178 insertions(+), 45 deletions(-) diff --git a/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp index 7bbf1ac7f..2762f0db7 100644 --- a/src/slic3r/GUI/BedShapeDialog.cpp +++ b/src/slic3r/GUI/BedShapeDialog.cpp @@ -18,6 +18,7 @@ namespace GUI { void BedShapeDialog::build_dialog(ConfigOptionPoints* default_pt) { + SetFont(wxGetApp().normal_font()); m_panel = new BedShapePanel(this); m_panel->build_panel(default_pt); @@ -36,6 +37,22 @@ void BedShapeDialog::build_dialog(ConfigOptionPoints* default_pt) })); } +void BedShapeDialog::on_dpi_changed(const wxRect &suggested_rect) +{ + const int& em = em_unit(); + m_panel->m_shape_options_book->SetMinSize(wxSize(25 * em, -1)); + + for (auto og : m_panel->m_optgroups) + og->rescale(); + + const wxSize& size = wxSize(50 * em, -1); + + SetMinSize(size); + SetSize(size); + + Refresh(); +} + void BedShapePanel::build_panel(ConfigOptionPoints* default_pt) { // on_change(nullptr); @@ -125,7 +142,7 @@ ConfigOptionsGroupShp BedShapePanel::init_shape_options_page(wxString title) ConfigOptionsGroupShp optgroup; optgroup = std::make_shared(panel, _(L("Settings"))); - optgroup->label_width = 10*wxGetApp().em_unit();//100; + optgroup->label_width = 10; optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value) { update_shape(); }; diff --git a/src/slic3r/GUI/BedShapeDialog.hpp b/src/slic3r/GUI/BedShapeDialog.hpp index 538fccc34..72e50a05d 100644 --- a/src/slic3r/GUI/BedShapeDialog.hpp +++ b/src/slic3r/GUI/BedShapeDialog.hpp @@ -16,11 +16,8 @@ namespace GUI { using ConfigOptionsGroupShp = std::shared_ptr; class BedShapePanel : public wxPanel { - wxChoicebook* m_shape_options_book; Bed_2D* m_canvas; - std::vector m_optgroups; - public: BedShapePanel(wxWindow* parent) : wxPanel(parent, wxID_ANY) {} ~BedShapePanel() {} @@ -35,18 +32,25 @@ public: // Returns the resulting bed shape polygon. This value will be stored to the ini file. std::vector GetValue() { return m_canvas->m_bed_shape; } + + wxChoicebook* m_shape_options_book; + std::vector m_optgroups; + }; -class BedShapeDialog : public wxDialog +class BedShapeDialog : public DPIDialog { BedShapePanel* m_panel; public: - BedShapeDialog(wxWindow* parent) : wxDialog(parent, wxID_ANY, _(L("Bed Shape")), + BedShapeDialog(wxWindow* parent) : DPIDialog(parent, wxID_ANY, _(L("Bed Shape")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {} ~BedShapeDialog() {} void build_dialog(ConfigOptionPoints* default_pt); std::vector GetValue() { return m_panel->GetValue(); } + +protected: + void on_dpi_changed(const wxRect &suggested_rect) override; }; } // GUI diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 449c50ad2..641f1cb72 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -632,15 +632,21 @@ void PageTemperatures::apply_custom_config(DynamicPrintConfig &config) ConfigWizardIndex::ConfigWizardIndex(wxWindow *parent) : wxPanel(parent) + /* #ys_FIXME_delete_after_testing by VK , bg(GUI::from_u8(Slic3r::var("Slic3r_192px_transparent.png")), wxBITMAP_TYPE_PNG) , bullet_black(GUI::from_u8(Slic3r::var("bullet_black.png")), wxBITMAP_TYPE_PNG) , bullet_blue(GUI::from_u8(Slic3r::var("bullet_blue.png")), wxBITMAP_TYPE_PNG) , bullet_white(GUI::from_u8(Slic3r::var("bullet_white.png")), wxBITMAP_TYPE_PNG) + */ + , bg(PrusaBitmap(parent, "Slic3r_192px_transparent.png", 192)) + , bullet_black(PrusaBitmap(parent, "bullet_black.png")) + , bullet_blue(PrusaBitmap(parent, "bullet_blue.png")) + , bullet_white(PrusaBitmap(parent, "bullet_white.png")) , item_active(0) , item_hover(-1) , last_page((size_t)-1) { - SetMinSize(bg.GetSize()); + SetMinSize(bg.bmp().GetSize()); const wxSize size = GetTextExtent("m"); em = size.x; @@ -652,7 +658,10 @@ ConfigWizardIndex::ConfigWizardIndex(wxWindow *parent) // In some cases it didn't work at all. And so wxStaticBitmap is used here instead, // because it has all the platform quirks figured out. auto *sizer = new wxBoxSizer(wxVERTICAL); + /* #ys_FIXME_delete_after_testing by VK auto *logo = new wxStaticBitmap(this, wxID_ANY, bg); + */ + logo = new wxStaticBitmap(this, wxID_ANY, bg.bmp()); sizer->AddStretchSpacer(); sizer->Add(logo); SetSizer(sizer); @@ -760,8 +769,12 @@ void ConfigWizardIndex::on_paint(wxPaintEvent & evt) wxPaintDC dc(this); + /* #ys_FIXME_delete_after_testing by VK const auto bullet_w = bullet_black.GetSize().GetWidth(); const auto bullet_h = bullet_black.GetSize().GetHeight(); + */ + const auto bullet_w = bullet_black.bmp().GetSize().GetWidth(); + const auto bullet_h = bullet_black.bmp().GetSize().GetHeight(); const int yoff_icon = bullet_h < em_h ? (em_h - bullet_h) / 2 : 0; const int yoff_text = bullet_h > em_h ? (bullet_h - em_h) / 2 : 0; const int yinc = item_height(); @@ -772,10 +785,16 @@ void ConfigWizardIndex::on_paint(wxPaintEvent & evt) unsigned x = em/2 + item.indent * em; if (i == item_active || item_hover >= 0 && i == (size_t)item_hover) { + /*#ys_FIXME_delete_after_testing by VK dc.DrawBitmap(bullet_blue, x, y + yoff_icon, false); } else if (i < item_active) { dc.DrawBitmap(bullet_black, x, y + yoff_icon, false); } else if (i > item_active) { dc.DrawBitmap(bullet_white, x, y + yoff_icon, false); } + */ + dc.DrawBitmap(bullet_blue.bmp(), x, y + yoff_icon, false); + } + else if (i < item_active) { dc.DrawBitmap(bullet_black.bmp(), x, y + yoff_icon, false); } + else if (i > item_active) { dc.DrawBitmap(bullet_white.bmp(), x, y + yoff_icon, false); } dc.DrawText(item.label, x + bullet_w + em/2, y + yoff_text); y += yinc; @@ -797,6 +816,18 @@ void ConfigWizardIndex::on_mouse_move(wxMouseEvent &evt) evt.Skip(); } +void ConfigWizardIndex::rescale() +{ + bg.rescale(); + SetMinSize(bg.bmp().GetSize()); + logo->SetBitmap(bg.bmp()); + + bullet_black.rescale(); + bullet_blue.rescale(); + bullet_white.rescale(); + Refresh(); +} + // priv @@ -971,9 +1002,10 @@ void ConfigWizard::priv::apply_config(AppConfig *app_config, PresetBundle *prese // Public ConfigWizard::ConfigWizard(wxWindow *parent, RunReason reason) - : wxDialog(parent, wxID_ANY, _(name().ToStdString()), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) + : DPIDialog(parent, wxID_ANY, _(name().ToStdString()), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) , p(new priv(this)) { + this->SetFont(wxGetApp().normal_font()); p->run_reason = reason; p->load_vendors(); @@ -1117,5 +1149,11 @@ const wxString& ConfigWizard::name(const bool from_menu/* = false*/) return from_menu ? config_wizard_name_menu : config_wizard_name; } +void ConfigWizard::on_dpi_changed(const wxRect &suggested_rect) +{ + p->index->rescale(); + Refresh(); +} + } } diff --git a/src/slic3r/GUI/ConfigWizard.hpp b/src/slic3r/GUI/ConfigWizard.hpp index c9ee05529..b707e525b 100644 --- a/src/slic3r/GUI/ConfigWizard.hpp +++ b/src/slic3r/GUI/ConfigWizard.hpp @@ -5,6 +5,8 @@ #include +#include "GUI_Utils.hpp" + namespace Slic3r { class PresetBundle; @@ -13,7 +15,7 @@ class PresetUpdater; namespace GUI { -class ConfigWizard: public wxDialog +class ConfigWizard: public DPIDialog { public: // Why is the Wizard run @@ -35,6 +37,10 @@ public: bool run(PresetBundle *preset_bundle, const PresetUpdater *updater); static const wxString& name(const bool from_menu = false); + +protected: + void on_dpi_changed(const wxRect &suggested_rect) override ; + private: struct priv; std::unique_ptr p; diff --git a/src/slic3r/GUI/ConfigWizard_private.hpp b/src/slic3r/GUI/ConfigWizard_private.hpp index df7602adf..b85cc3118 100644 --- a/src/slic3r/GUI/ConfigWizard_private.hpp +++ b/src/slic3r/GUI/ConfigWizard_private.hpp @@ -210,6 +210,7 @@ public: void go_to(ConfigWizardPage *page); void clear(); + void rescale(); private: struct Item @@ -223,18 +224,27 @@ private: int em; int em_h; - + /* #ys_FIXME_delete_after_testing by VK const wxBitmap bg; const wxBitmap bullet_black; const wxBitmap bullet_blue; const wxBitmap bullet_white; + */ + PrusaBitmap bg; + PrusaBitmap bullet_black; + PrusaBitmap bullet_blue; + PrusaBitmap bullet_white; + wxStaticBitmap* logo; std::vector items; size_t item_active; ssize_t item_hover; size_t last_page; + /* #ys_FIXME_delete_after_testing by VK int item_height() const { return std::max(bullet_black.GetSize().GetHeight(), em) + em; } + */ + int item_height() const { return std::max(bullet_black.bmp().GetSize().GetHeight(), em) + em; } void on_paint(wxPaintEvent &evt); void on_mouse_move(wxMouseEvent &evt); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 584a96a57..39628a9cb 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -325,11 +325,15 @@ void GUI_App::init_fonts() #endif /*__WXMAC__*/ } -void GUI_App::scale_default_fonts(const float scale_f) +void GUI_App::update_fonts() { - m_small_font = m_small_font.Scaled(scale_f); - m_bold_font = m_bold_font.Scaled(scale_f); - m_normal_font = m_normal_font.Scaled(scale_f); + /* Only normal and bold fonts are used for an application rescale, + * because of under MSW small and normal fonts are the same. + * To avoid same rescaling twice, just fill this values + * from rescaled MainFrame + */ + m_normal_font = mainframe->normal_font(); + m_bold_font = mainframe->normal_font().Bold(); } void GUI_App::set_label_clr_modified(const wxColour& clr) { diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 8136973ae..6a4626484 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -98,7 +98,7 @@ public: void init_label_colours(); void update_label_colours_from_appconfig(); void init_fonts(); - void scale_default_fonts(const float scale_f); + void update_fonts(); void set_label_clr_modified(const wxColour& clr); void set_label_clr_sys(const wxColour& clr); diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index c7fbe8231..bf2ff8286 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -10,14 +10,15 @@ namespace Slic3r { namespace GUI { KBShortcutsDialog::KBShortcutsDialog() - : wxDialog(NULL, wxID_ANY, _(L("Slic3r Prusa Edition - Keyboard Shortcuts")), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) + : DPIDialog(NULL, wxID_ANY, _(L("Slic3r Prusa Edition - Keyboard Shortcuts")), + wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) { SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); - auto main_sizer = new wxBoxSizer(wxVERTICAL); + main_sizer = new wxBoxSizer(wxVERTICAL); // logo - const wxBitmap logo_bmp = create_scaled_bitmap(this, "Slic3r_32px.png", 32); + m_logo_bmp = PrusaBitmap(this, "Slic3r_32px.png", 32); // fonts wxFont head_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).Bold(); @@ -27,7 +28,7 @@ KBShortcutsDialog::KBShortcutsDialog() head_font.SetPointSize(12); #endif // __WXOSX__ - const wxFont& font = wxGetApp().small_font(); + const wxFont& font = wxGetApp().normal_font(); const wxFont& bold_font = wxGetApp().bold_font(); fill_shortcuts(); @@ -43,22 +44,25 @@ KBShortcutsDialog::KBShortcutsDialog() wxBoxSizer* r_sizer = new wxBoxSizer(wxVERTICAL); main_grid_sizer->Add(r_sizer, 0); + m_head_bitmaps.reserve(m_full_shortcuts.size()); + const wxSize topic_size = wxSize(10 * wxGetApp().em_unit(), -1); + for (auto& sc : m_full_shortcuts) { -// auto sizer = sc.first == _(L("Main Shortcuts")) ? l_sizer : r_sizer; - auto sizer = sc.second.second == 0 ? l_sizer : r_sizer; + auto sizer = sc.second.second == szLeft ? l_sizer : r_sizer; wxBoxSizer* hsizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(hsizer, 0, wxEXPAND | wxTOP | wxBOTTOM, 10); // logo - auto *logo = new wxStaticBitmap(panel, wxID_ANY, logo_bmp); - hsizer->Add(logo, 0, wxEXPAND | wxLEFT | wxRIGHT, 15); + m_head_bitmaps.push_back(new wxStaticBitmap(panel, wxID_ANY, m_logo_bmp.bmp())); + hsizer->Add(m_head_bitmaps.back(), 0, wxEXPAND | wxLEFT | wxRIGHT, 15); // head - wxStaticText* head = new wxStaticText(panel, wxID_ANY, sc.first, wxDefaultPosition, wxSize(20 * wxGetApp().em_unit(), -1)); + wxStaticText* head = new wxStaticText(panel, wxID_ANY, sc.first, wxDefaultPosition, topic_size); head->SetFont(head_font); hsizer->Add(head, 0, wxALIGN_CENTER_VERTICAL); + // Shortcuts list auto grid_sizer = new wxFlexGridSizer(2, 5, 15); sizer->Add(grid_sizer, 0, wxEXPAND | wxLEFT| wxRIGHT, 15); @@ -121,7 +125,7 @@ void KBShortcutsDialog::fill_shortcuts() main_shortcuts.push_back(Shortcut("?" ,L("Show keyboard shortcuts list"))); main_shortcuts.push_back(Shortcut(ctrl+"LeftMouse" ,L("Select multiple object/Move multiple object"))); - m_full_shortcuts.push_back(std::make_pair( _(L("Main Shortcuts")), std::make_pair(main_shortcuts, 0) )); + m_full_shortcuts.push_back(std::make_pair(_(L("Main Shortcuts")), std::make_pair(main_shortcuts, szLeft))); Shortcuts plater_shortcuts; @@ -146,7 +150,7 @@ void KBShortcutsDialog::fill_shortcuts() plater_shortcuts.push_back(Shortcut("O", L("Zoom out"))); plater_shortcuts.push_back(Shortcut("ESC", L("Unselect gizmo, keep object selection"))); - m_full_shortcuts.push_back(std::make_pair(_(L("Plater Shortcuts")), std::make_pair(plater_shortcuts, 1))); + m_full_shortcuts.push_back(std::make_pair(_(L("Plater Shortcuts")), std::make_pair(plater_shortcuts, szRight))); // Shortcuts gizmo_shortcuts; @@ -166,7 +170,7 @@ void KBShortcutsDialog::fill_shortcuts() preview_shortcuts.push_back(Shortcut("U", L("Upper Layer"))); preview_shortcuts.push_back(Shortcut("D", L("Lower Layer"))); - m_full_shortcuts.push_back(std::make_pair( _(L("Preview Shortcuts")), std::make_pair(preview_shortcuts, 0) )); + m_full_shortcuts.push_back(std::make_pair(_(L("Preview Shortcuts")), std::make_pair(preview_shortcuts, szLeft))); Shortcuts layers_slider_shortcuts; @@ -179,7 +183,23 @@ void KBShortcutsDialog::fill_shortcuts() layers_slider_shortcuts.push_back(Shortcut("+", L("Add color change marker for current layer"))); layers_slider_shortcuts.push_back(Shortcut("-", L("Delete color change marker for current layer"))); - m_full_shortcuts.push_back(std::make_pair( _(L("Layers Slider Shortcuts")), std::make_pair(layers_slider_shortcuts, 1) )); + m_full_shortcuts.push_back(std::make_pair(_(L("Layers Slider Shortcuts")), std::make_pair(layers_slider_shortcuts, szRight))); +} + +void KBShortcutsDialog::on_dpi_changed(const wxRect &suggested_rect) +{ + m_logo_bmp.rescale(); + + for (wxStaticBitmap* bmp : m_head_bitmaps) + bmp->SetBitmap(m_logo_bmp.bmp()); + + const int& em = em_unit(); + const wxSize& size = wxSize(85 * em, 75 * em); + + SetMinSize(size); + SetSize(size); + + Refresh(); } void KBShortcutsDialog::onCloseDialog(wxEvent &) diff --git a/src/slic3r/GUI/KBShortcutsDialog.hpp b/src/slic3r/GUI/KBShortcutsDialog.hpp index d8905e1ce..f18e78682 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.hpp +++ b/src/slic3r/GUI/KBShortcutsDialog.hpp @@ -5,24 +5,39 @@ #include #include +#include "GUI_Utils.hpp" +#include "wxExtensions.hpp" + namespace Slic3r { namespace GUI { -class KBShortcutsDialog : public wxDialog +class KBShortcutsDialog : public DPIDialog/*wxDialog*/ { + enum PLACED_SIZER_ID + { + szLeft = 0, + szRight + }; + typedef std::pair Shortcut; typedef std::vector< Shortcut > Shortcuts; - typedef std::vector< std::pair> > ShortcutsVec; + typedef std::vector< std::pair> > ShortcutsVec; wxString text_info {wxEmptyString}; - ShortcutsVec m_full_shortcuts; + ShortcutsVec m_full_shortcuts; + wxSizer* main_sizer; + PrusaBitmap m_logo_bmp; + std::vector m_head_bitmaps; public: KBShortcutsDialog(); void fill_shortcuts(); +protected: + void on_dpi_changed(const wxRect &suggested_rect) override; + private: void onCloseDialog(wxEvent &); }; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 17f423621..ac4284c12 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -258,18 +258,16 @@ bool MainFrame::can_delete_all() const void MainFrame::on_dpi_changed(const wxRect &suggested_rect) { - const float old_sc_factor = prev_scale_factor(); - const float new_sc_factor = scale_factor(); +// const float old_sc_factor = prev_scale_factor(); +// const float new_sc_factor = scale_factor(); +// +// printf("old_sc_factor: %.2f \n", old_sc_factor); +// printf("new_sc_factor: %.2f\n\n", new_sc_factor); - printf("old_sc_factor: %.2f \n", old_sc_factor); - printf("new_sc_factor: %.2f\n\n", new_sc_factor); - - const float relative_scale_factor = new_sc_factor / old_sc_factor; - - wxGetApp().scale_default_fonts(relative_scale_factor); + wxGetApp().update_fonts(); // _strange_ workaround for correct em_unit calculation - const int new_em_unit = new_sc_factor * 10;//int(relative_scale_factor*wxGetApp().em_unit()); + const int new_em_unit = scale_factor() * 10; wxGetApp().set_em_unit(std::max(10, new_em_unit)); /* Load default preset bitmaps before a tabpanel initialization, diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 724b257d9..a951d9847 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -500,6 +500,8 @@ void ConfigOptionsGroup::rescale() for (const auto& field : m_fields) field.second->rescale(); + const int em = em_unit(parent()); + // rescale width of label column if (!m_options_mode.empty() && label_width > 1) { @@ -514,7 +516,7 @@ void ConfigOptionsGroup::rescale() { auto label = dynamic_cast(label_item->GetWindow()); if (label != nullptr) { - label->SetMinSize(wxSize(label_width*wxGetApp().em_unit(), -1)); + label->SetMinSize(wxSize(label_width*em, -1)); } } else if (label_item->IsSizer()) // case when we nave near_label_widget @@ -524,7 +526,7 @@ void ConfigOptionsGroup::rescale() { auto label = dynamic_cast(l_item->GetWindow()); if (label != nullptr) { - label->SetMinSize(wxSize(label_width*wxGetApp().em_unit(), -1)); + label->SetMinSize(wxSize(label_width*em, -1)); } } } diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 96a2f3618..62bcb9d9b 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -7,7 +7,9 @@ namespace Slic3r { namespace GUI { PreferencesDialog::PreferencesDialog(wxWindow* parent) : - wxDialog(parent, wxID_ANY, _(L("Preferences")), wxDefaultPosition, wxDefaultSize) { + DPIDialog(parent, wxID_ANY, _(L("Preferences")), wxDefaultPosition, + wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +{ build(); } @@ -15,7 +17,7 @@ void PreferencesDialog::build() { auto app_config = get_app_config(); m_optgroup = std::make_shared(this, _(L("General"))); - m_optgroup->label_width = 40; //400; + m_optgroup->label_width = 40; m_optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value){ m_values[opt_key] = boost::any_cast(value) ? "1" : "0"; }; @@ -140,5 +142,18 @@ void PreferencesDialog::accept() wxGetApp().update_ui_from_settings(); } +void PreferencesDialog::on_dpi_changed(const wxRect &suggested_rect) +{ + m_optgroup->rescale(); + + const int& em = em_unit(); + const wxSize& size = wxSize(50 * em, 29 * em); + + SetMinSize(size); + SetSize(size); + + Refresh(); +} + } // GUI } // Slic3r \ No newline at end of file diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index 363daebbc..096a2c906 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -2,6 +2,7 @@ #define slic3r_Preferences_hpp_ #include "GUI.hpp" +#include "GUI_Utils.hpp" #include #include @@ -11,7 +12,7 @@ namespace GUI { class ConfigOptionsGroup; -class PreferencesDialog : public wxDialog +class PreferencesDialog : public DPIDialog { std::map m_values; std::shared_ptr m_optgroup; @@ -21,6 +22,9 @@ public: void build(); void accept(); + +protected: + void on_dpi_changed(const wxRect &suggested_rect) override; }; } // GUI