X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/54a4121a62a1a7bc6c003915d247e8362d27750b..af1f44f17ea894ffba100703360b9084fb4fa17b:/src/generic/treectlg.cpp diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index c1cd97fdfb..7b29dca54f 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -3649,11 +3649,32 @@ 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(); - // The generic control seems to have an implicit border + // there seems to be an implicit extra border around the items, although + // I'm not really sure where does it come from -- but without this, the + // scrollbars appear in a tree with default/best size size.IncBy(4, 4); + // 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; }