Index: /as3/gunyarapaint/branches/gunyarapaint/compat/src/gunyarapaint.as =================================================================== --- /as3/gunyarapaint/branches/gunyarapaint/compat/src/gunyarapaint.as (リビジョン 3473) +++ /as3/gunyarapaint/branches/gunyarapaint/compat/src/gunyarapaint.as (リビジョン 3481) @@ -152,5 +152,5 @@ m_recorder.prepare(width, height, undoBufferSize); m_module = DrawModuleFactory.create(DrawModuleFactory.FREE_HAND, m_recorder); - //_logger = GPLogger.createForDraw(width, height, undoBufferSize, null, null); + gpCanvasWindow.delegate = penDetailWindow.delegate = this; relocateComponents(); } @@ -297,15 +297,15 @@ private function additionalNumberStepperHandler(evt:NumericStepperEvent):void { - //_logger.eventSetAdditionalNumber(evt.value); + gpCanvasWindow.auxBitmap.length = evt.value; } private function additionalBoxCheckBoxHandler(evt:Event):void { - //_logger.eventSetAdditionalBox(evt.target.selected); + gpCanvasWindow.auxBitmap.boxVisible = evt.target.selected; } private function additionalSkewCheckBoxHandler(evt:Event):void { - //_logger.eventSetAdditionalSkew(evt.target.selected); + gpCanvasWindow.auxBitmap.skewVisible = evt.target.selected; } @@ -336,5 +336,6 @@ undoButton.label = 'アンドゥ (' + undoCount + ')'; undoButton.enabled = true; - } else { + } + else { undoButton.label = 'アンドゥ'; undoButton.enabled = false; @@ -343,5 +344,6 @@ redoButton.label = 'リドゥ (' + redoCount + ')'; redoButton.enabled = true; - } else { + } + else { redoButton.label = 'リドゥ'; redoButton.enabled = false; Index: /as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/controls/GPLayerWindowControlScript.as =================================================================== --- /as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/controls/GPLayerWindowControlScript.as (リビジョン 3473) +++ /as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/controls/GPLayerWindowControlScript.as (リビジョン 3481) @@ -37,5 +37,5 @@ blendModeComboBox.dataProvider = value.supportedBlendModes; enabled = true; - changeLayer(); + change(); var painter:Painter = value.recorder.painter; var layers:LayerBitmapCollection = painter.layers; Index: /as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/controls/GPCanvas.as =================================================================== --- /as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/controls/GPCanvas.as (リビジョン 3470) +++ /as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/controls/GPCanvas.as (リビジョン 3481) @@ -1,7 +1,4 @@ package org.libspark.gunyarapaint.controls { - import flash.display.Bitmap; - import flash.display.BitmapData; - import flash.display.Shape; import flash.display.Sprite; import flash.events.MouseEvent; @@ -9,169 +6,57 @@ import mx.core.UIComponent; - import mx.managers.CursorManager; - import org.libspark.gunyarapaint.entities.GPLogger; + import org.libspark.gunyarapaint.controls.IDelegate; + import org.libspark.gunyarapaint.framework.AuxBitmap; + import org.libspark.gunyarapaint.framework.TransparentBitmap; - public class GPCanvas extends UIComponent + internal class GPCanvas extends UIComponent { - private var baseBitmap:Bitmap; // ベース画像(しましま) (0) - // _logger.layerArray.view レイヤ統合画像 (1) - private var additionalBox:Shape; // 縦横補助線 (2) - private var additionalSkew:Shape; // 斜め補助線 (3) - private var additionalNumber:uint = 4; // 補助線の分割数 + private var m_aux:AuxBitmap; + private var m_delegate:IDelegate; - private var _logger:GPLogger; // 描画コマンド履歴 - - public function GPCanvas(logger:GPLogger) + public function GPCanvas(delegate:IDelegate) { - _logger = logger; - var width:uint = logger.canvasWidth; - var height:uint = logger.canvasHeight; + var rect:Rectangle = new Rectangle(0, 0, delegate.recorder.width, delegate.recorder.height); + var transparent:TransparentBitmap = new TransparentBitmap(rect); + m_aux = new AuxBitmap(rect); + m_delegate = delegate; - // 透明時に表示されるbitmap - baseBitmap = new Bitmap(); - baseBitmap.bitmapData = new BitmapData(width, height, false); - for (var i:uint = 0; i < width; i++) { - for (var j:uint = 0; j < height; j++) { - baseBitmap.bitmapData.setPixel(i, j, ((i ^ j) & 1) ? 0x999999 : 0xffffff); - } - } - addChildAt(baseBitmap, 0); + addChild(transparent); + addChild(delegate.recorder.painter.view); + addChild(m_aux); - // レイヤ画像群 - addChildAt(_logger.layerArray.view, 1); - - // 補助線用shape - additionalBox = new Shape(); - additionalSkew = new Shape(); - changeAdditional(); - additionalBox.visible = false; - additionalSkew.visible = false; - addChildAt(additionalBox, 2); - addChildAt(additionalSkew, 3); - - this.mouseEnabled = true; - this.mouseChildren = false; - - this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); - this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove); - this.addEventListener(MouseEvent.MOUSE_UP, mouseUp); - this.addEventListener(MouseEvent.MOUSE_OUT, mouseOut); + addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); + addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); + addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); super(); } - // 20090906-haku2 upd start px単位指定対応、オブジェクト数削減 - private function changeAdditional():void { - var maxWidth:Number = _logger.canvasWidth; - var maxHeight:Number = _logger.canvasHeight; - var addWidth:Number = maxWidth / additionalNumber; - var addHeight:Number = maxHeight / additionalNumber; - additionalBox.graphics.clear(); - additionalSkew.graphics.clear(); - additionalBox.graphics.lineStyle(0, _logger.additionalColor, _logger.additionalAlpha); - additionalSkew.graphics.lineStyle(0, _logger.additionalColor, _logger.additionalAlpha); - additionalBox.graphics.drawRect(0, 0, maxWidth, maxHeight); - // 補助線種類判定 - if(_logger.additionalType == 0) { - // 分割 - for (var i:uint = 0; i < additionalNumber; i++) { - if(i > 0){ - additionalBox.graphics.moveTo(i * addWidth, 0); - additionalBox.graphics.lineTo(i * addWidth, maxHeight); - additionalBox.graphics.moveTo(0, i * addHeight); - additionalBox.graphics.lineTo(maxWidth, i * addHeight); - additionalSkew.graphics.moveTo(i * addWidth, 0); - additionalSkew.graphics.lineTo(0, i * addHeight); - additionalSkew.graphics.moveTo(maxWidth - (i * addWidth), 0); - additionalSkew.graphics.lineTo(maxWidth, i * addHeight); - } - additionalSkew.graphics.moveTo(maxWidth - ((i + 1) * addWidth), maxHeight); - additionalSkew.graphics.lineTo(maxWidth, maxHeight - ((i + 1) * addHeight)); - additionalSkew.graphics.moveTo((i + 1) * addWidth, maxHeight); - additionalSkew.graphics.lineTo(0, maxHeight - ((i + 1) * addHeight)); - } - } else { - // px単位 - for (var i2:uint = additionalNumber; i2 < maxWidth; i2 += additionalNumber) { - additionalBox.graphics.moveTo(i2, 0); - additionalBox.graphics.lineTo(i2, maxHeight); - } - for (var j2:uint = additionalNumber; j2 < maxHeight; j2 += additionalNumber) { - additionalBox.graphics.moveTo(0, j2); - additionalBox.graphics.lineTo(maxWidth, j2); - } - var max:uint = (maxWidth > maxHeight) ? maxWidth : maxHeight; - max += additionalNumber - (max % additionalNumber); - for (var k2:uint = additionalNumber; k2 <= max; k2 += additionalNumber) { - additionalSkew.graphics.moveTo(k2 - additionalNumber, 0); - additionalSkew.graphics.lineTo(0, k2 - additionalNumber); - additionalSkew.graphics.moveTo(max - (k2 - additionalNumber), 0); - additionalSkew.graphics.lineTo(max, k2 - additionalNumber); - additionalSkew.graphics.moveTo(max, max - k2); - additionalSkew.graphics.lineTo(max - k2, max); - additionalSkew.graphics.moveTo(0, max - k2); - additionalSkew.graphics.lineTo(k2, max); - } - var clip:Rectangle = new Rectangle(0, 0, maxWidth, maxHeight); - additionalSkew.scrollRect = clip; - } - } - // 20090906-haku2 upd end - - // 描画関係のフラグ - public var isMoveTo:Boolean = false; - public var isDrawnLine:Boolean = false; - - private function isInCanvas(evt:MouseEvent):Boolean { - return (evt.localX >= 0 && evt.localY >= 0 && - evt.localX < _logger.canvasWidth && evt.localY < _logger.canvasHeight); + public function get auxBitmap():AuxBitmap + { + return m_aux; } - private var isCursorChanged:Boolean = false; // マウスカーソルが変更されているかどうか。多重変更防止 - public function setCursor(icon:Class):void { - if (icon && !isCursorChanged) { - CursorManager.setCursor(icon); - isCursorChanged = true; - } else { - CursorManager.removeCursor(CursorManager.currentCursorID); - isCursorChanged = false; - } + private function mouseDownHandler(evt:MouseEvent):void + { + m_delegate.module.start(evt.localX, evt.localY); + m_delegate.recorder.painter.view.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } - public function setAdditionalNumber(num:uint):void { - additionalNumber = num; - changeAdditional(); + private function mouseMoveHandler(evt:MouseEvent):void + { + m_delegate.module.move(evt.localX, evt.localY); } - public function setAdditionalBox(visible:Boolean):void { - additionalBox.visible = visible; + + private function mouseUpHandler(evt:MouseEvent):void + { + m_delegate.recorder.painter.view.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler); + m_delegate.module.stop(evt.localX, evt.localY); } - public function setAdditionalSkew(visible:Boolean):void { - additionalSkew.visible = visible; - } - // 20090906-haku2 ins start - public function refreshAdditional():void { - changeAdditional(); - } - // 20090906-haku2 ins end - /** new functions **/ - public function mouseDown(evt:MouseEvent):void { - if (isInCanvas(evt)) { - _logger.mouseDown(evt); - } - } - public function mouseMove(evt:MouseEvent):void { - if (isInCanvas(evt)) { - _logger.mouseMove(evt); - } - } - public function mouseUp(evt:MouseEvent):void { - if (isInCanvas(evt)) { - _logger.mouseUp(evt); - } - } - public function mouseOut(evt:MouseEvent):void { - _logger.mouseOut(evt); + private function mouseOutHandler(evt:MouseEvent):void + { + m_delegate.module.interrupt(evt.localX, evt.localY); } } Index: /as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/controls/GPCanvasWindowControl.as =================================================================== --- /as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/controls/GPCanvasWindowControl.as (リビジョン 3473) +++ /as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/controls/GPCanvasWindowControl.as (リビジョン 3481) @@ -1,4 +1,5 @@ package org.libspark.gunyarapaint.controls { + import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Matrix; @@ -11,10 +12,13 @@ import mx.controls.scrollClasses.ScrollBar; import mx.core.Container; + import mx.core.UIComponent; import mx.events.MoveEvent; import mx.events.ResizeEvent; import mx.events.ScrollEvent; + import org.libspark.gunyarapaint.controls.GPCanvas; + import org.libspark.gunyarapaint.framework.AuxBitmap; import org.libspark.gunyarapaint.framework.Pen; - import org.libspark.gunyarapaint.controls.IDelegate; + import org.libspark.gunyarapaint.framework.TransparentBitmap; import org.libspark.gunyarapaint.utils.ComponentResizer; @@ -31,4 +35,5 @@ private var scrollDragStartPoint:Point; + private var m_canvas:GPCanvas; private var m_delegate:IDelegate; @@ -38,16 +43,10 @@ backgroundColor = 0x000000; - - // setStyle('backgroundAlpha', 0); - horizontalScrollPolicy = 'off'; - verticalScrollPolicy = 'off'; - + horizontalScrollPolicy = "off"; + verticalScrollPolicy = "off"; addEventListener(ResizeEvent.RESIZE, resizeHandler); - addEventListener(MoveEvent.MOVE, moveHandler); - ComponentResizer.addResize(this, new Point(100, 100)); _preDegree = 0; } - public function zoomCanvas(m:Number):void @@ -92,4 +91,9 @@ } + public function get auxBitmap():AuxBitmap + { + return m_canvas.auxBitmap; + } + public function set statusText(value:String):void { @@ -98,13 +102,12 @@ public function set delegate(value:IDelegate):void - { + { _contentContainer = new Container(); - _contentContainer.setStyle('borderStyle', 'none'); - _contentContainer.horizontalScrollPolicy = 'off'; - _contentContainer.verticalScrollPolicy = 'off'; + _contentContainer.setStyle("borderStyle", "none"); + _contentContainer.horizontalScrollPolicy = "off"; + _contentContainer.verticalScrollPolicy = "off"; _contentContainer.percentWidth = 100; _contentContainer.percentHeight = 100; addChild(_contentContainer); - validateNow(); // percentWidth/Height -> width/heightに更新 @@ -119,29 +122,23 @@ _canvasContainer = new Container(); + _canvasContainer.mouseEnabled = false; _canvasContainer.width = _contentContainer.width - vScrollBar.width; _canvasContainer.height = _contentContainer.height - hScrollBar.height; - _canvasContainer.setStyle('borderStyle', 'none'); - _canvasContainer.horizontalScrollPolicy = 'off'; - _canvasContainer.verticalScrollPolicy = 'off'; - - _canvasContainer.addChild(value.recorder.painter.view); + _canvasContainer.setStyle("borderStyle", "none"); + _canvasContainer.horizontalScrollPolicy = "off"; + _canvasContainer.verticalScrollPolicy = "off"; + + canvasX = canvasY = 0; + _canvasScale = 1; + + m_canvas = new GPCanvas(value); + _canvasContainer.addChild(m_canvas); + _contentContainer.addChild(_canvasContainer); _contentContainer.addChild(hScrollBar); _contentContainer.addChild(vScrollBar); - - _canvasContainer.mouseEnabled = false; _contentContainer.addEventListener(MouseEvent.CLICK, contentContainerClickHandler); - /* - mouseChildren = false; - addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); - addEventListener(MouseEvent.MOUSE_MOVE, mouseMove); - addEventListener(MouseEvent.MOUSE_UP, mouseUp); - addEventListener(MouseEvent.MOUSE_OUT, mouseOut); - */ m_delegate = value; - - canvasX = canvasY = 0; - _canvasScale = 1; resizeContainer(); moveCanvas(); @@ -150,27 +147,29 @@ private function moveCanvas():void { - var maxX:Number = 0 * _canvasScale - _canvasContainer.width; - var maxY:Number = 0 * _canvasScale - _canvasContainer.height; - canvasX = Math.floor(canvasX); - canvasY = Math.floor(canvasY); - if (maxX <= 0) - maxX = 0; - if (maxY <= 0) - maxY = 0; - if (canvasX < 0) - canvasX = 0; - if (canvasY < 0) - canvasY = 0; - if (canvasX > maxX) - canvasX = maxX; - if (canvasY > maxY) - canvasY = maxY; - hScrollBar.scrollPosition = canvasX; - vScrollBar.scrollPosition = canvasY; - hScrollBar.lineScrollSize = _canvasScale; - vScrollBar.lineScrollSize = _canvasScale; - hScrollBar.setScrollProperties(_canvasContainer.width, 0, maxX, 0); - vScrollBar.setScrollProperties(_canvasContainer.height, 0, maxY, 0); - //_logger.eventCanvasMove(-canvasX, -canvasY); + if (m_delegate != null) { + var maxX:Number = m_delegate.recorder.width * _canvasScale - _canvasContainer.width; + var maxY:Number = m_delegate.recorder.height * _canvasScale - _canvasContainer.height; + canvasX = Math.floor(canvasX); + canvasY = Math.floor(canvasY); + if (maxX <= 0) + maxX = 0; + if (maxY <= 0) + maxY = 0; + if (canvasX < 0) + canvasX = 0; + if (canvasY < 0) + canvasY = 0; + if (canvasX > maxX) + canvasX = maxX; + if (canvasY > maxY) + canvasY = maxY; + hScrollBar.scrollPosition = canvasX; + vScrollBar.scrollPosition = canvasY; + hScrollBar.lineScrollSize = _canvasScale; + vScrollBar.lineScrollSize = _canvasScale; + hScrollBar.setScrollProperties(_canvasContainer.width, 0, maxX, 0); + vScrollBar.setScrollProperties(_canvasContainer.height, 0, maxY, 0); + m_canvas.move(-canvasX, -canvasY); + } } @@ -189,5 +188,5 @@ private function set backgroundColor(c:uint):void { - setStyle('backgroundColor', c); + setStyle("backgroundColor", c); } @@ -196,8 +195,7 @@ if (e.eventPhase == flash.events.EventPhase.AT_TARGET) { var pen:Pen = m_delegate.recorder.painter.pen; - backgroundColor = pen.color; - //_logger.additionalColor = backgroundColor; - //_logger.additionalAlpha = m_delegate.module.alpha; - //_logger.eventRefreshAdditional(); + backgroundColor = auxBitmap.lineColor = pen.color; + auxBitmap.lineAlpha = pen.alpha; + auxBitmap.validate(); } } @@ -205,35 +203,37 @@ private function resizeContainer():void { - // 仮にサイズを狭める - _canvasContainer.width = _canvasContainer.height = - hScrollBar.width = vScrollBar.height = 0; - - validateNow(); // _contentContainerのサイズを更新 - - // それを使って再設定 - var clientWidth:Number = _contentContainer.width - vScrollBar.width; - var clientHeight:Number = _contentContainer.height - hScrollBar.height; - - hScrollBar.width = clientWidth; - vScrollBar.height = clientHeight; - - var canvasWidth:uint = m_delegate.recorder.width; - var canvasHeight:uint = m_delegate.recorder.height; - // TODO: minでいいやん - if (canvasWidth * _canvasScale < clientWidth) - _canvasContainer.width = canvasWidth * _canvasScale; - else - _canvasContainer.width = clientWidth; - - if (canvasHeight * _canvasScale < clientHeight) - _canvasContainer.height = canvasHeight * _canvasScale; - else - _canvasContainer.height = clientHeight; - - hScrollBar.move(0, clientHeight); - vScrollBar.move(clientWidth, 0); - - _canvasContainer.move((clientWidth - _canvasContainer.width) / 2, - (clientHeight - _canvasContainer.height) / 2); + if (m_delegate != null) { + // 仮にサイズを狭める + _canvasContainer.width = _canvasContainer.height = + hScrollBar.width = vScrollBar.height = 0; + + validateNow(); // _contentContainerのサイズを更新 + + // それを使って再設定 + var clientWidth:Number = _contentContainer.width - vScrollBar.width; + var clientHeight:Number = _contentContainer.height - hScrollBar.height; + + hScrollBar.width = clientWidth; + vScrollBar.height = clientHeight; + + var canvasWidth:uint = m_delegate.recorder.width; + var canvasHeight:uint = m_delegate.recorder.height; + // TODO: minでいいやん + if (canvasWidth * _canvasScale < clientWidth) + _canvasContainer.width = canvasWidth * _canvasScale; + else + _canvasContainer.width = clientWidth; + + if (canvasHeight * _canvasScale < clientHeight) + _canvasContainer.height = canvasHeight * _canvasScale; + else + _canvasContainer.height = clientHeight; + + hScrollBar.move(0, clientHeight); + vScrollBar.move(clientWidth, 0); + + _canvasContainer.move((clientWidth - _canvasContainer.width) / 2, + (clientHeight - _canvasContainer.height) / 2); + } } @@ -242,11 +242,4 @@ resizeContainer(); moveCanvas(); - } - - private function moveHandler(evt:MoveEvent):void - { - // 整数化して、shape->bitmapのズレをなくす - x = int(x); - y = int(y); } } Index: /as3/gunyarapaint/branches/gunyarapaint/compat/src/gunyarapaint.mxml =================================================================== --- /as3/gunyarapaint/branches/gunyarapaint/compat/src/gunyarapaint.mxml (リビジョン 3473) +++ /as3/gunyarapaint/branches/gunyarapaint/compat/src/gunyarapaint.mxml (リビジョン 3481) @@ -6,5 +6,4 @@ creationComplete="init()" applicationComplete="appComplete()" - resize="relocateComponents()" borderStyle="solid" cornerRadius="0" borderColor="#333333" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#cccccc, #cccccc]" @@ -61,6 +60,6 @@ - - + +