Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Text / SimpleLine.cs / 1305600 / SimpleLine.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: SimpleLine.cs // // Description: Text line formatter. // // History: // 09/10/2003 : [....] - 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 : [....] - 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
- DetailsViewModeEventArgs.cs
- ParallelDesigner.xaml.cs
- DecimalStorage.cs
- PerformanceCounterPermissionEntryCollection.cs
- TypeRestriction.cs
- RuntimeHelpers.cs
- RemotingConfigParser.cs
- XMLUtil.cs
- ListBase.cs
- WindowsToolbar.cs
- DbFunctionCommandTree.cs
- MobileCategoryAttribute.cs
- CommandBinding.cs
- BamlReader.cs
- Adorner.cs
- FixedSOMContainer.cs
- DataGridViewComboBoxCell.cs
- SemanticTag.cs
- PeerMessageDispatcher.cs
- AuthenticationModuleElement.cs
- BitmapCodecInfoInternal.cs
- XmlNodeComparer.cs
- RemoteWebConfigurationHostStream.cs
- QilLoop.cs
- WebPartCancelEventArgs.cs
- DiscoveryServerProtocol.cs
- TableLayoutColumnStyleCollection.cs
- C14NUtil.cs
- FixedBufferAttribute.cs
- FixedSOMGroup.cs
- StandardToolWindows.cs
- ValueUtilsSmi.cs
- ContentTextAutomationPeer.cs
- OperationContractGenerationContext.cs
- RefreshResponseInfo.cs
- BindableTemplateBuilder.cs
- StringConverter.cs
- ResourceContainer.cs
- InputProviderSite.cs
- HealthMonitoringSection.cs
- MergePropertyDescriptor.cs
- ParseElementCollection.cs
- UpdateDelegates.Generated.cs
- DeferredTextReference.cs
- SourceInterpreter.cs
- LockedActivityGlyph.cs
- PeerCustomResolverBindingElement.cs
- TemplateBaseAction.cs
- SetStateDesigner.cs
- ActivityWithResultWrapper.cs
- EnvelopedPkcs7.cs
- WsdlHelpGeneratorElement.cs
- QuaternionRotation3D.cs
- Function.cs
- ControlPropertyNameConverter.cs
- AuthenticationModuleElementCollection.cs
- GraphicsPathIterator.cs
- GeneralTransform3DTo2DTo3D.cs
- PersonalizationState.cs
- URIFormatException.cs
- AssemblyNameUtility.cs
- MenuItemCollection.cs
- AuditLog.cs
- CodeTypeMemberCollection.cs
- NotifyInputEventArgs.cs
- LogExtent.cs
- BaseDataList.cs
- ProtocolsSection.cs
- WpfWebRequestHelper.cs
- ArithmeticException.cs
- ListBindingHelper.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- RootDesignerSerializerAttribute.cs
- SecurityTokenSpecification.cs
- Certificate.cs
- ControlLocalizer.cs
- SqlTypeSystemProvider.cs
- ToolStripLocationCancelEventArgs.cs
- ContainsRowNumberChecker.cs
- DeviceSpecific.cs
- DataQuery.cs
- typedescriptorpermissionattribute.cs
- Classification.cs
- XmlElementAttribute.cs
- SmtpFailedRecipientException.cs
- SqlReorderer.cs
- UserMapPath.cs
- MailMessageEventArgs.cs
- PagedDataSource.cs
- Hashtable.cs
- URL.cs
- LabelDesigner.cs
- VisualBrush.cs
- SafeNativeMethodsCLR.cs
- XmlAnyElementAttributes.cs
- DataGridViewRowEventArgs.cs
- RangeValidator.cs
- ManagementEventArgs.cs
- AuthorizationPolicyTypeElementCollection.cs
- FormViewPagerRow.cs