Attempted to fix broken coordinate calculations for out-of-cell clicks...

This commit is contained in:
Pietro Gagliardi 2014-12-16 11:34:26 -05:00
parent 3f42acb475
commit 25e5100360
1 changed files with 12 additions and 4 deletions

View File

@ -38,6 +38,7 @@ static struct rowcol clientCoordToRowColumn(struct table *t, POINT pt)
RECT r;
struct rowcol rc;
intptr_t i;
intptr_t row, column;
// initial values for the PtInRect() check
rc.row = -1;
@ -51,12 +52,15 @@ static struct rowcol clientCoordToRowColumn(struct table *t, POINT pt)
// the row is easy
pt.y -= t->headerHeight;
rc.row = (pt.y / rowht(t)) + t->vscrollpos;
row = (pt.y / rowht(t)) + t->vscrollpos;
if (row > t->count - 1)
// after the last row; don't select anything
return rc;
// the column... not so much
// we scroll p.x, then subtract column widths until we cross the left edge of the control
pt.x += t->hscrollpos;
rc.column = 0;
column = 0;
for (i = 0; i < t->nColumns; i++) {
pt.x -= columnWidth(t, i);
// use <, not <=, here:
@ -67,10 +71,14 @@ static struct rowcol clientCoordToRowColumn(struct table *t, POINT pt)
// pt.x == 100 (first pixel of col 1) -> p.x - 100 == 0 >= 0 -> next column
if (pt.x < r.left)
break;
rc.column++;
column++;
}
// TODO what happens if the break was never taken?
if (column > t->nColumns - 1)
// to the right of all columns; select nothing
return rc;
rc.row = row;
rc.column = column;
return rc;
}