Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ModelPerspective.cs
- FontWeight.cs
- WsatAdminException.cs
- TogglePatternIdentifiers.cs
- SHA384.cs
- storepermissionattribute.cs
- ColorConvertedBitmap.cs
- PathFigureCollection.cs
- ToolStripRenderEventArgs.cs
- ValueChangedEventManager.cs
- TypeListConverter.cs
- List.cs
- ResXResourceWriter.cs
- LocalBuilder.cs
- InputLanguageCollection.cs
- WebPartCatalogAddVerb.cs
- ConnectorSelectionGlyph.cs
- MSAANativeProvider.cs
- BinHexDecoder.cs
- ResourceDictionary.cs
- ScriptRef.cs
- LinqDataSourceSelectEventArgs.cs
- Transform3D.cs
- UIntPtr.cs
- TextParaLineResult.cs
- URL.cs
- BoundingRectTracker.cs
- CqlQuery.cs
- RegexStringValidatorAttribute.cs
- TextHidden.cs
- PipeException.cs
- MimeTypePropertyAttribute.cs
- TextRange.cs
- PaintValueEventArgs.cs
- WebPart.cs
- PreservationFileWriter.cs
- SoapIncludeAttribute.cs
- HostingEnvironmentException.cs
- SchemaImporterExtensionElement.cs
- DataRelationCollection.cs
- WebPartVerbsEventArgs.cs
- COM2ExtendedTypeConverter.cs
- MemberAccessException.cs
- BlockCollection.cs
- SoapTypeAttribute.cs
- RangeEnumerable.cs
- CriticalHandle.cs
- EventLogger.cs
- DispatchRuntime.cs
- PtsCache.cs
- ListViewUpdateEventArgs.cs
- DateTimeConverter.cs
- QuaternionIndependentAnimationStorage.cs
- RIPEMD160Managed.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- WorkflowDurableInstance.cs
- TabControlCancelEvent.cs
- Point4DValueSerializer.cs
- DecoratedNameAttribute.cs
- Rect3DConverter.cs
- EpmSyndicationContentSerializer.cs
- BitmapEffectState.cs
- XamlValidatingReader.cs
- HtmlButton.cs
- dataobject.cs
- MediaTimeline.cs
- HGlobalSafeHandle.cs
- HttpListenerRequestTraceRecord.cs
- StructuralCache.cs
- GeneralTransformCollection.cs
- MaterialCollection.cs
- ToolStripItemTextRenderEventArgs.cs
- IApplicationTrustManager.cs
- ContractMapping.cs
- SoapIncludeAttribute.cs
- TypeUsageBuilder.cs
- TagPrefixInfo.cs
- AttributeCollection.cs
- ProcessThread.cs
- TypeSource.cs
- ConfigurationSectionCollection.cs
- DependencyPropertyChangedEventArgs.cs
- SymmetricKeyWrap.cs
- DNS.cs
- DateTimeOffsetStorage.cs
- MemoryFailPoint.cs
- MessageBox.cs
- RawStylusSystemGestureInputReport.cs
- DisplayNameAttribute.cs
- fixedPageContentExtractor.cs
- ComponentDispatcher.cs
- Form.cs
- FreeFormDesigner.cs
- OracleInfoMessageEventArgs.cs
- DataGridViewComboBoxColumn.cs
- TableLayoutPanelCellPosition.cs
- Int16AnimationUsingKeyFrames.cs
- ValidationPropertyAttribute.cs
- WsdlContractConversionContext.cs
- Int64AnimationBase.cs