GWT Mouse Movement - PullRequest
       9

GWT Mouse Movement

0 голосов
/ 10 августа 2011

Я пытаюсь нарисовать строку в определенной точке в зависимости от положения мыши (только при перетаскивании).

Проблема в том, что кажется, что масштабируется 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);

1 Ответ

2 голосов
/ 11 августа 2011

Ваш код должен работать для холста, размер которого не изменяется. Но если вы изменяете размер холста, вам также необходимо соответствующим образом обновить координатное пространство холста. Например, для холста размером 500px, 500px вы можете достичь этого:

canvas.setSize("500px","500px");
canvas.setCoordinateSpaceHeight(500);
canvas.setCoordinateSpaceWidth(500);

в вашем случае вы определяете размер холста, используя процентные значения, вы можете использовать:

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

, поскольку эти методы не принимают значения в процентах, вам необходимо вычислить ширину и высоту родительского контейнера в пикселях.

...