From 59017a7dae25087046c5b0185cd1c27e7f176b85 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 20 Jan 2021 17:34:25 +0100 Subject: [PATCH] wxBitmapComboBox under OSX and wxComboBox under other platforms is used on Manipulation panel for coordinate space choice now. + Fix of warning on wxBitmap.SetWidth(): deleted meaningless from wxWidgets 3.0 code --- src/slic3r/GUI/Field.cpp | 21 +----------------- src/slic3r/GUI/GUI_ObjectManipulation.cpp | 27 ++++------------------- src/slic3r/GUI/GUI_ObjectManipulation.hpp | 13 ++++++++++- 3 files changed, 17 insertions(+), 44 deletions(-) diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 88c833187..360a5e532 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -888,6 +888,7 @@ void SpinCtrl::msw_rescale() } #ifdef __WXOSX__ +static_assert(wxMAJOR_VERSION >= 3, "Use of wxBitmapComboBox on Settings Tabs requires wxWidgets 3.0 and newer"); using choice_ctrl = wxBitmapComboBox; #else using choice_ctrl = wxComboBox; @@ -942,22 +943,6 @@ void Choice::BUILD() { set_selection(); } -#ifdef __WXOSX__ -//#ifndef __WXGTK__ - /* Workaround for a correct rendering of the control without Bitmap (under MSW and OSX): - * - * 1. We should create small Bitmap to fill Bitmaps RefData, - * ! in this case wxBitmap.IsOK() return true. - * 2. But then set width to 0 value for no using of bitmap left and right spacing - * 3. Set this empty bitmap to the at list one item and BitmapCombobox will be recreated correct - * - * Note: Set bitmap height to the Font size because of OSX rendering. - */ - wxBitmap empty_bmp(1, temp->GetFont().GetPixelSize().y + 2); - empty_bmp.SetWidth(0); - temp->SetItemBitmap(0, empty_bmp); -#endif - temp->Bind(wxEVT_MOUSEWHEEL, [this](wxMouseEvent& e) { if (m_suppress_scroll && !m_is_dropped) e.StopPropagation(); @@ -1289,10 +1274,6 @@ void Choice::msw_rescale() } } - wxBitmap empty_bmp(1, field->GetFont().GetPixelSize().y + 2); - empty_bmp.SetWidth(0); - field->SetItemBitmap(0, empty_bmp); - idx == m_opt.enum_values.size() ? field->SetValue(selection) : field->SetSelection(idx); diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index 8a4c28096..b3cef47c5 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -45,11 +45,11 @@ static double get_volume_min_z(const GLVolume* volume) -static wxBitmapComboBox* create_word_local_combo(wxWindow *parent) +static choice_ctrl* create_word_local_combo(wxWindow *parent) { wxSize size(15 * wxGetApp().em_unit(), -1); - wxBitmapComboBox *temp = nullptr; + choice_ctrl* temp = nullptr; #ifdef __WXOSX__ /* wxBitmapComboBox with wxCB_READONLY style return NULL for GetTextCtrl(), * so ToolTip doesn't shown. @@ -59,7 +59,7 @@ static wxBitmapComboBox* create_word_local_combo(wxWindow *parent) temp->SetTextCtrlStyle(wxTE_READONLY); temp->Create(parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr); #else - temp = new wxBitmapComboBox(parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxCB_READONLY); + temp = new choice_ctrl(parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxCB_READONLY); #endif //__WXOSX__ temp->SetFont(Slic3r::GUI::wxGetApp().normal_font()); @@ -70,26 +70,11 @@ static wxBitmapComboBox* create_word_local_combo(wxWindow *parent) temp->SetSelection(0); temp->SetValue(temp->GetString(0)); -#ifndef __WXGTK__ - /* Workaround for a correct rendering of the control without Bitmap (under MSW and OSX): - * - * 1. We should create small Bitmap to fill Bitmaps RefData, - * ! in this case wxBitmap.IsOK() return true. - * 2. But then set width to 0 value for no using of bitmap left and right spacing - * 3. Set this empty bitmap to the at list one item and BitmapCombobox will be recreated correct - * - * Note: Set bitmap height to the Font size because of OSX rendering. - */ - wxBitmap empty_bmp(1, temp->GetFont().GetPixelSize().y + 2); - empty_bmp.SetWidth(0); - temp->SetItemBitmap(0, empty_bmp); -#endif - temp->SetToolTip(_L("Select coordinate space, in which the transformation will be performed.")); return temp; } -void msw_rescale_word_local_combo(wxBitmapComboBox* combo) +void msw_rescale_word_local_combo(choice_ctrl* combo) { const wxString selection = combo->GetString(combo->GetSelection()); @@ -111,10 +96,6 @@ void msw_rescale_word_local_combo(wxBitmapComboBox* combo) combo->Append(_L("World coordinates")); combo->Append(_L("Local coordinates")); - wxBitmap empty_bmp(1, combo->GetFont().GetPixelSize().y + 2); - empty_bmp.SetWidth(0); - combo->SetItemBitmap(0, empty_bmp); - combo->SetValue(selection); } diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.hpp b/src/slic3r/GUI/GUI_ObjectManipulation.hpp index 560fbb400..6b275799f 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.hpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.hpp @@ -7,7 +7,11 @@ #include "libslic3r/Point.hpp" #include +#ifdef __WXOSX__ class wxBitmapComboBox; +#else +class wxComboBox; +#endif // __WXOSX__ class wxStaticText; class LockButton; class wxStaticBitmap; @@ -16,6 +20,13 @@ class wxCheckBox; namespace Slic3r { namespace GUI { +#ifdef __WXOSX__ + static_assert(wxMAJOR_VERSION >= 3, "Use of wxBitmapComboBox on Manipulation panel requires wxWidgets 3.0 and newer"); + using choice_ctrl = wxBitmapComboBox; +#else + using choice_ctrl = wxComboBox; +#endif // __WXOSX__ + class Selection; class ObjectManipulation; @@ -125,7 +136,7 @@ private: // Does the object manipulation panel work in World or Local coordinates? bool m_world_coordinates = true; LockButton* m_lock_bnt{ nullptr }; - wxBitmapComboBox* m_word_local_combo = nullptr; + choice_ctrl* m_word_local_combo { nullptr }; ScalableBitmap m_manifold_warning_bmp; wxStaticBitmap* m_fix_throught_netfab_bitmap;