Beispiel #1
0
        void UpdateCaretPropertiesCore(bool forceInvalidateVisual)
        {
            if (layer.HexView.IsClosed)
            {
                return;
            }
            StopTimer();
            var line = hexCaret.ContainingHexViewLine;

            oldSelectionState = new SelectionState(layer.HexView.Selection);
            bool oldDrawCaretShape = drawCaretShape;

            drawCaretShape = line.VisibilityState != VSTF.VisibilityState.Unattached;
            bool drawOverwriteMode = OverwriteMode;

            var valuesCaretRect = GetCaretRect(line, drawOverwriteMode, HexColumnType.Values, line.BufferLine.ValueCells.GetCell(hexCaret.CurrentPosition.ValuePosition.BufferPosition), hexCaret.CurrentPosition.ValuePosition.CellPosition);
            var asciiCaretRect  = GetCaretRect(line, drawOverwriteMode, HexColumnType.Ascii, line.BufferLine.AsciiCells.GetCell(hexCaret.CurrentPosition.AsciiPosition.BufferPosition), hexCaret.CurrentPosition.AsciiPosition.CellPosition);

            if (drawCaretShape)
            {
                if (!imeStarted && layer.HexView.VisualElement.IsKeyboardFocused && layer.HexView.VisualElement.IsVisible)
                {
                    StartTimer();
                }
            }
            else
            {
                layer.Opacity = 0;
            }

            var invalidateVisual = valuesCaretGeometry.SetProperties(valuesCaretRect, drawCaretShape, drawOverwriteMode);

            invalidateVisual |= asciiCaretGeometry.SetProperties(asciiCaretRect, drawCaretShape, drawOverwriteMode);
            invalidateVisual |= forceInvalidateVisual || oldDrawCaretShape != drawCaretShape;
            if (invalidateVisual)
            {
                InvalidateVisual();
            }
        }
Beispiel #2
0
        void UpdateCaretPropertiesCore(bool forceInvalidateVisual)
        {
            if (layer.TextView.IsClosed)
            {
                return;
            }
            StopTimer();
            var line = textCaret.ContainingTextViewLine;

            oldSelectionState = new SelectionState(layer.TextView.Selection);
            bool oldDrawCaretShape = drawCaretShape;

            drawCaretShape = line.VisibilityState != VisibilityState.Unattached;
            bool drawOverwriteMode = OverwriteMode && textCaret.CurrentPosition.Position < line.End && layer.TextView.Selection.IsEmpty;

            var vpos = textCaret.CurrentPosition;

            if (drawOverwriteMode)
            {
                var textBounds = line.GetExtendedCharacterBounds(vpos);
                left  = textBounds.Left;
                width = textBounds.Width;
            }
            else
            {
                if (vpos.Position != line.Start && !vpos.IsInVirtualSpace)
                {
                    left = line.GetExtendedCharacterBounds(vpos.Position - 1).Trailing;
                }
                else
                {
                    left = line.GetExtendedCharacterBounds(vpos).Leading;
                }
                width = SystemParameters.CaretWidth;
            }

            height = line.TextHeight;
            if (drawCaretShape)
            {
                if (!imeStarted && layer.TextView.VisualElement.IsKeyboardFocused && layer.TextView.VisualElement.IsVisible)
                {
                    StartTimer();
                }
                top = line.TextTop;
                Canvas.SetLeft(this, left);
                Canvas.SetTop(this, top);
            }
            else
            {
                layer.Opacity = 0;
                top           = double.NaN;
            }

            var invalidateVisual = caretGeometry.SetProperties(width, height, drawOverwriteMode);

            invalidateVisual |= forceInvalidateVisual || oldDrawCaretShape != drawCaretShape;
            if (invalidateVisual)
            {
                InvalidateVisual();
            }
        }