class LienzoCanvasExport implements CanvasExport<AbstractCanvasHandler> {

    @Override
    public IContext2D toContext2D(final AbstractCanvasHandler canvasHandler,
                                  final CanvasExportSettings settings) {
        final LienzoLayer layer = getLayer(canvasHandler);
        final com.ait.lienzo.client.core.shape.Layer lienzoLayer = layer.getLienzoLayer();
        final Viewport viewport = lienzoLayer.getViewport();
        final int[] bounds = boundsProvider.compute(layer, settings);
        final IContext2D svgContext2D = Context2DFactory.create(new SvgExportSettings(bounds[2],
                                                                                      bounds[3],
                                                                                      lienzoLayer.getContext()));
        // Reset the transform before drawing to the target context.
        final Transform transform = viewport.getTransform();
        viewport.setTransform(new Transform());
        // Draw into the target context.
        lienzoLayer.draw(new Context2D(new DelegateNativeContext2D(svgContext2D,
                                                                   canvasHandler)));
        // Set again the previous transform.
        viewport.setTransform(transform);

        // Draw again the native canvas context2d (this is necessary otherwise the canvas becomes empty)
        lienzoLayer.draw();

        return svgContext2D;
    }

    public  LienzoCanvasExport();
      LienzoCanvasExport(final BoundsProvider boundsProvider);

}