From 71b619d7f464dca60f58b603a46c53293d8e3011 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 20 Jan 2013 02:09:35 +0000 Subject: [PATCH] Fix bug with showing hidden wxGrid lines when resizing an adjacent one. 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 | 1 + src/generic/grid.cpp | 25 ++++++++++++------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 1286439f00..4379570ab9 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -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). diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 499e600b19..670f3d5923 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -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; } -- 2.45.2