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/Highlighting/HighlightingBrush.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/Highlighting/HighlightingBrush.cs')
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Highlighting/HighlightingBrush.cs | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Highlighting/HighlightingBrush.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Highlighting/HighlightingBrush.cs new file mode 100644 index 000000000..2e99013f3 --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Highlighting/HighlightingBrush.cs @@ -0,0 +1,117 @@ +// 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.Diagnostics; +using System.Globalization; +using System.Reflection; +using System.Runtime.Serialization; +using System.Windows; +using System.Windows.Media; + +using Tango.Scripting.Editors.Rendering; + +namespace Tango.Scripting.Editors.Highlighting +{ + /// <summary> + /// A brush used for syntax highlighting. Can retrieve a real brush on-demand. + /// </summary> + [Serializable] + public abstract class HighlightingBrush + { + /// <summary> + /// Gets the real brush. + /// </summary> + /// <param name="context">The construction context. context can be null!</param> + public abstract Brush GetBrush(ITextRunConstructionContext context); + + /// <summary> + /// Gets the color of the brush. + /// </summary> + /// <param name="context">The construction context. context can be null!</param> + public virtual Color? GetColor(ITextRunConstructionContext context) + { + SolidColorBrush scb = GetBrush(context) as SolidColorBrush; + if (scb != null) + return scb.Color; + else + return null; + } + } + + /// <summary> + /// Highlighting brush implementation that takes a frozen brush. + /// </summary> + [Serializable] + sealed class SimpleHighlightingBrush : HighlightingBrush, ISerializable + { + readonly SolidColorBrush brush; + + public SimpleHighlightingBrush(SolidColorBrush brush) + { + brush.Freeze(); + this.brush = brush; + } + + public SimpleHighlightingBrush(Color color) : this(new SolidColorBrush(color)) {} + + public override Brush GetBrush(ITextRunConstructionContext context) + { + return brush; + } + + public override string ToString() + { + return brush.ToString(); + } + + SimpleHighlightingBrush(SerializationInfo info, StreamingContext context) + { + this.brush = new SolidColorBrush((Color)ColorConverter.ConvertFromString(info.GetString("color"))); + brush.Freeze(); + } + + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + info.AddValue("color", brush.Color.ToString(CultureInfo.InvariantCulture)); + } + } + + /// <summary> + /// HighlightingBrush implementation that finds a brush using a resource. + /// </summary> + [Serializable] + sealed class SystemColorHighlightingBrush : HighlightingBrush, ISerializable + { + readonly PropertyInfo property; + + public SystemColorHighlightingBrush(PropertyInfo property) + { + Debug.Assert(property.ReflectedType == typeof(SystemColors)); + Debug.Assert(typeof(Brush).IsAssignableFrom(property.PropertyType)); + this.property = property; + } + + public override Brush GetBrush(ITextRunConstructionContext context) + { + return (Brush)property.GetValue(null, null); + } + + public override string ToString() + { + return property.Name; + } + + SystemColorHighlightingBrush(SerializationInfo info, StreamingContext context) + { + property = typeof(SystemColors).GetProperty(info.GetString("propertyName")); + if (property == null) + throw new ArgumentException("Error deserializing SystemColorHighlightingBrush"); + } + + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + info.AddValue("propertyName", property.Name); + } + } +} |
