VMLGraphic.js revision a75ebc38c1de401b679953a9b87bd323f0f48d02
011173392d3a1a59092095d5a24857134cb16f93Adam Moore * <a href="http://www.w3.org/TR/NOTE-VML">VML</a> implementation of the <a href="Graphic.html">`Graphic`</a> class.
011173392d3a1a59092095d5a24857134cb16f93Adam Moore * `VMLGraphic` is not intended to be used directly. Instead, use the <a href="Graphic.html">`Graphic`</a> class.
011173392d3a1a59092095d5a24857134cb16f93Adam Moore * If the browser lacks <a href="http://www.w3.org/TR/SVG/">SVG</a> and <a href="http://www.w3.org/TR/html5/the-canvas-element.html">Canvas</a>
011173392d3a1a59092095d5a24857134cb16f93Adam Moore * capabilities, the <a href="Graphic.html">`Graphic`</a> class will point to the `VMLGraphic` class.
011173392d3a1a59092095d5a24857134cb16f93Adam Moore * @module graphics
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @class VMLGraphic
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @constructor
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke SmithVMLGraphic = function() {
011173392d3a1a59092095d5a24857134cb16f93Adam Moore VMLGraphic.superclass.constructor.apply(this, arguments);
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Whether or not to render the `Graphic` automatically after to a specified parent node after init. This can be a Node instance or a CSS selector string.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @config render
011173392d3a1a59092095d5a24857134cb16f93Adam Moore * @type Node | String
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Unique id for class instance.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @config id
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @type String
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Key value pairs in which a shape instance is associated with its id.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @config shapes
011173392d3a1a59092095d5a24857134cb16f93Adam Moore * @type Object
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Object containing size and coordinate data for the content of a Graphic in relation to the coordSpace node.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @config contentBounds
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @type Object
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * The html element that represents to coordinate system of the Graphic instance.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @config node
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @type HTMLElement
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith return this._node;
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Indicates the width of the `Graphic`.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @config width
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @type Number
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Indicates the height of the `Graphic`.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @config height
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @type Number
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Determines how the size of instance is calculated. If true, the width and height are determined by the size of the contents.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * If false, the width and height values are either explicitly set or determined by the size of the parent node's dimensions.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @config autoSize
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @type Boolean
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @default false
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * The contentBounds will resize to greater values but not values. (for performance)
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * When resizing the contentBounds down is desirable, set the resizeDown value to true.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @config resizeDown
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @type Boolean
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Indicates the x-coordinate for the instance.
011173392d3a1a59092095d5a24857134cb16f93Adam Moore * @type Number
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith return this._x;
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Indicates the y-coordinate for the instance.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @type Number
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith return this._y;
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Indicates whether or not the instance will automatically redraw after a change is made to a shape.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * This property will get set to false when batching operations.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @config autoDraw
011173392d3a1a59092095d5a24857134cb16f93Adam Moore * @type Boolean
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @default true
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Storage for `x` attribute.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @property _x
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @type Number
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Storage for `y` attribute.
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @property _y
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * @type Number
cfdfb15e991f069dc5a2c3a724d378a6395d4eacLuke Smith * Gets the current position of the graphic instance in page coordinates.
c64978b48fe561f13e3d68afc70d7c528946359bAdam Moore * @method getXY
466e89e60fbad15b099068ee771d408bc06f14c1Adam Moore * @return Array The XY position of the shape.
_resizeDown: false,
this._shapes = {};
this._contentBounds = {
if(render)
this.setSize(w, h);
destroy: function()
this.clear();
return shape;
this._redraw();
removeAllShapes: function()
for(i in shapes)
this._shapes = {};
var child;
clear: function() {
this._removeAllShapes();
if(shapes)
for(i in shapes)
setSize: function(w, h) {
w = Math.round(w);
h = Math.round(h);
setPosition: function(x, y)
x = Math.round(x);
y = Math.round(y);
_createGraphic: function() {
var group = DOCUMENT.createElement('<group xmlns="urn:schemas-microsft.com:vml" style="behavior:url(#default#VML);display:block;zoom:1;" />');
return group;
return DOCUMENT.createElement('<' + type + ' xmlns="urn:schemas-microsft.com:vml" style="behavior:url(#default#VML);display:inline-block;zoom:1;" />');
if(shape)
return shape;
return val;
_shapeClass: {
this._redraw();
_getDocFrag: function()
if(!this._frag)
return this._frag;
var shapeBox,
box;
this._redraw();
_redraw: function()
if(this._frag)
this._frag = null;
_getUpdatedContentBounds: function()
var bounds,
box = {
for(i in queue)
return box;