+ TAIL_CONTROLER = ( function(){\r
+ var startA;\r
+ return {\r
+ onStart: function( _mouseX, _mouseY){\r
+ if( TAIL_MOVER.hitTest( _mouseX -x, _mouseY -y) === true){\r
+ startA = currentElement.angle();\r
+ return true;\r
+ }\r
+ return false;\r
+ },\r
+ onDrag: function( _mouseX, _mouseY){\r
+ TAIL_MOVER.onDrag( _mouseX -x -w /2, _mouseY -y -h /2); //Balloonの中心を0,0とする座標系に変換\r
+ },\r
+ onFinish: function(){\r
+ if( startA === currentElement.angle()) return;\r
+ // resize( x, y, w, h, currentElement.angle());\r
+ saveComicElementStatus( x, y, w, h, startA);\r
+ },\r
+ onCancel: function(){\r
+ resize( undefined, undefined, undefined, undefined, startA);\r
+ }\r
+ }\r
+ })(),\r
+ RESIZE_CONTROLER = ( function(){\r
+ var RESIZE_COMMAND_ARRAY = [\r
+ { x: 0, w: 0, y: 1, h: -1}, //top\r
+ { x: 1, w: -1, y: 0, h: 0}, //left\r
+ { x: 0, w: 1, y: 0, h: 0}, //right\r
+ { x: 0, w: 0, y: 0, h: 1}, //bottom\r
+ { x: 1, w: -1, y: 1, h: -1}, //top-left\r
+ { x: 0, w: 1, y: 1, h: -1}, //top-right\r
+ { x: 1, w: -1, y: 0, h: 1}, //bottom-left\r
+ { x: 0, w: 1, y: 0, h: 1} //bottom-right\r
+ ],\r
+ currentResizerIndex = -1,\r
+ startX, startY, startW, startH, startFilpV, startFilpH, startAspect,\r
+ baseX, baseY, baseW, baseH,\r
+ currentX, currentY, currentW, currentH,\r
+ transX, transY, transW, transH,\r
+ xOffset, yOffset;\r
+ \r
+ function update( _x, _y, _w, _h){\r
+ _x = _x !== undefined ? _x : currentX;\r
+ _y = _y !== undefined ? _y : currentY;\r
+ _w = _w !== undefined ? _w : currentW;\r
+ _h = _h !== undefined ? _h : currentH;\r
+ \r
+ if( currentIsTextElement === false && currentResizerIndex > 3 && h2c.key.shiftEnabled() === true){\r
+ if( startAspect >= 1){\r
+ var __w = _w;\r
+ _w = Math.floor( startAspect * _h);\r
+ _x += currentResizerIndex % 2 === 0 ? __w -_w : 0;\r
+ } else {\r
+ var __h = _h;\r
+ _h = Math.floor( _w / startAspect);\r
+ _y += currentResizerIndex <= 5 ? __h -_h : 0;\r
+ }\r
+ }\r
+ transX = _x;\r
+ transY = _y;\r
+ transW = _w;\r
+ transH = _h;\r
+ RESIZER.update( _x, _y, _w, _h);\r
+ currentElement.resize( _x, _y, _w, _h);\r
+ currentIsTextElement === true && TAIL_MOVER.update( _w, _h);\r
+ COMIC_ELEMENT_CONSOLE.show( currentElement, _w, _h);\r
+ updateInfomation( _x, _y, undefined, undefined, _w, _h);\r
+ }\r
+ \r
+ return {\r
+ onStart: function( _mouseX, _mouseY){\r
+ if( currentElement.keepSize === true) return false;\r
+ currentResizerIndex = RESIZER.index( _mouseX, _mouseY);\r
+ if( currentResizerIndex === -1) return false;\r
+ xOffset = _mouseX;\r
+ yOffset = _mouseY;\r
+ startX = baseX = x;\r
+ startY = baseY = y;\r
+ startW = baseW = w;\r
+ startH = baseH = h;\r
+ startFilpV = flipV;\r
+ startFilpH = flipH;\r
+ startAspect = startW /startH;\r
+ return true;\r
+ },\r
+ onDrag: function( _mouseX, _mouseY){\r
+ var com = RESIZE_COMMAND_ARRAY[ currentResizerIndex],\r
+ moveX = _mouseX -xOffset,\r
+ moveY = _mouseY -yOffset,\r
+ _x = baseX +moveX *com.x,\r
+ _y = baseY +moveY *com.y,\r
+ _w = baseW +moveX *com.w,\r
+ _h = baseH +moveY *com.h,\r
+ _updated = moveX !== 0 || moveY !== 0;\r
+\r
+ if( _w >= MIN_OBJECT_SIZE && _h >= MIN_OBJECT_SIZE){\r
+ \r
+ } else \r
+ if( _w >= -MIN_OBJECT_SIZE && _h >= -MIN_OBJECT_SIZE){\r
+ return;\r
+ } else \r
+ if( currentIsTextElement === true){\r
+ \r
+ } else \r
+ if( _w < -MIN_OBJECT_SIZE || _h < -MIN_OBJECT_SIZE){\r
+ if( _w < -MIN_OBJECT_SIZE && _h > MIN_OBJECT_SIZE){\r
+ // flipH\r
+ var __x = _x;\r
+ baseX = _x = _x +_w;\r
+ baseY = _y;\r
+ baseW = _w = __x -_x;\r
+ baseH = _h;\r
+ currentElement.flip( false, true);\r
+ currentResizerIndex = RESIZER.flip( false, true);\r
+ flipV = currentElement.flipV();\r
+ } else \r
+ if( _w > MIN_OBJECT_SIZE && _h < -MIN_OBJECT_SIZE){\r
+ // flipV\r
+ var __y = _y;\r
+ baseX = _x;\r
+ baseY = _y = _y +_h;\r
+ baseW = _w;\r
+ baseH = _h = __y -_y;\r
+ currentElement.flip( true, false);\r
+ currentResizerIndex = RESIZER.flip( true, false);\r
+ flipH = currentElement.flipH();\r
+ } else {\r
+ // flipVH\r
+ var __x = _x,\r
+ __y = _y;\r
+ baseX = _x = _x +_w;\r
+ baseY = _y = _y +_h;\r
+ baseW = _w = __x -_x;\r
+ baseH = _h = __y -_y;\r
+ currentElement.flip( true, true);\r
+ currentResizerIndex = RESIZER.flip( true, true);\r
+ flipV = currentElement.flipV();\r
+ flipH = currentElement.flipH();\r
+ }\r
+ _updated = true;\r
+ xOffset = _mouseX;\r
+ yOffset = _mouseY; \r
+ }\r
+ currentX = _x;\r
+ currentY = _y;\r
+ currentW = _w;\r
+ currentH = _h;\r
+ _updated === true && update( _x, _y, _w, _h);\r
+ },\r
+ onFinish: function(){\r
+ MOUSE_CURSOR( '');\r
+ if( currentW === w && currentH === h && currentX === x && currentY === y) return;\r
+ resize( transX, transY, transW, transH);\r
+ currentElement.resize( transX, transY, transW, transH);\r
+ saveComicElementStatus( startX, startY, startW, startH, angle, startFilpV, startFilpH);\r
+ },\r
+ onCancel: function(){\r
+ MOUSE_CURSOR( '');\r
+ resize( startX, startY, startW, startH);\r
+ currentElement.type === COMIC_ELEMENT_TYPE_IMAGE ?\r
+ currentElement.animate( startX, startY, startW, startH, startFilpV, startFilpH) :\r
+ currentElement.animate( startX, startY, startW, startH, angle);\r
+ },\r
+ onShiftUpdate: update,\r
+ onCtrlUpdate: update\r
+ }\r
+ })(),\r
+ POSITION_CONTROLER = ( function(){\r
+ var startX, startY,\r
+ currentX, currentY,\r
+ xOffset, yOffset,\r
+ isCopy = false;\r
+ \r
+ function update( _x, _y){\r
+ _x = currentX = _x !== undefined ? _x : currentX;\r
+ _y = currentY = _y !== undefined ? _y : currentY;\r
+ RESIZER.update( _x, _y);\r
+ currentElement.resize( _x, _y);\r
+ updateInfomation( _x, _y); \r
+ }\r
+ \r
+ return {\r
+ onStart: function( _mouseX, _mouseY){\r
+ xOffset = _mouseX;\r
+ yOffset = _mouseY;\r
+ startX = currentX = x;\r
+ startY = currentY = y;\r
+ MOUSE_CURSOR( 'move');\r
+ },\r
+ onDrag: function( _mouseX, _mouseY){\r
+ var moveX = _mouseX -xOffset,\r
+ moveY = _mouseY -yOffset,\r
+ _x = x +moveX,\r
+ _y = y +moveY;\r
+ if( GRID_ENABLED() === true){\r
+ _x = Math.floor( _x / 10) * 10;\r
+ _y = Math.floor( _y / 10) * 10;\r
+ }\r
+ update( _x, _y);\r
+ },\r
+ onFinish: function(){\r
+ MOUSE_CURSOR( '');\r
+ if( currentX === startX && currentY === startY) return;\r
+ resize( currentX, currentY);\r
+ currentElement.resize( currentX, currentY);\r
+ saveComicElementStatus( startX, startY);\r
+ },\r
+ onCancel: function(){\r
+ MOUSE_CURSOR( '');\r
+ resize( startX, startY);\r
+ currentElement.animate( startX, startY);\r
+ },\r
+ onShiftUpdate: update,\r
+ onCtrlUpdate: update\r
+ }\r
+ })(),\r