anchor.diff:        prevCell = cell = 0;
         while (cell <= posX) {
           prevCell = cell;
  -        cell += tools.parseInt(getColspan(row, cell));
  +        cell += tools.parseInt(_getColspan(row, cell));
         }
   
         if (canCellBeActive(row, prevCell)) {
  
positive.code: 
    void scrollRowIntoView(int row, bool doPaging) {
      var rowAtTop = row * _gridOptions.rowHeight;
      var rowAtBottom = (row + 1) * _gridOptions.rowHeight - _viewportH + (_viewportHasHScroll ? scrollbarDimensions.y : 0);
  
      // need to page down?
      if ((row + 1) * _gridOptions.rowHeight > _scrollTop + _viewportH + pageOffset) {
        _scrollTo(doPaging ? rowAtTop : rowAtBottom);
        render();
      }
      // or page up?
      else if (row * _gridOptions.rowHeight < _scrollTop + pageOffset) {
        _scrollTo(doPaging ? rowAtBottom : rowAtTop);
        render();
      }
  
negative.code:     int buffer = (_viewportH / _gridOptions.rowHeight).round();
      int minBuffer = 3;
  
      if (_vScrollDir == -1) {
        range.top -= buffer;
        range.bottom += minBuffer;
      } else if (_vScrollDir == 1) {
        range.top -= minBuffer;
        range.bottom += buffer;
      } else {
  