// 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.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; /// /// 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(); } } /// /// 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; } } }