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:
@@ -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,
|
||||||
|
@@ -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);
|
||||||
|
@@ -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){}
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user