From a5119a41a5a82d611d9e7f80a3edbc58fc8de193 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 22 Aug 2018 10:44:11 +0200 Subject: [PATCH] Added overriding of the DoGetBestSize() to correct control sizing on OSX and Linux/GTK --- xs/src/slic3r/GUI/wxExtensions.cpp | 16 +++++++++++----- xs/src/slic3r/GUI/wxExtensions.hpp | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/xs/src/slic3r/GUI/wxExtensions.cpp b/xs/src/slic3r/GUI/wxExtensions.cpp index fe1018076..9e229a0b0 100644 --- a/xs/src/slic3r/GUI/wxExtensions.cpp +++ b/xs/src/slic3r/GUI/wxExtensions.cpp @@ -765,15 +765,12 @@ PrusaDoubleSlider::PrusaDoubleSlider( wxWindow *parent, wxControl(parent, id, pos, size, wxWANTS_CHARS | wxBORDER_NONE), m_lower_value(lowerValue), m_higher_value (higherValue), m_min_value(minValue), m_max_value(maxValue), - m_style(style) + m_style(style == wxSL_HORIZONTAL || style == wxSL_VERTICAL ? style: wxSL_HORIZONTAL) { #ifndef __WXOSX__ // SetDoubleBuffered exists on Win and Linux/GTK, but is missing on OSX SetDoubleBuffered(true); #endif //__WXOSX__ - if (m_style != wxSL_HORIZONTAL && m_style != wxSL_VERTICAL) - m_style = wxSL_HORIZONTAL; - m_thumb_higher = wxBitmap(style == wxSL_HORIZONTAL ? Slic3r::GUI::from_u8(Slic3r::var("right_half_circle.png")) : Slic3r::GUI::from_u8(Slic3r::var("up_half_circle.png")), wxBITMAP_TYPE_PNG); m_thumb_lower = wxBitmap(style == wxSL_HORIZONTAL ? Slic3r::GUI::from_u8(Slic3r::var("left_half_circle.png")) : @@ -789,7 +786,7 @@ PrusaDoubleSlider::PrusaDoubleSlider( wxWindow *parent, Bind(wxEVT_LEFT_UP, &PrusaDoubleSlider::OnLeftUp, this); Bind(wxEVT_MOUSEWHEEL, &PrusaDoubleSlider::OnWheel, this); Bind(wxEVT_ENTER_WINDOW,&PrusaDoubleSlider::OnEnterWin, this); - Bind(wxEVT_LEAVE_WINDOW,&PrusaDoubleSlider::OnLeaveWin, this); + Bind(wxEVT_LEAVE_WINDOW,&PrusaDoubleSlider::OnLeaveWin, this); Bind(wxEVT_KEY_DOWN, &PrusaDoubleSlider::OnKeyDown, this); // control's view variables @@ -807,6 +804,15 @@ PrusaDoubleSlider::PrusaDoubleSlider( wxWindow *parent, segm_pens = { &DARK_ORANGE_PEN, &ORANGE_PEN, &LIGHT_ORANGE_PEN }; } +wxSize PrusaDoubleSlider::DoGetBestSize() const +{ + wxSize size = wxControl::DoGetBestSize(); + if (size.x > 1 && size.y > 1) + return size; + const int new_size = is_horizontal() ? 80 : 120; + return wxSize(new_size, new_size); +} + void PrusaDoubleSlider::SetLowerValue(const int lower_val) { m_lower_value = lower_val; diff --git a/xs/src/slic3r/GUI/wxExtensions.hpp b/xs/src/slic3r/GUI/wxExtensions.hpp index 59d27e448..362583547 100644 --- a/xs/src/slic3r/GUI/wxExtensions.hpp +++ b/xs/src/slic3r/GUI/wxExtensions.hpp @@ -527,7 +527,7 @@ public: void SetHigherValue(int higher_val); void SetKoefForLabels(float koef){ m_label_koef = koef;} - wxSize DoGetBestSize(){ return wxDefaultSize; } + wxSize DoGetBestSize() const override; void OnPaint(wxPaintEvent& ){ render();} void OnLeftDown(wxMouseEvent& event);