Пример #1
0
  /** Carga una imagen en la posición X,Y dada. */
  public void loadImage(int x, int y, int width, int height, String path) {
    //		SVGEvent event = new SVGEvent(SVGEvent.EVENT_LOAD_IMAGE, new SVGLoadImageEventData(x, y,
    // width, height, path));
    //		postEvent(event);

    SVGDocument document = raster.document;
    SVGSVGElem rootElem = (SVGSVGElem) document.root;

    SVGNode selNode = null;
    // Parece que la siguiente linea no es necesaria. La matriz de transformacion es la misma que la
    // del root
    // selNode = rootElem.nodeHitAt(canvas.raster, new TinyPoint(evData.getX(), evData.getY()));
    if (selNode == null) selNode = raster.root;

    // Calculo de la posicion de la imagen en el SVG
    TinyMatrix inverse = selNode.getGlobalTransform().inverse();
    TinyPoint p = new TinyPoint(x << TinyUtil.FIX_BITS, y << TinyUtil.FIX_BITS);
    inverse.transform(p);
    TinyPoint p2 =
        new TinyPoint((x + width) << TinyUtil.FIX_BITS, (y + height) << TinyUtil.FIX_BITS);
    inverse.transform(p2);
    // Nuevo elemento imagen
    SVGImageElem imageElem = (SVGImageElem) document.createElement(SVG.ELEM_IMAGE);
    imageElem.x = p.x;
    imageElem.y = p.y;
    imageElem.width = p2.x - p.x;
    imageElem.height = p2.y - p.y;
    imageElem.xlink_href = new TinyString(path.toCharArray());

    // Insertar la imagen en el root
    rootElem.addChildAndRecordEvent(imageElem, rootElem.children.count);

    drawSVG();
  }
Пример #2
0
  public SVGViewer(Composite parent, int style, boolean synchPaint) {
    super(parent, style);

    this.synchPaint = synchPaint;

    this.addControlListener(
        new org.eclipse.swt.events.ControlAdapter() {
          public void controlResized(org.eclipse.swt.events.ControlEvent e) {
            viewerResized();
          }
        });

    this.addPaintListener(
        new PaintListener() {
          public void paintControl(PaintEvent e) {
            if (svgImage == null) {
              // raster.setCamera();
              // raster.update();
              // raster.sendPixels();
              drawSVG();
            }

            GC gc = new GC(offscreenImage);

            gc.setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
            gc.fillRectangle(0, 0, width, height);

            drawBackground(gc);

            // Dibujo de la imagen con el SVG
            if (svgImage != null && !svgImage.isDisposed()) {
              gc.drawImage(svgImage, 0, 0);
            }

            drawForeground(gc);
            gc.dispose();

            e.gc.drawImage(offscreenImage, 0, 0);
          }
        });

    // Establece la implementación de ImageLoader para cargar imagenes
    SVGImageElem.setImageLoader(this);

    // Colas de eventos
    eventQueue = new SVGEventQueue();
    listeners = new TinyVector(4);
    // Cache de imagenes
    imageCash = new Hashtable();

    // Listeners eventos sobre el SVG
    errorListeners = new Vector();
    linkListeners = new Vector();
    rasterTransformListeners = new Vector();
    rasterUpdateListeners = new Vector();
    pointInsertedListeners = new Vector();
    loadListeners = new Vector();
    drawListeners = new Vector();

    currentZone = new TinyRect();

    // Manejador de eventos
    mouseHandler = new MouseHandler(this);
    mouseHandler.type = MouseHandler.LINK_MOUSE;
    // NUEVO
    // mouseHandler.setPanType(MouseHandler.PAN_LINE);
    mouseHandler.setPanType(MouseHandler.PAN_MOVE);
    // FIN NUEVO
    addMouseListener(mouseHandler);
    addMouseMoveListener(mouseHandler);

    antialiased = true;

    //		PlayerListener defaultListener = new PlayerListener(this);
    //		this.addEventListener("default", defaultListener, false);
    //		this.start();
  }