From 1e30d94eff7dca642729cb2f557650e8f2ebc61f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 22 Oct 2012 21:46:46 +0000 Subject: [PATCH] Fix border size computation in wxAuiTabArt. Space was reserved for the borders even when it wasn't filled, resulting in visual artefacts. Fix this by virtualizing the function returning the additional space needed for the borders and only overriding it to return non zero in wxAuiGtkTabArt. Closes #14710. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72720 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/aui/tabart.h | 9 +++++++++ include/wx/aui/tabartgtk.h | 1 + src/aui/auibook.cpp | 14 +++++++------- src/aui/tabart.cpp | 10 ++++++++++ src/aui/tabartgtk.cpp | 5 +++++ 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/include/wx/aui/tabart.h b/include/wx/aui/tabart.h index 12621771a6..4a449678ac 100644 --- a/include/wx/aui/tabart.h +++ b/include/wx/aui/tabart.h @@ -103,6 +103,9 @@ public: virtual int GetBorderWidth( wxWindow* wnd) = 0; + virtual int GetAdditionalBorderSpace( + wxWindow* wnd) = 0; + virtual int GetBestTabCtrlSize( wxWindow* wnd, const wxAuiNotebookPageArray& pages, @@ -162,6 +165,9 @@ public: int GetBorderWidth( wxWindow* wnd); + int GetAdditionalBorderSpace( + wxWindow* wnd); + wxSize GetTabSize( wxDC& dc, wxWindow* wnd, @@ -258,6 +264,9 @@ public: int GetBorderWidth( wxWindow* wnd); + int GetAdditionalBorderSpace( + wxWindow* wnd); + wxSize GetTabSize( wxDC& dc, wxWindow* wnd, diff --git a/include/wx/aui/tabartgtk.h b/include/wx/aui/tabartgtk.h index b094082d81..37b8587f1c 100644 --- a/include/wx/aui/tabartgtk.h +++ b/include/wx/aui/tabartgtk.h @@ -48,6 +48,7 @@ public: int GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& pages, const wxSize& required_bmp_size); int GetBorderWidth(wxWindow* wnd); + int GetAdditionalBorderSpace(wxWindow* wnd); virtual wxSize GetTabSize(wxDC& dc, wxWindow* wnd, const wxString& caption, const wxBitmap& bitmap, bool active, int close_button_state, int* x_extent); diff --git a/src/aui/auibook.cpp b/src/aui/auibook.cpp index 402724309b..30691c1c03 100644 --- a/src/aui/auibook.cpp +++ b/src/aui/auibook.cpp @@ -1544,9 +1544,9 @@ public: for (i = 0; i < page_count; ++i) { wxAuiNotebookPage& page = pages.Item(i); - int border_width = m_tabs->GetArtProvider()->GetBorderWidth(page.window); + int border_space = m_tabs->GetArtProvider()->GetAdditionalBorderSpace(page.window); - int height = m_rect.height - m_tabCtrlHeight - border_width; + int height = m_rect.height - m_tabCtrlHeight - border_space; if ( height < 0 ) { // avoid passing negative height to wxWindow::SetSize(), this @@ -1556,16 +1556,16 @@ public: if (m_tabs->GetFlags() & wxAUI_NB_BOTTOM) { - page.window->SetSize(m_rect.x + 2 * border_width, - m_rect.y + 2 * border_width, - m_rect.width - 4 * border_width, + page.window->SetSize(m_rect.x + border_space, + m_rect.y + border_space, + m_rect.width - 2 * border_space, height); } else //TODO: if (GetFlags() & wxAUI_NB_TOP) { - page.window->SetSize(m_rect.x + 2 * border_width, + page.window->SetSize(m_rect.x + border_space, m_rect.y + m_tabCtrlHeight, - m_rect.width - 4 * border_width, + m_rect.width - 2 * border_space, height); } // TODO: else if (GetFlags() & wxAUI_NB_LEFT){} diff --git a/src/aui/tabart.cpp b/src/aui/tabart.cpp index 62c6c5f9dd..9a30baf76c 100644 --- a/src/aui/tabart.cpp +++ b/src/aui/tabart.cpp @@ -610,6 +610,11 @@ int wxAuiGenericTabArt::GetBorderWidth(wxWindow* wnd) return 1; } +int wxAuiGenericTabArt::GetAdditionalBorderSpace(wxWindow* WXUNUSED(wnd)) +{ + return 0; +} + wxSize wxAuiGenericTabArt::GetTabSize(wxDC& dc, wxWindow* WXUNUSED(wnd), const wxString& caption, @@ -1137,6 +1142,11 @@ int wxAuiSimpleTabArt::GetBorderWidth(wxWindow* wnd) return 1; } +int wxAuiSimpleTabArt::GetAdditionalBorderSpace(wxWindow* WXUNUSED(wnd)) +{ + return 0; +} + wxSize wxAuiSimpleTabArt::GetTabSize(wxDC& dc, wxWindow* WXUNUSED(wnd), const wxString& caption, diff --git a/src/aui/tabartgtk.cpp b/src/aui/tabartgtk.cpp index 28bfaa6aaf..e57ca3dd3f 100644 --- a/src/aui/tabartgtk.cpp +++ b/src/aui/tabartgtk.cpp @@ -487,6 +487,11 @@ int wxAuiGtkTabArt::GetBorderWidth(wxWindow* wnd) GTK_NOTEBOOK (wxGTKPrivate::GetNotebookWidget())->tab_vborder); } +int wxAuiGtkTabArt::GetAdditionalBorderSpace(wxWindow* wnd) +{ + return 2 * GetBorderWidth(wnd); +} + wxSize wxAuiGtkTabArt::GetTabSize(wxDC& dc, wxWindow* wnd, const wxString& caption, -- 2.45.2