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(); } }
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(); }
public override void Redo() { base.Redo(); Owner.Layers.Remove(From); Owner.Layers.Insert(ToIndex, From); IBCanvasControl.RefreshAll(); }
public override void Undo() { base.Undo(); Owner.Layers.Remove(To); Owner.Layers.Insert(ToIndex, To); IBCanvasControl.RefreshAll(); }
public override bool Set(IBCanvasControl canvas, IBProjectElement trg, IBCoord coord) { if (base.Set(canvas, trg, coord)) { return(false); } return(true); }
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); }
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; } }
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; } }
public virtual void Activate(IBCanvasControl canvas, IBProjectElement trg) { if (canvas != null) { currentCanvas = canvas; } ActiveBrush = this; if (trg == null) { return; } trgImage = trg; trgLayer = GetSelectedLayer(); }
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 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; } }
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); }
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(); } }
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(); }
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); }
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(); } }