From d48585c715aca01bc0620bfa23d2db45c3c8e375 Mon Sep 17 00:00:00 2001 From: yw4z Date: Tue, 10 Mar 2026 22:16:06 +0300 Subject: [PATCH 1/6] Update BBLTopbar.cpp --- src/slic3r/GUI/BBLTopbar.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 4ac9a7aa29..59b490c4cb 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -263,15 +263,24 @@ void BBLTopbar::Init(wxFrame* parent) m_title_item = this->AddLabel(ID_TITLE, "", FromDIP(TOPBAR_TITLE_WIDTH)); m_title_item->SetAlignment(wxALIGN_CENTRE); + this->Bind(wxEVT_SIZE, [this](wxSizeEvent& e) { + if(m_title_item){ + m_title_item->SetMinSize(wxSize(FromDIP(e.GetSize().GetWidth() > FromDIP(700) ? TOPBAR_TITLE_WIDTH : 200), -1)); + SetTitle(m_title_item->GetLabel()); + Refresh(); + } + e.Skip(); + }); + this->AddSpacer(FromDIP(10)); this->AddStretchSpacer(1); - m_publish_bitmap = create_scaled_bitmap("topbar_publish", nullptr, TOPBAR_ICON_SIZE); - m_publish_item = this->AddTool(ID_PUBLISH, "", m_publish_bitmap); - m_publish_disable_bitmap = create_scaled_bitmap("topbar_publish_disable", nullptr, TOPBAR_ICON_SIZE); - m_publish_item->SetDisabledBitmap(m_publish_disable_bitmap); - this->EnableTool(m_publish_item->GetId(), false); - this->AddSpacer(FromDIP(4)); + //m_publish_bitmap = create_scaled_bitmap("topbar_publish", nullptr, TOPBAR_ICON_SIZE); + //m_publish_item = this->AddTool(ID_PUBLISH, "", m_publish_bitmap); + //m_publish_disable_bitmap = create_scaled_bitmap("topbar_publish_disable", nullptr, TOPBAR_ICON_SIZE); + //m_publish_item->SetDisabledBitmap(m_publish_disable_bitmap); + //this->EnableTool(m_publish_item->GetId(), false); + //this->AddSpacer(FromDIP(4)); /*wxBitmap model_store_bitmap = create_scaled_bitmap("topbar_store", nullptr, TOPBAR_ICON_SIZE); m_model_store_item = this->AddTool(ID_MODEL_STORE, "", model_store_bitmap); @@ -279,7 +288,7 @@ void BBLTopbar::Init(wxFrame* parent) */ //this->AddSeparator(); - this->AddSpacer(FromDIP(4)); + //this->AddSpacer(FromDIP(4)); wxBitmap iconize_bitmap = create_scaled_bitmap("topbar_min", nullptr, TOPBAR_ICON_SIZE); wxAuiToolBarItem* iconize_btn = this->AddTool(wxID_ICONIZE_FRAME, "", iconize_bitmap); @@ -324,7 +333,7 @@ void BBLTopbar::Init(wxFrame* parent) this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnRedo, this, wxID_REDO); this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnUndo, this, wxID_UNDO); //this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnModelStoreClicked, this, ID_MODEL_STORE); - this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnPublishClicked, this, ID_PUBLISH); + //this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnPublishClicked, this, ID_PUBLISH); } BBLTopbar::~BBLTopbar() @@ -447,7 +456,7 @@ wxMenu* BBLTopbar::GetCalibMenu() void BBLTopbar::SetTitle(wxString title) { wxGCDC dc(this); - title = wxControl::Ellipsize(title, dc, wxELLIPSIZE_END, FromDIP(TOPBAR_TITLE_WIDTH)); + title = wxControl::Ellipsize(title, dc, wxELLIPSIZE_END, m_title_item->GetMinSize().GetWidth()); m_title_item->SetLabel(title); m_title_item->SetAlignment(wxALIGN_CENTRE); From eab3139268c1d499b0c1123586b9bc76743a8c9f Mon Sep 17 00:00:00 2001 From: yw4z Date: Wed, 11 Mar 2026 06:56:03 +0300 Subject: [PATCH 2/6] update --- src/slic3r/GUI/BBLTopbar.cpp | 104 +++++++++++++++++++++++++---------- src/slic3r/GUI/BBLTopbar.hpp | 18 +++++- 2 files changed, 92 insertions(+), 30 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 59b490c4cb..b729ba2dc3 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -36,14 +36,69 @@ enum CUSTOM_ID ID_AMS_NOTEBOOK, }; +CenteredTitle::CenteredTitle(wxWindow* parent) + : wxControl() +{ + SetBackgroundStyle(wxBG_STYLE_PAINT); + Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + Bind(wxEVT_PAINT, [this](wxPaintEvent& e) { + wxBufferedPaintDC dc(this); + dc.SetBackground(wxBrush(wxColour(38, 46, 48))); + dc.Clear(); + + dc.SetFont(GetFont()); + dc.SetTextForeground(*wxWHITE); + + wxFontMetrics fm = dc.GetFontMetrics(); + int textHeight = fm.ascent + fm.descent; + + wxString text = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, GetClientSize().GetWidth() - FromDIP(8)); + + wxRect rect = GetClientRect(); + int y = rect.y + (rect.height - textHeight) / 2; + + dc.DrawText(text, rect.x + (rect.width - dc.GetTextExtent(text).GetWidth()) / 2, y); + }); + + // repaint for Ellipsize + Bind(wxEVT_SIZE, [this](wxSizeEvent& e) { + Refresh(); + e.Skip(); + }); + + Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + e.SetPosition(GetParent()->ScreenToClient(ClientToScreen(e.GetPosition()))); + GetParent()->GetEventHandler()->ProcessEvent(e); + }); + + Bind(wxEVT_LEFT_DCLICK, [this](wxMouseEvent& e) { + e.SetPosition(GetParent()->ScreenToClient(ClientToScreen(e.GetPosition()))); + GetParent()->GetEventHandler()->ProcessEvent(e); + }); +} + +void CenteredTitle::SetTitle(const wxString& title) { + m_title = title; + RefreshRect(GetClientRect()); + Update(); +} + +// required for proper height +wxSize CenteredTitle::DoGetBestSize() const +{ + return wxSize(10, FromDIP(30)); +} + + class BBLTopbarArt : public wxAuiDefaultToolBarArt { public: - virtual void DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) wxOVERRIDE; + //virtual void DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) wxOVERRIDE; virtual void DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect) wxOVERRIDE; virtual void DrawButton(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) wxOVERRIDE; }; +/* void BBLTopbarArt::DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) { dc.SetFont(m_font); @@ -71,6 +126,7 @@ void BBLTopbarArt::DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& it dc.DrawText(item.GetLabel(), textX, textY); dc.DestroyClippingRegion(); } +*/ void BBLTopbarArt::DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect) { @@ -257,23 +313,15 @@ void BBLTopbar::Init(wxFrame* parent) m_calib_item = this->AddTool(ID_CALIB, _L("Calibration"), calib_bitmap); m_calib_item->SetDisabledBitmap(calib_bitmap_inactive); - this->AddSpacer(FromDIP(10)); - this->AddStretchSpacer(1); + this->AddSpacer(FromDIP(25)); + //this->AddStretchSpacer(1); - m_title_item = this->AddLabel(ID_TITLE, "", FromDIP(TOPBAR_TITLE_WIDTH)); - m_title_item->SetAlignment(wxALIGN_CENTRE); + m_title_ctrl = new CenteredTitle(this); + wxAuiToolBarItem* title_item = this->AddControl(m_title_ctrl, ""); + title_item->SetProportion(1); - this->Bind(wxEVT_SIZE, [this](wxSizeEvent& e) { - if(m_title_item){ - m_title_item->SetMinSize(wxSize(FromDIP(e.GetSize().GetWidth() > FromDIP(700) ? TOPBAR_TITLE_WIDTH : 200), -1)); - SetTitle(m_title_item->GetLabel()); - Refresh(); - } - e.Skip(); - }); - - this->AddSpacer(FromDIP(10)); - this->AddStretchSpacer(1); + this->AddSpacer(FromDIP(25)); + //this->AddStretchSpacer(1); //m_publish_bitmap = create_scaled_bitmap("topbar_publish", nullptr, TOPBAR_ICON_SIZE); //m_publish_item = this->AddTool(ID_PUBLISH, "", m_publish_bitmap); @@ -455,12 +503,9 @@ wxMenu* BBLTopbar::GetCalibMenu() void BBLTopbar::SetTitle(wxString title) { - wxGCDC dc(this); - title = wxControl::Ellipsize(title, dc, wxELLIPSIZE_END, m_title_item->GetMinSize().GetWidth()); - - m_title_item->SetLabel(title); - m_title_item->SetAlignment(wxALIGN_CENTRE); - this->Refresh(); + m_titleText = title; + if (m_title_ctrl) + m_title_ctrl->SetTitle(title); } void BBLTopbar::SetMaximizedSize() @@ -509,7 +554,8 @@ void BBLTopbar::Rescale() { item->SetBitmap(create_scaled_bitmap("calib_sf", this, TOPBAR_ICON_SIZE)); item->SetDisabledBitmap(create_scaled_bitmap("calib_sf_inactive", this, TOPBAR_ICON_SIZE)); - item = this->FindTool(ID_TITLE); + if (m_title_ctrl) + m_title_ctrl->SetTitle(m_titleText); /*item = this->FindTool(ID_PUBLISH); item->SetBitmap(create_scaled_bitmap("topbar_publish", this, TOPBAR_ICON_SIZE)); @@ -574,9 +620,9 @@ void BBLTopbar::OnCloseFrame(wxAuiToolBarEvent& event) void BBLTopbar::OnMouseLeftDClock(wxMouseEvent& mouse) { wxPoint mouse_pos = ::wxGetMousePosition(); + wxAuiToolBarItem* item = this->FindToolByCurrentPosition(); // check whether mouse is not on any tool item - if (this->FindToolByCurrentPosition() != NULL && - this->FindToolByCurrentPosition() != m_title_item) { + if (item != NULL && item->GetWindow() != m_title_ctrl) { mouse.Skip(); return; } @@ -644,10 +690,10 @@ void BBLTopbar::OnMouseLeftDown(wxMouseEvent& event) { wxPoint mouse_pos = ::wxGetMousePosition(); wxPoint frame_pos = m_frame->GetScreenPosition(); + wxAuiToolBarItem* item = this->FindToolByCurrentPosition(); m_delta = mouse_pos - frame_pos; - if (FindToolByCurrentPosition() == NULL - || this->FindToolByCurrentPosition() == m_title_item) + if (item == NULL || item->GetWindow() == m_title_ctrl) { #ifdef __WXMSW__ CaptureMouse(); @@ -737,8 +783,8 @@ WXLRESULT BBLTopbar::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam { switch (nMsg) { case WM_NCHITTEST: { - const wxAuiToolBarItem* current_item = this->FindToolByCurrentPosition(); - if (current_item != nullptr && current_item != m_title_item) { + wxAuiToolBarItem* item = this->FindToolByCurrentPosition(); + if (item != NULL && item->GetWindow() != m_title_ctrl) { break; } diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index b5f4673a44..bb3218f5bd 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -6,9 +6,22 @@ #include "SelectMachine.hpp" #include "DeviceManager.hpp" +#include using namespace Slic3r::GUI; +class CenteredTitle : public wxControl +{ +public: + CenteredTitle(wxWindow* parent); + void SetTitle(const wxString& title); + + wxSize DoGetBestSize() const override; + +private: + wxString m_title; +}; + class BBLTopbar : public wxAuiToolBar { public: @@ -70,7 +83,10 @@ private: wxMenu m_top_menu; wxMenu* m_file_menu; wxMenu m_calib_menu; - wxAuiToolBarItem* m_title_item; + + CenteredTitle* m_title_ctrl { nullptr }; + wxString m_titleText; + wxAuiToolBarItem* m_account_item; wxAuiToolBarItem* m_model_store_item; From e5a1020fcb32b496c8133bea5842a0f8056bfacf Mon Sep 17 00:00:00 2001 From: yw4z Date: Wed, 11 Mar 2026 14:43:27 +0300 Subject: [PATCH 3/6] fix shaky text while resizing --- src/slic3r/GUI/BBLTopbar.cpp | 33 +++++++++++++++++++++++++-------- src/slic3r/GUI/BBLTopbar.hpp | 2 ++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index b729ba2dc3..677de1e60b 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -41,23 +41,38 @@ CenteredTitle::CenteredTitle(wxWindow* parent) { SetBackgroundStyle(wxBG_STYLE_PAINT); Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - Bind(wxEVT_PAINT, [this](wxPaintEvent& e) { + Bind(wxEVT_PAINT, [this](wxPaintEvent&) { wxBufferedPaintDC dc(this); dc.SetBackground(wxBrush(wxColour(38, 46, 48))); dc.Clear(); - dc.SetFont(GetFont()); dc.SetTextForeground(*wxWHITE); - wxFontMetrics fm = dc.GetFontMetrics(); - int textHeight = fm.ascent + fm.descent; + wxRect rect = GetClientRect(); + int clientW = rect.GetWidth(); - wxString text = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, GetClientSize().GetWidth() - FromDIP(8)); + wxFontMetrics fm = dc.GetFontMetrics(); + int textHeight = fm.ascent + fm.descent; + int y = rect.y + (rect.height - textHeight) / 2; - wxRect rect = GetClientRect(); - int y = rect.y + (rect.height - textHeight) / 2; + int fullW = dc.GetTextExtent(m_title).GetWidth(); + int naturalX = rect.x + (clientW - fullW) / 2; - dc.DrawText(text, rect.x + (rect.width - dc.GetTextExtent(text).GetWidth()) / 2, y); + // Only update cached x if the shift exceeds 3px threshold to fix shaky text while resizing window and ellipsizing end + if (m_cachedX == -1 || std::abs(naturalX - m_cachedX) > FromDIP(3)) { + m_cachedX = wxMax(rect.x, naturalX); + m_cachedWidth = fullW; + } + + wxString text = m_title; + int availW = clientW - FromDIP(8); + + if (fullW > availW) { + int availFromCached = rect.x + clientW - m_cachedX - FromDIP(4); + text = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, wxMax(availFromCached, FromDIP(20))); + } + + dc.DrawText(text, m_cachedX, y); }); // repaint for Ellipsize @@ -79,6 +94,8 @@ CenteredTitle::CenteredTitle(wxWindow* parent) void CenteredTitle::SetTitle(const wxString& title) { m_title = title; + m_cachedX = -1; + m_cachedWidth = -1; RefreshRect(GetClientRect()); Update(); } diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index bb3218f5bd..49efea41ce 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -20,6 +20,8 @@ public: private: wxString m_title; + mutable int m_cachedX = -1; + mutable int m_cachedWidth = -1; }; class BBLTopbar : public wxAuiToolBar From ef2f7ca22af1930b8f55601dbddb2e6218302a66 Mon Sep 17 00:00:00 2001 From: yw4z Date: Wed, 11 Mar 2026 15:14:21 +0300 Subject: [PATCH 4/6] simplify solution --- src/slic3r/GUI/BBLTopbar.cpp | 32 +++++++++----------------------- src/slic3r/GUI/BBLTopbar.hpp | 2 -- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 677de1e60b..62c20e65cc 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -48,31 +48,19 @@ CenteredTitle::CenteredTitle(wxWindow* parent) dc.SetTextForeground(*wxWHITE); - wxRect rect = GetClientRect(); - int clientW = rect.GetWidth(); + wxFontMetrics fm = dc.GetFontMetrics(); + int textHeight = fm.ascent + fm.descent; - wxFontMetrics fm = dc.GetFontMetrics(); - int textHeight = fm.ascent + fm.descent; - int y = rect.y + (rect.height - textHeight) / 2; + wxRect rect = GetClientRect(); - int fullW = dc.GetTextExtent(m_title).GetWidth(); - int naturalX = rect.x + (clientW - fullW) / 2; + wxString ellipsized = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, rect.GetWidth() - FromDIP(8)); - // Only update cached x if the shift exceeds 3px threshold to fix shaky text while resizing window and ellipsizing end - if (m_cachedX == -1 || std::abs(naturalX - m_cachedX) > FromDIP(3)) { - m_cachedX = wxMax(rect.x, naturalX); - m_cachedWidth = fullW; - } + int y = rect.y + (rect.height - textHeight) / 2; + int x = rect.x + (ellipsized != m_title) + ? FromDIP(4) // fixed left when clipped + : (rect.width - dc.GetTextExtent(m_title).GetWidth()) / 2; // centered when full - wxString text = m_title; - int availW = clientW - FromDIP(8); - - if (fullW > availW) { - int availFromCached = rect.x + clientW - m_cachedX - FromDIP(4); - text = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, wxMax(availFromCached, FromDIP(20))); - } - - dc.DrawText(text, m_cachedX, y); + dc.DrawText(ellipsized, x, y); }); // repaint for Ellipsize @@ -94,8 +82,6 @@ CenteredTitle::CenteredTitle(wxWindow* parent) void CenteredTitle::SetTitle(const wxString& title) { m_title = title; - m_cachedX = -1; - m_cachedWidth = -1; RefreshRect(GetClientRect()); Update(); } diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index 49efea41ce..bb3218f5bd 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -20,8 +20,6 @@ public: private: wxString m_title; - mutable int m_cachedX = -1; - mutable int m_cachedWidth = -1; }; class BBLTopbar : public wxAuiToolBar From aabbc4152709f51d80eb589900b25790703284ef Mon Sep 17 00:00:00 2001 From: yw4z Date: Wed, 11 Mar 2026 15:36:19 +0300 Subject: [PATCH 5/6] Update BBLTopbar.cpp --- src/slic3r/GUI/BBLTopbar.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 62c20e65cc..d097fa2c2d 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -51,13 +51,12 @@ CenteredTitle::CenteredTitle(wxWindow* parent) wxFontMetrics fm = dc.GetFontMetrics(); int textHeight = fm.ascent + fm.descent; - wxRect rect = GetClientRect(); - + wxRect rect = GetClientRect(); wxString ellipsized = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, rect.GetWidth() - FromDIP(8)); int y = rect.y + (rect.height - textHeight) / 2; - int x = rect.x + (ellipsized != m_title) - ? FromDIP(4) // fixed left when clipped + int x = rect.x + (ellipsized != m_title) // is ellipsized + ? FromDIP(4) // fixed left when clipped : (rect.width - dc.GetTextExtent(m_title).GetWidth()) / 2; // centered when full dc.DrawText(ellipsized, x, y); @@ -69,15 +68,14 @@ CenteredTitle::CenteredTitle(wxWindow* parent) e.Skip(); }); - Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + auto forwardMouseEvent = [this](wxMouseEvent& e) { + if (e.LeftDown() && e.GetClickCount() > 1) return; // prevent duplicate event e.SetPosition(GetParent()->ScreenToClient(ClientToScreen(e.GetPosition()))); GetParent()->GetEventHandler()->ProcessEvent(e); - }); + }; - Bind(wxEVT_LEFT_DCLICK, [this](wxMouseEvent& e) { - e.SetPosition(GetParent()->ScreenToClient(ClientToScreen(e.GetPosition()))); - GetParent()->GetEventHandler()->ProcessEvent(e); - }); + Bind(wxEVT_LEFT_DOWN, forwardMouseEvent); + Bind(wxEVT_LEFT_DCLICK, forwardMouseEvent); } void CenteredTitle::SetTitle(const wxString& title) { From 3eac0a86e4dd6abcebfbc800ba320c492462b196 Mon Sep 17 00:00:00 2001 From: yw4z Date: Mon, 16 Mar 2026 15:10:36 +0300 Subject: [PATCH 6/6] update --- src/slic3r/GUI/BBLTopbar.cpp | 50 +++++++----------------------------- src/slic3r/GUI/BBLTopbar.hpp | 4 +-- 2 files changed, 11 insertions(+), 43 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index d097fa2c2d..65fcb2958c 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -52,12 +52,12 @@ CenteredTitle::CenteredTitle(wxWindow* parent) int textHeight = fm.ascent + fm.descent; wxRect rect = GetClientRect(); - wxString ellipsized = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, rect.GetWidth() - FromDIP(8)); + wxString ellipsized = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, wxMax(0, rect.GetWidth() - FromDIP(8))); int y = rect.y + (rect.height - textHeight) / 2; int x = rect.x + (ellipsized != m_title) // is ellipsized - ? FromDIP(4) // fixed left when clipped - : (rect.width - dc.GetTextExtent(m_title).GetWidth()) / 2; // centered when full + ? FromDIP(4) // align to left when clipped + : (rect.width - dc.GetTextExtent(m_title).GetWidth()) / 2; // centered when has available space dc.DrawText(ellipsized, x, y); }); @@ -80,8 +80,7 @@ CenteredTitle::CenteredTitle(wxWindow* parent) void CenteredTitle::SetTitle(const wxString& title) { m_title = title; - RefreshRect(GetClientRect()); - Update(); + Refresh(); } // required for proper height @@ -94,41 +93,10 @@ wxSize CenteredTitle::DoGetBestSize() const class BBLTopbarArt : public wxAuiDefaultToolBarArt { public: - //virtual void DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) wxOVERRIDE; virtual void DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect) wxOVERRIDE; virtual void DrawButton(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) wxOVERRIDE; }; -/* -void BBLTopbarArt::DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) -{ - dc.SetFont(m_font); -#ifdef __WINDOWS__ - dc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT)); -#else - dc.SetTextForeground(*wxWHITE); -#endif - - int textWidth = 0, textHeight = 0; - dc.GetTextExtent(item.GetLabel(), &textWidth, &textHeight); - - wxRect clipRect = rect; - clipRect.width -= 1; - dc.SetClippingRegion(clipRect); - - int textX, textY; - if (textWidth < rect.GetWidth()) { - textX = rect.x + 1 + (rect.width - textWidth) / 2; - } - else { - textX = rect.x + 1; - } - textY = rect.y + (rect.height - textHeight) / 2; - dc.DrawText(item.GetLabel(), textX, textY); - dc.DestroyClippingRegion(); -} -*/ - void BBLTopbarArt::DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect) { dc.SetBrush(wxBrush(wxColour(38, 46, 48))); @@ -399,11 +367,11 @@ void BBLTopbar::OnOpenProject(wxAuiToolBarEvent& event) plater->load_project(); } -void BBLTopbar::show_publish_button(bool show) -{ - this->EnableTool(m_publish_item->GetId(), show); - Refresh(); -} +//void BBLTopbar::show_publish_button(bool show) +//{ +// this->EnableTool(m_publish_item->GetId(), show); +// Refresh(); +//} void BBLTopbar::OnSaveProject(wxAuiToolBarEvent& event) { diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index bb3218f5bd..8fc77e774e 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -44,7 +44,7 @@ public: void OnMouseCaptureLost(wxMouseCaptureLostEvent& event); void OnMenuClose(wxMenuEvent& event); void OnOpenProject(wxAuiToolBarEvent& event); - void show_publish_button(bool show); + //void show_publish_button(bool show); void OnSaveProject(wxAuiToolBarEvent& event); void OnUndo(wxAuiToolBarEvent& event); void OnRedo(wxAuiToolBarEvent& event); @@ -90,7 +90,7 @@ private: wxAuiToolBarItem* m_account_item; wxAuiToolBarItem* m_model_store_item; - wxAuiToolBarItem *m_publish_item; + //wxAuiToolBarItem *m_publish_item; wxAuiToolBarItem* m_undo_item; wxAuiToolBarItem* m_redo_item; wxAuiToolBarItem* m_calib_item;