/** 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(); }
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(); }