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 @@
-
-
+
+