<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Various Technical Articles in KineticJS with Examples</title>
	<atom:link href="https://jharaphula.com/category/programming-solutions/kineticjs-examples/feed/" rel="self" type="application/rss+xml" />
	<link>https://jharaphula.com/category/programming-solutions/kineticjs-examples/</link>
	<description>Blog for SEO Guest Posting, Digital Marketing or Home Remedies</description>
	<lastBuildDate>Sun, 04 Sep 2022 11:10:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Design MS-Excel like Table using KineticJS on HTML5 Canvas?</title>
		<link>https://jharaphula.com/how-to-design-a-table-using-kineticjs-on-html5-canvas/</link>
					<comments>https://jharaphula.com/how-to-design-a-table-using-kineticjs-on-html5-canvas/#respond</comments>
		
		<dc:creator><![CDATA[Biswabhusan Panda]]></dc:creator>
		<pubDate>Fri, 13 May 2016 18:41:19 +0000</pubDate>
				<category><![CDATA[KineticJS Examples]]></category>
		<category><![CDATA[HTML5 Canvas]]></category>
		<category><![CDATA[KineticJS on HTML5 Canvas]]></category>
		<category><![CDATA[MS-Excel like Table]]></category>
		<category><![CDATA[Table using KineticJS]]></category>
		<guid isPermaLink="false">http://box.jharaphula.com/?p=750</guid>

					<description><![CDATA[<img width="300" height="184" src="https://jharaphula.com/wp-content/uploads/2016/05/simple-css-tables-300x184.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="Design MS-Excel like Table using KineticJS on HTML5 Canvas?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" fetchpriority="high" srcset="https://jharaphula.com/wp-content/uploads/2016/05/simple-css-tables-300x184.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/simple-css-tables.jpg 750w" sizes="(max-width: 300px) 100vw, 300px" /><p>During my software development experiences I never faced such a challenging stuff to design a table like Microsoft word or excel. Recently with my Ex-employer...</p>
<p>The post <a href="https://jharaphula.com/how-to-design-a-table-using-kineticjs-on-html5-canvas/">Design MS-Excel like Table using KineticJS on HTML5 Canvas?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="300" height="184" src="https://jharaphula.com/wp-content/uploads/2016/05/simple-css-tables-300x184.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="Design MS-Excel like Table using KineticJS on HTML5 Canvas?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" srcset="https://jharaphula.com/wp-content/uploads/2016/05/simple-css-tables-300x184.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/simple-css-tables.jpg 750w" sizes="(max-width: 300px) 100vw, 300px" /><p>During my software development experiences I never faced such a challenging stuff to design a table like Microsoft word or excel. Recently with my Ex-employer in a project I found me to design a table like MS-Word. The skills I used here are KineticJS, HTML5 &amp; Jquery.</p>
<p>A table looks very easy to Operate but during the development of a table I faced many critical logical games to handle. In this article I am sharing the complete class for creating a table. The JavaScript <a href="https://jharaphula.com/object-oriented-programming-concepts-with-examples/" rel="noopener noreferrer" target="_blank">class</a> I am sharing here is TableShape which accepts row &amp; column numbers with KineticJS stage &amp; layer. In real-time this class is capable to draw table for you depending upon the row &amp; column values. To implement this you need to copy this js file to your application &amp; while creating the instance for the class TableShape you need to pass parameters only.</p>
<p>In the below TableShape class I have all the ready mate method to do operation with a table. createCell is the method which creates cell for table. Used Splitters to handle cells &amp; rows adjustments. To insert a row into the table we created a function insertRow(). Where by passing the index you can add a row to your table. To delete a row in this class we implemented deleteRow() function. This function accepts index of the row which one you want to delete. Depending upon the index this external function is capable to delete row from your table. Similar to insertRow() &amp; deleteRow() we have insertColumn() &amp; deleteColumn() method. Using getHeight() &amp; getWidth() external function you can retrieve table width &amp; height in your class. During operations to retrieve the x &amp; y positions of table in this class we declared two additional methods getX() &amp; getY(). These methods are added to the exports array of this method. Which you can easily access from your class. Using setWidth() &amp; setHeight() functions you can set table width &amp; height from your external class. To select the table or it&#8217;s cells this class contains Select &amp; Deselect methods. You just need to call them from your class to use. Like this there are plenty of functionality you can get with this class.</p>
<p>This class is well tested by our QA team. I don&#8217;t think you will get any problems to implement this class. What problems we faced during a table design I don&#8217;t want to give you the same pain. Let us reuse the code.</p>
<p><strong>tableShape.js</strong></p>
<p><code><span style="color:brown">/*Table Cell related default values*/<br />
var DEFAULT_CELL_STROKE_WIDTH = 1;<br />
var DEFAULT_CELL_WIDTH = 200;<br />
var DEFAULT_CELL_HEIGHT = 100;<br />
var MIN_CELL_DIM = 25;<br />
var DEFAULT_SPANNER_WIDTH = 5;<br />
/*Table Slitter Default Stroke &amp; Width*/<br />
var DEFAULT_SPLITTER_STROKE = "#000000";<br />
var DEFAULT_SPLITTER_WIDTH = 3;</span></p>
<p><span style="color:brown">var DEFAULT_SPANNER_STROKE = "darkgray";<br />
/*Table default cell settings*/<br />
var DEFAULT_CELL_FILL = "#FFFFFF";<br />
var DEFAULT_CELL_STROKE = "#000000";<br />
var DEFAULT_CELL_STROKE_SELECTED = "#000000";</span></p>
<p><span style="color:brown">var TableShape = function (totalRows, totalColumns, stage, layer) {</span></p>
<p><span style="color:brown">var exports = {};<br />
var _rows = null;<br />
var _columns = null;<br />
var _stage = null;<br />
var _tbllayer = null;<br />
var _tblgroup = null;<br />
var _embeddedShapes = [];<br />
var _tableIndex = [];</span></p>
<p><span style="color:brown">/* Initial values related to Table */<br />
function init() {</span></p>
<p><span style="color:brown">_tbllayer = layer;<br />
_tblgroup = new Kinetic.Group({<br />
x: -(_columns / 2) * DEFAULT_CELL_WIDTH,<br />
y: -(_rows / 2) * DEFAULT_CELL_HEIGHT,<br />
width: _columns * DEFAULT_CELL_WIDTH,<br />
height: _rows * DEFAULT_CELL_HEIGHT,<br />
draggable: true<br />
});</span></p>
<p><span style="color:brown">var xDisp = (2 * DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH);<br />
var yDisp = (2 * DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH);</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _rows; row++) {</span></p>
<p><span style="color:brown">_tableIndex[row] = new Array();</span></p>
<p><span style="color:brown">for (var col = 0; col &lt; _columns; col++) {</span></p>
<p><span style="color:brown">var box = createCell((col == 0) ? (2 * DEFAULT_CELL_STROKE_WIDTH) : (col * DEFAULT_CELL_WIDTH) + (col * xDisp),<br />
(row == 0) ? (2 * DEFAULT_CELL_STROKE_WIDTH) : (row * DEFAULT_CELL_HEIGHT) + (row * yDisp),<br />
DEFAULT_CELL_WIDTH, DEFAULT_CELL_HEIGHT);</span></p>
<p><span style="color:brown">_tblgroup.add(box);<br />
_tableIndex[row][col] = box;<br />
}<br />
}</span></p>
<p><span style="color:brown">//nameCells();<br />
createSpanners(true);</span></p>
<p><span style="color:brown">_tblgroup.on('mouseout', function (e) {<br />
document.body.style.cursor = 'default';<br />
});</span></p>
<p><span style="color:brown">_tblgroup.on('click', function (e) {</span></p>
<p><span style="color:brown">if (e.shape.getId() != "tableCell" &amp;&amp;<br />
e.shape.getId() != "vSplitter" &amp;&amp; e.shape.getId() != "hSplitter" &amp;&amp;<br />
e.shape.getName() != "spanLineCol" &amp;&amp; e.shape.getName() != "spanLineRow" &amp;&amp;<br />
event.shiftKey) {<br />
e.shape.parent.setX(_tblgroup.parent.getX() + e.shape.parent.getX() - _tblgroup.parent.getOffset().x);<br />
e.shape.parent.setY(_tblgroup.parent.getY() + e.shape.parent.getY() - _tblgroup.parent.getOffset().y);<br />
e.shape.parent.moveTo(_tbllayer);<br />
e.shape.parentTable = null;<br />
}<br />
else {<br />
// table in table<br />
if (e.shape.getId() == "tableCell" &amp;&amp; e.shape.parent != _tblgroup &amp;&amp; event.shiftKey) {<br />
//Nothing ToDo<br />
}<br />
else {<br />
groupEmbeddedShapes();<br />
}<br />
}<br />
});<br />
_tblgroup.on('dblclick', function (e) {<br />
});</span></p>
<p><span style="color:brown">_tbllayer.add(_tblgroup);<br />
_tblgroup._id = exports._id;<br />
selectCell(_tableIndex[0][0]);<br />
_stage.draw();<br />
}</span></p>
<p><span style="color:brown">/* Funtion to Create Cells in Table */<br />
function createCell(cellX, cellY, cellWidth, cellHeight, cellName) {</span></p>
<p><span style="color:brown">var cell = new Kinetic.Rect({<br />
id: "tableCell",<br />
name: cellName ? cellName : randomString(5),<br />
x: cellX,<br />
y: cellY,<br />
width: cellWidth,<br />
height: cellHeight,<br />
fill: DEFAULT_CELL_FILL,<br />
stroke: DEFAULT_CELL_STROKE,<br />
strokeWidth: DEFAULT_CELL_STROKE_WIDTH<br />
});</span></p>
<p><span style="color:brown">cell.on('click', function (evt) {<br />
selectCell(this);</span></p>
<p><span style="color:brown">if (event.ctrlLeft) {<br />
addSplitter(cell, "vertical");<br />
}</span></p>
<p><span style="color:brown">if (event.altLeft) {<br />
addSplitter(cell, "horizontal");<br />
}<br />
});</span></p>
<p><span style="color:brown">cell.on('mouseover', function (e) {<br />
document.body.style.cursor = 'crosshair';<br />
});</span></p>
<p><span style="color:brown">return cell;<br />
}</span></p>
<p><span style="color:brown">function updateSplitters(cell) {</span></p>
<p><span style="color:brown">if (cell.vSplitters) {</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; cell.vSplitters.length; i++) {<br />
var vSplit = cell.vSplitters[i];<br />
var points = vSplit.getPoints();</span></p>
<p><span style="color:brown">var curSpltrX = points[0].x + vSplit.getX();</span></p>
<p><span style="color:brown">if (curSpltrX &lt; cell.getX()) {<br />
vSplit.setX(cell.getX() - points[0].x + DEFAULT_SPANNER_WIDTH);<br />
}</span></p>
<p><span style="color:brown">if (curSpltrX &gt; cell.getX() + cell.getWidth()) {<br />
vSplit.setX(cell.getX() + cell.getWidth() - points[0].x - DEFAULT_SPANNER_WIDTH);<br />
}<br />
points[0].y = cell.getY();<br />
points[1].y = cell.getY() + cell.getHeight();<br />
vSplit.setPoints(points);<br />
vSplit.setY(cell.getY() - points[0].y);<br />
}<br />
}</span></p>
<p><span style="color:brown">if (cell.hSplitters) {<br />
for (var i = 0; i &lt; cell.hSplitters.length; i++) {<br />
var hSplit = cell.hSplitters[i];<br />
var points = hSplit.getPoints();</span></p>
<p><span style="color:brown">var curSpltrY = points[0].y + hSplit.getY();</span></p>
<p><span style="color:brown">if (curSpltrY &lt; cell.getY()) {<br />
hSplit.setY(cell.getY() - points[0].y + DEFAULT_SPANNER_WIDTH);<br />
}</span></p>
<p><span style="color:brown">if (curSpltrY &gt; cell.getY() + cell.getHeight()) {<br />
hSplit.setY(cell.getY() + cell.getHeight() - points[0].y - DEFAULT_SPANNER_WIDTH);<br />
}<br />
points[0].x = cell.getX();<br />
points[1].x = cell.getX() + cell.getWidth();<br />
hSplit.setPoints(points);<br />
hSplit.setX(cell.getX() - points[0].x);<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">function addSplitter(cell, type, evt) {</span></p>
<p><span style="color:brown">switch (type) {<br />
case "vertical":<br />
var x, y;</span></p>
<p><span style="color:brown">if (evt &amp;&amp; evt.x) {<br />
transformEventCoordsToCellCoords(cell, evt);<br />
x = cell.getX() + evt.x;<br />
y = cell.getY();<br />
}<br />
else {<br />
x = cell.getX() + cell.getWidth() / 2;<br />
y = cell.getY();<br />
}</span></p>
<p><span style="color:brown">var lineVSplitter = new Kinetic.Line({<br />
id: "vSplitter",<br />
name: cell.getName() + "vSplitter",<br />
points: [x, y, x, y + cell.getHeight()],<br />
stroke: cell.getStroke(),<br />
strokeWidth: DEFAULT_SPLITTER_WIDTH,<br />
draggable: true,<br />
dragOnTop: false<br />
});</span></p>
<p><span style="color:brown">lineVSplitter.on('mouseover', function (e) {<br />
$("body").css("cursor", "col-resize");<br />
});</span></p>
<p><span style="color:brown">lineVSplitter.on('dragmove', function (e) {<br />
this.setY(0);</span></p>
<p><span style="color:brown">var curSpltrX = this.getPoints()[0].x + this.getX();</span></p>
<p><span style="color:brown">if (curSpltrX &lt; cell.getX()) {<br />
this.setX(cell.getX() - this.getPoints()[0].x + DEFAULT_SPANNER_WIDTH);<br />
return;<br />
}</span></p>
<p><span style="color:brown">if (curSpltrX &gt; cell.getX() + cell.getWidth()) {<br />
this.setX(cell.getX() + cell.getWidth() - this.getPoints()[0].x - DEFAULT_SPANNER_WIDTH);<br />
return;<br />
}<br />
});</span></p>
<p><span style="color:brown">lineVSplitter.on('mouseout', function (e) {<br />
$("body").css("cursor", "default");<br />
});</span></p>
<p><span style="color:brown">lineVSplitter.on("mousedown dragstart", function () {<br />
_tblgroup.setDraggable(false);<br />
_tblgroup.parent.setDraggable(false);<br />
});</span></p>
<p><span style="color:brown">lineVSplitter.on("mouseup dragend", function () {<br />
_tblgroup.setDraggable(true);<br />
_tblgroup.parent.setDraggable(true);<br />
});</span></p>
<p><span style="color:brown">_tblgroup.add(lineVSplitter);<br />
if (!cell.vSplitters) cell.vSplitters = [];<br />
cell.vSplitters.push(lineVSplitter);<br />
break;</span></p>
<p><span style="color:brown">case "horizontal":<br />
var x, y;</span></p>
<p><span style="color:brown">if (evt &amp;&amp; evt.y) {<br />
transformEventCoordsToCellCoords(cell, evt);<br />
x = cell.getX();<br />
y = cell.getY() + evt.y;<br />
}<br />
else {<br />
x = cell.getX();<br />
y = cell.getY() + cell.getHeight() / 2;<br />
}</span></p>
<p><span style="color:brown">var lineHSplitter = new Kinetic.Line({<br />
id: "hSplitter",<br />
name: cell.getName() + "hSplitter",<br />
points: [x, y, x + cell.getWidth(), y],<br />
stroke: cell.getStroke(),<br />
strokeWidth: DEFAULT_SPLITTER_WIDTH,<br />
draggable: true,<br />
dragOnTop: false<br />
});</span></p>
<p><span style="color:brown">lineHSplitter.on('mouseover', function (e) {<br />
$("body").css("cursor", "row-resize");<br />
});</span></p>
<p><span style="color:brown">lineHSplitter.on('dragmove', function (e) {<br />
this.setX(0);</span></p>
<p><span style="color:brown">var curSpltrY = this.getPoints()[0].y + this.getY();</span></p>
<p><span style="color:brown">if (curSpltrY &lt; cell.getY()) {<br />
this.setY(cell.getY() - this.getPoints()[0].y + DEFAULT_SPANNER_WIDTH);<br />
return;<br />
}</span></p>
<p><span style="color:brown">if (curSpltrY &gt; cell.getY() + cell.getHeight()) {<br />
this.setY(cell.getY() + cell.getHeight() - this.getPoints()[0].y - DEFAULT_SPANNER_WIDTH);<br />
return;<br />
}<br />
});</span></p>
<p><span style="color:brown">lineHSplitter.on('mouseout', function (e) {<br />
$("body").css("cursor", "default");<br />
});</span></p>
<p><span style="color:brown">lineHSplitter.on("mousedown dragstart", function () {<br />
_tblgroup.setDraggable(false);<br />
_tblgroup.parent.setDraggable(false);<br />
});</span></p>
<p><span style="color:brown">lineHSplitter.on("mouseup dragend", function () {<br />
_tblgroup.setDraggable(true);<br />
_tblgroup.parent.setDraggable(true);<br />
});</span></p>
<p><span style="color:brown">_tblgroup.add(lineHSplitter);<br />
if (!cell.hSplitters) cell.hSplitters = [];<br />
cell.hSplitters.push(lineHSplitter);<br />
break;</span></p>
<p><span style="color:brown">default:<br />
break;<br />
}<br />
}</span></p>
<p><span style="color:brown">function removeSplitters(cell, type, evt) {</span></p>
<p><span style="color:brown">switch (type) {<br />
case "vertical":</span></p>
<p><span style="color:brown">if (cell.vSplitters) {<br />
if (evt &amp;&amp; evt.x) {<br />
transformEventCoordsToCellCoords(cell, evt);<br />
var nearest = 0;</span></p>
<p><span style="color:brown">for (var i = 1; i &lt; cell.vSplitters.length; i++) {<br />
var vSplit = cell.vSplitters[i];<br />
var vSplitNearest = cell.vSplitters[nearest];<br />
var splitX = vSplit.getPoints()[0].x + vSplit.getX();<br />
var splitXnearest = vSplitNearest.getPoints()[0].x + vSplitNearest.getX();</span></p>
<p><span style="color:brown">if (Math.abs(evt.x - splitXnearest) &gt; Math.abs(evt.x - splitX)) {<br />
nearest = i;<br />
}<br />
}</span></p>
<p><span style="color:brown">cell.vSplitters[nearest].remove();<br />
cell.vSplitters.splice(nearest, 1);<br />
if (0 == cell.vSplitters.length) cell.vSplitters = null;<br />
}<br />
else {<br />
for (var i = 0; i &lt; cell.vSplitters.length; i++) {<br />
cell.vSplitters[i].remove();<br />
}</span></p>
<p><span style="color:brown">cell.vSplitters = null;<br />
}<br />
}<br />
break;</span></p>
<p><span style="color:brown">case "horizontal":<br />
if (cell.hSplitters) {</span></p>
<p><span style="color:brown">if (evt &amp;&amp; evt.y) {<br />
transformEventCoordsToCellCoords(cell, evt);<br />
var nearest = 0;</span></p>
<p><span style="color:brown">for (var i = 1; i &lt; cell.hSplitters.length; i++) {<br />
var hSplit = cell.hSplitters[i];<br />
var hSplitNearest = cell.hSplitters[nearest];<br />
var splitY = hSplit.getPoints()[0].y + hSplit.getY();<br />
var splitYnearest = hSplitNearest.getPoints()[0].y + hSplitNearest.getY();</span></p>
<p><span style="color:brown">if (Math.abs(evt.y - splitYnearest) &gt; Math.abs(evt.y - splitY)) {<br />
nearest = i;<br />
}<br />
}</span></p>
<p><span style="color:brown">cell.hSplitters[nearest].remove();<br />
cell.hSplitters.splice(nearest, 1);<br />
if (0 == cell.hSplitters.length) cell.hSplitters = null;<br />
}<br />
else {<br />
for (var i = 0; i &lt; cell.hSplitters.length; i++) {<br />
cell.hSplitters[i].remove();<br />
}</span></p>
<p><span style="color:brown">cell.hSplitters = null;<br />
}<br />
}<br />
break;</span></p>
<p><span style="color:brown">default:<br />
break;<br />
}<br />
}</span></p>
<p><span style="color:brown">function moveSplitters(cell, disp) {</span></p>
<p><span style="color:brown">if (cell.vSplitters) {<br />
for (var i = 0; i &lt; cell.vSplitters.length; i++) {<br />
cell.vSplitters[i].move(disp.x, disp.y);<br />
}<br />
}</span></p>
<p><span style="color:brown">if (cell.hSplitters) {<br />
for (var i = 0; i &lt; cell.hSplitters.length; i++) {<br />
cell.hSplitters[i].move(disp.x, disp.y);<br />
}<br />
}</span></p>
<p><span style="color:brown">updateSplitters(cell);<br />
}</span></p>
<p><span style="color:brown">function createSpanners(init) {</span></p>
<p><span style="color:brown">if (!init) {<br />
// remove previous ones<br />
var rowSpans = _tblgroup.get(".spanLineRow");</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; rowSpans.length; i++) {<br />
rowSpans[i].remove();<br />
}</span></p>
<p><span style="color:brown">var colSpans = _tblgroup.get(".spanLineCol");</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; colSpans.length; i++) {<br />
colSpans[i].remove();<br />
}<br />
}</span></p>
<p><span style="color:brown">var row = 0;<br />
for (var col = 1; col &lt; _tableIndex[row].length; col++) {</span></p>
<p><span style="color:brown">var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">var lineCol = new Kinetic.Line({<br />
name: "spanLineCol",<br />
id: col,<br />
points: [cell.getX() - DEFAULT_SPANNER_WIDTH + (2 * DEFAULT_CELL_STROKE_WIDTH), cell.getY(),<br />
cell.getX() - DEFAULT_SPANNER_WIDTH + (2 * DEFAULT_CELL_STROKE_WIDTH), exports.getHeight()],</span></p>
<p><span style="color:brown">stroke: DEFAULT_SPANNER_STROKE,<br />
strokeWidth: DEFAULT_SPANNER_WIDTH,<br />
dashArray: [DEFAULT_SPANNER_WIDTH, DEFAULT_SPANNER_WIDTH, DEFAULT_SPANNER_WIDTH, DEFAULT_SPANNER_WIDTH],<br />
lineCap: 'round',<br />
lineJoin: 'round',<br />
draggable: true,<br />
dragOnTop: false<br />
});</span></p>
<p><span style="color:brown">lineCol.on('mouseover', function (e) {<br />
$("body").css("cursor", "col-resize");<br />
});</span></p>
<p><span style="color:brown">lineCol.on('dragmove', function (e) {<br />
this.setY(0);<br />
spanColumn(e.shape);<br />
});</span></p>
<p><span style="color:brown">lineCol.on('mouseout', function (e) {<br />
$("body").css("cursor", "default");<br />
});</span></p>
<p><span style="color:brown">lineCol.on("mousedown dragstart", function () {<br />
_tblgroup.setDraggable(false);<br />
_tblgroup.parent.setDraggable(false);<br />
});</span></p>
<p><span style="color:brown">lineCol.on("mouseup dragend", function () {<br />
_tblgroup.setDraggable(true);<br />
_tblgroup.parent.setDraggable(true);<br />
});</span></p>
<p><span style="color:brown">_tblgroup.add(lineCol);<br />
}</span></p>
<p><span style="color:brown">var col = 0;<br />
for (var row = 1; row &lt; _tableIndex.length; row++) {</span></p>
<p><span style="color:brown">var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">var lineRow = new Kinetic.Line({<br />
name: "spanLineRow",<br />
id: row,<br />
points: [cell.getX(), cell.getY() - DEFAULT_SPANNER_WIDTH + (2 * DEFAULT_CELL_STROKE_WIDTH),<br />
exports.getWidth(), cell.getY() - DEFAULT_SPANNER_WIDTH + (2 * DEFAULT_CELL_STROKE_WIDTH)],<br />
stroke: DEFAULT_SPANNER_STROKE,<br />
strokeWidth: DEFAULT_SPANNER_WIDTH,<br />
dashArray: [DEFAULT_SPANNER_WIDTH, DEFAULT_SPANNER_WIDTH, DEFAULT_SPANNER_WIDTH, DEFAULT_SPANNER_WIDTH],<br />
lineCap: 'round',<br />
lineJoin: 'round',<br />
draggable: true,<br />
dragOnTop: false<br />
});</span></p>
<p><span style="color:brown">lineRow.on('mouseover', function (e) {<br />
$("body").css("cursor", "row-resize");<br />
});</span></p>
<p><span style="color:brown">lineRow.on('dragmove', function (e) {<br />
this.setX(0);<br />
spanRow(e.shape);<br />
});</span></p>
<p><span style="color:brown">lineRow.on('mouseout', function (e) {<br />
$("body").css("cursor", "default");<br />
});</span></p>
<p><span style="color:brown">lineRow.on("mousedown dragstart", function () {<br />
_tblgroup.setDraggable(false);<br />
_tblgroup.parent.setDraggable(false);<br />
});</span></p>
<p><span style="color:brown">lineRow.on("mouseup dragend", function () {<br />
_tblgroup.setDraggable(true);<br />
_tblgroup.parent.setDraggable(true);<br />
});</span></p>
<p><span style="color:brown">_tblgroup.add(lineRow);<br />
}</span></p>
<p><span style="color:brown">if (exports.selectedCell) {<br />
exports.selectedCell.show();<br />
}<br />
}</span></p>
<p><span style="color:brown">function spanColumn(spanner) {</span></p>
<p><span style="color:brown">var col = Number(spanner.getId());<br />
var curSpanX = spanner.getPoints()[0].x + spanner.getX();</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _tableIndex.length; row++) {</span></p>
<p><span style="color:brown">var lCell = _tableIndex[row][col - 1];<br />
var rCell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">if (lCell.getWidth() &lt;= MIN_CELL_DIM &amp;&amp; (curSpanX - DEFAULT_SPANNER_WIDTH) &lt;= (lCell.getX() + lCell.getWidth())) {<br />
spanner.setX((lCell.getX() + lCell.getWidth() + (4 * DEFAULT_CELL_STROKE_WIDTH)) - spanner.getPoints()[0].x);<br />
return;<br />
}</span></p>
<p><span style="color:brown">if (rCell.getWidth() &lt;= MIN_CELL_DIM &amp;&amp; curSpanX &gt;= rCell.getX()) {<br />
spanner.setX((rCell.getX() - (4 * DEFAULT_CELL_STROKE_WIDTH)) - spanner.getPoints()[0].x);<br />
return;<br />
}</span></p>
<p><span style="color:brown">var diff = curSpanX - rCell.getX() + (4 * DEFAULT_CELL_STROKE_WIDTH);</span></p>
<p><span style="color:brown">lCell.setWidth(lCell.getWidth() + diff);<br />
rCell.setWidth(rCell.getWidth() - diff);</span></p>
<p><span style="color:brown">var embShapes = _tblgroup.get("." + rCell.getName());</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].setX(embShapes[i].getX() + diff);<br />
}</span></p>
<p><span style="color:brown">updateSplitters(lCell);<br />
updateSplitters(rCell);<br />
}<br />
}</span></p>
<p><span style="color:brown">function spanRow(spanner) {</span></p>
<p><span style="color:brown">var row = Number(spanner.getId());<br />
var curSpanY = spanner.getPoints()[0].y + spanner.getY();</span></p>
<p><span style="color:brown">for (var col = 0; col &lt; _tableIndex[row].length; col++) {</span></p>
<p><span style="color:brown">var tCell = _tableIndex[row - 1][col];<br />
var bCell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">if (tCell.getHeight() &lt;= MIN_CELL_DIM &amp;&amp; (curSpanY - DEFAULT_SPANNER_WIDTH) &lt;= (tCell.getY() + tCell.getHeight())) {<br />
spanner.setY((tCell.getY() + tCell.getHeight() + (4 * DEFAULT_CELL_STROKE_WIDTH)) - spanner.getPoints()[0].y);<br />
return;<br />
}</span></p>
<p><span style="color:brown">if (bCell.getHeight() &lt;= MIN_CELL_DIM &amp;&amp; curSpanY &gt;= bCell.getY()) {<br />
spanner.setY((bCell.getY() - (4 * DEFAULT_CELL_STROKE_WIDTH)) - spanner.getPoints()[0].y);<br />
return;<br />
}</span></p>
<p><span style="color:brown">var diff = curSpanY - bCell.getY() + (4 * DEFAULT_CELL_STROKE_WIDTH);</span></p>
<p><span style="color:brown">tCell.setHeight(tCell.getHeight() + diff);<br />
bCell.setHeight(bCell.getHeight() - diff);</span></p>
<p><span style="color:brown">var embShapes = _tblgroup.get("." + bCell.getName());</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].setY(embShapes[i].getY() + diff);<br />
}</span></p>
<p><span style="color:brown">updateSplitters(tCell);<br />
updateSplitters(bCell);<br />
}<br />
}</span></p>
<p><span style="color:brown">/* Function to Select Indivisual Cell in Table*/<br />
function selectCell(cell) {</span></p>
<p><span style="color:brown">if (exports.selectedCell &amp;&amp; exports.selectedCell.sCell() == cell) return;</span></p>
<p><span style="color:brown">if (exports.selectedCell) {<br />
exports.selectedCell.hide();<br />
}<br />
exports.selectedCell = new SelectedCell(cell, null);<br />
exports.selectedCell.show();<br />
_stage.draw();<br />
}</span></p>
<p><span style="color:brown">function selectTable() {</span></p>
<p><span style="color:brown">if (exports.selectedCell) {<br />
exports.selectedCell.hide();<br />
}</span></p>
<p><span style="color:brown">exports.selectedCell = new SelectedCell(null, _tableIndex);<br />
exports.selectedCell.show();<br />
_stage.draw();<br />
}</span></p>
<p><span style="color:brown">function resizeRowSpanners(diff, bLeft) {</span></p>
<p><span style="color:brown">var rowSpans = _tblgroup.get(".spanLineRow");</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; rowSpans.length; i++) {<br />
rowSpans[i].attrs.points[1].x += diff;<br />
}</span></p>
<p><span style="color:brown">if (bLeft) {<br />
var colSpans = _tblgroup.get(".spanLineCol");</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; colSpans.length; i++) {<br />
colSpans[i].attrs.points[0].x += diff;<br />
colSpans[i].attrs.points[1].x += diff;<br />
}<br />
}</span></p>
<p><span style="color:brown">_tblgroup.setWidth(_tblgroup.getWidth() + diff);<br />
}</span></p>
<p><span style="color:brown">function resizeColSpanners(diff, bTop) {<br />
var colSpans = _tblgroup.get(".spanLineCol");</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; colSpans.length; i++) {<br />
colSpans[i].attrs.points[1].y += diff;<br />
}</span></p>
<p><span style="color:brown">if (bTop) {<br />
var rowSpans = _tblgroup.get(".spanLineRow");</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; rowSpans.length; i++) {<br />
rowSpans[i].attrs.points[0].y += diff;<br />
rowSpans[i].attrs.points[1].y += diff;<br />
}<br />
}</span></p>
<p><span style="color:brown">_tblgroup.setHeight(_tblgroup.getHeight() + diff);<br />
}</span></p>
<p><span style="color:brown">function groupEmbeddedShapes() {</span></p>
<p><span style="color:brown">var oldRot = _tblgroup.parent.getRotation();<br />
_tblgroup.parent.setRotation(0);</span></p>
<p><span style="color:brown">for (var key in _embeddedShapes) {</span></p>
<p><span style="color:brown">if (_embeddedShapes.hasOwnProperty(key)) {<br />
var shape = _embeddedShapes[key];<br />
var oldChld = _tblgroup.children.length;</span></p>
<p><span style="color:brown">shape.moveTo(_tblgroup);</span></p>
<p><span style="color:brown">if (oldChld != _tblgroup.children.length) {</span></p>
<p><span style="color:brown">shape.setX(shape.getX() - _tblgroup.parent.getX() + _tblgroup.parent.getOffset().x);<br />
shape.setY(shape.getY() - _tblgroup.parent.getY() + _tblgroup.parent.getOffset().y);</span></p>
<p><span style="color:brown">shape.setName("");<br />
bInside = false;</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _tableIndex.length &amp;&amp; bInside == false; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {<br />
cell = _tableIndex[row][col];<br />
if (exports.areShapesOverlapping(cell, shape)) {<br />
shape.setName(cell.getName());<br />
bInside = true;<br />
break;<br />
}<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">if (!bInside) {<br />
shape.setX(_tblgroup.parent.getX() + shape.getX() - _tblgroup.parent.getOffset().x);<br />
shape.setY(_tblgroup.parent.getY() + shape.getY() - _tblgroup.parent.getOffset().y);<br />
shape.moveTo(_tbllayer);<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">_tblgroup.parent.setRotation(oldRot);<br />
}</span></p>
<p><span style="color:brown">function transformEventCoordsToCellCoords(cell, evt) {</span></p>
<p><span style="color:brown">if (cell &amp;&amp; evt) {<br />
var m = cell.getAbsoluteTransform();<br />
var n = new Kinetic.Transform();<br />
n.multiply(m);<br />
n.invert();<br />
n.translate(evt.x, evt.y)<br />
evt.x = n.getMatrix()[4];<br />
evt.y = n.getMatrix()[5];<br />
}<br />
}</span></p>
<p><span style="color:brown">/* Function to insert Row into the Table */<br />
exports.insertRow = function (index) {</span></p>
<p><span style="color:brown">if (index &lt; 0) index = 0;<br />
if (index == undefined || index &gt;= _rows) index = _rows;</span></p>
<p><span style="color:brown">var row = new Array();</span></p>
<p><span style="color:brown">if (index &gt;= _tableIndex.length) {<br />
for (var col = 0; col &lt; _tableIndex[index - 1].length; col++) {<br />
var refCell = _tableIndex[index - 1][col];<br />
var cell = createCell(refCell.getX(), refCell.getY() + DEFAULT_SPANNER_WIDTH + refCell.getHeight(), refCell.getWidth(), DEFAULT_CELL_HEIGHT);<br />
row.push(cell);<br />
_tblgroup.add(cell);<br />
}</span></p>
<p><span style="color:brown">_tableIndex.splice(index, 0, row);<br />
}<br />
else {<br />
for (var col = 0; col &lt; _tableIndex[index].length; col++) {<br />
var refCell = _tableIndex[index][col];<br />
var cell = createCell(refCell.getX(), refCell.getY(), refCell.getWidth(), DEFAULT_CELL_HEIGHT);<br />
row.push(cell);<br />
_tblgroup.add(cell);<br />
}</span></p>
<p><span style="color:brown">_tableIndex.splice(index, 0, row);</span></p>
<p><span style="color:brown">for (var rowInd = index + 1; rowInd &lt; _tableIndex.length; rowInd++) {<br />
for (var col = 0; col &lt; _tableIndex[rowInd].length; col++) {<br />
var cell = _tableIndex[rowInd][col];</span></p>
<p><span style="color:brown">// move linked shapes too<br />
var embShapes = _tblgroup.get("." + cell.getName());</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].move(0, DEFAULT_CELL_HEIGHT + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH);<br />
}</span></p>
<p><span style="color:brown">moveSplitters(cell, { x: 0, y: DEFAULT_CELL_HEIGHT + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH });<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">_rows++;</span></p>
<p><span style="color:brown">createSpanners();<br />
_stage.draw();<br />
}</span></p>
<p><span style="color:brown">/* Function to delete Row from the Table */<br />
exports.deleteRow = function (index) {</span></p>
<p><span style="color:brown">if (_rows == 1) return;</span></p>
<p><span style="color:brown">if (index == undefined) index = _rows - 1;</span></p>
<p><span style="color:brown">var diff = _tableIndex[index][0].getHeight();</span></p>
<p><span style="color:brown">for (var row = index; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {</span></p>
<p><span style="color:brown">var cell = _tableIndex[row][col];<br />
var embShapes = _tblgroup.get("." + cell.getName());</span></p>
<p><span style="color:brown">if (row == index) {<br />
// delete linked shapes too<br />
for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].remove();<br />
}</span></p>
<p><span style="color:brown">removeSplitters(cell, "vertical");<br />
removeSplitters(cell, "horizontal");<br />
}<br />
else {<br />
for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].move(0, -(diff + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH));<br />
}</span></p>
<p><span style="color:brown">moveSplitters(cell, { x: 0, y: -(diff + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH) });<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">_tableIndex.splice(index, 1);<br />
_rows--;</span></p>
<p><span style="color:brown">createSpanners();<br />
_stage.draw();<br />
}</span></p>
<p><span style="color:brown">/* Function to insert Column into the Table */<br />
exports.insertColumn = function (index) {</span></p>
<p><span style="color:brown">if (index &lt; 0) index = 0;<br />
if (index == undefined || index &gt;= _columns) index = _columns;</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _tableIndex.length; row++) {</span></p>
<p><span style="color:brown">if (index &gt;= _tableIndex[row].length) {</span></p>
<p><span style="color:brown">var refCell = _tableIndex[row][index - 1];<br />
var cell = createCell(refCell.getX() + refCell.getWidth() + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH, refCell.getY(), DEFAULT_CELL_WIDTH, refCell.getHeight());<br />
_tableIndex[row].push(cell);<br />
_tblgroup.add(cell);<br />
}<br />
else {<br />
var refCell = _tableIndex[row][index];<br />
var newCell = createCell(refCell.getX(), refCell.getY(), DEFAULT_CELL_WIDTH, refCell.getHeight());<br />
_tableIndex[row].splice(index, 0, newCell);<br />
_tblgroup.add(newCell);</span></p>
<p><span style="color:brown">for (var colInd = index + 1; colInd &lt; _tableIndex[row].length; colInd++) {<br />
var cell = _tableIndex[row][colInd];</span></p>
<p><span style="color:brown">// move linked shapes too<br />
var embShapes = _tblgroup.get("." + cell.getName());</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].move(DEFAULT_CELL_WIDTH + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH, 0);<br />
}</span></p>
<p><span style="color:brown">moveSplitters(cell, { x: DEFAULT_CELL_WIDTH + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH, y: 0 });<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">_columns++;<br />
createSpanners();<br />
_stage.draw();<br />
}</span></p>
<p><span style="color:brown">/* Function to delete column from the Table */<br />
exports.deleteColumn = function (index) {</span></p>
<p><span style="color:brown">if (_columns == 1) return;</span></p>
<p><span style="color:brown">if (index == undefined) index = _columns - 1;</span></p>
<p><span style="color:brown">var diff = _tableIndex[0][index].getWidth();</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = index; col &lt; _tableIndex[row].length; col++) {</span></p>
<p><span style="color:brown">var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">var embShapes = _tblgroup.get("." + cell.getName());</span></p>
<p><span style="color:brown">if (col == index) {<br />
// delete linked shapes too<br />
for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].remove();<br />
}</span></p>
<p><span style="color:brown">removeSplitters(cell, "vertical");<br />
removeSplitters(cell, "horizontal");<br />
}<br />
else {<br />
for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].move(-(diff + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH), 0);<br />
}</span></p>
<p><span style="color:brown">moveSplitters(cell, { x: -(diff + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH), y: 0 });<br />
}<br />
}</span></p>
<p><span style="color:brown">_tableIndex[row].splice(index, 1);<br />
}</span></p>
<p><span style="color:brown">_columns--;<br />
createSpanners();<br />
_stage.draw();<br />
}</span></p>
<p><span style="color:brown">exports.rows = function () {<br />
return _rows;<br />
}</span></p>
<p><span style="color:brown">exports.columns = function () {<br />
return _columns;<br />
}</span></p>
<p><span style="color:brown">exports.group = function () {<br />
return _tblgroup;<br />
}</span></p>
<p><span style="color:brown">exports.getCell = function (row, col) {<br />
if (row &gt;= 0 &amp;&amp; row &lt; _rows &amp;&amp; col &gt;= 0 &amp;&amp; col &lt; _columns) {<br />
return _tableIndex[row][col];<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.addShape = function (shape) {</span></p>
<p><span style="color:brown">_embeddedShapes[shape._id] = shape;</span></p>
<p><span style="color:brown">shape.parentTable = exports;<br />
}</span></p>
<p><span style="color:brown">exports.removeShape = function (shape) {</span></p>
<p><span style="color:brown">if (_embeddedShapes[shape._id]) {<br />
delete _embeddedShapes[shape._id]<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.getSelectedIndex = function () {</span></p>
<p><span style="color:brown">var cell = exports.selectedCell.sCell();</span></p>
<p><span style="color:brown">if (cell) {<br />
for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {<br />
if (_tableIndex[row][col] == cell) {<br />
return { row: row, column: col };<br />
}<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">return null;<br />
}</span></p>
<p><span style="color:brown">exports.update = function () {<br />
groupEmbeddedShapes();<br />
}</span></p>
<p><span style="color:brown">exports.initDone = function () {</span></p>
<p><span style="color:brown">if (_tblgroup.parent &amp;&amp; _tblgroup.parent.getId() == "marquee") {<br />
var borderLine = _tblgroup.parent.get(".borderLines")[0];</span></p>
<p><span style="color:brown">if (borderLine) {<br />
borderLine.on("click", function (e) {<br />
selectTable();<br />
});<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.splitCellVertical = function (row, col, evt) {<br />
if (row &gt;= 0 &amp;&amp; row &lt; _rows &amp;&amp; col &gt;= 0 &amp;&amp; col &lt; _columns) {<br />
var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">addSplitter(cell, "vertical", evt);<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.mergeCellVertical = function (row, col, evt) {<br />
if (row &gt;= 0 &amp;&amp; row &lt; _rows &amp;&amp; col &gt;= 0 &amp;&amp; col &lt; _columns) {<br />
var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">removeSplitters(cell, "vertical", evt);<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.splitCellHorizontal = function (row, col, evt) {<br />
if (row &gt;= 0 &amp;&amp; row &lt; _rows &amp;&amp; col &gt;= 0 &amp;&amp; col &lt; _columns) {<br />
var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">addSplitter(cell, "horizontal", evt);<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.mergeCellHorizontal = function (row, col, evt) {<br />
if (row &gt;= 0 &amp;&amp; row &lt; _rows &amp;&amp; col &gt;= 0 &amp;&amp; col &lt; _columns) {<br />
var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">removeSplitters(cell, "horizontal", evt);<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.hasVertSplitters = function (row, col) {<br />
if (row &gt;= 0 &amp;&amp; row &lt; _rows &amp;&amp; col &gt;= 0 &amp;&amp; col &lt; _columns) {<br />
var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">if (cell.vSplitters) return true;<br />
}</span></p>
<p><span style="color:brown">return false;<br />
}</span></p>
<p><span style="color:brown">exports.hasHorizSplitters = function (row, col) {<br />
if (row &gt;= 0 &amp;&amp; row &lt; _rows &amp;&amp; col &gt;= 0 &amp;&amp; col &lt; _columns) {<br />
var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">if (cell.hSplitters) return true;<br />
}<br />
return false;<br />
}</span></p>
<p><span style="color:brown">// getters<br />
exports.getId = function () {<br />
return null;<br />
}</span></p>
<p><span style="color:brown">exports.getName = function () {<br />
return null;<br />
}</span></p>
<p><span style="color:brown">exports.getLayer = function () {<br />
return _tbllayer;<br />
}</span></p>
<p><span style="color:brown">exports.getStage = function () {<br />
return _stage;<br />
}</span></p>
<p><span style="color:brown">exports.getZIndex = function () {<br />
return _tblgroup.getZIndex();<br />
}</span></p>
<p><span style="color:brown">exports.getOffset = function () {<br />
if (_tblgroup.parent &amp;&amp; _tblgroup.parent.getId() == "marquee") {<br />
return _tblgroup.parent.getOffset();<br />
}<br />
else {<br />
return _tblgroup.getOffset();<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.getScale = function () {<br />
return _tblgroup.getScale();<br />
}</span></p>
<p><span style="color:brown">/* Function to get width of the Table */<br />
exports.getWidth = function () {<br />
var row = _rows - 1;<br />
var width = 0 - (2 * DEFAULT_CELL_STROKE_WIDTH);</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; _tableIndex[row].length; i++) {<br />
width += _tableIndex[row][i].getWidth() + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH;<br />
}</span></p>
<p><span style="color:brown">_tblgroup.setWidth(width);</span></p>
<p><span style="color:brown">return width;<br />
}</span></p>
<p><span style="color:brown">/* Function to get height of the Table */<br />
exports.getHeight = function () {<br />
var col = _columns - 1<br />
var height = 0 - (2 * DEFAULT_CELL_STROKE_WIDTH);</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; _tableIndex.length; i++) {<br />
height += _tableIndex[i][col].getHeight() + DEFAULT_CELL_STROKE_WIDTH + DEFAULT_SPANNER_WIDTH;<br />
}</span></p>
<p><span style="color:brown">_tblgroup.setHeight(height);</span></p>
<p><span style="color:brown">return height;<br />
}</span></p>
<p><span style="color:brown">exports.getX = function () {<br />
if (_tblgroup.parent &amp;&amp; _tblgroup.parent.getId() == "marquee") {<br />
return _tblgroup.parent.getX();<br />
}<br />
else {<br />
return _tblgroup.getX();<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.getY = function () {<br />
if (_tblgroup.parent &amp;&amp; _tblgroup.parent.getId() == "marquee") {<br />
return _tblgroup.parent.getY();<br />
}<br />
else {<br />
return _tblgroup.getY();<br />
}<br />
}</span></p>
<p><span style="color:brown">// setters<br />
exports.setX = function (val) {<br />
_tblgroup.setX(val);<br />
}</span></p>
<p><span style="color:brown">exports.setY = function (val) {<br />
_tblgroup.setY(val);<br />
}</span></p>
<p><span style="color:brown">exports.moveTo = function (shp) {<br />
_tblgroup.moveTo(shp);<br />
}</span></p>
<p><span style="color:brown">exports.setDraggable = function (val) {<br />
_tblgroup.setDraggable(val);<br />
}</span></p>
<p><span style="color:brown">exports.setWidth = function (val, anchor) {</span></p>
<p><span style="color:brown">var diff = val - exports.getWidth();</span></p>
<p><span style="color:brown">if (anchor) {<br />
var anchorName = anchor.getName();</span></p>
<p><span style="color:brown">switch (anchorName) {</span></p>
<p><span style="color:brown">case "cpLeft":<br />
for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {</span></p>
<p><span style="color:brown">var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">if (col == 0) {<br />
var newWidth = cell.getWidth() + diff;</span></p>
<p><span style="color:brown">if (newWidth &gt; MIN_CELL_DIM) {<br />
cell.setWidth(newWidth);<br />
if (row == 0) resizeRowSpanners(diff, true);<br />
}<br />
else {<br />
_tblgroup.parent.move(diff, 0);<br />
diff = 0;<br />
}<br />
}<br />
else {<br />
var embShapes = _tblgroup.get("." + cell.getName());</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].move(diff, 0);<br />
}<br />
}</span></p>
<p><span style="color:brown">updateSplitters(cell);<br />
}<br />
}<br />
break;</span></p>
<p><span style="color:brown">case "cpRight":<br />
var col = _columns - 1;</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
var cell = _tableIndex[row][col];<br />
var newWidth = cell.getWidth() + diff;</span></p>
<p><span style="color:brown">if (newWidth &gt; MIN_CELL_DIM) {<br />
cell.setWidth(newWidth);<br />
if (row == 0) resizeRowSpanners(diff, false);<br />
}</span></p>
<p><span style="color:brown">updateSplitters(cell);<br />
}<br />
break;</span></p>
<p><span style="color:brown">case "cpTopRight":<br />
case "cpBottomRight":<br />
case "cpTopLeft":<br />
case "cpBottomLeft":<br />
var frac = diff / _columns;<br />
var action = false;</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {</span></p>
<p><span style="color:brown">var cell = _tableIndex[row][col];<br />
var newWidth = cell.getWidth() + frac;</span></p>
<p><span style="color:brown">if (newWidth &gt; MIN_CELL_DIM) {<br />
action = true;<br />
cell.setWidth(newWidth);</span></p>
<p><span style="color:brown">for (var cc = col + 1; cc &lt; _tableIndex[row].length; cc++) {<br />
var nCell = _tableIndex[row][cc];</span></p>
<p><span style="color:brown">var embShapes = _tblgroup.get("." + nCell.getName());</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].move(frac, 0);<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">updateSplitters(cell);<br />
}<br />
}</span></p>
<p><span style="color:brown">if (action) {<br />
createSpanners();<br />
}<br />
else {<br />
if (anchorName != "cpBottomRight" &amp;&amp; anchorName != "cpTopRight") {<br />
_tblgroup.parent.move(diff, 0);<br />
}<br />
}</span></p>
<p><span style="color:brown">break;</span></p>
<p><span style="color:brown">default:<br />
break;<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.setHeight = function (val, anchor) {</span></p>
<p><span style="color:brown">var diff = val - exports.getHeight();</span></p>
<p><span style="color:brown">if (anchor) {<br />
var anchorName = anchor.getName();</span></p>
<p><span style="color:brown">switch (anchorName) {</span></p>
<p><span style="color:brown">case "cpTop":</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {<br />
var cell = _tableIndex[row][col];</span></p>
<p><span style="color:brown">if (row == 0) {<br />
var newHeight = cell.getHeight() + diff;</span></p>
<p><span style="color:brown">if (newHeight &gt; MIN_CELL_DIM) {<br />
cell.setHeight(newHeight);<br />
if (col == 0) resizeColSpanners(diff, true);<br />
}<br />
else {<br />
_tblgroup.parent.move(0, diff);<br />
diff = 0;<br />
}<br />
}<br />
else {<br />
var embShapes = _tblgroup.get("." + cell.getName());</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].move(0, diff);<br />
}<br />
}</span></p>
<p><span style="color:brown">updateSplitters(cell);<br />
}<br />
}<br />
break;</span></p>
<p><span style="color:brown">case "cpBottom":<br />
var row = _rows - 1;</span></p>
<p><span style="color:brown">for (var col = 0; col &lt; _tableIndex[row].length; col++) {<br />
var cell = _tableIndex[row][col];<br />
var newHeight = cell.getHeight() + diff;</span></p>
<p><span style="color:brown">if (newHeight &gt; MIN_CELL_DIM) {<br />
cell.setHeight(newHeight);<br />
if (col == 0) resizeColSpanners(diff, false);<br />
}</span></p>
<p><span style="color:brown">updateSplitters(cell);<br />
}<br />
break;</span></p>
<p><span style="color:brown">case "cpBottomRight":<br />
case "cpBottomLeft":<br />
case "cpTopLeft":<br />
case "cpTopRight":<br />
var frac = diff / _rows;<br />
var action = false;</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {</span></p>
<p><span style="color:brown">var cell = _tableIndex[row][col];<br />
var newHeight = cell.getHeight() + frac;</span></p>
<p><span style="color:brown">if (newHeight &gt; MIN_CELL_DIM) {<br />
action = true;<br />
cell.setHeight(newHeight);</span></p>
<p><span style="color:brown">for (var rr = row + 1; rr &lt; _tableIndex.length; rr++) {<br />
var nCell = _tableIndex[rr][col];</span></p>
<p><span style="color:brown">var embShapes = _tblgroup.get("." + nCell.getName());</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; embShapes.length; i++) {<br />
embShapes[i].move(0, frac);<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">updateSplitters(cell);<br />
}<br />
}</span></p>
<p><span style="color:brown">if (action) {<br />
createSpanners();<br />
}<br />
else {<br />
if (anchorName != "cpBottomLeft" &amp;&amp; anchorName != "cpBottomRight") {<br />
_tblgroup.parent.move(0, diff);<br />
}<br />
}</span></p>
<p><span style="color:brown">break;</span></p>
<p><span style="color:brown">default:<br />
break;<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.deSelect = function () {<br />
exports.selectedCell.hide();<br />
_stage.draw();<br />
}</span></p>
<p><span style="color:brown">exports.select = function () {<br />
exports.selectedCell.show();<br />
_stage.draw();<br />
}</span></p>
<p><span style="color:brown">function randomString() {<br />
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";<br />
var string_length = 3;<br />
var randomstring = '';</span></p>
<p><span style="color:brown">for (var i = 0; i &lt; string_length; i++) {<br />
var rnum = Math.floor(Math.random() * chars.length);<br />
randomstring += chars.substring(rnum, rnum + 1);<br />
}</span></p>
<p><span style="color:brown">return randomstring;<br />
}</span></p>
<p><span style="color:brown">exports.checkTableIntersections = function(marquees, shape, core) {</span></p>
<p><span style="color:brown">if (core &amp;&amp; core.shapeType == "Table") {<br />
return;<br />
}</span></p>
<p><span style="color:brown">for (var key in marquees) {<br />
if (marquees.hasOwnProperty(key) &amp;&amp; marquees[key].shape().shapeType == "Table") {<br />
var tab = marquees[key].shape();</span></p>
<p>if (exports.areShapesOverlapping(shape, tab)) {<br />
tab.addShape(shape);<br />
}<br />
else {<br />
tab.removeShape(shape);<br />
}<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.areShapesOverlapping = function(shape1, shape2) {</span></p>
<p><span style="color:brown">var shape1Width = shape1.getWidth();<br />
var shape1Height = shape1.getHeight();<br />
var shape1X = shape1.getX() - shape1.getOffset().x;<br />
var shape1XW = shape1X + shape1Width;<br />
var shape1Y = shape1.getY() - shape1.getOffset().y;<br />
var shape1YH = shape1Y + shape1Height;</span></p>
<p><span style="color:brown">var shape2Width = shape2.getWidth();<br />
var shape2Height = shape2.getHeight();<br />
var shape2X = shape2.getX() - shape2.getOffset().x;<br />
var shape2XW = shape2X + shape2Width;<br />
var shape2Y = shape2.getY() - shape2.getOffset().y;<br />
var shape2YH = shape2Y + shape2Height;</span></p>
<p><span style="color:brown">// any part of shape on the table<br />
if (((shape1X &gt; shape2X &amp;&amp; shape1X &lt; shape2XW) || (shape2X &gt; shape1X &amp;&amp; shape2X &lt; shape1XW)) &amp;&amp;<br />
((shape1Y &gt; shape2Y &amp;&amp; shape1Y &lt; shape2YH) || (shape2Y &gt; shape1Y &amp;&amp; shape2Y &lt; shape1YH))) {<br />
return true;<br />
}<br />
else {<br />
return false;<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.shapeType = "Table";<br />
exports._id = randomString(3);<br />
exports.selectedCell = null;</span></p>
<p><span style="color:brown">_rows = totalRows;<br />
_columns = totalColumns;<br />
_stage = stage;</span></p>
<p><span style="color:brown">init();</span></p>
<p><span style="color:brown">exports.parent = _tblgroup;<br />
return exports;<br />
}</span></p>
<p><span style="color:brown">var SelectedCell = function (cell, tblIndex) {<br />
var exports = {};<br />
var _selectedCell = cell;<br />
var _tableIndex = tblIndex;</span></p>
<p><span style="color:brown">exports.getFill = function () {<br />
if (_selectedCell) {<br />
return _selectedCell.getFill();<br />
}</span></p>
<p><span style="color:brown">if (_tableIndex) {<br />
return _tableIndex[0][0].getFill();<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.getStroke = function () {<br />
if (_selectedCell) {<br />
return _selectedCell.getStroke();<br />
}</span></p>
<p><span style="color:brown">if (_tableIndex) {<br />
return _tableIndex[0][0].getStroke();<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.getStrokeWidth = function () {<br />
if (_selectedCell) {<br />
return _selectedCell.getStrokeWidth();<br />
}</span></p>
<p><span style="color:brown">if (_tableIndex) {<br />
return _tableIndex[0][0].getStrokeWidth();<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.setFill = function (val) {<br />
if (_selectedCell) {<br />
_selectedCell.setFill(val);<br />
return;<br />
}</span></p>
<p><span style="color:brown">if (_tableIndex) {<br />
for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {<br />
_tableIndex[row][col].setFill(val);<br />
}<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">/* Funtion to set stroke for selected table cell */<br />
exports.setStroke = function (val) {<br />
if (_selectedCell) {<br />
_selectedCell.setStroke(val);</span></p>
<p><span style="color:brown">if (_selectedCell.vSplitters) {<br />
for (var i = 0; i &lt; _selectedCell.vSplitters.length; i++) {<br />
_selectedCell.vSplitters[i].setStroke(val);<br />
}<br />
}</span></p>
<p><span style="color:brown">if (_selectedCell.hSplitters) {<br />
for (var i = 0; i &lt; _selectedCell.hSplitters.length; i++) {<br />
_selectedCell.hSplitters[i].setStroke(val);<br />
}<br />
}<br />
return;<br />
}</span></p>
<p><span style="color:brown">if (_tableIndex) {<br />
for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {<br />
var cell = _tableIndex[row][col];<br />
cell.setStroke(val);</span></p>
<p><span style="color:brown">if (cell.vSplitters) {<br />
for (var i = 0; i &lt; cell.vSplitters.length; i++) {<br />
cell.vSplitters[i].setStroke(val);<br />
}<br />
}</span></p>
<p><span style="color:brown">if (cell.hSplitters) {<br />
for (var i = 0; i &lt; cell.hSplitters.length; i++) {<br />
cell.hSplitters[i].setStroke(val);<br />
}<br />
}<br />
}<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.setStrokeWidth = function (val) {<br />
if (_selectedCell) {<br />
_selectedCell.setStrokeWidth(val);<br />
return;<br />
}</span></p>
<p><span style="color:brown">if (_tableIndex) {<br />
for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {<br />
_tableIndex[row][col].setStrokeWidth(val);<br />
}<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.sCell = function () {<br />
return _selectedCell;<br />
}</span></p>
<p><span style="color:brown">exports.show = function () {</span></p>
<p><span style="color:brown">if (_selectedCell) {</span></p>
<p><span style="color:brown">_selectedCell.setStrokeWidth(DEFAULT_CELL_STROKE_WIDTH * 4);<br />
_selectedCell.setStroke(_selectedCell.getStroke());<br />
}<br />
else {</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {<br />
cl = _tableIndex[row][col];<br />
cl.setStrokeWidth(DEFAULT_CELL_STROKE_WIDTH * 4);<br />
cl.setStroke(cl.getStroke());<br />
}<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">exports.hide = function () {</span></p>
<p><span style="color:brown">if (_selectedCell) {</span></p>
<p><span style="color:brown">_selectedCell.setStrokeWidth(DEFAULT_CELL_STROKE_WIDTH);<br />
_selectedCell.setStroke(_selectedCell.getStroke());<br />
}<br />
else {</span></p>
<p><span style="color:brown">for (var row = 0; row &lt; _tableIndex.length; row++) {<br />
for (var col = 0; col &lt; _tableIndex[row].length; col++) {<br />
cl = _tableIndex[row][col];<br />
cl.setStrokeWidth(DEFAULT_CELL_STROKE_WIDTH);<br />
cl.setStroke(cl.getStroke());<br />
}<br />
}<br />
}<br />
}</span></p>
<p><span style="color:brown">return exports;<br />
}</span></code></p>
<p>The post <a href="https://jharaphula.com/how-to-design-a-table-using-kineticjs-on-html5-canvas/">Design MS-Excel like Table using KineticJS on HTML5 Canvas?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jharaphula.com/how-to-design-a-table-using-kineticjs-on-html5-canvas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://jharaphula.com/wp-content/uploads/2016/05/simple-css-tables.jpg" medium="image" />
	</item>
		<item>
		<title>How to Draw Grid on KineticJS Stage?</title>
		<link>https://jharaphula.com/how-to-draw-grid-on-kineticjs-stage/</link>
					<comments>https://jharaphula.com/how-to-draw-grid-on-kineticjs-stage/#respond</comments>
		
		<dc:creator><![CDATA[Biswabhusan Panda]]></dc:creator>
		<pubDate>Fri, 13 May 2016 18:39:11 +0000</pubDate>
				<category><![CDATA[KineticJS Examples]]></category>
		<category><![CDATA[Example to draw Grid]]></category>
		<category><![CDATA[How to Draw Grid?]]></category>
		<category><![CDATA[KineticJS Stage]]></category>
		<guid isPermaLink="false">http://box.jharaphula.com/?p=748</guid>

					<description><![CDATA[<img width="300" height="188" src="https://jharaphula.com/wp-content/uploads/2016/05/grid-300x188.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="How to Draw Grid on KineticJS Stage?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" srcset="https://jharaphula.com/wp-content/uploads/2016/05/grid-300x188.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/grid.jpg 750w" sizes="(max-width: 300px) 100vw, 300px" /><p>Like a chess board sometime we need to Draw grids on the Stage of KineticJS. During I worked with a MNC for an Application &#8220;Policy...</p>
<p>The post <a href="https://jharaphula.com/how-to-draw-grid-on-kineticjs-stage/">How to Draw Grid on KineticJS Stage?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="300" height="188" src="https://jharaphula.com/wp-content/uploads/2016/05/grid-300x188.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="How to Draw Grid on KineticJS Stage?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/grid-300x188.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/grid.jpg 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>Like a chess board sometime we need to Draw grids on the Stage of KineticJS. During I worked with a MNC for an Application &#8220;Policy Designer&#8221; I faced the above situation. I have the KineticJS stage with width 800px &amp; height 600px. On over the stage I have a layer. To make stage visible I draw a rectangle with same width &amp; height as refer to the stage. Now as per our requirement I have to draw grids for stage. The intention is where I can drag various shapes to draw a policy flow.</p>
<p>The same example I am presenting in the below code. Here I declared a div with id container. Which is the container for KineticJS stage. pagerectangle is the rectangle which covers stage to display. To draw grids on the stage I called a function in the document.ready() method of jquery. In drawGrid() function I have 3 variables gridLineColor, gridLineCell &amp; gridStroke. Using these setting you can set the grid details. gridLineColor is for the color of line. gridLineCell defines the width &amp; height of individual grid cells. gridStroke is the width of grid lines. Here to draw a grid I created to KineticJS lines gridHorizontalLine &amp; gridVerticalLine. Points for these lines I calculated mathematically to draw the grid. To make my grid dotted line here I used dash : [ 10, 5 ] from the line params of KineticJS. Finally I am adding my both the lines configuration variables (gridHorizontalLine &amp; gridVerticalLine) to layer. Before draw the stage Adding the <a href="https://jharaphula.com/tcpip-model-layers-beginners/" rel="noopener noreferrer" target="_blank">layer</a> to stage.</p>
<p>To run the below example copy the codes to a notepad file. Save it as a html file. Stay Connected to internet &amp; run the file to watch the Demo.</p>
<h3>Example to draw grid on KineticJS Stage</h3>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Example to draw grid on KineticJS Stage?&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.4.3.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://code.jquery.com/jquery-1.10.2.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;container&quot;&gt;&lt;/div&gt;

&lt;script type=&quot;text/jscript&quot;&gt;
/* KineticJS Stage */
var stage = new Kinetic.Stage({
container : 'container',
width : 800,
height : 600,
draggable : false
});

/* The Primary Layer */
var layer = new Kinetic.Layer({
name : 'layer'
});

/* Rectangle over Stage to Show Visible Area */
var pagerectangle = new Kinetic.Rect({
x : 0,
y : 0,
width : 800,
height : 600,
fill : '#CEF6F5',
id : 'mainpage'
});

/* Adding base Rectangle to layer */
layer.add(pagerectangle);

/* Adding layer to Stage */
stage.add(layer);
stage.draw();

$(document).ready(function() {
/* Draw Grid Function */
drawGrid();
});

/* Function to Draw Grid on Stage */
var drawGrid = function() {

/* Configuration Settings for Grid Lines */
var gridLineColor = 'gray';
var gridLineCell = 50;
var gridStroke = 0.5;

/* Horizontal Line Draw */
var gridHorizontalLine = new Kinetic.Line({
id : 'hline',
points : [ 0, 0, 0, gridLineCell, pagerectangle.getWidth(),
gridLineCell, pagerectangle.getWidth(), 2 * gridLineCell, 0,
2 * gridLineCell, 0, 3 * gridLineCell, 0, 3 * gridLineCell,
pagerectangle.getWidth(), 3 * gridLineCell,
pagerectangle.getWidth(), 4 * gridLineCell,
pagerectangle.getWidth(), 4 * gridLineCell, 0,
4 * gridLineCell, 0, 5 * gridLineCell, 0, 5 * gridLineCell,
pagerectangle.getWidth(), 5 * gridLineCell,
pagerectangle.getWidth(), 6 * gridLineCell,
pagerectangle.getWidth(), 6 * gridLineCell, 0,
6 * gridLineCell, 0, 7 * gridLineCell, 0, 7 * gridLineCell,
pagerectangle.getWidth(), 7 * gridLineCell,
pagerectangle.getWidth(), 8 * gridLineCell,
pagerectangle.getWidth(), 8 * gridLineCell, 0,
8 * gridLineCell, 0, 9 * gridLineCell, 0, 9 * gridLineCell,
pagerectangle.getWidth(), 9 * gridLineCell,
pagerectangle.getWidth(), 10 * gridLineCell,
pagerectangle.getWidth(), 10 * gridLineCell, 0,
10 * gridLineCell, 0, 11 * gridLineCell, 0, 11 * gridLineCell,
pagerectangle.getWidth(), 11 * gridLineCell,
pagerectangle.getWidth(), 12 * gridLineCell,
pagerectangle.getWidth(), 12 * gridLineCell, 0,
12 * gridLineCell, 0, 13 * gridLineCell, 0, 13 * gridLineCell,
pagerectangle.getWidth(), 13 * gridLineCell,
pagerectangle.getWidth(), 14 * gridLineCell,
pagerectangle.getWidth(), 14 * gridLineCell, 0,
14 * gridLineCell, 0, 15 * gridLineCell, 0, 15 * gridLineCell,
pagerectangle.getWidth(), 15 * gridLineCell,
pagerectangle.getWidth(), 16 * gridLineCell,
pagerectangle.getWidth(), 16 * gridLineCell, 0,
16 * gridLineCell, 0
],
stroke : gridLineColor,
strokeWidth : gridStroke,
lineJoin : 'round',
dash : [ 15, 5 ]
});

layer.add(gridHorizontalLine);

/* Vertical Line Draw */
var gridVerticalLine = new Kinetic.Line({
id : 'vline',
points : [ 0, 0, gridLineCell, 0, gridLineCell,
pagerectangle.getHeight(), 2 * gridLineCell,
pagerectangle.getHeight(), 2 * gridLineCell, 0,
3 * gridLineCell, 0, 3 * gridLineCell,
pagerectangle.getHeight(), 4 * gridLineCell,
pagerectangle.getHeight(), 4 * gridLineCell, 0,
5 * gridLineCell, 0, 5 * gridLineCell,
pagerectangle.getHeight(), 6 * gridLineCell,
pagerectangle.getHeight(), 6 * gridLineCell, 0,
7 * gridLineCell, 0, 7 * gridLineCell,
pagerectangle.getHeight(), 8 * gridLineCell,
pagerectangle.getHeight(), 8 * gridLineCell, 0,
9 * gridLineCell, 0, 9 * gridLineCell,
pagerectangle.getHeight(), 10 * gridLineCell,
pagerectangle.getHeight(), 10 * gridLineCell, 0,
11 * gridLineCell, 0, 11 * gridLineCell,
pagerectangle.getHeight(), 12 * gridLineCell,
pagerectangle.getHeight(), 12 * gridLineCell, 0,
13 * gridLineCell, 0, 13 * gridLineCell,
pagerectangle.getHeight(), 14 * gridLineCell,
pagerectangle.getHeight(), 14 * gridLineCell, 0,
15 * gridLineCell, 0, 15 * gridLineCell,
pagerectangle.getHeight(), 16 * gridLineCell,
pagerectangle.getHeight(), 16 * gridLineCell, 0
],
stroke : gridLineColor,
strokeWidth : gridStroke,
lineJoin : 'round',
dash : [ 10, 5 ]
});

layer.add(gridVerticalLine);
stage.add(layer);
stage.draw();
};

&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>The post <a href="https://jharaphula.com/how-to-draw-grid-on-kineticjs-stage/">How to Draw Grid on KineticJS Stage?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jharaphula.com/how-to-draw-grid-on-kineticjs-stage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://jharaphula.com/wp-content/uploads/2016/05/grid.jpg" medium="image" />
	</item>
		<item>
		<title>How Connected Line will move with the Shape using KineticJS?</title>
		<link>https://jharaphula.com/how-connected-line-will-move-with-the-shape-using-kineticjs/</link>
					<comments>https://jharaphula.com/how-connected-line-will-move-with-the-shape-using-kineticjs/#respond</comments>
		
		<dc:creator><![CDATA[Biswabhusan Panda]]></dc:creator>
		<pubDate>Fri, 13 May 2016 18:18:58 +0000</pubDate>
				<category><![CDATA[KineticJS Examples]]></category>
		<category><![CDATA[Graphics in HTML5]]></category>
		<category><![CDATA[How Connected Lines?]]></category>
		<category><![CDATA[Internet Connectivity]]></category>
		<category><![CDATA[Shape using KineticJS]]></category>
		<guid isPermaLink="false">http://box.jharaphula.com/?p=734</guid>

					<description><![CDATA[<img width="300" height="189" src="https://jharaphula.com/wp-content/uploads/2016/05/circle-shapes-300x189.png" class="webfeedsFeaturedVisual wp-post-image" alt="How Connected Line will move with the Shape using KineticJS?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/circle-shapes-300x189.png 300w, https://jharaphula.com/wp-content/uploads/2016/05/circle-shapes.png 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>KineticJS is a third party library to draw high end graphics in HTML5. Using KineticJS we can draw several shapes like Ellipse, Rectangle, Line or...</p>
<p>The post <a href="https://jharaphula.com/how-connected-line-will-move-with-the-shape-using-kineticjs/">How Connected Line will move with the Shape using KineticJS?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="300" height="189" src="https://jharaphula.com/wp-content/uploads/2016/05/circle-shapes-300x189.png" class="webfeedsFeaturedVisual wp-post-image" alt="How Connected Line will move with the Shape using KineticJS?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/circle-shapes-300x189.png 300w, https://jharaphula.com/wp-content/uploads/2016/05/circle-shapes.png 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>KineticJS is a third party library to draw high end graphics in HTML5. Using KineticJS we can draw several shapes like Ellipse, Rectangle, Line or Oval. Lets discuss about a situation where I have 2 shapes on over my HTML5 Canvas. A rectangle &amp; a Line. What I need is when I drag the rectangle the connected line need to move with the rectangle. Look at the example below. Here I have a rectangle &amp; a line over KineticJS stage. On rectangle movement I am moving the line with rectangle. To achieve this I called a function moveLine() in dragmove event of rectangle.</p>
<p>In moveLine function I am passing the shape (Rectangle) as a parameter. x2 &amp; y2 are the center points of the shape rectangle. Using getPosition() method from KineticJS I am retrieving the drag positions of rectangle. By adding shape.getWidth()/2 &amp; shape.getHeight()/2 I am getting the center position of the shape rectangle. To find out the total area of the shape I declared 4 variables startPointX, startPointY, endPointX, endPointY. startPointX &amp; startPointY I am getting from getPosition() method. To get the end points endPointX &amp; endPointY of shape I am adding width &amp; height (100px) to x &amp; y points. Now inside a for loop I am checking all the elements of the stage. If the element id match to line I am comparing the startPointX, startPointY, endPointX &amp; endPointY to know whether the line connected to shape or not. If the line is connected to shape here I am getting x1 &amp; y1. x2 &amp; y2 is available before after getting x1 &amp; y1 I am updating the shape x2 &amp; y2 points using setPoints() method.</p>
<p>To run the below sample application Copy the code to a Notepad file. Save it as a HTML file. Here I am using CDN link to refer KineticJS library. Before run the above HTML file make sure you are with <a href="https://jharaphula.com/when-internet-invented-internet-history/" rel="noopener noreferrer" target="_blank">Internet Connectivity</a>.</p>
<pre class="brush: jscript; title: ; notranslate">&lt;code&gt;&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;How connected line will move with the Shape in KineticJS?&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.4.3.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;conCanvas&quot;&gt;&lt;/div&gt;

&lt;script type=&quot;text/jscript&quot;&gt;
/*Stage for Drawing*/
var stage = new Kinetic.Stage({
container: 'conCanvas',
width: 600,
height: 500,
draggable: false
});

/*Creating Layer for Stage*/
var layer = new Kinetic.Layer();

/*Configuration for Line*/
var line = new Kinetic.Line({
id: 'line',
points: [50, 200, 250, 200],
stroke: 'red',
strokeWidth: 3,
lineCap: 'round',
lineJoin: 'round',
draggable: true
});

/*Adding line Configuration to Layer*/
layer.add(line);

/*Configuration for Rectangle*/
var rectangle = new Kinetic.Rect({
id: 'rectangle',
x: 200,
y: 150,
width: 100,
height: 100,
fill: 'lightblue',
stroke: 'black',
strokeWidth: 2,
draggable: true
});

/*Drag move event for Rectangle*/
rectangle.on('dragmove', function() {
moveLine(rectangle);
});

/*Adding Rectangle to Layer*/
layer.add(rectangle);

stage.add(layer);
stage.draw();

var x1, y1, x2, y2, lineCn, startPointX, startPointY, endPointX, endPointY;

function moveLine(shape) {

x2 = shape.getPosition().x + shape.getWidth()/2;
y2 = shape.getPosition().y + shape.getHeight()/2;

/*Getting Position Points for the Shape*/
startPointX = shape.getPosition().x;
startPointY = shape.getPosition().y;
endPointX = shape.getPosition().x + 100;
endPointY = shape.getPosition().y + 100;

for (var cn=0; cn&lt;stage.children[0].children.length; cn++) {

if (stage.children[0].children[cn].getId().match('line')) {
lineCn = stage.children[0].children[cn];

if (((startPointX &lt; lineCn.getPoints()[0].x &amp;&amp; lineCn.getPoints()[0].x &lt; endPointX) &amp;&amp; (startPointY &lt; lineCn.getPoints()[0].y &amp;&amp; lineCn.getPoints()[0].y &lt; endPointY))) {
x1 = lineCn.getPoints()[1].x;
y1 = lineCn.getPoints()[1].y;
}

if (((startPointX &lt; lineCn.getPoints()[1].x &amp;&amp; lineCn.getPoints()[1].x &lt; endPointX) &amp;&amp; (startPointY &lt; lineCn.getPoints()[1].y &amp;&amp; lineCn.getPoints()[1].y &lt; endPointY))) {
x1 = lineCn.getPoints()[0].x;
y1 = lineCn.getPoints()[0].y;
}
}
}

lineCn.setPoints([x1, y1, x2, y2]);

stage.draw();

}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>The post <a href="https://jharaphula.com/how-connected-line-will-move-with-the-shape-using-kineticjs/">How Connected Line will move with the Shape using KineticJS?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jharaphula.com/how-connected-line-will-move-with-the-shape-using-kineticjs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://jharaphula.com/wp-content/uploads/2016/05/circle-shapes.png" medium="image" />
	</item>
		<item>
		<title>How to Draw Arrow Head Line using KineticJS?</title>
		<link>https://jharaphula.com/how-to-draw-arrow-head-line-using-kineticjs/</link>
					<comments>https://jharaphula.com/how-to-draw-arrow-head-line-using-kineticjs/#respond</comments>
		
		<dc:creator><![CDATA[Biswabhusan Panda]]></dc:creator>
		<pubDate>Fri, 13 May 2016 18:16:46 +0000</pubDate>
				<category><![CDATA[KineticJS Examples]]></category>
		<category><![CDATA[Draw Arrow Head Line]]></category>
		<category><![CDATA[How to Draw?]]></category>
		<category><![CDATA[KineticJS]]></category>
		<category><![CDATA[Line using KineticJS]]></category>
		<guid isPermaLink="false">http://box.jharaphula.com/?p=732</guid>

					<description><![CDATA[<img width="300" height="173" src="https://jharaphula.com/wp-content/uploads/2016/05/flowbreeze-screenshot-300x173.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="How to Draw Arrow Head Line using KineticJS?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/flowbreeze-screenshot-300x173.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/flowbreeze-screenshot.jpg 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>KineticJS is a JavaScript Library which allow us to render high performance graphics over a HTML5 Canvas. Let us talk about an Application where we...</p>
<p>The post <a href="https://jharaphula.com/how-to-draw-arrow-head-line-using-kineticjs/">How to Draw Arrow Head Line using KineticJS?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="300" height="173" src="https://jharaphula.com/wp-content/uploads/2016/05/flowbreeze-screenshot-300x173.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="How to Draw Arrow Head Line using KineticJS?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/flowbreeze-screenshot-300x173.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/flowbreeze-screenshot.jpg 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>KineticJS is a JavaScript Library which allow us to render high performance graphics over a <a href="https://jharaphula.com/html5-canvas-examples/" target="_blank" rel="noopener noreferrer">HTML5 Canvas</a>. Let us talk about an Application where we need to draw flowcharts &amp; Lines. From one node to another node while drawing a line I want to show arrow head for the line. To make arrow head line dynamic it required few mathematical calculation. Look at the example below. Here I created line with arrow head.</p>
<p>In the sample application I have two points for the line. Which is declared as x1, y1 &amp; x2, y2. lineArrowConfig holds configuration setting for arrow head line. To draw finally adding the line configuration to layer &amp; using draw method rendering the stage.</p>
<p>To run the below application copy the codes into a notepad file &amp; save it as a html file. Before run the html file make sure you are with Internet Connectivity. Because here I used CDN link to refer KineticJS library.</p>
<h3>Demo App to Draw arrow Head Line</h3>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Example to draw line with Arrow head using KineticJS&lt;/title&gt;
&lt;script src=&quot;http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v5.0.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;style type=&quot;text/css&quot;&gt;
.kineticjs-content { background-color: lightblue; }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;container&quot;&gt;&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;

/* Declaration of Stage */
var stage = new Kinetic.Stage({
container: 'container',
width: 540,
height: 280,
draggable: false
});

/* Declartion of Layer */
var layer = new Kinetic.Layer({
name: 'layer'
});

/*Points for Line Draw*/
var x1 = 100;
var y1 = 100;
var x2 = 200;
var y2 = 200;

var headlen = 10;
var angle = Math.atan2(y2-y1,x2-x1);

/*Configuration settings for Line*/
var lineArrowConfig = new Kinetic.Line({
id: 'SingleArrowLine',
points: [ x1, y1,
x2,
y2,
x2-headlen*Math.cos(angle-Math.PI/6),
y2-headlen*Math.sin(angle-Math.PI/6),
x2,
y2,
x2-headlen*Math.cos(angle+Math.PI/6),
y2-headlen*Math.sin(angle+Math.PI/6)
],
shapeType: &quot;line&quot;,
stroke: 'red',
strokeWidth: 2,
lineCap: 'round',
lineJoin: 'round',
draggable: false
});

/*Adding line Configure to Layer*/
layer.add(lineArrowConfig);

stage.add(layer);
stage.draw();

&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>The post <a href="https://jharaphula.com/how-to-draw-arrow-head-line-using-kineticjs/">How to Draw Arrow Head Line using KineticJS?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jharaphula.com/how-to-draw-arrow-head-line-using-kineticjs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://jharaphula.com/wp-content/uploads/2016/05/flowbreeze-screenshot.jpg" medium="image" />
	</item>
		<item>
		<title>How to Apply Marquee on KineticJS Shapes?</title>
		<link>https://jharaphula.com/how-to-apply-marquee-on-kineticjs-shapes/</link>
					<comments>https://jharaphula.com/how-to-apply-marquee-on-kineticjs-shapes/#respond</comments>
		
		<dc:creator><![CDATA[Nibedita Panda]]></dc:creator>
		<pubDate>Fri, 13 May 2016 13:19:33 +0000</pubDate>
				<category><![CDATA[KineticJS Examples]]></category>
		<category><![CDATA[Apply Marquee on Shapes]]></category>
		<category><![CDATA[KineticJS Shapes]]></category>
		<category><![CDATA[Marquee on KineticJS]]></category>
		<guid isPermaLink="false">http://box.jharaphula.com/?p=564</guid>

					<description><![CDATA[<img width="300" height="186" src="https://jharaphula.com/wp-content/uploads/2016/05/html-css-table-300x186.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="How to Apply Marquee on KineticJS Shapes?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/html-css-table-300x186.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/html-css-table.jpg 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>KineticJS is a JavaScript library to interact with HTML5 Canvas. Using KineticJS with less line of codes you can do high performance based animations, layering,...</p>
<p>The post <a href="https://jharaphula.com/how-to-apply-marquee-on-kineticjs-shapes/">How to Apply Marquee on KineticJS Shapes?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="300" height="186" src="https://jharaphula.com/wp-content/uploads/2016/05/html-css-table-300x186.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="How to Apply Marquee on KineticJS Shapes?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/html-css-table-300x186.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/html-css-table.jpg 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p style="margin-bottom: 20px">KineticJS is a JavaScript library to interact with HTML5 Canvas. Using KineticJS with less line of codes you can do high performance based animations, layering, drag n drop, filtering etc. KineticJS supports desktop &amp; high end mobile devices. Shapes like <strong>Rectangle, Circle, Ellipse, Line &amp; Polygon you can easily draw using KineticJS</strong>. After draw the shape to re-size or to rotate the shapes you need marquee.</p>
<p>Marquee is an identity to selected shapes. In this session let us share the marquee class to apply on any shape using KineticJS. Here marquee.js is the class file where all the related functions are added to select a shape. Copy the index.html &amp; marquee.js file to a folder. Open the index file. In this example marquee.js is a JavaScript class. You can refer this in your program. Create an instance of marquee class &amp; using show method apply marquee on the shapes. Using hide method you can remove marquee from the applied shapes.</p>
<p style="margin-bottom: 20px"><strong>Index.html</strong></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;!</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">DOCTYPE </span></span></span><span style="color: #ff0000"><span style="font-size: small"><span lang="zxx">HTML</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">html</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">head</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">title</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">How to apply marquee on KineticJS Shapes?</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;/</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">title</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">script </span></span></span><span style="color: #ff0000"><span style="font-size: small"><span lang="zxx">src</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">=&#8221;http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.4.3.min.js&#8221; </span></span></span><span style="color: #ff0000"><span style="font-size: small"><span lang="zxx">type</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">=&#8221;text/javascript&#8221;&gt;&lt;/</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">script</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">script </span></span></span><span style="color: #ff0000"><span style="font-size: small"><span lang="zxx">src</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">=&#8221;http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js&#8221;&gt;&lt;/</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">script</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">script </span></span></span><span style="color: #ff0000"><span style="font-size: small"><span lang="zxx">src</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">=&#8221;marquee.js&#8221; </span></span></span><span style="color: #ff0000"><span style="font-size: small"><span lang="zxx">type</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">=&#8221;text/javascript&#8221;&gt;&lt;/</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">script</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;/</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">head</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">body</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">div </span></span></span><span style="color: #ff0000"><span style="font-size: small"><span lang="zxx">id</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">=&#8221;stagetodraw&#8221;&gt;&lt;/</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">div</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">script </span></span></span><span style="color: #ff0000"><span style="font-size: small"><span lang="zxx">type</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">=&#8221;text/javascript&#8221;&gt;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Drawing Stage */</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> stage = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Stage({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">container: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8216;stagetodraw&#8217;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">width: 640,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">height: 380,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Drawing Rectangle over Stage */</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> bgRectangle = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Rect({</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: 0,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: 0,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">width: stage.getWidth(),</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">height: stage.getHeight(),</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">fill: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8216;#E5E4E2&#8217;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">bgRectangle.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8216;click&#8217;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">() {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">mar.hide();</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Creating a Layer */</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> layer = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Layer();</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Adding base Rectangle to Layer */</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">layer.add(bgRectangle);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> mar = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">null</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Rectangle for Marquee */</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> marqueeRectangle = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Rect({</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: 100,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: 100,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">width: 400,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">height: 150,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">fill: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8216;lightblue&#8217;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}); </span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">marqueeRectangle.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8216;click&#8217;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">() {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Creating instance for marquee class */</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">mar = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Marquee(marqueeRectangle);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Using show method showing marquee for rectangle */</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">mar.show();</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Adding shape to Layer */</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">layer.add(marqueeRectangle);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Adding Layer to Stage */</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stage.add(layer);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;/</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">script</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;/</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">body</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 20px"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&lt;/</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">html</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">&gt;</span></span></span></p>
<p style="margin-bottom: 20px"><strong>Marquee.js</strong></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Marquee = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (shape) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Declaration of marquee settings */</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> RESIZE_RECT_FILL_COLOR = </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;green&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> RESIZE_CIRCLE_FILL_COLOR = </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;blue&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> RESIZE_LINE_STROKE_COLOR = </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;darkgray&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> RESIZE_LINE_SHORT_WIDTH = 20;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> RESIZE_RECT_WIDTH_FACTOR = 2;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> RESIZE_CIRCLE_WIDTH_FACTOR = 1;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> STROKE_WIDTH = 5;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> ROT_DEG = 10;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Declaring the points for marquee */</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> CP_ACTION = {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">NONE: 0,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">CP_LEFT: 1,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">CP_TOP: 2,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">CP_RIGHT: 3,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">CP_BOTTOM: 4,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">CP_TOP_LEFT: 5,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">CP_TOP_RIGHT: 6,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">CP_BOTTOM_LEFT: 7,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">CP_BOTTOM_RIGHT: 8,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">CP_ROTATE: 9</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">};</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> exports = {};</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> _shape = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">null</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> _group = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">null</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> _layer = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">null</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> _stage = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">null</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> _bSelected = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> _cpAction = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">null</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> _marX = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">null</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> _marY = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">null</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> _marWidth = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">null</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> _marHeight = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">null</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> init() {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> stroke = STROKE_WIDTH;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">getMarDimensions(stroke);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Group({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marqueeGroup&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">x: _marX, </span></span></span><span style="color: #008000"><span style="font-size: small"><span lang="zxx">//0,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">y: _marY, </span></span></span><span style="color: #008000"><span style="font-size: small"><span lang="zxx">//0,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">width: _marWidth,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">height: _marHeight,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// move shape to this group</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setX(0);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setY(0);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.moveTo(_group);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// resizing border lines</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">createBorderLines(stroke / 2, 0, 0, _marHeight, _marWidth, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// control points</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">createControlPoints(stroke, 0, 0, _marHeight, _marWidth, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_layer.add(_group);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_stage.draw();</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Show method to display marquee */</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">exports.show = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_bSelected = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">for</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (i = 0; i &lt; _group.children.length; i++) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.children[i].show();</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_shape.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_stage.draw();</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">};</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Hide method to hide marquee */</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">exports.hide = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_bSelected = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">for</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (i = 0; i &lt; _group.children.length; i++) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (_group.children[i]._id != _shape._id) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.children[i].hide();</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_shape.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_stage.draw();</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">};</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">exports.refresh = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (prevX, prevY) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> stroke = STROKE_WIDTH;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">getMarDimensions(stroke);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">createBorderLines(stroke, 0, 0, _marHeight, _marWidth, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">createControlPoints(stroke, 0, 0, _marHeight, _marWidth, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_stage.draw();</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> getMarDimensions(stroke) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> offset = _shape.getOffset();</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> scale = _shape.getScale();</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">switch</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (_shape.shapeType) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">case</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;Rect&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_marWidth = _shape.getWidth() * scale.x;</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_marHeight = _shape.getHeight() * scale.y;</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_marX = (_shape.getX());</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_marY = (_shape.getY());</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">default</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_marWidth = 100;</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_marHeight = 100;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">/* Function to draw border line for a shape */</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> createBorderLines(stroke, x, y, height, width, refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> borderLines = _group.</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">get</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;.borderLines&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)[0];</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">borderLines.setPoints([x + (width / 2), y &#8211; RESIZE_LINE_SHORT_WIDTH,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x + (width / 2), y,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x + width, y,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x + width, y + height,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x, y + height,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x, y,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x + (width / 2), y]);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> borderLines = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Line({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;borderLines&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">points: [x + (width / 2), y &#8211; RESIZE_LINE_SHORT_WIDTH,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x + (width / 2), y,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x + width, y,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x + width, y + height,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x, y + height,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x, y,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x + (width / 2), y],</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">dashArray: [STROKE_WIDTH, STROKE_WIDTH, STROKE_WIDTH, STROKE_WIDTH],</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stroke: RESIZE_LINE_STROKE_COLOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">strokeWidth: stroke,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">lineCap: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8217;round&#8217;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">lineJoin: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8217;round&#8217;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">dragOnTop: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">borderLines.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseenter&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;move&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">borderLines.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseleave&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;default&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.add(borderLines);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> handleResizeRotate(anchor) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (anchor) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> prevX = _marX;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> prevY = _marY;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> currX = _marX + anchor.getX();</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> currY = _marY + anchor.getY();</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> scale = _shape.getScale();</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> offset = _shape.getOffset();</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> width = _shape.getWidth();</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> height = _shape.getHeight();</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> aspectRatio = width / height;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">switch</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (anchor.getName()) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">case</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpRotate&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> haf = prevX + ((width * scale.x) / 2);</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> isRight = currX &gt; haf ? </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> : </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">//center origin so rotation happens around center of group</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (!_group.hasAdjustedForRotation) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.setOffset(_group.getWidth() / 2, _group.getHeight() / 2);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.move(_group.getScale().x * (_group.getWidth() / 2), _group.getScale().y * (_group.getHeight() / 2));</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.hasAdjustedForRotation = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (isRight) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.rotateDeg(1);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.rotateDeg(-1);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">exports.refresh();</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">case</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpTop&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currY += (anchor.getHeight() / 2);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffY = (currY &#8211; prevY) / scale.y;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setHeight(parseFloat(height &#8211; diffY), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.setY(_group.getY() + (diffY * scale.y));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">exports.refresh();</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">case</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpLeft&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currX += (anchor.getWidth() / 2);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffX = (currX &#8211; prevX) / scale.x;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setWidth(parseFloat(width &#8211; diffX), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.setX(_group.getX() + (diffX * scale.x));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">exports.refresh();</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">case</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpTopLeft&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currY += (anchor.getHeight() / 2);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currX += (anchor.getWidth() / 2);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffX = (currX &#8211; prevX) / scale.x;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffY = (currY &#8211; prevY) / scale.y;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setWidth(parseFloat(width &#8211; diffX), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setHeight(parseFloat(height &#8211; diffY), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.setX(_group.getX() + (diffX * scale.x));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.setY(_group.getY() + (diffY * scale.y));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">exports.refresh();</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">case</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpBottomLeft&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currY -= (anchor.getHeight() / 2);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currX += (anchor.getWidth() / 2);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffX = (currX &#8211; prevX) / scale.x;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffY = (currY &#8211; prevY) / scale.y;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setWidth(parseFloat(width &#8211; diffX), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setHeight(parseFloat(height + parseFloat(diffY &#8211; height)), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.setX(_group.getX() + (diffX * scale.x));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">exports.refresh();</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">case</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpRight&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currX += (anchor.getWidth() / 2);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffX = (currX &#8211; prevX) / scale.x;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setWidth(parseFloat(width + parseFloat((diffX &#8211; width))), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">exports.refresh();</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">case</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpTopRight&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currY += (anchor.getHeight() / 2);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currX -= (anchor.getWidth() / 2);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffX = (currX &#8211; prevX) / scale.x;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffY = (currY &#8211; prevY) / scale.y;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setWidth(parseFloat(width + parseFloat(diffX &#8211; width)), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setHeight(height &#8211; diffY, anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.setY(_group.getY() + (diffY * scale.y));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">exports.refresh();</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">case</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpBottomRight&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currY += (anchor.getHeight() / 2);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currX += (anchor.getWidth() / 2);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffX = (currX &#8211; prevX) / scale.x;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffY = (currY &#8211; prevY) / scale.y;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setWidth(parseFloat(width + parseFloat(diffX &#8211; width)), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setHeight(parseFloat(height + parseFloat(diffY &#8211; height)), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.setWidth(parseFloat(width + parseFloat(diffX &#8211; width)));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.setHeight(parseFloat(height + parseFloat(diffY &#8211; height)));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">exports.refresh();</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">case</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpBottom&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">currY += (anchor.getHeight() / 2);</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> diffY = (currY &#8211; prevY) / scale.y;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape.setHeight(parseFloat(height + parseFloat(diffY &#8211; height)), anchor);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">exports.refresh();</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">default</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">:</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">break</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> createControlPoints(stroke, x, y, height, width, refresh) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// rotate control point</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpRotate = _group.</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">get</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;.cpRotate&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)[0];</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpRotate.setX(x + (width / 2));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpRotate.setY(y &#8211; RESIZE_LINE_SHORT_WIDTH);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpRotate = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Circle({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpRotate&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: x + (width / 2),</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: y &#8211; RESIZE_LINE_SHORT_WIDTH,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">radius: stroke * RESIZE_CIRCLE_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stroke: RESIZE_CIRCLE_FILL_COLOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">fill: RESIZE_CIRCLE_FILL_COLOR,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">dragOnTop: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpRotate.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseenter&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;wait&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpRotate.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseleave&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;default&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpRotate.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mousedown&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.CP_ROTATE;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpRotate.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseup dragend&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.NONE;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpRotate.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;dragmove&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">handleResizeRotate(cpRotate);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.add(cpRotate);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// resizing left control point</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpLeft = _group.</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">get</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;.cpLeft&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)[0];</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpLeft.setX(x &#8211; stroke);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpLeft.setY(y &#8211; stroke + (height / 2));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpLeft = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Rect({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpLeft&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: x &#8211; stroke,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: y &#8211; stroke + (height / 2),</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">width: stroke * RESIZE_RECT_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">height: stroke * RESIZE_RECT_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stroke: RESIZE_RECT_FILL_COLOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">fill: RESIZE_RECT_FILL_COLOR,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">dragOnTop: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseenter&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;e-resize&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseleave&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;default&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mousedown&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.CP_LEFT;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseup dragend&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.NONE;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;dragmove&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">handleResizeRotate(cpLeft);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.add(cpLeft);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// resizing right control point</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpRight = _group.</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">get</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;.cpRight&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)[0];</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpRight.setX(x &#8211; stroke + width);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpRight.setY(y &#8211; stroke + (height / 2));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpRight = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Rect({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpRight&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: x &#8211; stroke + width,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: y &#8211; stroke + (height / 2),</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">width: stroke * RESIZE_RECT_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">height: stroke * RESIZE_RECT_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stroke: RESIZE_RECT_FILL_COLOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">fill: RESIZE_RECT_FILL_COLOR,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">dragOnTop: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseenter&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;e-resize&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseleave&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;default&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mousedown&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.CP_RIGHT;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseup dragnend&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.NONE;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;dragmove&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">handleResizeRotate(cpRight);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.add(cpRight);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (_shape.shapeType == </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;Line&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">return</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">;</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// resizing top control point</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpTop = _group.</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">get</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;.cpTop&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)[0];</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpTop.setX(x &#8211; stroke + (width / 2));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpTop.setY(y &#8211; stroke);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpTop = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Rect({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpTop&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: x &#8211; stroke + (width / 2),</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: y &#8211; stroke,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">width: stroke * RESIZE_RECT_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">height: stroke * RESIZE_RECT_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stroke: RESIZE_RECT_FILL_COLOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">fill: RESIZE_RECT_FILL_COLOR,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">dragOnTop: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTop.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseenter&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;s-resize&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTop.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseleave&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;default&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTop.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mousedown&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.CP_TOP;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTop.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseup dragnend&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.NONE;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTop.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;dragmove&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">handleResizeRotate(cpTop);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.add(cpTop);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// resizing bottom control point</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpBottom = _group.</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">get</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;.cpBottom&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)[0];</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpBottom.setX(x &#8211; stroke + (width / 2));</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpBottom.setY(y &#8211; stroke + height);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpBottom = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Rect({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpBottom&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: x &#8211; stroke + (width / 2),</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: y &#8211; stroke + height,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">width: stroke * RESIZE_RECT_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">height: stroke * RESIZE_RECT_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stroke: RESIZE_RECT_FILL_COLOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">fill: RESIZE_RECT_FILL_COLOR,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">dragOnTop: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottom.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseenter&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;s-resize&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottom.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseleave&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;default&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottom.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mousedown&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.CP_BOTTOM;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottom.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseup dragnend&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.NONE;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottom.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;dragmove&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">handleResizeRotate(cpBottom);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.add(cpBottom);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// resizing top-left control point</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpTopLeft = _group.</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">get</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;.cpTopLeft&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)[0];</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpTopLeft.setX(x);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpTopLeft.setY(y);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpTopLeft = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Circle({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpTopLeft&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: x,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: y,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">radius: stroke * RESIZE_CIRCLE_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stroke: RESIZE_CIRCLE_FILL_COLOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">fill: RESIZE_CIRCLE_FILL_COLOR,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">dragOnTop: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTopLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseenter&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;se-resize&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTopLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseleave&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;default&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTopLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mousedown&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.CP_TOP_LEFT;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTopLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseup dragnend&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.NONE;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTopLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;dragmove&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">handleResizeRotate(cpTopLeft);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.add(cpTopLeft);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// resizing top-right control point</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpTopRight = _group.</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">get</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;.cpTopRight&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)[0];</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpTopRight.setX(x + width);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpTopRight.setY(y);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpTopRight = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Circle({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpTopRight&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: x + width,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: y,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">radius: stroke * RESIZE_CIRCLE_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stroke: RESIZE_CIRCLE_FILL_COLOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">fill: RESIZE_CIRCLE_FILL_COLOR,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">dragOnTop: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTopRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseenter&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;ne-resize&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTopRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseleave&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;default&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTopRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mousedown&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.CP_TOP_RIGHT;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTopRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseup dragnend&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.NONE;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpTopRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;dragmove&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">handleResizeRotate(cpTopRight);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.add(cpTopRight);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// resizing bottom-left control point</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpBottomLeft = _group.</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">get</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;.cpBottomLeft&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)[0];</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpBottomLeft.setX(x);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpBottomLeft.setY(y + height);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpBottomLeft = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Circle({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpBottomLeft&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: x,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: y + height,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">radius: stroke * RESIZE_CIRCLE_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stroke: RESIZE_CIRCLE_FILL_COLOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">fill: RESIZE_CIRCLE_FILL_COLOR,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">dragOnTop: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottomLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseenter&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;sw-resize&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottomLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseleave&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;default&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottomLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mousedown&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.CP_BOTTOM_LEFT;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottomLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseup dragnend&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.NONE;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottomLeft.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;dragmove&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">handleResizeRotate(cpBottomLeft);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.add(cpBottomLeft);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #008000"><span style="font-size: small">// resizing bottom-right control point</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">if</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (refresh) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpBottomRight = _group.</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">get</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;.cpBottomRight&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">)[0];</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpBottomRight.setX(x + width);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">cpBottomRight.setY(y + height);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">else</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">var</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> cpBottomRight = </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">new</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> Kinetic.Circle({</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">id: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;marquee&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">name: </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cpBottomRight&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">x: x + width,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">y: y + height,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">radius: stroke * RESIZE_CIRCLE_WIDTH_FACTOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">stroke: RESIZE_CIRCLE_FILL_COLOR,</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">fill: RESIZE_CIRCLE_FILL_COLOR,</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">draggable: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">,</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">dragOnTop: </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottomRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseenter&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;se-resize&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottomRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseleave&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">$(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;body&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">).css(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;cursor&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;default&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottomRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mousedown&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.CP_BOTTOM_RIGHT;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">false</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottomRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;mouseup dragnend&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> () {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_cpAction = CP_ACTION.NONE;</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">_group.setDraggable(</span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">true</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">);</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">cpBottomRight.on(</span></span></span><span style="color: #800000"><span style="font-size: small"><span lang="zxx">&#8220;dragmove&#8221;</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx">, </span></span></span><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">function</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> (evt) {</span></span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">handleResizeRotate(cpBottomRight);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">});</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_group.add(cpBottomRight);</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">}</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_shape = shape;</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_layer = shape.getLayer();</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">_stage = shape.getStage();</span></span></p>
<p lang="zxx" style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small">init();</span></span></p>
<p style="margin-bottom: 0in"><span style="color: #0000ff"><span style="font-size: small"><span lang="zxx">return</span></span></span><span style="color: #000000"><span style="font-size: small"><span lang="zxx"> exports;</span></span></span></p>
<p style="margin-bottom: 0in"><span style="color: #000000"><span style="font-size: small"><span lang="zxx">};</span></span></span></p>
<p>The post <a href="https://jharaphula.com/how-to-apply-marquee-on-kineticjs-shapes/">How to Apply Marquee on KineticJS Shapes?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jharaphula.com/how-to-apply-marquee-on-kineticjs-shapes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://jharaphula.com/wp-content/uploads/2016/05/html-css-table.jpg" medium="image" />
	</item>
		<item>
		<title>How to Draw Line using Mouse in KineticJS?</title>
		<link>https://jharaphula.com/how-to-draw-line-using-mouse-in-kineticjs/</link>
					<comments>https://jharaphula.com/how-to-draw-line-using-mouse-in-kineticjs/#respond</comments>
		
		<dc:creator><![CDATA[Nibedita Panda]]></dc:creator>
		<pubDate>Fri, 13 May 2016 13:17:27 +0000</pubDate>
				<category><![CDATA[KineticJS Examples]]></category>
		<category><![CDATA[Draw line using Mouse]]></category>
		<category><![CDATA[KineticJS]]></category>
		<category><![CDATA[using Mouse in KineticJS]]></category>
		<guid isPermaLink="false">http://box.jharaphula.com/?p=562</guid>

					<description><![CDATA[<img width="300" height="206" src="https://jharaphula.com/wp-content/uploads/2016/05/microsoft-wireless-mobile-mouse-300x206.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="How to Draw Line using Mouse in KineticJS?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/microsoft-wireless-mobile-mouse-300x206.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/microsoft-wireless-mobile-mouse.jpg 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>To operate in mouse is more user friendly then keyboard. KineticJS is very helpful to create flowchart applications. While designing a flowchart application we need...</p>
<p>The post <a href="https://jharaphula.com/how-to-draw-line-using-mouse-in-kineticjs/">How to Draw Line using Mouse in KineticJS?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="300" height="206" src="https://jharaphula.com/wp-content/uploads/2016/05/microsoft-wireless-mobile-mouse-300x206.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="How to Draw Line using Mouse in KineticJS?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/microsoft-wireless-mobile-mouse-300x206.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/microsoft-wireless-mobile-mouse.jpg 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>To operate in mouse is more user friendly then keyboard. KineticJS is very helpful to create flowchart applications. While designing a flowchart application we need to draw line by dragging mouse pointer. In the below sample code I declared a stage where there are two layers. One is temporary &amp; other one is real-time. Div with the id container is the place for Canvas. To draw line with mouse pointer here I added three mouse events. Mousedown, Mousemove &amp; Mouseup. Using <strong>getMousePosition()</strong> function I am retrieving the x &amp; y coordinate of the Canvas.</p>
<p>To run the below example copy this codes to a Notepad file. Save it as a html file. Run this. The library file I referred here is a CDN link. To execute the html file you created above make sure you are with <a href="https://jharaphula.com/when-internet-invented-internet-history/" rel="noopener noreferrer" target="_blank">Internet</a> Connectivity.</p>
<h3>Demo App to Draw line using Mouse</h3>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;How to draw line using mouse in KineticJS?&lt;/title&gt;
&lt;script src=&quot;http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v5.0.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;style type=&quot;text/css&quot;&gt;
.kineticjs-content { background-color: lightblue; }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;container&quot;&gt;&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
/* Declaration of Stage */
var stage = new Kinetic.Stage({
container: 'container',
width: 640,
height: 280,
draggable: false
});
/* Declartion of Layer */
var layer = new Kinetic.Layer({
name: 'layer'
});
var tmpLayer;
beginPoint = undefined;
mousedown = function(evt) {
beginPoint = getMousePosition();
begin = true;
stage.add(tmpLayer);
};
mousemove = function(evt) {
if (!begin) {
return;
}
var tempPoint = getMousePosition();
if (tempPoint !== undefined &amp;&amp; beginPoint !== undefined) {
var tmpLine = new Kinetic.Line({
points : [beginPoint.x, beginPoint.y, tempPoint.x,
tempPoint.y ],
stroke : '#C00000',
strokeWidth : 5
});
tmpLayer.removeChildren();
tmpLayer.add(tmpLine);
tmpLayer.draw();
}
};
mouseup = function(evt) {
if (begin) {
var tempPoint = getMousePosition();
if (tempPoint !== undefined &amp;&amp; beginPoint !== undefined) {
var tmpLine = new Kinetic.Line({
points : [beginPoint.x, beginPoint.y, tempPoint.x,
tempPoint.y ],
stroke : '#C00000',
strokeWidth : 5
});
layer.add(tmpLine);
layer.draw();
}
begin = false;
}
};
/*Function to get Mouse Position*/
var getMousePosition = function() {
var pointerpos = stage.getPointerPosition();
if (pointerpos === undefined)
return undefined;
var pos = stage.getPosition();
var offset = stage.getOffset();
var scale = stage.getScale();
return {
x : ((pointerpos.x / scale.x) - (pos.x / scale.x) + offset.x),
y : ((pointerpos.y / scale.y) - (pos.y / scale.y) + offset.y)
};
};
$(document).ready(function(){
/* Creating temporary layer */
tmpLayer = new Kinetic.Layer({
name : 'tmpLayer'
});
stage.add(layer);
/* Adding Events to Canvas */
$('#container .kineticjs-content').on('mousedown', mousedown);
$('#container .kineticjs-content').on('mousemove', mousemove);
$('#container .kineticjs-content').on('mouseup', mouseup);
});
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>The post <a href="https://jharaphula.com/how-to-draw-line-using-mouse-in-kineticjs/">How to Draw Line using Mouse in KineticJS?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jharaphula.com/how-to-draw-line-using-mouse-in-kineticjs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://jharaphula.com/wp-content/uploads/2016/05/microsoft-wireless-mobile-mouse.jpg" medium="image" />
	</item>
		<item>
		<title>How to Draw Graphical Shapes using KineticJS?</title>
		<link>https://jharaphula.com/how-to-draw-shapes-using-kineticjs/</link>
					<comments>https://jharaphula.com/how-to-draw-shapes-using-kineticjs/#respond</comments>
		
		<dc:creator><![CDATA[Nibedita Panda]]></dc:creator>
		<pubDate>Fri, 13 May 2016 13:02:53 +0000</pubDate>
				<category><![CDATA[KineticJS Examples]]></category>
		<category><![CDATA[JavaScript Framework]]></category>
		<category><![CDATA[KineticJS]]></category>
		<category><![CDATA[Shapes like Rectangle]]></category>
		<guid isPermaLink="false">http://box.jharaphula.com/?p=555</guid>

					<description><![CDATA[<img width="300" height="190" src="https://jharaphula.com/wp-content/uploads/2016/05/graphical-shapes-300x190.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="How to Draw Graphical Shapes using KineticJS?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/graphical-shapes-300x190.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/graphical-shapes.jpg 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>KineticJS is a JavaScript library. It is light weight &#38; provides better graphics. Let&#8217;s assume you want to develop an Interactive design document app. Here...</p>
<p>The post <a href="https://jharaphula.com/how-to-draw-shapes-using-kineticjs/">How to Draw Graphical Shapes using KineticJS?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img width="300" height="190" src="https://jharaphula.com/wp-content/uploads/2016/05/graphical-shapes-300x190.jpg" class="webfeedsFeaturedVisual wp-post-image" alt="How to Draw Graphical Shapes using KineticJS?" style="display: block; margin-bottom: 10px; clear: both; max-width: 100%;" decoding="async" loading="lazy" srcset="https://jharaphula.com/wp-content/uploads/2016/05/graphical-shapes-300x190.jpg 300w, https://jharaphula.com/wp-content/uploads/2016/05/graphical-shapes.jpg 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /><p>KineticJS is a JavaScript library. It is light weight &amp; provides better graphics. Let&#8217;s assume you want to develop an Interactive design document app. Here what you want is you need 3 panels left, right &amp; center. Left panel is the toolbar. From where you can drag any shape to the center area. Where center area is a <a href="https://jharaphula.com/drawimage-on-html5-canvas/" target="_blank" rel="noopener noreferrer">HTML5 Canvas</a>. Here depending upon the requirements you can resize the shape, you can drag it to any corner of your central area, you can layer the shape or you can rotate the shape. While you selected a shape on canvas in right pan you can saw the property for that particular shape. If you will update the properties value it will reflect on the shape. In this case KineticJS is programmer friendly. Using kineticJS we can create shapes like Rectangle, Circle, Polygon, line &amp; Ellipse.</p>
<h3>Example to Draw shapes using KineticJS</h3>
<p>To draw a shape using KineticJS in below program first I created a stage. On stage creating layer. Using configuration setting I am creating various shapes &amp; adding this to layer. Finally adding layer to stage. To draw using stage.draw  method.</p>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;title&gt;Example to Draw Shapes using KineticJS&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.4.3.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;canvasarea&quot;&gt;&lt;/div&gt;

&lt;script type=&quot;text/jscript&quot;&gt;
// Prepeare your stage first before draw a shape.
var stage = new Kinetic.Stage({
container: 'canvasarea',
width: 600,
height: 500,
draggable: false
});

// After stage you need a layer to draw shapes on this.
var layer = new Kinetic.Layer();

// How to draw a rectanlge using KineticJS?
var configRectangle = new Kinetic.Rect({
x: 339,
y: 60,
width: 200,
height: 80,
fill: 'lightblue',
stroke: 'black',
strokeWidth: 5,
draggable: true
});

// Add rectangle configuration settings to layer
layer.add(configRectangle);

// How to draw a circle using KineticJS?
var configCircle = new Kinetic.Circle({
x: 150,
y: 280,
radius: 70,
fill: 'lightblue',
stroke: 'black',
strokeWidth: 5,
draggable: true
});

// Add circle configuration settings to layer
layer.add(configCircle);

// How to draw a polygon using KineticJS?
var configPolygon = new Kinetic.Polygon({
points: [400, 392, 430, 320, 500, 280, 470, 209, 339, 239, 400, 392],
fill: 'lightblue',
stroke: 'black',
strokeWidth: 5,
draggable: true
});

// Add polygon configuration settings to layer
layer.add(configPolygon);

// How to draw a line using KineticJS?
var configLine = new Kinetic.Line({
points: [70, 450, 250, 450],
stroke: 'lightblue',
strokeWidth: 7,
lineCap: 'round',
lineJoin: 'round',
draggable: true
});

// Add line configuration settings to layer
layer.add(configLine);

// How to draw a ellipse using KineticJS?
var configEllipse = new Kinetic.Ellipse({
x: 150,
y: 100,
radius: {
x: 100,
y: 50
},
fill: 'lightblue',
stroke: 'black',
strokeWidth: 5,
draggable: true
});

// Add ellipse configuration settings to layer
layer.add(configEllipse);

// To present Add the layer to the stage
stage.add(layer);
stage.draw();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>The post <a href="https://jharaphula.com/how-to-draw-shapes-using-kineticjs/">How to Draw Graphical Shapes using KineticJS?</a> appeared first on <a href="https://jharaphula.com">OneStop Shop</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jharaphula.com/how-to-draw-shapes-using-kineticjs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			<media:content url="https://jharaphula.com/wp-content/uploads/2016/05/graphical-shapes.jpg" medium="image" />
	</item>
	</channel>
</rss>
