From 080f1697e97e13461ec6df4d31c8924d01257a1b Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Tue, 9 Apr 2019 01:47:48 +0300 Subject: MERGE --- .../Rendering/InlineObjectRun.cs | 145 +++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/InlineObjectRun.cs (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/InlineObjectRun.cs') diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/InlineObjectRun.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/InlineObjectRun.cs new file mode 100644 index 000000000..7448a8007 --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/InlineObjectRun.cs @@ -0,0 +1,145 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; +using System.Windows.Media.TextFormatting; + +namespace Tango.Scripting.Editors.Rendering +{ + /// + /// A inline UIElement in the document. + /// + public class InlineObjectElement : VisualLineElement + { + /// + /// Gets the inline element that is displayed. + /// + public UIElement Element { get; private set; } + + /// + /// Creates a new InlineObjectElement. + /// + /// The length of the element in the document. Must be non-negative. + /// The element to display. + public InlineObjectElement(int documentLength, UIElement element) + : base(1, documentLength) + { + if (element == null) + throw new ArgumentNullException("element"); + this.Element = element; + } + + /// + public override TextRun CreateTextRun(int startVisualColumn, ITextRunConstructionContext context) + { + if (context == null) + throw new ArgumentNullException("context"); + + return new InlineObjectRun(1, this.TextRunProperties, this.Element); + } + } + + /// + /// A text run with an embedded UIElement. + /// + public class InlineObjectRun : TextEmbeddedObject + { + UIElement element; + int length; + TextRunProperties properties; + internal Size desiredSize; + + /// + /// Creates a new InlineObjectRun instance. + /// + /// The length of the TextRun. + /// The to use. + /// The to display. + public InlineObjectRun(int length, TextRunProperties properties, UIElement element) + { + if (length <= 0) + throw new ArgumentOutOfRangeException("length", length, "Value must be positive"); + if (properties == null) + throw new ArgumentNullException("properties"); + if (element == null) + throw new ArgumentNullException("element"); + + this.length = length; + this.properties = properties; + this.element = element; + } + + /// + /// Gets the element displayed by the InlineObjectRun. + /// + public UIElement Element { + get { return element; } + } + + /// + /// Gets the VisualLine that contains this object. This property is only available after the object + /// was added to the text view. + /// + public VisualLine VisualLine { get; internal set; } + + /// + public override LineBreakCondition BreakBefore { + get { return LineBreakCondition.BreakDesired; } + } + + /// + public override LineBreakCondition BreakAfter { + get { return LineBreakCondition.BreakDesired; } + } + + /// + public override bool HasFixedSize { + get { return true; } + } + + /// + public override CharacterBufferReference CharacterBufferReference { + get { return new CharacterBufferReference(); } + } + + /// + public override int Length { + get { return length; } + } + + /// + public override TextRunProperties Properties { + get { return properties; } + } + + /// + public override TextEmbeddedObjectMetrics Format(double remainingParagraphWidth) + { + double baseline = TextBlock.GetBaselineOffset(element); + if (double.IsNaN(baseline)) + baseline = desiredSize.Height; + return new TextEmbeddedObjectMetrics(desiredSize.Width, desiredSize.Height, baseline); + } + + /// + public override Rect ComputeBoundingBox(bool rightToLeft, bool sideways) + { + if (this.element.IsArrangeValid) { + double baseline = TextBlock.GetBaselineOffset(element); + if (double.IsNaN(baseline)) + baseline = desiredSize.Height; + return new Rect(new Point(0, -baseline), desiredSize); + } else { + return Rect.Empty; + } + } + + /// + public override void Draw(DrawingContext drawingContext, Point origin, bool rightToLeft, bool sideways) + { + } + } +} -- cgit v1.3.1