Thanks, I have implemented you solution but the event never comes. I am un eclipse behind a swing component wrapper. I don't know if the EventTarget actually received the event. How can I check that? I have seen that you register an event listener on the event type "click". It is hard coded. Is there a list of events as constants? Is it possible I register all the events to see if it is Eclipse that consumes the events forgetting to redispatch them?
-----Message d'origine----- De : Heidrun Beer [mailto:[email protected]] Envoyé : lundi 26 octobre 2009 11:59 À : [email protected] Objet : Re: locate an SVG element using x, y position On Mon, 26 Oct 2009 10:44:49 +0100, HODAC, Olivier wrote in <1950_1256550419_4ae57013_1950_34_1_0471c9ac78f671458c5e3f9c69b73c8609879...@fr0-mailmb17.res.airbus.corp>: >I'd like to add a mouse listener on my JSVGCanvas to select an element >of my rendered SVG. >How can I find the right node using x,y mouse postion? I have explored that, but the problem is that you have only the bounds of the element to locate your mouse point in. This is a rectangle. If now the element is, say, an ellipse or a line or another shape that is not rectangular, the function won't work with mouse points inside that rectangle, but outside the shape. You need to add an event listener to each element as you create it. If you load your drawing from a file, you need to loop through the whole element tree and add it to each element. It's not so much code, as you do it all in a loop. Here is the code that I am using, after I have retrieved my document string from a database and created the document. I have the special situation that I skip the first element, which is a background rectangle that I don't want to be moveable. It is always the first in the document. BackG = doc.getElementById("BackgroundRectangle"); EventTarget etr = null; Node no = (Node) BackG; Node no2 = no.getNextSibling(); if (no2!=null) { do { etr = (EventTarget) no2; etr.addEventListener("click",new org.w3c.dom.events.EventListener() { org.w3c.dom.events.Event evt; public void handleEvent(org.w3c.dom.events.Event evt) { EventTarget etr2 = evt.getTarget(); ActivateSelEl(etr2); // function that selects the element, // retrieves its bounds and sets a flag // that tells the canvas to paint a // selection rectangle with mouse // anchors on top of the SVG drawing // in its paint function repaint(); } public void run() { handleEvent(evt); } },false ); no2=no2.getNextSibling(); } while (no2!=null); } Best, Heidrun Beer Workgroup for Fundamental Spiritual Research and Mental Training http://www.sgmt.at http://www.RecastReality.org --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] This mail has originated outside your organization, either from an external partner or the Global Internet. Keep this in mind if you answer this message. The information in this e-mail is confidential. The contents may not be disclosed or used by anyone other than the addressee. Access to this e-mail by anyone else is unauthorised. If you are not the intended recipient, please notify Airbus immediately and delete this e-mail. Airbus cannot accept any responsibility for the accuracy or completeness of this e-mail as it has been sent over public networks. If you have any concerns over the content of this message or its Accuracy or Integrity, please contact Airbus immediately. All outgoing e-mails from Airbus are checked using regularly updated virus scanning software but you should take whatever measures you deem to be appropriate to ensure that this message and any attachments are virus free. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
