X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a4609ab847819b47c996674420871f4514d50625..38f74dffc11f9afca3e1ad20ac2b1146fc75a1b3:/src/generic/treectlg.cpp diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index a20a4fabe2..7b29dca54f 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -3647,4 +3647,35 @@ void wxGenericTreeCtrl::DoDirtyProcessing() AdjustMyScrollbars(); } +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 + // 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; +} + #endif // wxUSE_TREECTRL