UuujUuu!it works! it is true that mouseHanlders are more comfortable to use than listeners. at the end I simply used:
int x = event.getX(); int y = event.getY(); inside the handlers. And looked at the image.java to get some help. Cheers Vitali". I post here the code with the entire class, maybe it can be of some help to someone: /** * @author raulsan */ public class CompassCanvas extends GWTCanvas{ /** * The label than indicates the angle * of the compass */ private Label angleLab = new Label("0"); /** * the size of the canvas */ private int x = 90; private int y = 90; /** * the size of the compass */ private float radius = x/2 -5; /** * distance from the top of the arrow * to the top of the stick */ private int distArr = (int)radius/5; /** * the size of the arrow */ private int arrSize = (int)radius-distArr; /** * The angle to draw the arrow */ private double alfa = 0; /** * the width of the lines */ private int lineW = 7; /** * the colors */ private Color c1 = Color.YELLOW; private Color c2 = Color.BLUE; /** * A variable for drag and drop */ private boolean dragging = false; /** * Constructor */ public CompassCanvas() { super(90,90); // draw drawCompass(alfa,c1,c1); // the mouse handlers this.sinkEvents(Event.MOUSEEVENTS | Event.ONCLICK); this.addMouseMoveHandler(new MouseMoveHandler(){ @Override public void onMouseMove(MouseMoveEvent event) { int x = event.getX(); int y = event.getY(); if (dragging) drawCompass(x,y,c2,c2); else drawCompass(alfa,c2,c1); } }); this.addMouseOutHandler(new MouseOutHandler(){ @Override public void onMouseOut(MouseOutEvent event) { drawCompass(alfa, c1, c1); dragging = false; } }); this.addMouseOverHandler(new MouseOverHandler(){ @Override public void onMouseOver(MouseOverEvent event) { drawCompass(alfa, c2, c1); } }); this.addMouseUpHandler(new MouseUpHandler(){ @Override public void onMouseUp(MouseUpEvent event) { int x = event.getX(); int y = event.getY(); drawCompass(x,y,c2,c1); dragging = false; } }); this.addMouseDownHandler(new MouseDownHandler(){ @Override public void onMouseDown(MouseDownEvent event) { int x = event.getX(); int y = event.getY(); drawCompass(x, y, c2, c2); dragging = true; } }); } /** * */ public void drawCompass(int w,int h, Color c1, Color c2){ this.clear(); // The angle to rotate double i = getDistance(w,h,x/2,h); double j = getDistance(w,h,w,y/2); alfa = correctAngle(Math.atan2(i, j),w,h,x/2,y/2); alfa = (alfa==-0)?0:alfa; alfa = (alfa==-180)?180:alfa; // call to the function to draw with alfa drawCompass(alfa, c1, c2); } /** * */ public void drawCompass(double alfa, Color c1, Color c2){ this.clear(); // the circumference this.saveContext(); this.setFillStyle(Color.WHITE); this.setStrokeStyle(c1); this.setLineWidth(lineW); float startAngle = 0; float endAngle = (float)Math.PI*2; this.beginPath(); this.arc(x/2, y/2, radius, startAngle, endAngle, true); this.stroke(); this.fill(); this.restoreContext(); // the arrow this.saveContext(); this.translate(x/2, y/2); this.rotate(-Math.PI/2 + alfa); this.setLineCap("round"); this.setLineWidth(lineW/2); this.setStrokeStyle(c2); this.beginPath(); this.moveTo(0, 0); this.lineTo(arrSize, 0); this.stroke(); this.closePath(); // the point of the arrow this.setStrokeStyle(c2); this.setFillStyle(c2); this.beginPath(); this.moveTo(arrSize+distArr-(lineW/2), 0); this.lineTo(arrSize-distArr, distArr); this.lineTo(arrSize, 0); this.lineTo(arrSize-distArr, -distArr); this.lineTo(arrSize+distArr-(lineW/2), 0); this.stroke(); this.fill(); this.closePath(); this.restoreContext(); // The angle angleLab.setText(NumberFormat.getFormat("#,##0").format(alfa*360/ (2*Math.PI))); } /** * Gives the distance between 2 points (x,y) and (i,j) * @return double */ public double getDistance(int x, int y,int i,int j){ return Math.sqrt(Math.pow(x-i, 2)+Math.pow(y-j, 2)); } /** * Gives the right angle inside the compass * @return */ public double correctAngle(double alfa,int w,int h,int x,int y){ double beta = 0; boolean a = w>x; boolean b = h<y; if (a&&b){ //1st quadrant beta = alfa; }else if (!a&&b){ //2nd quadrant beta = -alfa; }else if (!a&&!b){ //3er quadrant beta = -Math.PI+alfa; }else if (a&&!b){ //4th quadrant beta = Math.PI-alfa; } return beta; } /** * The Mouse Handlers */ public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) { return addDomHandler(handler, MouseMoveEvent.getType()); } public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) { return addDomHandler(handler, MouseOutEvent.getType()); } public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) { return addDomHandler(handler, MouseOverEvent.getType()); } public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) { return addDomHandler(handler, MouseUpEvent.getType()); } public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) { return addDomHandler(handler, MouseDownEvent.getType()); } /** * @return the angleLab */ public Label getAngleLab() { return angleLab; } /** * @return the alfa */ public double getAlfa() { return alfa; } } --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~----------~----~----~----~------~----~------~--~---