X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e63fdcd600e2eb717a19f9fa2895e9256e83c890..16d38102e8ad5534d185cc532b9aa8077a75e0a4:/contrib/src/gizmos/splittree.cpp?ds=sidebyside diff --git a/contrib/src/gizmos/splittree.cpp b/contrib/src/gizmos/splittree.cpp index fbb3885081..86d7b72060 100644 --- a/contrib/src/gizmos/splittree.cpp +++ b/contrib/src/gizmos/splittree.cpp @@ -35,9 +35,15 @@ #include "wx/wx.h" #endif +#ifdef __WXMSW__ +#include +#include "wx/msw/winundef.h" +#endif + #include "wx/generic/treectlg.h" #include "wx/gizmos/splittree.h" +#include /* * wxRemotelyScrolledTreeCtrl @@ -170,7 +176,7 @@ void wxRemotelyScrolledTreeCtrl::PrepareDC(wxDC& dc) scrolledWindow->GetScrollPixelsPerUnit(& xppu2, & yppu2); dc.SetDeviceOrigin( -startX * xppu1, -startY * yppu2 ); - dc.SetUserScale( win->GetScaleX(), win->GetScaleY() ); + // dc.SetUserScale( win->GetScaleX(), win->GetScaleY() ); } } @@ -244,14 +250,18 @@ void wxRemotelyScrolledTreeCtrl::AdjustRemoteScrollbars() wxRect itemRect; if (GetBoundingRect(GetRootItem(), itemRect)) { - int itemHeight = itemRect.GetHeight(); + // Actually, the real height seems to be 1 less than reported + // (e.g. 16 instead of 16) + int itemHeight = itemRect.GetHeight() - 1; int w, h; GetClientSize(&w, &h); wxRect rect(0, 0, 0, 0); CalcTreeSize(rect); - int treeViewHeight = rect.GetHeight()/itemHeight; + + double f = ((double) (rect.GetHeight()) / (double) itemHeight) ; + int treeViewHeight = (int) ceil(f); int scrollPixelsPerLine = itemHeight; int scrollPos = - (itemRect.y / itemHeight); @@ -299,9 +309,6 @@ void wxRemotelyScrolledTreeCtrl::CalcTreeSize(wxRect& rect) void wxRemotelyScrolledTreeCtrl::CalcTreeSize(const wxTreeItemId& id, wxRect& rect) { - // TODO: implement GetFirst/NextVisibleItem - // for wxGenericTreeCtrl, plus GetBoundingRect. - // More efficient implementation would be to find the last item (but how?) // Q: is the bounding rect relative to the top of the virtual tree workspace // or the top of the window? How would we convert? @@ -427,7 +434,7 @@ void wxTreeCompanionWindow::OnPaint(wxPaintEvent& event) dc.DrawLine(0, cy, clientSize.x, cy); } } - if (m_treeCtrl->GetBoundingRect(lastH, itemRect)) + if (lastH.IsOk() && m_treeCtrl->GetBoundingRect(lastH, itemRect)) { cy = itemRect.GetBottom(); dc.DrawLine(0, cy, clientSize.x, cy); @@ -571,9 +578,12 @@ void wxSplitterScrolledWindow::OnScroll(wxScrollWinEvent& event) // don't cause an infinite loop static bool inOnScroll = FALSE; if (inOnScroll) + { + event.Skip(); return; + } inOnScroll = TRUE; - + int orient = event.GetOrientation(); int nScrollInc = CalcScrollInc(event);