From 402dfce7b324c977a5b396b07cd36835d5514e52 Mon Sep 17 00:00:00 2001
From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Thu, 6 Apr 2006 14:27:34 +0000
Subject: [PATCH] GetBoundingRect() is supposed to return the logical
 coordinates, even in !textOnly case; also documented it

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38604 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/latex/wx/treectrl.tex |  6 +++++-
 src/generic/treectlg.cpp   | 14 +++++++++-----
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/docs/latex/wx/treectrl.tex b/docs/latex/wx/treectrl.tex
index 176a038905..ad174cb31a 100644
--- a/docs/latex/wx/treectrl.tex
+++ b/docs/latex/wx/treectrl.tex
@@ -340,9 +340,13 @@ only the rectangle around the item's label will be returned, otherwise the
 item's image is also taken into account.
 
 The return value is {\tt true} if the rectangle was successfully retrieved or {\tt false}
-if it was not (in this case {\it rect} is not changed) - for example, if the
+if it was not (in this case {\it rect} is not changed) -- for example, if the
 item is currently invisible.
 
+Notice that the rectangle coordinates are logical, not physical ones. So, for
+example, the x coordinate may be negative if the tree has a horizontal
+scrollbar and its position is not $0$.
+
 \pythonnote{The wxPython version of this method requires only the
 {\tt item} and {\tt textOnly} parameters.  The return value is either a
 {\tt wxRect} object or {\tt None}.}
diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp
index 25576d2fb7..31b1d054a6 100644
--- a/src/generic/treectlg.cpp
+++ b/src/generic/treectlg.cpp
@@ -2887,12 +2887,9 @@ bool wxGenericTreeCtrl::GetBoundingRect(const wxTreeItemId& item,
 
     wxGenericTreeItem *i = (wxGenericTreeItem*) item.m_pItem;
 
-    int startX, startY;
-    GetViewStart(& startX, & startY);
-
     if ( textOnly )
     {
-        rect.x = i->GetX() - startX*PIXELS_PER_UNIT;
+        rect.x = i->GetX();
         rect.width = i->GetWidth();
 
         if ( m_imageListNormal )
@@ -2908,9 +2905,16 @@ bool wxGenericTreeCtrl::GetBoundingRect(const wxTreeItemId& item,
         rect.width = GetClientSize().x;
     }
 
-    rect.y = i->GetY() - startY*PIXELS_PER_UNIT;
+    rect.y = i->GetY();
     rect.height = GetLineHeight(i);
 
+    // we have to return the logical coordinates, not physical ones
+    int startX, startY;
+    GetViewStart(& startX, & startY);
+
+    rect.x -= startX*PIXELS_PER_UNIT;
+    rect.y -= startY*PIXELS_PER_UNIT;
+
     return true;
 }
 
-- 
2.50.0

