-<!DOCTYPE html><html><head><title>Sencha Documentation Project</title><link rel="stylesheet" href="../reset.css" type="text/css"><link rel="stylesheet" href="../prettify.css" type="text/css"><link rel="stylesheet" href="../prettify_sa.css" type="text/css"><script type="text/javascript" src="../prettify.js"></script></head><body onload="prettyPrint()"><pre class="prettyprint"><pre><span id='Ext-draw.Component'>/**
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>The source code</title>
+ <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
+ <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
+ <style type="text/css">
+ .highlight { display: block; background-color: #ddd; }
+ </style>
+ <script type="text/javascript">
+ function highlight() {
+ document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
+ }
+ </script>
+</head>
+<body onload="prettyPrint(); highlight();">
+ <pre class="prettyprint lang-js"><span id='Ext-draw-Component'>/**
</span> * @class Ext.draw.Component
* @extends Ext.Component
*
* manages and holds a `Surface` instance: an interface that has
* an SVG or VML implementation depending on the browser capabilities and where
* Sprites can be appended.
- * {@img Ext.draw.Component/Ext.draw.Component.png Ext.draw.Component component}
+ *
* One way to create a draw component is:
- *
+ *
+ * @example
* var drawComponent = Ext.create('Ext.draw.Component', {
* viewBox: false,
* items: [{
* y: 100
* }]
* });
- *
+ *
* Ext.create('Ext.Window', {
* width: 215,
* height: 235,
* layout: 'fit',
* items: [drawComponent]
* }).show();
- *
+ *
* In this case we created a draw component and added a sprite to it.
* The *type* of the sprite is *circle* so if you run this code you'll see a yellow-ish
* circle in a Window. When setting `viewBox` to `false` we are responsible for setting the object's position and
- * dimensions accordingly.
- *
+ * dimensions accordingly.
+ *
* You can also add sprites by using the surface's add method:
- *
+ *
* drawComponent.surface.add({
* type: 'circle',
* fill: '#79BB3F',
* x: 100,
* y: 100
* });
- *
+ *
* For more information on Sprites, the core elements added to a draw component's surface,
* refer to the Ext.draw.Sprite documentation.
*/
/* End Definitions */
-<span id='Ext-draw.Component-cfg-enginePriority'> /**
-</span> * @cfg {Array} enginePriority
+<span id='Ext-draw-Component-cfg-enginePriority'> /**
+</span> * @cfg {String[]} enginePriority
* Defines the priority order for which Surface implementation to use. The first
* one supported by the current environment will be used.
*/
componentLayout: 'draw',
-<span id='Ext-draw.Component-cfg-viewBox'> /**
+<span id='Ext-draw-Component-cfg-viewBox'> /**
</span> * @cfg {Boolean} viewBox
* Turn on view box support which will scale and position items in the draw component to fit to the component while
* maintaining aspect ratio. Note that this scaling can override other sizing settings on yor items. Defaults to true.
*/
viewBox: true,
-<span id='Ext-draw.Component-cfg-autoSize'> /**
+<span id='Ext-draw-Component-cfg-autoSize'> /**
</span> * @cfg {Boolean} autoSize
* Turn on autoSize support which will set the bounding div's size to the natural size of the contents. Defaults to false.
*/
autoSize: false,
-
-<span id='Ext-draw.Component-cfg-gradients'> /**
-</span> * @cfg {Array} gradients (optional) Define a set of gradients that can be used as `fill` property in sprites.
+
+<span id='Ext-draw-Component-cfg-gradients'> /**
+</span> * @cfg {Object[]} gradients (optional) Define a set of gradients that can be used as `fill` property in sprites.
* The gradients array is an array of objects with the following properties:
*
- * <ul>
- * <li><strong>id</strong> - string - The unique name of the gradient.</li>
- * <li><strong>angle</strong> - number, optional - The angle of the gradient in degrees.</li>
- * <li><strong>stops</strong> - object - An object with numbers as keys (from 0 to 100) and style objects
- * as values</li>
- * </ul>
- *
-
- For example:
-
- <pre><code>
- gradients: [{
- id: 'gradientId',
- angle: 45,
- stops: {
- 0: {
- color: '#555'
- },
- 100: {
- color: '#ddd'
- }
- }
- }, {
- id: 'gradientId2',
- angle: 0,
- stops: {
- 0: {
- color: '#590'
- },
- 20: {
- color: '#599'
- },
- 100: {
- color: '#ddd'
- }
- }
- }]
- </code></pre>
-
- Then the sprites can use `gradientId` and `gradientId2` by setting the fill attributes to those ids, for example:
-
- <pre><code>
- sprite.setAttributes({
- fill: 'url(#gradientId)'
- }, true);
- </code></pre>
-
+ * - `id` - string - The unique name of the gradient.
+ * - `angle` - number, optional - The angle of the gradient in degrees.
+ * - `stops` - object - An object with numbers as keys (from 0 to 100) and style objects as values
+ *
+ * ## Example
+ *
+ * gradients: [{
+ * id: 'gradientId',
+ * angle: 45,
+ * stops: {
+ * 0: {
+ * color: '#555'
+ * },
+ * 100: {
+ * color: '#ddd'
+ * }
+ * }
+ * }, {
+ * id: 'gradientId2',
+ * angle: 0,
+ * stops: {
+ * 0: {
+ * color: '#590'
+ * },
+ * 20: {
+ * color: '#599'
+ * },
+ * 100: {
+ * color: '#ddd'
+ * }
+ * }
+ * }]
+ *
+ * Then the sprites can use `gradientId` and `gradientId2` by setting the fill attributes to those ids, for example:
+ *
+ * sprite.setAttributes({
+ * fill: 'url(#gradientId)'
+ * }, true);
*/
-
initComponent: function() {
this.callParent(arguments);
);
},
-<span id='Ext-draw.Component-method-onRender'> /**
+<span id='Ext-draw-Component-method-onRender'> /**
</span> * @private
*
* Create the Surface on initial render
bbox, items, width, height, x, y;
me.callParent(arguments);
- me.createSurface();
-
- items = me.surface.items;
+ if (me.createSurface() !== false) {
+ items = me.surface.items;
- if (viewBox || autoSize) {
- bbox = items.getBBox();
- width = bbox.width;
- height = bbox.height;
- x = bbox.x;
- y = bbox.y;
- if (me.viewBox) {
- me.surface.setViewBox(x, y, width, height);
- }
- else {
- // AutoSized
- me.autoSizeSurface();
+ if (viewBox || autoSize) {
+ bbox = items.getBBox();
+ width = bbox.width;
+ height = bbox.height;
+ x = bbox.x;
+ y = bbox.y;
+ if (me.viewBox) {
+ me.surface.setViewBox(x, y, width, height);
+ }
+ else {
+ // AutoSized
+ me.autoSizeSurface();
+ }
}
}
},
}, true);
if (me.rendered) {
me.setSize(width, height);
+ me.surface.setSize(width, height);
}
else {
me.surface.setSize(width, height);
me.el.setSize(width, height);
},
-<span id='Ext-draw.Component-method-createSurface'> /**
+<span id='Ext-draw-Component-method-createSurface'> /**
</span> * Create the Surface instance. Resolves the correct Surface implementation to
* instantiate based on the 'enginePriority' config. Once the Surface instance is
* created you can use the handle to that instance to add sprites. For example:
*
- <pre><code>
- drawComponent.surface.add(sprite);
- </code></pre>
+ * drawComponent.surface.add(sprite);
*/
createSurface: function() {
var surface = Ext.draw.Surface.create(Ext.apply({}, {
height: this.height,
renderTo: this.el
}, this.initialConfig));
+ if (!surface) {
+ // In case we cannot create a surface, return false so we can stop
+ return false;
+ }
this.surface = surface;
+
function refire(eventName) {
return function(e) {
this.fireEvent(eventName, e);
},
-<span id='Ext-draw.Component-method-onDestroy'> /**
+<span id='Ext-draw-Component-method-onDestroy'> /**
</span> * @private
- *
+ *
* Clean up the Surface instance on component destruction
*/
onDestroy: function() {
}
});
-</pre></pre></body></html>
\ No newline at end of file
+</pre>
+</body>
+</html>