+static void
+wxGetBestTreeSize(const wxTreeCtrlBase* treeCtrl, wxTreeItemId id, wxSize& size)
+{
+ wxRect rect;
+
+ if ( treeCtrl->GetBoundingRect(id, rect, true /* just the item */) )
+ {
+ // Translate to logical position so we get the full extent
+#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+ rect.x += treeCtrl->GetScrollPos(wxHORIZONTAL);
+ rect.y += treeCtrl->GetScrollPos(wxVERTICAL);
+#endif
+
+ size.IncTo(wxSize(rect.GetRight(), rect.GetBottom()));
+ }
+
+ wxTreeItemIdValue cookie;
+ for ( wxTreeItemId item = treeCtrl->GetFirstChild(id, cookie);
+ item.IsOk();
+ item = treeCtrl->GetNextChild(id, cookie) )
+ {
+ wxGetBestTreeSize(treeCtrl, item, size);
+ }
+}
+