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
This commit is contained in:
Vadim Zeitlin
2012-10-22 21:46:46 +00:00
parent fe24e4e9c2
commit 1e30d94eff
5 changed files with 32 additions and 7 deletions

View File

@@ -103,6 +103,9 @@ public:
virtual int GetBorderWidth( virtual int GetBorderWidth(
wxWindow* wnd) = 0; wxWindow* wnd) = 0;
virtual int GetAdditionalBorderSpace(
wxWindow* wnd) = 0;
virtual int GetBestTabCtrlSize( virtual int GetBestTabCtrlSize(
wxWindow* wnd, wxWindow* wnd,
const wxAuiNotebookPageArray& pages, const wxAuiNotebookPageArray& pages,
@@ -162,6 +165,9 @@ public:
int GetBorderWidth( int GetBorderWidth(
wxWindow* wnd); wxWindow* wnd);
int GetAdditionalBorderSpace(
wxWindow* wnd);
wxSize GetTabSize( wxSize GetTabSize(
wxDC& dc, wxDC& dc,
wxWindow* wnd, wxWindow* wnd,
@@ -258,6 +264,9 @@ public:
int GetBorderWidth( int GetBorderWidth(
wxWindow* wnd); wxWindow* wnd);
int GetAdditionalBorderSpace(
wxWindow* wnd);
wxSize GetTabSize( wxSize GetTabSize(
wxDC& dc, wxDC& dc,
wxWindow* wnd, wxWindow* wnd,

View File

@@ -48,6 +48,7 @@ public:
int GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& pages, int GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& pages,
const wxSize& required_bmp_size); const wxSize& required_bmp_size);
int GetBorderWidth(wxWindow* wnd); int GetBorderWidth(wxWindow* wnd);
int GetAdditionalBorderSpace(wxWindow* wnd);
virtual wxSize GetTabSize(wxDC& dc, wxWindow* wnd, const wxString& caption, virtual wxSize GetTabSize(wxDC& dc, wxWindow* wnd, const wxString& caption,
const wxBitmap& bitmap, bool active, const wxBitmap& bitmap, bool active,
int close_button_state, int* x_extent); int close_button_state, int* x_extent);

View File

@@ -1544,9 +1544,9 @@ public:
for (i = 0; i < page_count; ++i) for (i = 0; i < page_count; ++i)
{ {
wxAuiNotebookPage& page = pages.Item(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 ) if ( height < 0 )
{ {
// avoid passing negative height to wxWindow::SetSize(), this // avoid passing negative height to wxWindow::SetSize(), this
@@ -1556,16 +1556,16 @@ public:
if (m_tabs->GetFlags() & wxAUI_NB_BOTTOM) if (m_tabs->GetFlags() & wxAUI_NB_BOTTOM)
{ {
page.window->SetSize(m_rect.x + 2 * border_width, page.window->SetSize(m_rect.x + border_space,
m_rect.y + 2 * border_width, m_rect.y + border_space,
m_rect.width - 4 * border_width, m_rect.width - 2 * border_space,
height); height);
} }
else //TODO: if (GetFlags() & wxAUI_NB_TOP) 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.y + m_tabCtrlHeight,
m_rect.width - 4 * border_width, m_rect.width - 2 * border_space,
height); height);
} }
// TODO: else if (GetFlags() & wxAUI_NB_LEFT){} // TODO: else if (GetFlags() & wxAUI_NB_LEFT){}

View File

@@ -610,6 +610,11 @@ int wxAuiGenericTabArt::GetBorderWidth(wxWindow* wnd)
return 1; return 1;
} }
int wxAuiGenericTabArt::GetAdditionalBorderSpace(wxWindow* WXUNUSED(wnd))
{
return 0;
}
wxSize wxAuiGenericTabArt::GetTabSize(wxDC& dc, wxSize wxAuiGenericTabArt::GetTabSize(wxDC& dc,
wxWindow* WXUNUSED(wnd), wxWindow* WXUNUSED(wnd),
const wxString& caption, const wxString& caption,
@@ -1137,6 +1142,11 @@ int wxAuiSimpleTabArt::GetBorderWidth(wxWindow* wnd)
return 1; return 1;
} }
int wxAuiSimpleTabArt::GetAdditionalBorderSpace(wxWindow* WXUNUSED(wnd))
{
return 0;
}
wxSize wxAuiSimpleTabArt::GetTabSize(wxDC& dc, wxSize wxAuiSimpleTabArt::GetTabSize(wxDC& dc,
wxWindow* WXUNUSED(wnd), wxWindow* WXUNUSED(wnd),
const wxString& caption, const wxString& caption,

View File

@@ -487,6 +487,11 @@ int wxAuiGtkTabArt::GetBorderWidth(wxWindow* wnd)
GTK_NOTEBOOK (wxGTKPrivate::GetNotebookWidget())->tab_vborder); GTK_NOTEBOOK (wxGTKPrivate::GetNotebookWidget())->tab_vborder);
} }
int wxAuiGtkTabArt::GetAdditionalBorderSpace(wxWindow* wnd)
{
return 2 * GetBorderWidth(wnd);
}
wxSize wxAuiGtkTabArt::GetTabSize(wxDC& dc, wxSize wxAuiGtkTabArt::GetTabSize(wxDC& dc,
wxWindow* wnd, wxWindow* wnd,
const wxString& caption, const wxString& caption,