/// <summary> /// Apply new line width /// </summary> public static bool ApplyLineWidth(DrawingCanvas drawingCanvas, double value, bool addToHistory) { CommandChangeState command = new CommandChangeState(drawingCanvas); bool wasChange = false; // LineWidth is set for all objects except of GraphicsText. // Though GraphicsText has this property, it should remain constant. foreach (GraphicsBase g in drawingCanvas.Selection) { if (g is GraphicsRectangle || g is GraphicsEllipse || g is GraphicsLine || g is GraphicsArrow || g is GraphicsRuler || g is GraphicsPolyLine) { if (g.LineWidth != value) { g.LineWidth = value; wasChange = true; } } } if (wasChange && addToHistory) { command.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(command); } return(wasChange); }
/// <summary> /// Move selection to front /// </summary> public static void MoveSelectionToFront(DrawingCanvas drawingCanvas) { // Moving to front of z-order means moving // to the end of VisualCollection. // Read GraphicsList in the reverse order, and move every selected object // to temporary list. List <GraphicsBase> list = new List <GraphicsBase>(); CommandChangeOrder command = new CommandChangeOrder(drawingCanvas); for (int i = drawingCanvas.Count - 1; i >= 0; i--) { if (drawingCanvas[i].IsSelected) { list.Insert(0, drawingCanvas[i]); drawingCanvas.GraphicsList.RemoveAt(i); } } // Add all items from temporary list to the end of GraphicsList foreach (GraphicsBase g in list) { drawingCanvas.GraphicsList.Add(g); } if (list.Count > 0) { command.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(command); } }
/// <summary> /// Apply new font size /// </summary> public static bool ApplyFontSize(DrawingCanvas drawingCanvas, double value, bool addToHistory) { CommandChangeState command = new CommandChangeState(drawingCanvas); bool wasChange = false; foreach (GraphicsBase g in drawingCanvas.Selection) { GraphicsText gt = g as GraphicsText; if (gt != null) { if (gt.TextFontSize != value) { gt.TextFontSize = value; wasChange = true; } } } if (wasChange && addToHistory) { command.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(command); } return(wasChange); }
/// <summary> /// Apply currently active properties to selected objects /// </summary> public static void ApplyProperties(DrawingCanvas drawingCanvas) { // Apply every property. // Call every Apply* function with addToHistory = false. // History is updated here and not in called functions. CommandChangeState command = new CommandChangeState(drawingCanvas); bool wasChange = false; // Line Width if (ApplyLineWidth(drawingCanvas, drawingCanvas.LineWidth, false)) { wasChange = true; } if (ApplyLineStyle(drawingCanvas, drawingCanvas.LineStyle, false)) { wasChange = true; } // Color if (ApplyColor(drawingCanvas, drawingCanvas.ObjectColor, false)) { wasChange = true; } // Font properties if (ApplyFontFamily(drawingCanvas, drawingCanvas.TextFontFamilyName, false)) { wasChange = true; } if (ApplyFontSize(drawingCanvas, drawingCanvas.TextFontSize, false)) { wasChange = true; } if (ApplyFontStretch(drawingCanvas, drawingCanvas.TextFontStretch, false)) { wasChange = true; } if (ApplyFontStyle(drawingCanvas, drawingCanvas.TextFontStyle, false)) { wasChange = true; } if (ApplyFontWeight(drawingCanvas, drawingCanvas.TextFontWeight, false)) { wasChange = true; } if (wasChange) { command.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(command); } }
/// <summary> /// Delete all graphic objects /// </summary> public static void DeleteAll(DrawingCanvas drawingCanvas) { if (drawingCanvas.GraphicsList.Count > 0) { drawingCanvas.AddCommandToHistory(new CommandDeleteAll(drawingCanvas)); drawingCanvas.GraphicsList.Clear(); } }
/// <summary> /// Add change to history. /// Called after finishing moving/resizing. /// </summary> public void AddChangeToHistory(DrawingCanvas drawingCanvas) { if (commandChangeState != null && wasMove) { // Keep state after moving/resizing and add command to history commandChangeState.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(commandChangeState); commandChangeState = null; } }
/// <summary> /// Left mouse is released. /// New object is created and resized. /// </summary> public override void OnMouseUp(DrawingCanvas drawingCanvas, MouseButtonEventArgs e) { if (drawingCanvas.Count > 0) { drawingCanvas[drawingCanvas.Count - 1].Normalize(); drawingCanvas.AddCommandToHistory(new CommandAdd(drawingCanvas[drawingCanvas.Count - 1])); } drawingCanvas.Tool = ToolType.Pointer; drawingCanvas.Cursor = HelperFunctions.DefaultCursor; drawingCanvas.ReleaseMouseCapture(); }
/// <summary> /// Delete selected graphic objects /// </summary> public static void DeleteSelection(DrawingCanvas drawingCanvas) { CommandDelete command = new CommandDelete(drawingCanvas); bool wasChange = false; for (int i = drawingCanvas.Count - 1; i >= 0; i--) { if (drawingCanvas[i].IsSelected) { drawingCanvas.GraphicsList.RemoveAt(i); wasChange = true; } } if (wasChange) { drawingCanvas.AddCommandToHistory(command); } }
/// <summary> /// Apply new color /// </summary> public static bool ApplyColor(DrawingCanvas drawingCanvas, Color value, bool addToHistory) { CommandChangeState command = new CommandChangeState(drawingCanvas); bool wasChange = false; foreach (GraphicsBase g in drawingCanvas.Selection) { if (g.ObjectColor != value) { g.ObjectColor = value; wasChange = true; } } if (wasChange && addToHistory) { command.NewState(drawingCanvas); drawingCanvas.AddCommandToHistory(command); } return(wasChange); }