anchor.diff:                 // _log.finest('v scr dist: ${vScrollDist} ${viewportH}');
                   scrollTo(scrollTop + offset);
               }
  -            //no chance to use page
  -//            else {
  -//                var oldOffset = offset;
  -//                if (h == viewportH) {
  -//                    page = 0;
  -//                } else {
  -//                    page = math.min(n - 1, (scrollTop * ((th - viewportH) / (h - viewportH)) * (1 / ph)).floor());
  -//                }
  -//                offset = (page * cj).round();
  -//                if (oldOffset != offset) {
  -//                    invalidateAllRows();
  -//                }
  -//            }
           }
   
           if (hScrollDist>0 || vScrollDist >0) {
               if (h_render!=null) {
                   h_render.cancel();
  +                _log.finest("cancel scroll");
                   h_render=null;
               }
               //how many distance is enought to scroll?
  
positive.code:       return HTML_ESCAPE.convert(value);
      }
  
  
      void getHeadersWidth() {
        headersWidth = headersWidthL = headersWidthR = 0;
  //      int headersWidth = 0;
        for (int i = 0, ii = columns.length; i < ii; i++) {
  
negative.code:                         (lastRenderedScrollLeft - scrollLeft).abs() < viewportW)) {
                      render();
                  } else {
                    _log.finest("new timer");
                      h_render=new Timer(new Duration(milliseconds:50),render);
                     // h_render = setTimeout(render, 50);
                  }
  