From: Vadim Zeitlin Date: Sat, 2 Dec 2006 12:51:34 +0000 (+0000) Subject: more woodoo in DoGetBestSize() to get rid of tree borders for default-sizes controls X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1f640c45d43bc73423dbf70b76adeec37907a548 more woodoo in DoGetBestSize() to get rid of tree borders for default-sizes controls git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43744 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index 4c9305f01e..7b29dca54f 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -3649,6 +3649,11 @@ void wxGenericTreeCtrl::DoDirtyProcessing() wxSize wxGenericTreeCtrl::DoGetBestSize() const { + // make sure all positions are calculated as normally this only done during + // idle time but we need them for base class DoGetBestSize() to return the + // correct result + wxConstCast(this, wxGenericTreeCtrl)->CalculatePositions(); + wxSize size = wxTreeCtrlBase::DoGetBestSize(); // there seems to be an implicit extra border around the items, although @@ -3656,9 +3661,19 @@ wxSize wxGenericTreeCtrl::DoGetBestSize() const // scrollbars appear in a tree with default/best size size.IncBy(4, 4); - // avoid caching (necessarily arbitrary) default size for empty tree - if ( GetRootItem().IsOk() ) - CacheBestSize(size); + // and the border has to be rounded up to a multiple of PIXELS_PER_UNIT or + // scrollbars still appear + const wxSize& borderSize = GetWindowBorderSize(); + + int dx = (size.x - borderSize.x) % PIXELS_PER_UNIT; + if ( dx ) + size.x += PIXELS_PER_UNIT - dx; + int dy = (size.y - borderSize.y) % PIXELS_PER_UNIT; + if ( dy ) + size.y += PIXELS_PER_UNIT - dy; + + // we need to update the cache too as the base class cached its own value + CacheBestSize(size); return size; }