2011-08-10 220 views
0

我想繪製一個字符串在基於鼠標位置的特定點(只有當我拖動)。GWT鼠標移動

問題是,它似乎可以縮放x和y。當我用鼠標在0,0時,字符串顯示在正確的位置,但是當我離開時,字符串越來越遠離我的鼠標,這讓我覺得有一個隱藏的縮放事件正在進行......我使用event.getX()和畫布的位置,我應該使用其他組合來獲取正確的鼠標位置嗎?下面

是代碼

 final Canvas canvas = Canvas.createIfSupported(); 
     final AsyncBool mouseDown = new AsyncBool(false); 

     final Context2d context = canvas.getContext2d(); 
     context.setFont("bold 8px sans-serif"); 

     canvas.setWidth("100%"); 
     canvas.setHeight("100%"); 

     canvas.addMouseMoveHandler(new MouseMoveHandler() { 
      @Override 
      public void onMouseMove(MouseMoveEvent event) 
      { 
       if(mouseDown.getBool()) 
       { 

        context.fillText("Bored.", event.getX() - canvas.getAbsoluteLeft(), event.getY() - canvas.getAbsoluteTop()); 
       } 

      } 
     }); 
     canvas.addMouseDownHandler(new MouseDownHandler() { 
      @Override 
      public void onMouseDown(MouseDownEvent event) 
      { 
       mouseDown.setBool(true); 
      } 
     }); 
     canvas.addMouseUpHandler(new MouseUpHandler() { 
      @Override 
      public void onMouseUp(MouseUpEvent event) 
      { 
       mouseDown.setBool(false); 
      } 
     }); 



     RootPanel.get().add(canvas); 

回答

2

您的代碼應爲未調整畫布工作。但是,如果您調整畫布大小,則還需要相應地更新畫布座標空間。例如,對於一個500像素,500像素大小的畫布,你可以做到這一點的:

canvas.setSize("500px","500px"); 
canvas.setCoordinateSpaceHeight(500); 
canvas.setCoordinateSpaceWidth(500); 
你的情況

,你用百分比值大小畫布,你可以使用:

canvas.setSize("100%","100%"); 
canvas.setCoordinateSpaceHeight(Window.getClientHeight()); 
canvas.setCoordinateSpaceWidth(Window.getClientWidth()); 

,因爲這些方法唐不接受百分比值,您需要計算父容器的寬度和高度(以像素爲單位)。

+0

非常感謝,像魅力一樣工作! – will