Example #1
0
        /// <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);
        }
Example #2
0
        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;
        }
Example #3
0
        private void MoveCaretElementToCaret(CaretData caretData)
        {
            var point = GetRealCaretVisualPoint();

            Canvas.SetLeft(caretData.Element, point.X);
            Canvas.SetTop(caretData.Element, point.Y + caretData.YDisplayOffset);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
            }
        }
Example #6
0
        /// <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;
        }
Example #7
0
 private void MoveCaretImageToCaret(CaretData caretData)
 {
     var point = GetRealCaretVisualPoint();
     Canvas.SetLeft(caretData.Image, point.X);
     Canvas.SetTop(caretData.Image, point.Y + caretData.YDisplayOffset);
 }
Example #8
0
        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();
        }