Hi. I'm trying the new canvas tag. And I'm having some issues with the
save/restore.

My first demo was just to draw 2 crossing lines (representing a
coordinate system)

Draw an image, and react to click events to make the image move to the
clicked point (it works just fine):

canvas = Canvas.createIfSupported();
                canvas.setWidth("640px");
                canvas.setHeight("480px");
                canvas.setCoordinateSpaceHeight(480);
                canvas.setCoordinateSpaceWidth(640);
                context = canvas.getContext2d();
                context.setFillStyle(CssColor.make(255, 255, 255));

                context.fillRect(0, 0, 640, 480);
                bubble = new Bubble(new Vector2D(100,100),
80,20,CssColor.make(255,0,0));
                RootPanel.get().add(canvas);
                canvas.addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent event) {
                                bubble.setTarget(new 
Vector2D(event.getX(),event.getY()));
                        }
                });

                Timer timer = new Timer() {

                        @Override
                        public void run() {
                                doUpdate();
                        }
                };
                timer.scheduleRepeating(25);
        }

        private void doUpdate(){
                //draw the lines
                context.setFillStyle(redraw);
                context.fillRect(0, 0, 640, 480);

                context.beginPath();
                context.moveTo(320, 10);
                context.lineTo(320, 470);
                context.moveTo(10, 240);
                context.lineTo(630, 240);
                context.stroke();
                context.closePath();
                //update the image coordinates
                bubble.update();
                bubble.draw(context);



        }


public void draw(Context2d context){


                context.drawImage(imageElement, position.x,position.y);

        }

        public void update(){
                if(target != null && distance() > 1){
                        double deltaX = 
((position.x-target.x)/(speed))*speed/25;
                        double deltaY = 
((position.y-target.y)/(speed))*speed/25;
                        angle += Math.PI/90;
                        position.x = (position.x > target.x) ? 
position.x-deltaX :
position.x + Math.abs(deltaX) ;
                        position.y = (position.y > target.y) ? 
position.y-deltaY :
position.y + Math.abs(deltaY) ;
                }
        }


Well, that works just fine as I said. So I've decided to make the
image spin as it moves, its now that problems arose:

public void draw(Context2d context){
                //save context since we are making transformations
                context.save();
                context.translate(position.x,position.y);
                context.rotate(angle);
                //draw the image at its center
                context.drawImage(imageElement, -16,-16);
                context.restore();
        }

Well this has the most undesirable effect. It seems that after the
restore, the translation is not restored to the 0,0, and on the next
frame, the axis are drawn on the relative x,y position, rotated by
angle, and in the next frame it also happens, and it continues messing
with the coordinate system.

I really can not find where the problem is here.

Regards

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to