]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix bug with showing hidden wxGrid lines when resizing an adjacent one.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 20 Jan 2013 02:09:35 +0000 (02:09 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 20 Jan 2013 02:09:35 +0000 (02:09 +0000)
Don't blindly assume that the previous line is big enough if the current one
isn't in wxGrid::PosToEdgeOfLine() (this assumption is wrong even without
taking hiding into account...).

Closes #14947.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73399 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
src/generic/grid.cpp

index 1286439f00a947096e56d8fa4490465444c0f7db..4379570ab90078da257fdf2c98192b49929bd436 100644 (file)
@@ -579,6 +579,7 @@ All (GUI):
 - Add wxBitmapButton::NewCloseButton().
 - Add wxTextEntry::SelectNone() (troelsk).
 - Restore the original wxGrid col/row size when unhiding it (Michael Richards).
+- Don't show hidden wxGrid columns/rows when resizing them (Michael Richards).
 - Fix text origin and extent computations in wxSVGFileDC (Neil Chittenden).
 - Show tooltips for the too long items in generic wxTreeCtrl (Steven Houchins).
 - Add wxStyledTextCtrl::AnnotationClearLine() (sentieshar).
index 499e600b19851c3c856c0fba70ad6032055b3717..670f3d5923baed1466aef54087674cd148adc780 100644 (file)
@@ -6663,7 +6663,7 @@ int wxGrid::XToPos(int x) const
     return PosToLinePos(x, true /* clip */, wxGridColumnOperations());
 }
 
-// return the row number such that the y coord is near the edge of, or -1 if
+// return the row/col number such that the pos is near the edge of, or -1 if
 // not near an edge.
 //
 // notice that position can only possibly be near an edge if the row/column is
@@ -6672,22 +6672,21 @@ int wxGrid::XToPos(int x) const
 // _never_ be considered to be near the edge).
 int wxGrid::PosToEdgeOfLine(int pos, const wxGridOperations& oper) const
 {
-    const int line = oper.PosToLine(this, pos, true);
+    // Get the bottom or rightmost line that could match.
+    int line = oper.PosToLine(this, pos, true);
 
-    if ( oper.GetLineSize(this, line) > WXGRID_LABEL_EDGE_ZONE )
+    // Go backwards until we find a line that is big enough.
+    while ( oper.GetLineSize(this, line) <= WXGRID_LABEL_EDGE_ZONE )
     {
-        // We know that we are in this line, test whether we are close enough
-        // to start or end border, respectively.
-        if ( abs(oper.GetLineEndPos(this, line) - pos) < WXGRID_LABEL_EDGE_ZONE )
-            return line;
-        else if ( line > 0 &&
-                    pos - oper.GetLineStartPos(this,
-                                               line) < WXGRID_LABEL_EDGE_ZONE )
-        {
-            return oper.GetLineBefore(this, line);
-        }
+        line = oper.GetLineBefore(this, line);
+        if ( line <= 0 )
+            break;
     }
 
+    // If the bottom or right touches then we have a match
+    if ( abs(oper.GetLineEndPos(this, line) - pos) < WXGRID_LABEL_EDGE_ZONE )
+      return line;
+
     return -1;
 }