Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Media / textformatting / TextLineBreak.cs / 1305600 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DesignerObject.cs
- ContentValidator.cs
- SettingsProviderCollection.cs
- WindowsListViewGroupHelper.cs
- MultiPartWriter.cs
- PerfCounterSection.cs
- WindowsSolidBrush.cs
- CreateSequence.cs
- ServiceReference.cs
- PrePrepareMethodAttribute.cs
- ToolboxComponentsCreatingEventArgs.cs
- TextEditorSelection.cs
- AspNetHostingPermission.cs
- DesignerVerbCollection.cs
- GenericUriParser.cs
- AssociationType.cs
- ConnectionStringEditor.cs
- GlobalizationSection.cs
- ConfigurationValidatorBase.cs
- SBCSCodePageEncoding.cs
- IriParsingElement.cs
- TreeNodeConverter.cs
- UserControlBuildProvider.cs
- Command.cs
- ProvidersHelper.cs
- RtfControlWordInfo.cs
- ContractMapping.cs
- XmlSchemaValidator.cs
- SequenceNumber.cs
- XmlNullResolver.cs
- _AcceptOverlappedAsyncResult.cs
- Int64AnimationUsingKeyFrames.cs
- Brushes.cs
- RuntimeEnvironment.cs
- RelatedEnd.cs
- CellCreator.cs
- BinaryFormatter.cs
- TextTreeNode.cs
- XmlSerializer.cs
- TransformPatternIdentifiers.cs
- X509Extension.cs
- WindowsPrincipal.cs
- XmlLinkedNode.cs
- KeyGestureConverter.cs
- FrameworkElementFactory.cs
- Int32Rect.cs
- TreeNodeStyle.cs
- RelationshipEndMember.cs
- TableParaClient.cs
- AuditLog.cs
- InlinedAggregationOperatorEnumerator.cs
- Int32Collection.cs
- SafeRightsManagementEnvironmentHandle.cs
- EmptyReadOnlyDictionaryInternal.cs
- AvTraceDetails.cs
- WizardForm.cs
- ProfilePropertyNameValidator.cs
- ConnectionsZone.cs
- Decimal.cs
- ForceCopyBuildProvider.cs
- MemoryRecordBuffer.cs
- ZipFileInfoCollection.cs
- DataGridViewLinkCell.cs
- MatrixCamera.cs
- CodeArrayCreateExpression.cs
- TemplatedControlDesigner.cs
- AlphabeticalEnumConverter.cs
- MetaTable.cs
- SoapIgnoreAttribute.cs
- XmlDataSourceNodeDescriptor.cs
- FlowSwitchLink.cs
- InstanceKey.cs
- ParameterRefs.cs
- PrintEvent.cs
- uribuilder.cs
- WebBrowserEvent.cs
- GenericWebPart.cs
- XmlTypeAttribute.cs
- Line.cs
- WebPartDisplayModeCollection.cs
- StateElementCollection.cs
- FragmentQueryKB.cs
- __Filters.cs
- XNameConverter.cs
- RegexCaptureCollection.cs
- WebService.cs
- Bitmap.cs
- SqlDataSourceView.cs
- LayoutInformation.cs
- ByteArrayHelperWithString.cs
- UpdatePanelControlTrigger.cs
- EvidenceTypeDescriptor.cs
- QueryableFilterRepeater.cs
- TraceListener.cs
- _FixedSizeReader.cs
- IconEditor.cs
- Padding.cs
- CryptoHelper.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- AncillaryOps.cs