Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Documents / SpellerHighlightLayer.cs / 1 / SpellerHighlightLayer.cs
//----------------------------------------------------------------------------
//
// File: SpellerHighlightLayer.cs
//
// Description: Highlight rendering for the Speller.
//
//---------------------------------------------------------------------------
using System;
using MS.Internal;
using System.Windows.Documents;
using System.Windows.Media;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace System.Windows.Documents
{
// Highlight rendering for the Speller.
// The speller tags errors with red squigglies.
internal class SpellerHighlightLayer : HighlightLayer
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
// Static constructor.
static SpellerHighlightLayer()
{
_errorTextDecorations = GetErrorTextDecorations();
}
// Constructor.
internal SpellerHighlightLayer(Speller speller)
{
_speller = speller;
}
#endregion Constructors
//------------------------------------------------------
//
// Internal Methods
//
//-----------------------------------------------------
#region Internal Methods
// Returns a TextDecorationCollection used to tag spelling errors,
// or DependencyProperty.UnsetValue if there's no error at the specified position.
internal override object GetHighlightValue(StaticTextPointer textPosition, LogicalDirection direction)
{
object value;
if (IsContentHighlighted(textPosition, direction))
{
value = _errorTextDecorations;
}
else
{
value = DependencyProperty.UnsetValue;
}
return value;
}
// Returns true iff the indicated content has scoping highlights.
internal override bool IsContentHighlighted(StaticTextPointer textPosition, LogicalDirection direction)
{
return _speller.StatusTable.IsRunType(textPosition, direction, SpellerStatusTable.RunType.Error);
}
// Returns the position of the next highlight start or end in an
// indicated direction, or null if there is no such position.
internal override StaticTextPointer GetNextChangePosition(StaticTextPointer textPosition, LogicalDirection direction)
{
return _speller.StatusTable.GetNextErrorTransition(textPosition, direction);
}
// Raises a Changed event for any listeners, covering the
// specified text.
internal void FireChangedEvent(ITextPointer start, ITextPointer end)
{
if (Changed != null)
{
Changed(this, new SpellerHighlightChangedEventArgs(start, end));
}
}
#endregion Internal Methods
//------------------------------------------------------
//
// Internal Properties
//
//------------------------------------------------------
#region Internal Properties
// Type identifying this layer for Highlights.GetHighlightValue calls.
internal override Type OwnerType
{
get
{
return typeof(SpellerHighlightLayer);
}
}
#endregion Internal Properties
//-----------------------------------------------------
//
// Internal Events
//
//------------------------------------------------------
#region Internal Events
///
/// Event raised when a highlight range is inserted, removed, moved, or
/// has a local property value change.
///
internal override event HighlightChangedEventHandler Changed;
#endregion Internal Events
//-----------------------------------------------------
//
// Private Methods
//
//-----------------------------------------------------
#region Private Methods
// Calculates TextDecorations for speller errors.
private static TextDecorationCollection GetErrorTextDecorations()
{
//
// Build a "squiggle" Brush.
//
// This works by hard-coding a 3 pixel high TextDecoration, and
// then tiling horizontally. (We can't scale the squiggle in
// the vertical direction, there's no support to limit tiling
// to just the horizontal from the MIL.)
//
DrawingGroup drawingGroup = new DrawingGroup();
DrawingContext drawingContext = drawingGroup.Open();
Pen pen = new Pen(Brushes.Red, 0.33);
// This is our tile:
//
// x x
// x x
// x
//
drawingContext.DrawLine(pen, new Point(0.0, 0.0), new Point(0.5, 1.0));
drawingContext.DrawLine(pen, new Point(0.5, 1.0), new Point(1.0, 0.0));
drawingContext.Close();
DrawingBrush brush = new DrawingBrush(drawingGroup);
brush.TileMode = TileMode.Tile;
brush.Viewport = new Rect(0, 0, 3, 3);
brush.ViewportUnits = BrushMappingMode.Absolute;
TextDecoration textDecoration = new TextDecoration(
TextDecorationLocation.Underline,
new Pen(brush, 3),
0,
TextDecorationUnit.FontRecommended,
TextDecorationUnit.Pixel);
TextDecorationCollection decorationCollection = new TextDecorationCollection();
decorationCollection.Add(textDecoration);
decorationCollection.Freeze();
return decorationCollection;
}
#endregion Private Methods
//-----------------------------------------------------
//
// Private Types
//
//------------------------------------------------------
#region Private Types
// Argument for the Changed event, encapsulates a highlight change.
private class SpellerHighlightChangedEventArgs : HighlightChangedEventArgs
{
// Constructor.
internal SpellerHighlightChangedEventArgs(ITextPointer start, ITextPointer end)
{
List list;
Invariant.Assert(start.CompareTo(end) < 0, "Bogus start/end combination!");
list = new List(1);
list.Add(new TextSegment(start, end));
_ranges = new ReadOnlyCollection(list);
}
// Collection of changed content ranges.
internal override IList Ranges
{
get
{
return _ranges;
}
}
// Type identifying the owner of the changed layer.
internal override Type OwnerType
{
get
{
return typeof(SpellerHighlightLayer);
}
}
// Collection of changed content ranges.
private readonly ReadOnlyCollection _ranges;
}
#endregion Private Types
//-----------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
// Assocated Speller.
private readonly Speller _speller;
// Decorations for text flagged with a spelling error.
private static readonly TextDecorationCollection _errorTextDecorations;
#endregion Private Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
// File: SpellerHighlightLayer.cs
//
// Description: Highlight rendering for the Speller.
//
//---------------------------------------------------------------------------
using System;
using MS.Internal;
using System.Windows.Documents;
using System.Windows.Media;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace System.Windows.Documents
{
// Highlight rendering for the Speller.
// The speller tags errors with red squigglies.
internal class SpellerHighlightLayer : HighlightLayer
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
// Static constructor.
static SpellerHighlightLayer()
{
_errorTextDecorations = GetErrorTextDecorations();
}
// Constructor.
internal SpellerHighlightLayer(Speller speller)
{
_speller = speller;
}
#endregion Constructors
//------------------------------------------------------
//
// Internal Methods
//
//-----------------------------------------------------
#region Internal Methods
// Returns a TextDecorationCollection used to tag spelling errors,
// or DependencyProperty.UnsetValue if there's no error at the specified position.
internal override object GetHighlightValue(StaticTextPointer textPosition, LogicalDirection direction)
{
object value;
if (IsContentHighlighted(textPosition, direction))
{
value = _errorTextDecorations;
}
else
{
value = DependencyProperty.UnsetValue;
}
return value;
}
// Returns true iff the indicated content has scoping highlights.
internal override bool IsContentHighlighted(StaticTextPointer textPosition, LogicalDirection direction)
{
return _speller.StatusTable.IsRunType(textPosition, direction, SpellerStatusTable.RunType.Error);
}
// Returns the position of the next highlight start or end in an
// indicated direction, or null if there is no such position.
internal override StaticTextPointer GetNextChangePosition(StaticTextPointer textPosition, LogicalDirection direction)
{
return _speller.StatusTable.GetNextErrorTransition(textPosition, direction);
}
// Raises a Changed event for any listeners, covering the
// specified text.
internal void FireChangedEvent(ITextPointer start, ITextPointer end)
{
if (Changed != null)
{
Changed(this, new SpellerHighlightChangedEventArgs(start, end));
}
}
#endregion Internal Methods
//------------------------------------------------------
//
// Internal Properties
//
//------------------------------------------------------
#region Internal Properties
// Type identifying this layer for Highlights.GetHighlightValue calls.
internal override Type OwnerType
{
get
{
return typeof(SpellerHighlightLayer);
}
}
#endregion Internal Properties
//-----------------------------------------------------
//
// Internal Events
//
//------------------------------------------------------
#region Internal Events
///
/// Event raised when a highlight range is inserted, removed, moved, or
/// has a local property value change.
///
internal override event HighlightChangedEventHandler Changed;
#endregion Internal Events
//-----------------------------------------------------
//
// Private Methods
//
//-----------------------------------------------------
#region Private Methods
// Calculates TextDecorations for speller errors.
private static TextDecorationCollection GetErrorTextDecorations()
{
//
// Build a "squiggle" Brush.
//
// This works by hard-coding a 3 pixel high TextDecoration, and
// then tiling horizontally. (We can't scale the squiggle in
// the vertical direction, there's no support to limit tiling
// to just the horizontal from the MIL.)
//
DrawingGroup drawingGroup = new DrawingGroup();
DrawingContext drawingContext = drawingGroup.Open();
Pen pen = new Pen(Brushes.Red, 0.33);
// This is our tile:
//
// x x
// x x
// x
//
drawingContext.DrawLine(pen, new Point(0.0, 0.0), new Point(0.5, 1.0));
drawingContext.DrawLine(pen, new Point(0.5, 1.0), new Point(1.0, 0.0));
drawingContext.Close();
DrawingBrush brush = new DrawingBrush(drawingGroup);
brush.TileMode = TileMode.Tile;
brush.Viewport = new Rect(0, 0, 3, 3);
brush.ViewportUnits = BrushMappingMode.Absolute;
TextDecoration textDecoration = new TextDecoration(
TextDecorationLocation.Underline,
new Pen(brush, 3),
0,
TextDecorationUnit.FontRecommended,
TextDecorationUnit.Pixel);
TextDecorationCollection decorationCollection = new TextDecorationCollection();
decorationCollection.Add(textDecoration);
decorationCollection.Freeze();
return decorationCollection;
}
#endregion Private Methods
//-----------------------------------------------------
//
// Private Types
//
//------------------------------------------------------
#region Private Types
// Argument for the Changed event, encapsulates a highlight change.
private class SpellerHighlightChangedEventArgs : HighlightChangedEventArgs
{
// Constructor.
internal SpellerHighlightChangedEventArgs(ITextPointer start, ITextPointer end)
{
List list;
Invariant.Assert(start.CompareTo(end) < 0, "Bogus start/end combination!");
list = new List(1);
list.Add(new TextSegment(start, end));
_ranges = new ReadOnlyCollection(list);
}
// Collection of changed content ranges.
internal override IList Ranges
{
get
{
return _ranges;
}
}
// Type identifying the owner of the changed layer.
internal override Type OwnerType
{
get
{
return typeof(SpellerHighlightLayer);
}
}
// Collection of changed content ranges.
private readonly ReadOnlyCollection _ranges;
}
#endregion Private Types
//-----------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
// Assocated Speller.
private readonly Speller _speller;
// Decorations for text flagged with a spelling error.
private static readonly TextDecorationCollection _errorTextDecorations;
#endregion Private Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ProjectionPlanCompiler.cs
- TimerEventSubscriptionCollection.cs
- TemplatedWizardStep.cs
- CompressionTransform.cs
- ZipIOLocalFileDataDescriptor.cs
- COM2ExtendedBrowsingHandler.cs
- DynamicObject.cs
- HyperLinkStyle.cs
- ShutDownListener.cs
- XmlILIndex.cs
- EnumBuilder.cs
- Effect.cs
- WebBrowsableAttribute.cs
- LineServices.cs
- ConstructorExpr.cs
- BamlResourceContent.cs
- ToolStripPanelRenderEventArgs.cs
- DataMemberFieldEditor.cs
- EventToken.cs
- StructuredTypeEmitter.cs
- EventSetter.cs
- ProcessHostFactoryHelper.cs
- StreamInfo.cs
- DateTimeConstantAttribute.cs
- DesignerActionGlyph.cs
- LockCookie.cs
- MimeReflector.cs
- OutputCacheProfileCollection.cs
- Options.cs
- StorageRoot.cs
- VarRefManager.cs
- Crc32Helper.cs
- Calendar.cs
- cookie.cs
- TextRunCacheImp.cs
- AnnotationObservableCollection.cs
- XmlSchemaChoice.cs
- BitmapSource.cs
- TextTreeUndoUnit.cs
- ModelToObjectValueConverter.cs
- ReadOnlyKeyedCollection.cs
- InkCanvasAutomationPeer.cs
- SamlAuthorizationDecisionStatement.cs
- SplashScreenNativeMethods.cs
- SQLByteStorage.cs
- Policy.cs
- MessageBox.cs
- FrameworkElementAutomationPeer.cs
- SqlInternalConnectionSmi.cs
- MaskDescriptor.cs
- TemplateColumn.cs
- codemethodreferenceexpression.cs
- FrameworkElementAutomationPeer.cs
- ResXResourceWriter.cs
- XPathAxisIterator.cs
- EdmFunctions.cs
- ServerValidateEventArgs.cs
- Line.cs
- Int32EqualityComparer.cs
- Avt.cs
- PersonalizationAdministration.cs
- WebPartsPersonalization.cs
- OdbcParameterCollection.cs
- CodeArrayIndexerExpression.cs
- Subset.cs
- MatchingStyle.cs
- ShimAsPublicXamlType.cs
- RuleSetReference.cs
- CornerRadiusConverter.cs
- AsymmetricKeyExchangeFormatter.cs
- XmlSigningNodeWriter.cs
- IdentitySection.cs
- DesignSurface.cs
- Cursor.cs
- Formatter.cs
- CodeTypeParameter.cs
- XsltConvert.cs
- ScrollData.cs
- Scene3D.cs
- ResizeGrip.cs
- DataGridViewColumnCollectionDialog.cs
- AutomationTextAttribute.cs
- ScaleTransform.cs
- ConfigurationManagerHelperFactory.cs
- DataGridViewRowsAddedEventArgs.cs
- JavaScriptObjectDeserializer.cs
- EventMap.cs
- SettingsContext.cs
- WebBrowserHelper.cs
- ResourcePermissionBaseEntry.cs
- QueryableDataSourceView.cs
- DesigntimeLicenseContext.cs
- SerializerDescriptor.cs
- GPPOINT.cs
- WorkflowOperationBehavior.cs
- Int16Storage.cs
- ObjectViewQueryResultData.cs
- mediapermission.cs
- ObjectIDGenerator.cs
- WindowsFormsHostAutomationPeer.cs