class ShapeGlyphDragHandler {

    public ShapeGlyphDragHandler show(final ShapeGlyphDragHandler.Item item,
                                      final int x,
                                      final int y,
                                      final ShapeGlyphDragHandler.Callback Callback) {
        // Create the lienzo "proxy" panel instance.
        final Layer dragProxyLayer = new Layer();
        this.dragProxyPanel = lienzoPanelBuilder.apply(item);
        dragProxyPanel.add(dragProxyLayer);
        attachHandlers(Callback);

        // Add the glyph instance into the layer.
        dragProxyLayer.add(glyphLienzoGlyphRenderer
                                   .render(item.getShape(),
                                           item.getWidth(),
                                           item.getHeight())
                                   .setX(0)
                                   .setY(0));

        // Handle the proxy panel instance.
        moveProxyTo(x, y);
        rootPanelSupplier.get().add(dragProxyPanel);

        return this;
    }

    @Inject public  ShapeGlyphDragHandler(final LienzoGlyphRenderers glyphLienzoGlyphRenderer);
      ShapeGlyphDragHandler(final LienzoGlyphRenderer<Glyph> glyphLienzoGlyphRenderer,
                          final List<HandlerRegistration> handlerRegistrations,
                          final Supplier<AbsolutePanel> rootPanelSupplier,
                          final Function<ShapeGlyphDragHandler.Item, LienzoPanel> lienzoPanelBuilder,
                          final BiConsumer<Command, Integer> timer);

}