HTML and CSS Reference
In-Depth Information
},
destroy: function() {
if(this.destroyed) return false;
this._super();
this.parent.svg.removeChild(this.svg);
}
});
The init method of Q.SVGSprite doesn't do anything particularly special except set some defaults on
the shape and color of the default object. It then calls createShape to create the element. Finally, it calls
setTransform to set the transform property on the SVG element.
The set method is a helper method that accepts hash properties and uses setAttribute to set each of
them. Although there is some overhead with this and it probably shouldn't be used during each step, it does
provide a convenient way to set multiple properties at once in a jQuery-like fashion.
The createShape method is perhaps the most interesting. The meat of the method is a switch statement
that looks at the p.shape property and creates the appropriate type of SVG element.
For a block shape, it creates a <rect> element and sets the width and height properties on it. For a
circle shape, it creates a <circle> element and sets the radius. It sets the center x and y location to 0 as
the element will be moved with the transform property. Finally, for the polygon shape, it needs to create a
string of points to pass in to the points attribute.
After createShape has created the element, the createShape method looks at the fill and out-
line properties to set the fill and the stroke.
The setTransform method again looks a good deal like the method of the same name from
Q.DOMSprite . Its main job is to see if any of the property attributes have changed since the last frame and
update the transform of the SVG element appropriately. To do this it first crafts a translate transform fol-
lowed by a rotate transform set to rotate around the center of the object. The order here is important because
changing the order of the two would result in a rotation around the point 0,0, which would lead to all sorts of
problems down the road.
Creating an SVG Stage
The last bit of SVG functionality needed for the engine is to create an SVG-aware stage class that can act as a
container for Q.SVGSprite .
To keep different stages separate, the SVGStage class creates its own child <svg> element that sits inside
of the primary SVG element. The class also exposes methods to move the viewport around. The code for
Q.SVGStage is shown in Listing 14-6 and should be added before the final closing curly brace at the end of
quintus_svg.js .
Listing 14-6: Q.SVGStage
Q.SVGStage = Q.Stage.extend({
init: function(scene) {
this.svg = document.createElementNS(SVG_NS,'svg');
this.svg.setAttribute('width',Q.width);
this.svg.setAttribute('height',Q.height);
 
 
Search WWH ::




Custom Search