From 04c0b59bc65b1984988b2322ffc2b477ea69cf03 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Fri, 11 Jan 2019 12:47:40 +0100
Subject: [PATCH] Fixed wrong ModeButtons layout on settings tabs under OSX

---
 src/slic3r/GUI/Tab.cpp | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index 4daaf5d63..05852097b 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -172,8 +172,8 @@ void Tab::create_preset_tab()
     m_mode_sizer = new PrusaModeSizer(panel);
 
 	m_hsizer = new wxBoxSizer(wxHORIZONTAL);
-	sizer->Add(m_hsizer, 0, wxBOTTOM, 3);
-	m_hsizer->Add(m_presets_choice, 1, wxLEFT | wxRIGHT | wxTOP | wxALIGN_CENTER_VERTICAL, 3);
+	sizer->Add(m_hsizer, 0, wxEXPAND | wxBOTTOM, 3);
+	m_hsizer->Add(m_presets_choice, 0, wxLEFT | wxRIGHT | wxTOP | wxALIGN_CENTER_VERTICAL, 3);
 	m_hsizer->AddSpacer(4);
 	m_hsizer->Add(m_btn_save_preset, 0, wxALIGN_CENTER_VERTICAL);
 	m_hsizer->AddSpacer(4);
@@ -185,8 +185,12 @@ void Tab::create_preset_tab()
 	m_hsizer->Add(m_undo_btn, 0, wxALIGN_CENTER_VERTICAL);
 	m_hsizer->AddSpacer(32);
 	m_hsizer->Add(m_question_btn, 0, wxALIGN_CENTER_VERTICAL);
-    m_hsizer->AddStretchSpacer(32);
-    m_hsizer->Add(m_mode_sizer, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5);
+    // m_hsizer->AddStretchSpacer(32);
+    // StretchSpacer has a strange behavior under OSX, so 
+    // There is used just additional sizer for m_mode_sizer with right alignment
+    auto mode_sizer = new wxBoxSizer(wxVERTICAL);
+    mode_sizer->Add(m_mode_sizer, 1, wxALIGN_RIGHT);
+    m_hsizer->Add(mode_sizer, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, wxOSX ? 15 : 5);
 
 	//Horizontal sizer to hold the tree and the selected page.
 	m_hsizer = new wxBoxSizer(wxHORIZONTAL);
@@ -681,18 +685,16 @@ void Tab::update_visibility()
         page->update_visibility(mode);
     update_page_tree_visibility();
 
-    m_hsizer->Layout();
-    Refresh();
+    // update mode for ModeSizer
+    m_mode_sizer->SetMode(mode);
 
+    Layout();
 	Thaw();
 
     // to update tree items color
     wxTheApp->CallAfter([this]() {
         update_changed_tree_ui();
     });
-
-    // update mode for ModeSizer
-    m_mode_sizer->SetMode(mode);
 }
 
 Field* Tab::get_field(const t_config_option_key& opt_key, int opt_index/* = -1*/) const