コード例 #1
0
        private void AssociatedObject_DragEnter(object sender, DragEventArgs e)
        {
            LayerDragData data = e.Data.GetData(typeof(LayerDragData)) as LayerDragData;

            if (data != null)
            {
                IBImage trg = AssociatedObject.DataContext as IBImage;
                if (trg == null || trg == data.from || trg.owner == null)
                {
                    return;
                }

                CellSource trgOwner = trg.owner as CellSource;
                if (trgOwner == null || trgOwner != data.fromOwner)
                {
                    return;
                }

                int trgIndex = trgOwner.Layers.IndexOf(trg);

                trgOwner.Layers.Remove(data.from);
                trgOwner.Layers.Insert(trgIndex, data.from);

                RedoUndoManager.Current.Record(new RUSortLayer(data.from, data.fromIndex, data.fromOwner, trg, trgIndex));

                IBCanvasControl.RefreshAll();
            }
        }
コード例 #2
0
            public override void Undo()
            {
                base.Undo();

                bool wasCanDraw = trg.imageData.CanDraw;

                if (!wasCanDraw)
                {
                    trg.imageData.SetDrawingMode();
                }

                byte[] trgData     = trg.imageData.data;
                int    layerStride = (int)trg.imageData.actualSize.Width * 4;
                int    _offsetx    = offsetX * 4;

                for (int y = 0; y < height; y++)
                {
                    int offset = (offsetY + y) * layerStride;
                    for (int x = 0; x < stride; x++)
                    {
                        trgData[offset + _offsetx + x] = BeforeData[y * stride + x];
                    }
                }

                if (!wasCanDraw)
                {
                    trg.imageData.EndDrawingMode();
                }

                trg.imageData.TextureUpdate();
                IBCanvasControl.RefreshAll();
            }
コード例 #3
0
        public override void Redo()
        {
            base.Redo();

            Owner.Layers.Remove(From);
            Owner.Layers.Insert(ToIndex, From);

            IBCanvasControl.RefreshAll();
        }
コード例 #4
0
        public override void Undo()
        {
            base.Undo();

            Owner.Layers.Remove(To);
            Owner.Layers.Insert(ToIndex, To);

            IBCanvasControl.RefreshAll();
        }
コード例 #5
0
        public override bool Set(IBCanvasControl canvas, IBProjectElement trg, IBCoord coord)
        {
            if (base.Set(canvas, trg, coord))
            {
                return(false);
            }

            return(true);
        }
コード例 #6
0
ファイル: Eraser.cs プロジェクト: ReijiPochi/ImageBuilder2016
        public override bool Set(IBCanvasControl canvas, IBProjectElement trg, IBCoord coord)
        {
            if (!base.Set(canvas, trg, coord))
            {
                return(false);
            }

            actionSummary = "Eraser Tool / " + trg.Name;

            return(true);
        }
コード例 #7
0
        public override void Activate(IBCanvasControl canvas, IBProjectElement trg)
        {
            base.Activate(canvas, trg);

            if (currentCanvas != null && trgLayer != null && trgLayer.LayerType == ImageTypes.SingleColor)
            {
                currentCanvas.canvas.Cursor = Cursors.No;
            }
            else if (currentCanvas != null && currentCanvas.canvas.Cursor != Cursors.Arrow)
            {
                currentCanvas.canvas.Cursor = Cursors.Arrow;
            }
        }
コード例 #8
0
ファイル: Eraser.cs プロジェクト: ReijiPochi/ImageBuilder2016
        public override void Activate(IBCanvasControl canvas, IBProjectElement trg)
        {
            base.Activate(canvas, trg);

            if (currentCanvas != null && trgLayer != null && trgLayer.LayerType == ImageTypes.SingleColor)
            {
                currentCanvas.canvas.Cursor = Cursors.No;
            }
            else if (currentCanvas != null)
            {
                eraserCursor = IBCursor.GenCircleCursor(Size * 0.75 * currentCanvas.ZoomPerCent / 100.0);
                currentCanvas.canvas.Cursor = eraserCursor;
            }
        }
コード例 #9
0
        public virtual void Activate(IBCanvasControl canvas, IBProjectElement trg)
        {
            if (canvas != null)
            {
                currentCanvas = canvas;
            }
            ActiveBrush = this;

            if (trg == null)
            {
                return;
            }
            trgImage = trg;
            trgLayer = GetSelectedLayer();
        }
コード例 #10
0
        public override bool Set(IBCanvasControl canvas, IBProjectElement trg, IBCoord coord)
        {
            if (!base.Set(canvas, trg, coord))
            {
                return(false);
            }

            trgCell = trgImage as CellSource;
            if (trgCell == null)
            {
                return(false);
            }
            if (trgLayer == null)
            {
                return(false);
            }

            actionSummary = "Selection Tool / " + trg.Name;
            DynamicRender.OverrayColor[0] = 0;
            DynamicRender.OverrayColor[1] = 0;
            DynamicRender.OverrayColor[2] = 0;

            if (trgCell.PixcelSelectedArea != null)
            {
                if (trgCell.IsPixcelSelecting)
                {
                    trgCell.IsPixcelSelecting            = false;
                    SelectersLayerMode                   = false;
                    trgCell.PixcelSelectedArea.imageData = null;
                    trgCell.PixcelSelectedArea           = null;
                    IBCanvasControl.RefreshAll();
                }
            }

            trgCell.PixcelSelectedArea = new PixcelImage(
                (int)trgLayer.imageData.actualSize.Width,
                (int)trgLayer.imageData.actualSize.Height,
                (int)trgLayer.Rect.OffsetX,
                (int)trgLayer.Rect.OffsetY);
            trgCell.PixcelSelectedArea.IsNotSelectersLayer = false;

            trgCell.PixcelSelectedArea.imageData.SetDrawingMode();

            start.x = histCoord[0].x;
            start.y = histCoord[0].y;

            return(true);
        }
コード例 #11
0
        public override void Activate(IBCanvasControl canvas, IBProjectElement trg)
        {
            base.Activate(canvas, trg);

            if (pencilCursor == null)
            {
                pencilCursor = IBCursor.BitmapImageToCursor(Application.Current.FindResource("PencilCursor") as BitmapImage, 0, 0);
            }

            if (currentCanvas != null && trgLayer != null && trgLayer.LayerType == ImageTypes.SingleColor)
            {
                currentCanvas.canvas.Cursor = Cursors.No;
            }
            else if (currentCanvas != null && currentCanvas.canvas.Cursor != pencilCursor)
            {
                currentCanvas.canvas.Cursor = pencilCursor;
            }
        }
コード例 #12
0
        public virtual bool Set(IBCanvasControl canvas, IBProjectElement trg, IBCoord coord)
        {
            currentCanvas = canvas;
            trgImage      = trg;
            trgLayer      = GetSelectedLayer();
            if (trgImage == null || trgLayer == null || !trgLayer.imageData.CanDraw)
            {
                return(false);
            }

            if (!drawing)
            {
                beforeDataStride = (int)trgLayer.imageData.actualSize.Width * 4;
                RecordBeforeData();
            }

            penUp   = false;
            drawing = true;
            count   = 0;

            for (int i = 0; i < histPressure.Length; i++)
            {
                histPressure[i] = currentCanvas.StylusPressure;
                if (WintabUtility.Pressure != 0)
                {
                    histPressure[i] = WintabUtility.Pressure;
                }
            }

            foreach (IBCoord c in histCoord)
            {
                c.x = coord.x;
                c.y = coord.y;
            }

            return(true);
        }
コード例 #13
0
            public override void Undo()
            {
                base.Undo();

                bool wasCanDraw = trgImage.imageData.CanDraw;

                if (!wasCanDraw)
                {
                    trgImage.imageData.SetDrawingMode();
                }

                for (int i = 0; i < trgImage.imageData.data.Length; i++)
                {
                    trgImage.imageData.data[i] = before.imageData.data[i];
                }

                trgImage.imageData.TextureUpdate();
                IBCanvasControl.RefreshAll();

                if (!wasCanDraw)
                {
                    trgImage.imageData.EndDrawingMode();
                }
            }
コード例 #14
0
        private void Move_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
        {
            double deltaX = e.HorizontalChange / (currentCanvas.ZoomPerCent / 100.0);
            double deltaY = e.VerticalChange / (currentCanvas.ZoomPerCent / 100.0);

            trgCell.TempLayer.Rect.OffsetX += deltaX;
            trgCell.TempLayer.Rect.OffsetY -= deltaY;

            trgCell.PixcelSelectedArea.Rect.OffsetX += deltaX;
            trgCell.PixcelSelectedArea.Rect.OffsetY -= deltaY;

            AddOffset(move, deltaX, deltaY);
            AddOffset(selectingAreaRect, deltaX, deltaY);
            AddOffset(topLeft, deltaX, deltaY);
            AddOffset(topRight, deltaX, deltaY);
            AddOffset(bottomLeft, deltaX, deltaY);
            AddOffset(bottomRight, deltaX, deltaY);
            AddOffset(left, deltaX, deltaY);
            AddOffset(right, deltaX, deltaY);
            AddOffset(top, deltaX, deltaY);
            AddOffset(bottom, deltaX, deltaY);

            IBCanvasControl.RefreshAll();
        }
コード例 #15
0
        public override void Activate(IBCanvasControl canvas, IBProjectElement trg)
        {
            if (isActive)
            {
                return;
            }

            base.Activate(canvas, trg);

            if (currentCanvas != null && trgLayer != null && trgLayer.LayerType == ImageTypes.SingleColor)
            {
                currentCanvas.canvas.Cursor = Cursors.No;
            }
            else if (currentCanvas != null && currentCanvas.canvas.Cursor != Cursors.Arrow)
            {
                currentCanvas.canvas.Cursor = Cursors.Arrow;
            }

            trgCell = trgImage as CellSource;
            if (trgCell == null || currentCanvas == null || !trgCell.IsPixcelSelecting || trgCell.PixcelSelectedArea == null || !trgLayer.imageData.CanDraw)
            {
                Deacive();
                return;
            }

            action = new RUDeformImage(trgCell, trgLayer as PixcelImage);
            action.SetBefore(trgLayer as PixcelImage);

            trgCell.PixcelSelectedArea.imageData.EndDrawingMode();

            int xs = (int)trgCell.PixcelSelectedArea.imageData.drawingAreaSize.OffsetX;
            int ys = (int)trgCell.PixcelSelectedArea.imageData.drawingAreaSize.OffsetY;
            int w  = (int)trgCell.PixcelSelectedArea.imageData.drawingAreaSize.Width;
            int h  = (int)trgCell.PixcelSelectedArea.imageData.drawingAreaSize.Height;

            trgCell.TempLayer = new PixcelImage(w, h, xs + (int)trgLayer.Rect.OffsetX, ((int)trgLayer.Rect.Height - ys - h) + (int)trgLayer.Rect.OffsetY);
            trgCell.TempLayer.imageData.SetDrawingMode();

            for (int y = 0; y < h; y++)
            {
                int offset       = y * w * 4;
                int sourceOffset = (ys + y) * (int)trgLayer.imageData.actualSize.Width * 4 + xs * 4;

                for (int x = 0; x < w * 4 - 3; x++)
                {
                    if (trgCell.PixcelSelectedArea.imageData.data[offset + x + 3] == 255)
                    {
                        trgCell.TempLayer.imageData.data[offset + x] = trgLayer.imageData.data[sourceOffset + x];
                        trgLayer.imageData.data[sourceOffset + x]    = 0;
                        x++;
                        trgCell.TempLayer.imageData.data[offset + x] = trgLayer.imageData.data[sourceOffset + x];
                        trgLayer.imageData.data[sourceOffset + x]    = 0;
                        x++;
                        trgCell.TempLayer.imageData.data[offset + x] = trgLayer.imageData.data[sourceOffset + x];
                        trgLayer.imageData.data[sourceOffset + x]    = 0;
                        x++;
                        trgCell.TempLayer.imageData.data[offset + x] = trgLayer.imageData.data[sourceOffset + x];
                        trgLayer.imageData.data[sourceOffset + x]    = 0;
                    }
                    else
                    {
                        x += 3;
                    }
                }
            }

            isActive = true;
            trgCell.TempLayer.imageData.TextureUpdate();
            trgLayer.imageData.TextureUpdate();

            selectingAreaRect.OverlayWidth    = trgCell.PixcelSelectedArea.imageData.drawingAreaSize.Width;
            selectingAreaRect.OverlayHeight   = trgCell.PixcelSelectedArea.imageData.drawingAreaSize.Height;
            selectingAreaRect.OverlayOffsetX  = trgCell.PixcelSelectedArea.Rect.OffsetX + trgCell.PixcelSelectedArea.imageData.drawingAreaSize.OffsetX;
            selectingAreaRect.OverlayOffsetY  = trgCell.PixcelSelectedArea.imageData.drawingAreaSize.OffsetY - trgCell.PixcelSelectedArea.Rect.OffsetY - trgCell.PixcelSelectedArea.Rect.Height;
            selectingAreaRect.BorderBrush     = new SolidColorBrush(System.Windows.Media.Color.FromArgb(100, 255, 0, 0));
            selectingAreaRect.BorderThickness = new System.Windows.Thickness(1);
            currentCanvas.AddOverlayItem(selectingAreaRect);

            move.OverlayWidth   = selectingAreaRect.OverlayWidth;
            move.OverlayHeight  = selectingAreaRect.OverlayHeight;
            move.OverlayOffsetX = selectingAreaRect.OverlayOffsetX;
            move.OverlayOffsetY = selectingAreaRect.OverlayOffsetY;
            move.Cursor         = Cursors.SizeAll;
            currentCanvas.AddOverlayItem(move);

            topLeft.OverlayOffsetX = selectingAreaRect.OverlayOffsetX;
            topLeft.OverlayOffsetY = selectingAreaRect.OverlayOffsetY;
            topLeft.Cursor         = Cursors.SizeNWSE;
            currentCanvas.AddOverlayItem(topLeft);

            topRight.OverlayOffsetX = selectingAreaRect.OverlayOffsetX + selectingAreaRect.OverlayWidth;
            topRight.OverlayOffsetY = selectingAreaRect.OverlayOffsetY;
            topRight.Cursor         = Cursors.SizeNESW;
            currentCanvas.AddOverlayItem(topRight);

            bottomLeft.OverlayOffsetX = selectingAreaRect.OverlayOffsetX;
            bottomLeft.OverlayOffsetY = selectingAreaRect.OverlayOffsetY + selectingAreaRect.OverlayHeight;
            bottomLeft.Cursor         = Cursors.SizeNESW;
            currentCanvas.AddOverlayItem(bottomLeft);

            bottomRight.OverlayOffsetX = selectingAreaRect.OverlayOffsetX + selectingAreaRect.OverlayWidth;
            bottomRight.OverlayOffsetY = selectingAreaRect.OverlayOffsetY + selectingAreaRect.OverlayHeight;
            bottomRight.Cursor         = Cursors.SizeNWSE;
            currentCanvas.AddOverlayItem(bottomRight);

            left.OverlayOffsetX = selectingAreaRect.OverlayOffsetX;
            left.OverlayOffsetY = selectingAreaRect.OverlayOffsetY + selectingAreaRect.OverlayHeight / 2.0;
            left.Cursor         = Cursors.SizeWE;
            currentCanvas.AddOverlayItem(left);

            right.OverlayOffsetX = selectingAreaRect.OverlayOffsetX + selectingAreaRect.OverlayWidth;
            right.OverlayOffsetY = selectingAreaRect.OverlayOffsetY + selectingAreaRect.OverlayHeight / 2.0;
            right.Cursor         = Cursors.SizeWE;
            currentCanvas.AddOverlayItem(right);

            top.OverlayOffsetX = selectingAreaRect.OverlayOffsetX + selectingAreaRect.OverlayWidth / 2.0;
            top.OverlayOffsetY = selectingAreaRect.OverlayOffsetY;
            top.Cursor         = Cursors.SizeNS;
            currentCanvas.AddOverlayItem(top);

            bottom.OverlayOffsetX = selectingAreaRect.OverlayOffsetX + selectingAreaRect.OverlayWidth / 2.0;
            bottom.OverlayOffsetY = selectingAreaRect.OverlayOffsetY + selectingAreaRect.OverlayHeight;
            bottom.Cursor         = Cursors.SizeNS;
            currentCanvas.AddOverlayItem(bottom);
        }
コード例 #16
0
        public override void Deacive()
        {
            base.Deacive();

            if (currentCanvas == null)
            {
                return;
            }

            currentCanvas.RemoveOverlayItem(selectingAreaRect);
            currentCanvas.RemoveOverlayItem(move);
            currentCanvas.RemoveOverlayItem(topLeft);
            currentCanvas.RemoveOverlayItem(topRight);
            currentCanvas.RemoveOverlayItem(bottomLeft);
            currentCanvas.RemoveOverlayItem(bottomRight);
            currentCanvas.RemoveOverlayItem(left);
            currentCanvas.RemoveOverlayItem(right);
            currentCanvas.RemoveOverlayItem(top);
            currentCanvas.RemoveOverlayItem(bottom);

            if (!isActive)
            {
                return;
            }

            if (trgCell != null && trgCell.TempLayer != null)
            {
                int xs = (int)trgCell.TempLayer.Rect.OffsetX - (int)trgLayer.Rect.OffsetX;
                int ys = (int)trgLayer.imageData.actualSize.Height + (int)trgLayer.Rect.OffsetY - ((int)trgCell.TempLayer.Rect.OffsetY + (int)trgCell.TempLayer.Rect.Height);
                int w  = (int)trgCell.TempLayer.imageData.actualSize.Width;
                int h  = (int)trgCell.TempLayer.imageData.actualSize.Height;

                for (int y = 0; y < h; y++)
                {
                    int offset       = y * w * 4;
                    int sourceOffset = (ys + y) * (int)trgLayer.imageData.actualSize.Width * 4 + xs * 4;

                    for (int x = 0; x < w * 4 - 3; x++)
                    {
                        if (sourceOffset + x < 0 || sourceOffset + x + 3 >= trgLayer.imageData.data.Length)
                        {
                            break;
                        }

                        if (trgCell.TempLayer.imageData.data[offset + x + 3] != 0)
                        {
                            trgLayer.imageData.data[sourceOffset + x] = trgCell.TempLayer.imageData.data[offset + x];
                            x++;
                            trgLayer.imageData.data[sourceOffset + x] = trgCell.TempLayer.imageData.data[offset + x];
                            x++;
                            trgLayer.imageData.data[sourceOffset + x] = trgCell.TempLayer.imageData.data[offset + x];
                            int r = trgCell.TempLayer.imageData.data[offset + x];
                            x++;
                            trgLayer.imageData.data[sourceOffset + x] = trgLayer.imageData.data[sourceOffset + x] >= trgCell.TempLayer.imageData.data[offset + x] ?
                                                                        trgLayer.imageData.data[sourceOffset + x] : trgCell.TempLayer.imageData.data[offset + x];
                        }
                        else
                        {
                            x += 3;
                        }
                    }
                }

                trgLayer.imageData.TextureUpdate();
                action.SetAfter(trgLayer as PixcelImage);
                RedoUndoManager.Current.Record(action);

                trgCell.TempLayer.imageData.data = null;
                trgCell.TempLayer = null;

                trgCell.PixcelSelectedArea.imageData.data = null;
                trgCell.PixcelSelectedArea = null;
                trgCell.IsPixcelSelecting  = false;

                isActive = false;
                IBCanvasControl.RefreshAll();
            }
        }