Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / MS / Internal / Text / SimpleLine.cs / 1 / SimpleLine.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: SimpleLine.cs // // Description: Text line formatter. // // History: // 09/10/2003 : grzegorz - created. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Globalization; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.TextFormatting; namespace MS.Internal.Text { // --------------------------------------------------------------------- // Text line formatter. // --------------------------------------------------------------------- internal sealed class SimpleLine : Line { // ------------------------------------------------------------------ // // TextSource Implementation // // ----------------------------------------------------------------- #region TextSource Implementation // ------------------------------------------------------------------ // Get a text run at specified text source position. // ------------------------------------------------------------------ public override TextRun GetTextRun(int dcp) { Debug.Assert(dcp >= 0, "Character index must be non-negative."); TextRun run; // There is only one run of text. if (dcp < _content.Length) { // LineLayout may ask for dcp != 0. This case may only happen during partial // validation of TextRunCache. // Example: // 1) TextRunCache and LineMetrics array were created during measure process. // 2) Before OnRender is called somebody invalidates render only property. // This invalidates TextRunCache. // 3) Before OnRender is called InputHitTest is invoked. Because LineMetrics // array is valid, we don't have to recreate all lines. There is only // need to recreate the N-th line (line that has been hit). // During line recreation LineLayout will not refetch all runs from the // beginning of TextBlock control - it will ask for the run at the beginning // of the current line. // For this reason set 'offsetToFirstChar' to 'dcp' value. run = new TextCharacters(_content, dcp, _content.Length - dcp, _textProps); } else { run = new TextEndOfParagraph(_syntheticCharacterLength); } return run; } // ----------------------------------------------------------------- // Get text immediately before specified text source position. // ------------------------------------------------------------------ public override TextSpanGetPrecedingText(int dcp) { Debug.Assert(dcp >= 0, "Character index must be non-negative."); CharacterBufferRange charString = CharacterBufferRange.Empty; CultureInfo culture = null; if (dcp > 0) { charString = new CharacterBufferRange( _content, 0, Math.Min(dcp, _content.Length) ); culture = _textProps.CultureInfo; } return new TextSpan ( dcp, new CultureSpecificCharacterBufferRange(culture, charString) ); } /// /// TextFormatter to map a text source character index to a text effect character index /// /// text source character index ///the text effect index corresponding to the text effect character index public override int GetTextEffectCharacterIndexFromTextSourceCharacterIndex( int textSourceCharacterIndex ) { return textSourceCharacterIndex; } #endregion TextSource Implementation //------------------------------------------------------------------- // // Internal Methods // //------------------------------------------------------------------- #region Internal Methods // ----------------------------------------------------------------- // Constructor. // // owner - owner of the line. // ------------------------------------------------------------------ internal SimpleLine(System.Windows.Controls.TextBlock owner, string content, TextRunProperties textProps) : base(owner) { Debug.Assert(content != null); _content = content; _textProps = textProps; } #endregion Internal Methods //------------------------------------------------------------------- // // Private Fields // //-------------------------------------------------------------------- #region Private Fields // ------------------------------------------------------------------ // Content of the line. // ----------------------------------------------------------------- private readonly string _content; // ------------------------------------------------------------------ // Text properties. // ----------------------------------------------------------------- private readonly TextRunProperties _textProps; #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: SimpleLine.cs // // Description: Text line formatter. // // History: // 09/10/2003 : grzegorz - created. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Globalization; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.TextFormatting; namespace MS.Internal.Text { // --------------------------------------------------------------------- // Text line formatter. // --------------------------------------------------------------------- internal sealed class SimpleLine : Line { // ------------------------------------------------------------------ // // TextSource Implementation // // ----------------------------------------------------------------- #region TextSource Implementation // ------------------------------------------------------------------ // Get a text run at specified text source position. // ------------------------------------------------------------------ public override TextRun GetTextRun(int dcp) { Debug.Assert(dcp >= 0, "Character index must be non-negative."); TextRun run; // There is only one run of text. if (dcp < _content.Length) { // LineLayout may ask for dcp != 0. This case may only happen during partial // validation of TextRunCache. // Example: // 1) TextRunCache and LineMetrics array were created during measure process. // 2) Before OnRender is called somebody invalidates render only property. // This invalidates TextRunCache. // 3) Before OnRender is called InputHitTest is invoked. Because LineMetrics // array is valid, we don't have to recreate all lines. There is only // need to recreate the N-th line (line that has been hit). // During line recreation LineLayout will not refetch all runs from the // beginning of TextBlock control - it will ask for the run at the beginning // of the current line. // For this reason set 'offsetToFirstChar' to 'dcp' value. run = new TextCharacters(_content, dcp, _content.Length - dcp, _textProps); } else { run = new TextEndOfParagraph(_syntheticCharacterLength); } return run; } // ----------------------------------------------------------------- // Get text immediately before specified text source position. // ------------------------------------------------------------------ public override TextSpanGetPrecedingText(int dcp) { Debug.Assert(dcp >= 0, "Character index must be non-negative."); CharacterBufferRange charString = CharacterBufferRange.Empty; CultureInfo culture = null; if (dcp > 0) { charString = new CharacterBufferRange( _content, 0, Math.Min(dcp, _content.Length) ); culture = _textProps.CultureInfo; } return new TextSpan ( dcp, new CultureSpecificCharacterBufferRange(culture, charString) ); } /// /// TextFormatter to map a text source character index to a text effect character index /// /// text source character index ///the text effect index corresponding to the text effect character index public override int GetTextEffectCharacterIndexFromTextSourceCharacterIndex( int textSourceCharacterIndex ) { return textSourceCharacterIndex; } #endregion TextSource Implementation //------------------------------------------------------------------- // // Internal Methods // //------------------------------------------------------------------- #region Internal Methods // ----------------------------------------------------------------- // Constructor. // // owner - owner of the line. // ------------------------------------------------------------------ internal SimpleLine(System.Windows.Controls.TextBlock owner, string content, TextRunProperties textProps) : base(owner) { Debug.Assert(content != null); _content = content; _textProps = textProps; } #endregion Internal Methods //------------------------------------------------------------------- // // Private Fields // //-------------------------------------------------------------------- #region Private Fields // ------------------------------------------------------------------ // Content of the line. // ----------------------------------------------------------------- private readonly string _content; // ------------------------------------------------------------------ // Text properties. // ----------------------------------------------------------------- private readonly TextRunProperties _textProps; #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
- DependencyObjectProvider.cs
- XmlAttributeCache.cs
- SoapSchemaExporter.cs
- PeerUnsafeNativeCryptMethods.cs
- TablePattern.cs
- CodeAccessSecurityEngine.cs
- WebBaseEventKeyComparer.cs
- ProfilePropertyNameValidator.cs
- OleDbException.cs
- PropertyToken.cs
- TableLayoutPanelBehavior.cs
- Operators.cs
- handlecollector.cs
- ThicknessConverter.cs
- TreeView.cs
- DefaultValueConverter.cs
- MessagePropertyDescription.cs
- Int16Converter.cs
- EmbeddedMailObject.cs
- TableRowCollection.cs
- MenuItemBindingCollection.cs
- XslException.cs
- Win32Native.cs
- WebControlsSection.cs
- NCryptSafeHandles.cs
- DescendentsWalkerBase.cs
- ClientTargetCollection.cs
- WebConfigurationHost.cs
- DataGridViewRow.cs
- ProxyWebPartManager.cs
- SqlWriter.cs
- ControlSerializer.cs
- IisTraceListener.cs
- controlskin.cs
- DynamicControlParameter.cs
- EndpointBehaviorElement.cs
- CustomValidator.cs
- TrackingProfileSerializer.cs
- ManagementOptions.cs
- WebPermission.cs
- ItemsPresenter.cs
- SemaphoreSlim.cs
- SqlDataSourceEnumerator.cs
- ComponentRenameEvent.cs
- XmlSerializer.cs
- KeyTimeConverter.cs
- ProfileBuildProvider.cs
- Utility.cs
- IgnoreSection.cs
- PeerApplication.cs
- filewebrequest.cs
- TextDecorations.cs
- QuotedPairReader.cs
- ComponentCache.cs
- OleDbWrapper.cs
- SubMenuStyleCollection.cs
- TargetControlTypeAttribute.cs
- SerializationInfo.cs
- File.cs
- TextFindEngine.cs
- HttpServerVarsCollection.cs
- EarlyBoundInfo.cs
- CroppedBitmap.cs
- ComponentChangingEvent.cs
- WorkflowRuntime.cs
- InfoCardTraceRecord.cs
- RefreshPropertiesAttribute.cs
- ThreadAbortException.cs
- ApplicationException.cs
- ByteStack.cs
- NumberAction.cs
- ContextMenuStripGroup.cs
- FileDialog_Vista_Interop.cs
- ChannelManager.cs
- ConnectionStringsSection.cs
- TrailingSpaceComparer.cs
- invalidudtexception.cs
- GeometryCollection.cs
- EventSinkHelperWriter.cs
- DebugHandleTracker.cs
- MultiPageTextView.cs
- CultureInfo.cs
- SchemaElementLookUpTableEnumerator.cs
- SingleQueryOperator.cs
- TreeBuilder.cs
- MenuItemCollection.cs
- BindingExpression.cs
- DesignBindingPropertyDescriptor.cs
- WebPartAuthorizationEventArgs.cs
- DependencyProperty.cs
- OpCellTreeNode.cs
- CharAnimationBase.cs
- SoapProtocolReflector.cs
- DataServiceRequestOfT.cs
- ProjectionPath.cs
- IntellisenseTextBox.cs
- PrintingPermission.cs
- CorrelationManager.cs
- ValueSerializerAttribute.cs
- ToolStripSeparator.cs