diff options
| author | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2019-04-08 13:49:55 +0300 |
|---|---|---|
| committer | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2019-04-08 13:49:55 +0300 |
| commit | fc8a05358a92cc3c77c5f1e30d536807ef0614fd (patch) | |
| tree | c65f696ebd60f3790145721307c255e5a339923f /Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/InlineObjectRun.cs | |
| parent | b4a71931ea52636c6b36376aa9d71697ccf73524 (diff) | |
| download | Tango-fc8a05358a92cc3c77c5f1e30d536807ef0614fd.tar.gz Tango-fc8a05358a92cc3c77c5f1e30d536807ef0614fd.zip | |
were added scripting projects
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/InlineObjectRun.cs')
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Rendering/InlineObjectRun.cs | 145 |
1 files changed, 145 insertions, 0 deletions
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 +{ + /// <summary> + /// A inline UIElement in the document. + /// </summary> + public class InlineObjectElement : VisualLineElement + { + /// <summary> + /// Gets the inline element that is displayed. + /// </summary> + public UIElement Element { get; private set; } + + /// <summary> + /// Creates a new InlineObjectElement. + /// </summary> + /// <param name="documentLength">The length of the element in the document. Must be non-negative.</param> + /// <param name="element">The element to display.</param> + public InlineObjectElement(int documentLength, UIElement element) + : base(1, documentLength) + { + if (element == null) + throw new ArgumentNullException("element"); + this.Element = element; + } + + /// <inheritdoc/> + public override TextRun CreateTextRun(int startVisualColumn, ITextRunConstructionContext context) + { + if (context == null) + throw new ArgumentNullException("context"); + + return new InlineObjectRun(1, this.TextRunProperties, this.Element); + } + } + + /// <summary> + /// A text run with an embedded UIElement. + /// </summary> + public class InlineObjectRun : TextEmbeddedObject + { + UIElement element; + int length; + TextRunProperties properties; + internal Size desiredSize; + + /// <summary> + /// Creates a new InlineObjectRun instance. + /// </summary> + /// <param name="length">The length of the TextRun.</param> + /// <param name="properties">The <see cref="TextRunProperties"/> to use.</param> + /// <param name="element">The <see cref="UIElement"/> to display.</param> + 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; + } + + /// <summary> + /// Gets the element displayed by the InlineObjectRun. + /// </summary> + public UIElement Element { + get { return element; } + } + + /// <summary> + /// Gets the VisualLine that contains this object. This property is only available after the object + /// was added to the text view. + /// </summary> + public VisualLine VisualLine { get; internal set; } + + /// <inheritdoc/> + public override LineBreakCondition BreakBefore { + get { return LineBreakCondition.BreakDesired; } + } + + /// <inheritdoc/> + public override LineBreakCondition BreakAfter { + get { return LineBreakCondition.BreakDesired; } + } + + /// <inheritdoc/> + public override bool HasFixedSize { + get { return true; } + } + + /// <inheritdoc/> + public override CharacterBufferReference CharacterBufferReference { + get { return new CharacterBufferReference(); } + } + + /// <inheritdoc/> + public override int Length { + get { return length; } + } + + /// <inheritdoc/> + public override TextRunProperties Properties { + get { return properties; } + } + + /// <inheritdoc/> + 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); + } + + /// <inheritdoc/> + 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; + } + } + + /// <inheritdoc/> + public override void Draw(DrawingContext drawingContext, Point origin, bool rightToLeft, bool sideways) + { + } + } +} |
