anchor.diff:      // to avoid scale and blur
       // canvas dimensions
       var canvasV = _gVisible.canvas;
  -    var dpr = window.devicePixelRatio;     // retina
  -    _w = (dpr * canvasV.clientWidth).round();//parseInt(canvas.style.width);
  -    _h = (dpr * canvasV.clientHeight).round(); //parseInt(canvas.style.height);
  +    var s = scale;
  +    _dpr = window.devicePixelRatio;     // retina
  +    scale = s;
  +
  +    _w = (_dpr * canvasV.clientWidth).round();//parseInt(canvas.style.width);
  +    _h = (_dpr * canvasV.clientHeight).round(); //parseInt(canvas.style.height);
   
       canvasV.width = _w;
       canvasV.height = _h;
  -    _gVisible.scale(dpr, dpr);
  +    _gVisible.scale(_dpr, _dpr);
       _g.canvas.width = _w;
       _g.canvas.height = _h;
  -    _g.scale(dpr, dpr);
  +
     }
   
     void begin() {
  
positive.code:   ComponentMapper<Drawable> _drawMapper;
    var _w = 0;
    var _h = 0;
    /// [_areaEntity] temp variable use fill by [Drawable.draw] to give the modified
    /// area, it is an area with center at (0.0, 0.0)
    Vector2 _areaEntity = new Vector2(0.0, 0.0);
  
negative.code:     _areaEntity.y = 0.0;
      d.draw(_g, entity, _areaEntity);
      if (tf != null) {
        _g.scale(1/tf.scale3d.x, 1/tf.scale3d.y);
        _g.rotate(-tf.rotation3d.z);
        _g.translate(-tf.position3d.x.toInt(), -tf.position3d.y.toInt());
      }
  
      if (_scale != 1.0) _g.scale(_scaleI, _scaleI);
      _g.translate(- translateX, - translateY);
      _g.restore();
    }
  
    void end() {
      _g.restore();
      _gVisible.clearRect(0, 0, _w, _h);
      _gVisible.drawImage(_g.canvas, 0, 0);
      _g.clearRect(0, 0, _w, _h);
    }
  }
  
  