Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebPartConnectVerb.cs
- SchemaImporterExtension.cs
- Component.cs
- LassoHelper.cs
- Type.cs
- ComponentChangingEvent.cs
- EventData.cs
- CompositeCollectionView.cs
- DataGridViewRow.cs
- CatalogPartChrome.cs
- ToolboxComponentsCreatedEventArgs.cs
- ADMembershipUser.cs
- LexicalChunk.cs
- MatrixAnimationUsingKeyFrames.cs
- RectangleHotSpot.cs
- Transform.cs
- GZipDecoder.cs
- SemanticValue.cs
- OutputCacheSection.cs
- DataGridItem.cs
- HashUtility.cs
- CommandField.cs
- ImageSource.cs
- DataTablePropertyDescriptor.cs
- SapiAttributeParser.cs
- TiffBitmapDecoder.cs
- TailCallAnalyzer.cs
- ObjectPersistData.cs
- WindowsSolidBrush.cs
- BrowserDefinition.cs
- ArgumentNullException.cs
- ClusterRegistryConfigurationProvider.cs
- DesignTimeData.cs
- DiffuseMaterial.cs
- ConstrainedDataObject.cs
- RadioButtonPopupAdapter.cs
- WindowsTreeView.cs
- OdbcDataReader.cs
- NativeMethodsCLR.cs
- InternalPermissions.cs
- QilUnary.cs
- TextModifierScope.cs
- HttpCapabilitiesEvaluator.cs
- PenContexts.cs
- BeginStoryboard.cs
- dsa.cs
- SspiSafeHandles.cs
- BufferedGraphicsManager.cs
- ReaderWriterLockWrapper.cs
- TraceInternal.cs
- Enum.cs
- MimeBasePart.cs
- VectorAnimationUsingKeyFrames.cs
- DriveNotFoundException.cs
- RecognizerStateChangedEventArgs.cs
- HorizontalAlignConverter.cs
- KeyboardDevice.cs
- ThicknessAnimationBase.cs
- PropertyChangedEventManager.cs
- CredentialCache.cs
- XmlAttributeOverrides.cs
- SocketInformation.cs
- MemberHolder.cs
- Profiler.cs
- AutoGeneratedField.cs
- ActiveXHelper.cs
- DataGridRowAutomationPeer.cs
- ApplicationHost.cs
- WhiteSpaceTrimStringConverter.cs
- BitStack.cs
- RawStylusActions.cs
- HttpHostedTransportConfiguration.cs
- FixedSOMTable.cs
- _TimerThread.cs
- ComPersistableTypeElement.cs
- FreezableCollection.cs
- ObfuscateAssemblyAttribute.cs
- ReadContentAsBinaryHelper.cs
- TypedTableBaseExtensions.cs
- ObjectStateEntry.cs
- XmlSortKey.cs
- MethodBuilderInstantiation.cs
- DataGridViewRowPrePaintEventArgs.cs
- OdbcUtils.cs
- KoreanLunisolarCalendar.cs
- Soap.cs
- RtfControlWordInfo.cs
- MessagePropertyAttribute.cs
- SqlDataSourceStatusEventArgs.cs
- Int16.cs
- ComponentDispatcherThread.cs
- ExternalCalls.cs
- _Win32.cs
- IPGlobalProperties.cs
- SatelliteContractVersionAttribute.cs
- Vector3DIndependentAnimationStorage.cs
- MissingFieldException.cs
- EntityDataSourceContextDisposingEventArgs.cs
- EventSetterHandlerConverter.cs
- COAUTHINFO.cs