// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team // // Permission is hereby granted, free of charge, to any person obtaining a copy of this // software and associated documentation files (the "Software"), to deal in the Software // without restriction, including without limitation the rights to use, copy, modify, merge, // publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons // to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or // substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE // FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. using System; using System.Globalization; using System.Windows; using System.Windows.Media; using System.Windows.Media.TextFormatting; using ICSharpCode.AvalonEdit.Utils; namespace ICSharpCode.AvalonEdit.Rendering { /// /// implementation that allows changing the properties. /// A instance usually is assigned to a single /// . /// public class VisualLineElementTextRunProperties : TextRunProperties, ICloneable { Brush backgroundBrush; BaselineAlignment baselineAlignment; CultureInfo cultureInfo; double fontHintingEmSize; double fontRenderingEmSize; Brush foregroundBrush; Typeface typeface; TextDecorationCollection textDecorations; TextEffectCollection textEffects; TextRunTypographyProperties typographyProperties; NumberSubstitution numberSubstitution; /// /// Creates a new VisualLineElementTextRunProperties instance that copies its values /// from the specified . /// For the and collections, deep copies /// are created if those collections are not frozen. /// public VisualLineElementTextRunProperties(TextRunProperties textRunProperties) { if (textRunProperties == null) throw new ArgumentNullException("textRunProperties"); backgroundBrush = textRunProperties.BackgroundBrush; baselineAlignment = textRunProperties.BaselineAlignment; cultureInfo = textRunProperties.CultureInfo; fontHintingEmSize = textRunProperties.FontHintingEmSize; fontRenderingEmSize = textRunProperties.FontRenderingEmSize; foregroundBrush = textRunProperties.ForegroundBrush; typeface = textRunProperties.Typeface; textDecorations = textRunProperties.TextDecorations; if (textDecorations != null && !textDecorations.IsFrozen) { textDecorations = textDecorations.Clone(); } textEffects = textRunProperties.TextEffects; if (textEffects != null && !textEffects.IsFrozen) { textEffects = textEffects.Clone(); } typographyProperties = textRunProperties.TypographyProperties; numberSubstitution = textRunProperties.NumberSubstitution; } /// /// Creates a copy of this instance. /// public virtual VisualLineElementTextRunProperties Clone() { return new VisualLineElementTextRunProperties(this); } object ICloneable.Clone() { return Clone(); } /// public override Brush BackgroundBrush { get { return backgroundBrush; } } /// /// Sets the . /// public void SetBackgroundBrush(Brush value) { ExtensionMethods.CheckIsFrozen(value); backgroundBrush = value; } /// public override BaselineAlignment BaselineAlignment { get { return baselineAlignment; } } /// /// Sets the . /// public void SetBaselineAlignment(BaselineAlignment value) { baselineAlignment = value; } /// public override CultureInfo CultureInfo { get { return cultureInfo; } } /// /// Sets the . /// public void SetCultureInfo(CultureInfo value) { if (value == null) throw new ArgumentNullException("value"); cultureInfo = value; } /// public override double FontHintingEmSize { get { return fontHintingEmSize; } } /// /// Sets the . /// public void SetFontHintingEmSize(double value) { fontHintingEmSize = value; } /// public override double FontRenderingEmSize { get { return fontRenderingEmSize; } } /// /// Sets the . /// public void SetFontRenderingEmSize(double value) { fontRenderingEmSize = value; } /// public override Brush ForegroundBrush { get { return foregroundBrush; } } /// /// Sets the . /// public void SetForegroundBrush(Brush value) { ExtensionMethods.CheckIsFrozen(value); foregroundBrush = value; } /// public override Typeface Typeface { get { return typeface; } } /// /// Sets the . /// public void SetTypeface(Typeface value) { if (value == null) throw new ArgumentNullException("value"); typeface = value; } /// /// Gets the text decorations. The value may be null, a frozen /// or an unfrozen . /// If the value is an unfrozen , you may assume that the /// collection instance is only used for this instance and it is safe /// to add s. /// public override TextDecorationCollection TextDecorations { get { return textDecorations; } } /// /// Sets the . /// public void SetTextDecorations(TextDecorationCollection value) { ExtensionMethods.CheckIsFrozen(value); textDecorations = value; } /// /// Gets the text effects. The value may be null, a frozen /// or an unfrozen . /// If the value is an unfrozen , you may assume that the /// collection instance is only used for this instance and it is safe /// to add s. /// public override TextEffectCollection TextEffects { get { return textEffects; } } /// /// Sets the . /// public void SetTextEffects(TextEffectCollection value) { ExtensionMethods.CheckIsFrozen(value); textEffects = value; } /// /// Gets the typography properties for the text run. /// public override TextRunTypographyProperties TypographyProperties { get { return typographyProperties; } } /// /// Sets the . /// public void SetTypographyProperties(TextRunTypographyProperties value) { typographyProperties = value; } /// /// Gets the number substitution settings for the text run. /// public override NumberSubstitution NumberSubstitution { get { return numberSubstitution; } } /// /// Sets the . /// public void SetNumberSubstitution(NumberSubstitution value) { numberSubstitution = value; } } }