예제 #1
0
 public Cell(CellSource source, int w, int h) : base(w, h)
 {
     Type = IBProjectElementTypes.Cell;
     PropertyHeaderName = "Cell";
     Source             = source;
     PropertyChanged   += Cell_PropertyChanged;
 }
예제 #2
0
        private void AssociatedObject_MouseLeave(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                IBImage trg = AssociatedObject.DataContext as IBImage;
                if (trg == null || trg.owner == null)
                {
                    return;
                }

                CellSource trgOwner = trg.owner as CellSource;
                if (trgOwner == null)
                {
                    return;
                }

                LayerDragData data = new LayerDragData()
                {
                    from      = trg,
                    fromOwner = trgOwner,
                    fromIndex = trgOwner.Layers.IndexOf(trg)
                };

                DragDrop.DoDragDrop(AssociatedObject, data, DragDropEffects.Move);
            }
        }
예제 #3
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();
            }
        }
예제 #4
0
        /// <summary>
        /// 名前をActiveTargetElementの名前からつけます
        /// </summary>
        /// <param name="newCellSource"></param>
        private void SetName(CellSource newCellSource)
        {
            string Num = "", tempName = "";
            int    tempNum;
            bool   f = false;

            for (int i = ActiveTargetElement.Name.Length - 1; i >= 0; i--)
            {
                if (!f && int.TryParse(ActiveTargetElement.Name[i].ToString(), out tempNum))
                {
                    Num += tempNum.ToString();
                }
                else
                {
                    f         = true;
                    tempName += ActiveTargetElement.Name[i].ToString();
                }
            }
            if (Num.Length != 0)
            {
                Num                = Reverse(Num);
                tempName           = Reverse(tempName);
                tempNum            = int.Parse(Num) + 1;
                newCellSource.Name = tempName + tempNum.ToString("d" + Num.Length.ToString());
            }
        }
예제 #5
0
        public RUSortLayer(IBImage from, int fromIndex, CellSource owner, IBImage to, int toIndex)
        {
            From      = from;
            FromIndex = fromIndex;

            Owner = owner;

            To      = to;
            ToIndex = toIndex;
        }
예제 #6
0
            public RUDeformImage(CellSource _trgCell, PixcelImage trg)
            {
                if (trg == null)
                {
                    return;
                }

                trgCell  = _trgCell;
                trgImage = trg;
            }
예제 #7
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);
        }
예제 #8
0
        public static void RenderCellSource(CellSource c, double zoomPerCent, ref double layer)
        {
            if (c == null)
            {
                return;
            }

            for (int index = c.Layers.Count - 1; index >= 0; index--)
            {
                IBImage i = c.Layers[index];
                DrawOneImage(i, zoomPerCent, ref layer);
            }

            if (c.PixcelSelectedArea != null)
            {
                DrawPixcelSelectedLayer(c.PixcelSelectedArea, zoomPerCent, ref layer);
            }
            if (c.TempLayer != null)
            {
                DrawOneImage(c.TempLayer, zoomPerCent, ref layer);
            }
        }
예제 #9
0
    /// <summary>
    /// 初始化
    /// </summary>
    /// <param name="cellCount"></param>
    public void Init(int cellCount)
    {
        CellCount = cellCount;

        if (CellSource == null)
        {
            Debug.Log("Error : CellSource is null.");
            return;
        }

        if (content == null)
        {
            Debug.Log("Error : content is null.");
            return;
        }

        if (PageMode)
        {
            this.movementType = MovementType.Unrestricted;
        }

        if (NextPageBtn != null)
        {
            NextPageBtn.onClick.RemoveAllListeners();
            NextPageBtn.onClick.AddListener(GoNextCell);
        }

        if (PrePageBtn != null)
        {
            PrePageBtn.onClick.RemoveAllListeners();
            PrePageBtn.onClick.AddListener(GoPreCell);
        }

        if (vertical)
        {
            Pivot      = new Vector2(0f, 1f);
            MinAnchors = new Vector2(0f, 1f);
            MaxAnchors = new Vector2(1f, 1f);
        }
        else
        {
            Pivot      = new Vector2(0f, 1f);
            MinAnchors = new Vector2(0f, 0f);
            MaxAnchors = new Vector2(0f, 1f);
        }

        Rebuild(CanvasUpdate.Layout);

        UpdateViewBounds();
        SetContentLayout();

        _rectTransform = GetComponent <RectTransform>();
        CellSize       = CellSource.GetComponent <RectTransform>().sizeDelta;

        if (vertical)
        {
            RowCount   = Mathf.CeilToInt((float)CellCount / ColumnCount);
            _pageCount = RowCount;
        }
        else
        {
            ColumnCount = Mathf.CeilToInt((float)CellCount / RowCount);
            _pageCount  = ColumnCount;
        }

        UpdateIndexList(CellCount);
        UpdateConetntSize(CellCount);
        UpdateRollBtn(_preNearestPageIndex);

        while (_cells.Count > 0)
        {
            HideCell(_cells[0]._index, false);
        }
    }
예제 #10
0
        /// <summary>
        /// IBProjectModel.ActiveTargetElementの子に新規セルソースを追加
        /// </summary>
        /// <param name="Parent">nullの場合、現在開かれているプロジェクトにセルソースを追加</param>
        public void AddNewCellSource()
        {
            CellSource newCellSource = new CellSource()
            {
                Name       = "CS1",
                IsSelected = true,
                Width      = 1920,
                Height     = 1080
            };

            //PixcelImage i2 = new PixcelImage(new Bitmap("test.png"));
            //i2.Rect.OffsetX = 0;
            //i2.Rect.OffsetY = 0;
            //i2.LayerName = "layer2";
            //newCellSource.Layers.Add(i2);
            //SingleColorImage BG = new SingleColorImage(255, 255, 255, 255);
            //BG.Rect = new IBRectangle(1920 + 300, 1080 + 300, -150, -150);
            //BG.LayerName = "BG";
            //newCellSource.Layers.Add(BG);
            newCellSource.AddNewLayer("BG", false, ImageTypes.SingleColor);
            newCellSource.AddNewLayer("下書き", false);
            newCellSource.AddNewLayer("線画", false);

            if (ActiveTargetElement != null)
            {
                if (ActiveTargetElement.Type == IBProjectElementTypes.CellSource)
                {
                    SetName(newCellSource);

                    if (ActiveTargetElement.Parent != null)
                    {
                        IBProjectElement parent = ActiveTargetElement.Parent;
                        if (parent.Type != IBProjectElementTypes.Folder && parent.Type != IBProjectElementTypes.Root)
                        {
                            return;
                        }

                        parent.AddChild(newCellSource);
                        RedoUndoManager.Current.Record(new RUAddNewElement(parent, newCellSource));
                    }
                    else
                    {
                        IBProject.Current.ElementsRoot.AddChild(newCellSource);
                        RedoUndoManager.Current.Record(new RUAddNewElement(IBProject.Current.ElementsRoot, newCellSource));
                    }
                }
                else
                {
                    IBProjectElement parent = ActiveTargetElement;

                    parent.AddChild(newCellSource);
                    RedoUndoManager.Current.Record(new RUAddNewElement(parent, newCellSource));
                }
            }
            else
            {
                IBProject.Current.ElementsRoot.AddChild(newCellSource);
                RedoUndoManager.Current.Record(new RUAddNewElement(IBProject.Current.ElementsRoot, newCellSource));
            }

            //Cell newc = new Cell(newCellSource, 1920, 1080);
            //newc.Name = "new Cell";
            //IBProject.Current.ElementsRoot.Children.Add(newc);

            RaisePropertyChanged("IBProject_Elements");
        }
예제 #11
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);
        }