Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / 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: [....]/sites/Avalon/Specs/Text%20Formatting%20API.doc // // Created: 12-5-2004 [....] ([....]) // //----------------------------------------------------------------------- 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
- CollectionViewGroup.cs
- HttpCachePolicyBase.cs
- DNS.cs
- HttpCookie.cs
- RoutedEventValueSerializer.cs
- TextureBrush.cs
- IndentedWriter.cs
- ModulesEntry.cs
- StreamGeometry.cs
- WorkflowInstanceExtensionCollection.cs
- ByteAnimation.cs
- ToolStripRendererSwitcher.cs
- VirtualizingPanel.cs
- HTTPNotFoundHandler.cs
- XmlSchemaSet.cs
- OdbcParameterCollection.cs
- AlignmentYValidation.cs
- DefaultEventAttribute.cs
- Pkcs7Signer.cs
- OrCondition.cs
- CheckBoxList.cs
- HttpProcessUtility.cs
- DbProviderFactoriesConfigurationHandler.cs
- InfoCardProofToken.cs
- EntityDataSourceChangingEventArgs.cs
- RMEnrollmentPage1.cs
- RuntimeEnvironment.cs
- ToolTipAutomationPeer.cs
- DataGridViewCellStyleConverter.cs
- CodeConditionStatement.cs
- SecurityProtocolFactory.cs
- WebPartCloseVerb.cs
- ChooseAction.cs
- ServiceDescriptions.cs
- _BaseOverlappedAsyncResult.cs
- WinFormsComponentEditor.cs
- ComponentManagerBroker.cs
- BinaryEditor.cs
- Clause.cs
- WebScriptMetadataInstanceContextProvider.cs
- OracleCommand.cs
- ByteAnimationBase.cs
- EncoderParameters.cs
- HttpListenerResponse.cs
- CompensationDesigner.cs
- DesignerImageAdapter.cs
- CompiledQueryCacheKey.cs
- RotateTransform.cs
- SimpleBitVector32.cs
- ParallelDesigner.cs
- SystemThemeKey.cs
- DocobjHost.cs
- DrawToolTipEventArgs.cs
- StyleConverter.cs
- CompletedAsyncResult.cs
- KeyValuePair.cs
- CellQuery.cs
- ErrorWebPart.cs
- WasEndpointConfigContainer.cs
- ErrorFormatterPage.cs
- WinEventTracker.cs
- PresentationTraceSources.cs
- KeyboardInputProviderAcquireFocusEventArgs.cs
- QuaternionKeyFrameCollection.cs
- Point3DCollectionConverter.cs
- BezierSegment.cs
- HtmlTableCell.cs
- CalloutQueueItem.cs
- PtsContext.cs
- SystemUnicastIPAddressInformation.cs
- HttpResponse.cs
- IisTraceListener.cs
- ItemCheckEvent.cs
- Type.cs
- DataGridViewSortCompareEventArgs.cs
- ThousandthOfEmRealDoubles.cs
- DefaultTraceListener.cs
- DataControlLinkButton.cs
- PageCodeDomTreeGenerator.cs
- AggregateNode.cs
- TypeBrowserDialog.cs
- SqlConnectionFactory.cs
- X500Name.cs
- C14NUtil.cs
- ActiveXHost.cs
- KnownBoxes.cs
- AspCompat.cs
- HttpRuntime.cs
- EventProvider.cs
- RefreshPropertiesAttribute.cs
- XamlBrushSerializer.cs
- WindowExtensionMethods.cs
- BamlRecordHelper.cs
- TypeGeneratedEventArgs.cs
- ExtensionQuery.cs
- TagNameToTypeMapper.cs
- DistributedTransactionPermission.cs
- XamlReader.cs
- NonClientArea.cs
- GPPOINT.cs