/// <summary> /// This determines if the image which is used to represent the caret is stale and needs /// to be recreated. /// </summary> private bool IsAdornmentStale(CaretData caretData) { // Size is represented in floating point so strict equality comparison will almost // always return false. Use a simple epsilon to test the difference if (caretData.Color != TryCalculateCaretColor() || caretData.CaretDisplay != _caretDisplay || caretData.CaretOpacity != _caretOpacity) { return(true); } var tuple = CalculateCaretRectAndDisplayOffset(); var epsilon = 0.001; var size = tuple.Item1.Size; if (Math.Abs(size.Height - caretData.Size.Height) > epsilon || Math.Abs(size.Width - caretData.Size.Width) > epsilon) { return(true); } var caretCharacter = tuple.Item3; if (caretData.CaretCharacter != caretCharacter) { return(true); } return(false); }
public UITextField(UIManager manager, BitmapFont font) : base(manager, font) { Caret = new CaretData(); ValidateInput = DefaultValidateInput; _placeholderSegment = new TextSegment(font); UsePlaceholderColorFormatting = true; PlaceholderColor = Color.Gray * 0.8f; PlaceholderSelectColor = Color.LightGoldenrodYellow * 0.9f; PlaceholderColorTransitionSpeed = 0.125f; _obscureChar = DefaultObscureChar; _charLimit = 1024; CharBlacklist = new ObservableHashSet <char>(); CharBlacklist.OnAdd += (s, value) => Remove(value); IsKeyboardEventTrigger = true; IsMouseEventTrigger = true; BuildQuadTree = true; IsSelectable = true; SelectionColor = Color.OrangeRed; SelectionOutlineThickness = 2f; OnKeyRepeat += UITextArea_OnKeyRepeat; OnKeyPress += UITextArea_OnKeyPress; OnTextInput += UITextArea_OnTextInput; }
private void MoveCaretElementToCaret(CaretData caretData) { var point = GetRealCaretVisualPoint(); Canvas.SetLeft(caretData.Element, point.X); Canvas.SetTop(caretData.Element, point.Y + caretData.YDisplayOffset); }
private void MoveCaretElementToCaret(CaretData caretData) { var point = GetRealCaretVisualPoint(); if (caretData.CaretDisplay == CaretDisplay.Select) { point = new Point(SnapToWholeDevicePixels(point.X, ensurePositive: false), point.Y); } Canvas.SetLeft(caretData.Element, point.X); Canvas.SetTop(caretData.Element, point.Y + caretData.YDisplayOffset); }
private void MoveCaretElementToCaret(VirtualSnapshotPoint caretPoint, CaretData caretData) { var point = GetRealCaretVisualPoint(caretPoint); if (point == s_invalidPoint) { caretData.Element.Visibility = Visibility.Hidden; } else { caretData.Element.Visibility = Visibility.Visible; if (caretData.CaretDisplay == CaretDisplay.Select) { point = new Point(SnapToWholeDevicePixels(point.X, ensurePositive: false), point.Y); } Canvas.SetLeft(caretData.Element, point.X); Canvas.SetTop(caretData.Element, point.Y + caretData.YDisplayOffset); } }
/// <summary> /// This determines if the image which is used to represent the caret is stale and needs /// to be recreated. /// </summary> private bool IsAdornmentStale(CaretData caretData) { // Size is represented in floating point so strict equality comparison will almost // always return false. Use a simple epsilon to test the difference if (caretData.Color != TryCalculateCaretColor() || caretData.CaretDisplay != _caretDisplay || caretData.CaretOpacity != _caretOpacity) { return true; } var epsilon = 0.001; var size = CalculateCaretRectAndDisplayOffset().Item1.Size; if (Math.Abs(size.Height - caretData.Size.Height) > epsilon || Math.Abs(size.Width - caretData.Size.Width) > epsilon) { return true; } return false; }
private void MoveCaretImageToCaret(CaretData caretData) { var point = GetRealCaretVisualPoint(); Canvas.SetLeft(caretData.Image, point.X); Canvas.SetTop(caretData.Image, point.Y + caretData.YDisplayOffset); }
private void CreateCaretData() { var color = TryCalculateCaretColor(); var brush = new SolidColorBrush(color ?? Colors.Black); brush.Freeze(); var pen = new Pen(brush, 1.0); var rect = new Rect(GetRealCaretVisualPoint(), GetOptimalCaretSize()); var geometry = new RectangleGeometry(rect); var drawing = new GeometryDrawing(brush, pen, geometry); drawing.Freeze(); var drawingImage = new DrawingImage(drawing); drawingImage.Freeze(); var image = new Image(); image.Opacity = _caretOpacity; image.Source = drawingImage; var point = _view.Caret.Position.BufferPosition; var data = new CaretData(image, color, point); _caretData = data; _layer.AddAdornment( AdornmentPositioningBehavior.TextRelative, new SnapshotSpan(point, 0), _tag, image, (x, y) => { _caretData = null; }); MoveCaretImageToCaret(); }