public Cell(CellSource source, int w, int h) : base(w, h) { Type = IBProjectElementTypes.Cell; PropertyHeaderName = "Cell"; Source = source; PropertyChanged += Cell_PropertyChanged; }
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); } }
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(); } }
/// <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()); } }
public RUSortLayer(IBImage from, int fromIndex, CellSource owner, IBImage to, int toIndex) { From = from; FromIndex = fromIndex; Owner = owner; To = to; ToIndex = toIndex; }
public RUDeformImage(CellSource _trgCell, PixcelImage trg) { if (trg == null) { return; } trgCell = _trgCell; trgImage = trg; }
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); }
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); } }
/// <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); } }
/// <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"); }
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); }