/// <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> /// Return true if currently active properties (line width, color etc.) /// can be applied to selected items. /// /// If at least one selected object has property different from currently /// active property value, properties can be applied. /// </summary> public static bool CanApplyProperties(DrawingCanvas drawingCanvas) { foreach (GraphicsBase graphicsBase in drawingCanvas.GraphicsList) { if (!graphicsBase.IsSelected) { continue; } // ObjectColor - used in all graphics objects if (graphicsBase.ObjectColor != drawingCanvas.ObjectColor) { return(true); } GraphicsText graphicsText = graphicsBase as GraphicsText; if (graphicsText == null) { // LineWidth - used in all objects except of GraphicsText if (graphicsBase.LineWidth != drawingCanvas.LineWidth) { return(true); } } else { // Font - for GraphicsText if (graphicsText.TextFontFamilyName != drawingCanvas.TextFontFamilyName) { return(true); } if (graphicsText.TextFontSize != drawingCanvas.TextFontSize) { return(true); } if (graphicsText.TextFontStretch != drawingCanvas.TextFontStretch) { return(true); } if (graphicsText.TextFontStyle != drawingCanvas.TextFontStyle) { return(true); } if (graphicsText.TextFontWeight != drawingCanvas.TextFontWeight) { return(true); } } } return(false); }
/// <summary> /// Create textbox for in-place editing /// </summary> public void CreateTextBox(GraphicsText graphicsText, DrawingCanvas drawingCanvas) { graphicsText.IsSelected = false; // selection marks don't look good with textbox // Keep old text in the case Esc is pressed while editing oldText = graphicsText.Text; // Keep reference to edited object editedGraphicsText = graphicsText; textBox = new TextBox(); textBox.Width = graphicsText.Rectangle.Width; textBox.Height = graphicsText.Rectangle.Height; textBox.FontFamily = new FontFamily(graphicsText.TextFontFamilyName); textBox.FontSize = graphicsText.TextFontSize; textBox.FontStretch = graphicsText.TextFontStretch; textBox.FontStyle = graphicsText.TextFontStyle; textBox.FontWeight = graphicsText.TextFontWeight; textBox.Text = graphicsText.Text; textBox.AcceptsReturn = true; textBox.TextWrapping = TextWrapping.Wrap; drawingCanvas.Children.Add(textBox); Canvas.SetLeft(textBox, graphicsText.Rectangle.Left); Canvas.SetTop(textBox, graphicsText.Rectangle.Top); textBox.Width = textBox.Width; textBox.Height = textBox.Height; textBox.Focus(); textBox.LostFocus += new RoutedEventHandler(textBox_LostFocus); textBox.LostKeyboardFocus += new KeyboardFocusChangedEventHandler(textBox_LostKeyboardFocus); textBox.PreviewKeyDown += new KeyEventHandler(textBox_PreviewKeyDown); textBox.ContextMenu = null; // see notes in textBox_LostKeyboardFocus // Initially textbox is set to the same rectangle as graphicsText. // After textbox loading its template is available, and we can // correct textbox position - see details in the textBox_Loaded function. textBox.Loaded += new RoutedEventHandler(textBox_Loaded); }
/// <summary> /// Open in-place edit box if GraphicsText is clicked /// </summary> void HandleDoubleClick(MouseButtonEventArgs e) { Point point = e.GetPosition(this); // Enumerate all text objects for (int i = graphicsList.Count - 1; i >= 0; i--) { GraphicsText t = graphicsList[i] as GraphicsText; if (t != null) { if (t.Contains(point)) { toolText.CreateTextBox(t, this); return; } } } }
/// <summary> /// Left mouse is released. /// New object is created and resized. /// </summary> public override void OnMouseUp(DrawingCanvas drawingCanvas, MouseButtonEventArgs e) { drawingCanvas.Tool = ToolType.Pointer; drawingCanvas.Cursor = HelperFunctions.DefaultCursor; drawingCanvas.ReleaseMouseCapture(); if (drawingCanvas.Count > 0) { drawingCanvas[drawingCanvas.Count - 1].Normalize(); GraphicsText t = drawingCanvas[drawingCanvas.Count - 1] as GraphicsText; if (t != null) { // Create textbox for editing of graphics object which is just created CreateTextBox(t, drawingCanvas); } } // Commnnd will be added to History later, after closing // in-place textbox. }
public PropertiesGraphicsText(GraphicsText graphicsText) { if (graphicsText == null) { throw new ArgumentNullException("graphicsText"); } this.text = graphicsText.Text; this.left = graphicsText.Left; this.top = graphicsText.Top; this.right = graphicsText.Right; this.bottom = graphicsText.Bottom; this.objectColor = graphicsText.ObjectColor; this.textFontSize = graphicsText.TextFontSize; this.textFontFamilyName = graphicsText.TextFontFamilyName; this.textFontStyle = FontConversions.FontStyleToString(graphicsText.TextFontStyle); this.textFontWeight = FontConversions.FontWeightToString(graphicsText.TextFontWeight); this.textFontStretch = FontConversions.FontStretchToString(graphicsText.TextFontStretch); this.actualScale = graphicsText.ActualScale; this.ID = graphicsText.Id; this.selected = graphicsText.IsSelected; }
public override GraphicsBase CreateGraphics() { GraphicsBase b = new GraphicsText( text, left, top, right, bottom, objectColor, textFontSize, textFontFamilyName, FontConversions.FontStyleFromString(textFontStyle), FontConversions.FontWeightFromString(textFontWeight), FontConversions.FontStretchFromString(textFontStretch), actualScale); if (this.ID != 0) { b.Id = this.ID; b.IsSelected = this.selected; } return(b); }
/// <summary> /// Hide in-place editing textbox. /// Called from TextTool, when user pressed Enter or Esc, /// or from this class, when user clicks on the canvas. /// /// graphicsText passed to this function can be new text added by /// ToolText, or existing text opened for editing. /// If ToolText.OldText is empty, this is new object. /// If not, this is existing object. /// </summary> internal void HideTextbox(GraphicsText graphicsText) { if (toolText.TextBox == null) { return; } graphicsText.IsSelected = true; // restore selection which was removed for better textbox appearance if (toolText.TextBox.Text.Trim().Length == 0) { // Textbox is empty: remove text object. if (!String.IsNullOrEmpty(toolText.OldText)) // existing text was edited { // Since text object is removed now, // Add Delete command to the history undoManager.AddCommandToHistory(new CommandDelete(this)); } // Remove empty text object graphicsList.Remove(graphicsText); } else { if (!String.IsNullOrEmpty(toolText.OldText)) // existing text was edited { if (toolText.TextBox.Text.Trim() != toolText.OldText) // text was really changed { // Create command CommandChangeState command = new CommandChangeState(this); // Make change in the text object graphicsText.Text = toolText.TextBox.Text.Trim(); graphicsText.UpdateRectangle(); // Keep state after change and add command to the history command.NewState(this); undoManager.AddCommandToHistory(command); } } else // new text was added { // Make change in the text object graphicsText.Text = toolText.TextBox.Text.Trim(); graphicsText.UpdateRectangle(); // Add command to the history undoManager.AddCommandToHistory(new CommandAdd(graphicsText)); } } // Remove textbox and set it to null. this.Children.Remove(toolText.TextBox); toolText.TextBox = null; // This enables back all ApplicationCommands, // which are disabled while textbox is active. this.Focus(); }