Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Core / CSharp / System / Windows / Media / textformatting / TextLineBreak.cs / 1 / TextLineBreak.cs
//------------------------------------------------------------------------ // // Microsoft Windows Client Platform // Copyright (C) Microsoft Corporation // // File: TextLineBreak.cs // // Contents: Text properties and state at the point where text is broken // by the line breaking process, which may need to be carried over // when formatting the next line. // // Spec: http://team/sites/Avalon/Specs/Text%20Formatting%20API.doc // // Created: 12-5-2004 Niklas Borson (niklasb) // //----------------------------------------------------------------------- using System; using System.Security; using System.Collections; using System.Collections.Generic; using System.Windows; using System.Windows.Media; using MS.Internal; using MS.Internal.TextFormatting; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; namespace System.Windows.Media.TextFormatting { ////// Text properties and state at the point where text is broken /// by the line breaking process. /// public sealed class TextLineBreak : IDisposable { private TextModifierScope _currentScope; private SecurityCriticalDataForSet_breakRecord; #region Constructors /// /// Internallly construct the line break /// internal TextLineBreak( TextModifierScope currentScope, SecurityCriticalDataForSetbreakRecord ) { _currentScope = currentScope; _breakRecord = breakRecord; if (breakRecord.Value == IntPtr.Zero) { // this object does not hold unmanaged resource, // remove it from the finalizer queue. GC.SuppressFinalize(this); } } #endregion /// /// Finalize the line break /// ~TextLineBreak() { DisposeInternal(true); } ////// Dispose the line break /// public void Dispose() { DisposeInternal(false); GC.SuppressFinalize(this); } ////// Clone a new instance of TextLineBreak /// ////// Critical - as this calls unmanaged API LoCloneBreakRecord. /// PublicOK - as it takes no parameter and retain no additional unmanaged resource. /// [SecurityCritical] public TextLineBreak Clone() { IntPtr pbreakrec = IntPtr.Zero; if (_breakRecord.Value != IntPtr.Zero) { LsErr lserr = UnsafeNativeMethods.LoCloneBreakRecord(_breakRecord.Value, out pbreakrec); if (lserr != LsErr.None) { TextFormatterContext.ThrowExceptionFromLsError(SR.Get(SRID.CloneBreakRecordFailure, lserr), lserr); } } return new TextLineBreak(_currentScope, new SecurityCriticalDataForSet(pbreakrec)); } /// /// Destroy LS unmanaged break records object inside the line break /// managed object. The parameter flag indicates whether the call is /// from finalizer thread or the main UI thread. /// ////// Critical - as this calls the setter of _breakRecord.Value which is type SecurityCriticalDataForSet. /// _breakRecord is the value received from call to LoCreateBreaks and being passed back in /// when building the next break. No code should have access to set it otherwise. /// Safe - as this does not take any parameter that it passes directly to the critical function. /// [SecurityCritical, SecurityTreatAsSafe] private void DisposeInternal(bool finalizing) { if (_breakRecord.Value != IntPtr.Zero) { UnsafeNativeMethods.LoDisposeBreakRecord(_breakRecord.Value, finalizing); _breakRecord.Value = IntPtr.Zero; GC.KeepAlive(this); } } ////// Current text modifier scope, which can be null. /// internal TextModifierScope TextModifierScope { get { return _currentScope; } } ////// Unmanaged pointer to LS break records structure /// internal SecurityCriticalDataForSetBreakRecord { get { return _breakRecord; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------ // // Microsoft Windows Client Platform // Copyright (C) Microsoft Corporation // // File: TextLineBreak.cs // // Contents: Text properties and state at the point where text is broken // by the line breaking process, which may need to be carried over // when formatting the next line. // // Spec: http://team/sites/Avalon/Specs/Text%20Formatting%20API.doc // // Created: 12-5-2004 Niklas Borson (niklasb) // //----------------------------------------------------------------------- using System; using System.Security; using System.Collections; using System.Collections.Generic; using System.Windows; using System.Windows.Media; using MS.Internal; using MS.Internal.TextFormatting; using SR = MS.Internal.PresentationCore.SR; using SRID = MS.Internal.PresentationCore.SRID; namespace System.Windows.Media.TextFormatting { /// /// Text properties and state at the point where text is broken /// by the line breaking process. /// public sealed class TextLineBreak : IDisposable { private TextModifierScope _currentScope; private SecurityCriticalDataForSet_breakRecord; #region Constructors /// /// Internallly construct the line break /// internal TextLineBreak( TextModifierScope currentScope, SecurityCriticalDataForSetbreakRecord ) { _currentScope = currentScope; _breakRecord = breakRecord; if (breakRecord.Value == IntPtr.Zero) { // this object does not hold unmanaged resource, // remove it from the finalizer queue. GC.SuppressFinalize(this); } } #endregion /// /// Finalize the line break /// ~TextLineBreak() { DisposeInternal(true); } ////// Dispose the line break /// public void Dispose() { DisposeInternal(false); GC.SuppressFinalize(this); } ////// Clone a new instance of TextLineBreak /// ////// Critical - as this calls unmanaged API LoCloneBreakRecord. /// PublicOK - as it takes no parameter and retain no additional unmanaged resource. /// [SecurityCritical] public TextLineBreak Clone() { IntPtr pbreakrec = IntPtr.Zero; if (_breakRecord.Value != IntPtr.Zero) { LsErr lserr = UnsafeNativeMethods.LoCloneBreakRecord(_breakRecord.Value, out pbreakrec); if (lserr != LsErr.None) { TextFormatterContext.ThrowExceptionFromLsError(SR.Get(SRID.CloneBreakRecordFailure, lserr), lserr); } } return new TextLineBreak(_currentScope, new SecurityCriticalDataForSet(pbreakrec)); } /// /// Destroy LS unmanaged break records object inside the line break /// managed object. The parameter flag indicates whether the call is /// from finalizer thread or the main UI thread. /// ////// Critical - as this calls the setter of _breakRecord.Value which is type SecurityCriticalDataForSet. /// _breakRecord is the value received from call to LoCreateBreaks and being passed back in /// when building the next break. No code should have access to set it otherwise. /// Safe - as this does not take any parameter that it passes directly to the critical function. /// [SecurityCritical, SecurityTreatAsSafe] private void DisposeInternal(bool finalizing) { if (_breakRecord.Value != IntPtr.Zero) { UnsafeNativeMethods.LoDisposeBreakRecord(_breakRecord.Value, finalizing); _breakRecord.Value = IntPtr.Zero; GC.KeepAlive(this); } } ////// Current text modifier scope, which can be null. /// internal TextModifierScope TextModifierScope { get { return _currentScope; } } ////// Unmanaged pointer to LS break records structure /// internal SecurityCriticalDataForSetBreakRecord { get { return _breakRecord; } } } } // 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
- CounterSample.cs
- DataObject.cs
- HtmlInputControl.cs
- CallContext.cs
- TaiwanCalendar.cs
- backend.cs
- MetadataItem_Static.cs
- WebPartsPersonalization.cs
- IgnoreSectionHandler.cs
- SmiGettersStream.cs
- ImageBrush.cs
- NamespaceInfo.cs
- Rotation3D.cs
- SplashScreen.cs
- LinearQuaternionKeyFrame.cs
- PageParser.cs
- FloaterParagraph.cs
- AudioStateChangedEventArgs.cs
- Knowncolors.cs
- FindCriteria11.cs
- UnsafeMethods.cs
- COM2ExtendedUITypeEditor.cs
- SoundPlayerAction.cs
- GrammarBuilderRuleRef.cs
- ScrollBarRenderer.cs
- TdsParserStateObject.cs
- ImageListDesigner.cs
- GPRECT.cs
- StyleCollection.cs
- Stack.cs
- Vector3DCollectionConverter.cs
- Solver.cs
- X509UI.cs
- Matrix.cs
- ForceCopyBuildProvider.cs
- ProviderCommandInfoUtils.cs
- ObjectTokenCategory.cs
- CodeTryCatchFinallyStatement.cs
- XmlUtil.cs
- MarkupExtensionParser.cs
- SignedXml.cs
- SoapCommonClasses.cs
- MultiSelector.cs
- DataView.cs
- JapaneseCalendar.cs
- ListBindingHelper.cs
- WorkflowTransactionService.cs
- SqlRewriteScalarSubqueries.cs
- ControlPaint.cs
- cryptoapiTransform.cs
- RichTextBoxAutomationPeer.cs
- CompiledRegexRunnerFactory.cs
- ForeignKeyConstraint.cs
- WeakEventTable.cs
- BooleanAnimationBase.cs
- SHA1.cs
- DoubleConverter.cs
- HtmlLink.cs
- StorageEndPropertyMapping.cs
- Debugger.cs
- StyleCollection.cs
- FunctionCommandText.cs
- DataSourceCacheDurationConverter.cs
- SQLDoubleStorage.cs
- DispatcherFrame.cs
- OuterGlowBitmapEffect.cs
- xmlglyphRunInfo.cs
- NegotiateStream.cs
- TargetControlTypeCache.cs
- ProgressBarRenderer.cs
- Line.cs
- ChangePasswordDesigner.cs
- ComponentResourceKey.cs
- ClonableStack.cs
- DrawingContextWalker.cs
- GradientBrush.cs
- ListItemConverter.cs
- _IPv4Address.cs
- ArrayWithOffset.cs
- Publisher.cs
- XPathNodeList.cs
- FileDocument.cs
- CreateUserWizardStep.cs
- InvalidCastException.cs
- HtmlHead.cs
- TypeInitializationException.cs
- DataServiceRequestArgs.cs
- TypedDataSetSchemaImporterExtension.cs
- GenericAuthenticationEventArgs.cs
- EmptyElement.cs
- SafeRightsManagementHandle.cs
- _NegoState.cs
- ToolboxBitmapAttribute.cs
- DocumentStatusResources.cs
- WebPartAddingEventArgs.cs
- SqlClientWrapperSmiStreamChars.cs
- UnsafeNativeMethods.cs
- InputMethodStateChangeEventArgs.cs
- BaseTemplateCodeDomTreeGenerator.cs
- StorageTypeMapping.cs