Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / MS / Internal / Text / LineMetrics.cs / 1 / LineMetrics.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: LineMetrics.cs // // Description: Cached metrics of a text line. // // History: // 04/25/2003 : grzegorz - moving from Avalon branch. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows; using System.Windows.Media; using System.Windows.Media.TextFormatting; namespace MS.Internal.Text { // --------------------------------------------------------------------- // Storage for metrics of a formatted line. // --------------------------------------------------------------------- internal struct LineMetrics { // ------------------------------------------------------------------ // Constructor. // // wrappingWidth - wrapping width for the line // length - number or characters in the line // width - width of the line // height - height of the line // baseline - baseline of the line // hasInlineObjects - has inline objects? // ----------------------------------------------------------------- internal LineMetrics( #if DEBUG double wrappingWidth, #endif int length, double width, double height, double baseline, bool hasInlineObjects, TextLineBreak textLineBreak) { #if DEBUG _wrappingWidth = wrappingWidth; #endif _start = 0; _width = width; _height = height; _baseline = baseline; _textLineBreak = textLineBreak; _packedData = ((uint) length & LengthMask) | (hasInlineObjects ? HasInlineObjectsMask : 0); } internal LineMetrics(LineMetrics source, double start, double width) { #if DEBUG _wrappingWidth = source.WrappingWidth; #endif _start = start; _width = width; _height = source.Height; _baseline = source.Baseline; _textLineBreak = source.TextLineBreak; _packedData = source._packedData | HasBeenUpdatedMask; } ////// Disposes linebreak object /// internal LineMetrics Dispose(bool returnUpdatedMetrics) { if(_textLineBreak != null) { _textLineBreak.Dispose(); if (returnUpdatedMetrics) { return new LineMetrics( #if DEBUG _wrappingWidth, #endif Length, _width, _height, _baseline, HasInlineObjects, null); } } return this; } #if DEBUG // ------------------------------------------------------------------ // Wrapping width for the line. // ------------------------------------------------------------------ internal double WrappingWidth { get { return _wrappingWidth; } } private double _wrappingWidth; #endif // ----------------------------------------------------------------- // Number or characters in the line. // ------------------------------------------------------------------ internal int Length { get { return (int) (_packedData & LengthMask); } } private uint _packedData; // ----------------------------------------------------------------- // Width of the line. // ----------------------------------------------------------------- internal double Width { get { Debug.Assert((_packedData & HasBeenUpdatedMask) != 0); return _width; } } private double _width; // ----------------------------------------------------------------- // Height of the line. // ------------------------------------------------------------------ internal double Height { get { return _height; } } private double _height; // ----------------------------------------------------------------- // Start of the line. Distance from paragraph edge to line start. // ------------------------------------------------------------------ internal double Start { get { Debug.Assert((_packedData & HasBeenUpdatedMask) != 0); return _start; } } private double _start; // ------------------------------------------------------------------ // Baseline offset of the line. // ----------------------------------------------------------------- internal double Baseline { get { return _baseline; } } private double _baseline; // ------------------------------------------------------------------ // Has inline objects? // ----------------------------------------------------------------- internal bool HasInlineObjects { get { return (_packedData & HasInlineObjectsMask) != 0; } } // ----------------------------------------------------------------- // Line break for formatting. (Line Break In) // ----------------------------------------------------------------- internal TextLineBreak TextLineBreak { get { return _textLineBreak; } } private TextLineBreak _textLineBreak; private static readonly uint HasBeenUpdatedMask = 0x40000000; private static readonly uint LengthMask = 0x3FFFFFFF; private static readonly uint HasInlineObjectsMask = 0x80000000; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: LineMetrics.cs // // Description: Cached metrics of a text line. // // History: // 04/25/2003 : grzegorz - moving from Avalon branch. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows; using System.Windows.Media; using System.Windows.Media.TextFormatting; namespace MS.Internal.Text { // --------------------------------------------------------------------- // Storage for metrics of a formatted line. // --------------------------------------------------------------------- internal struct LineMetrics { // ------------------------------------------------------------------ // Constructor. // // wrappingWidth - wrapping width for the line // length - number or characters in the line // width - width of the line // height - height of the line // baseline - baseline of the line // hasInlineObjects - has inline objects? // ----------------------------------------------------------------- internal LineMetrics( #if DEBUG double wrappingWidth, #endif int length, double width, double height, double baseline, bool hasInlineObjects, TextLineBreak textLineBreak) { #if DEBUG _wrappingWidth = wrappingWidth; #endif _start = 0; _width = width; _height = height; _baseline = baseline; _textLineBreak = textLineBreak; _packedData = ((uint) length & LengthMask) | (hasInlineObjects ? HasInlineObjectsMask : 0); } internal LineMetrics(LineMetrics source, double start, double width) { #if DEBUG _wrappingWidth = source.WrappingWidth; #endif _start = start; _width = width; _height = source.Height; _baseline = source.Baseline; _textLineBreak = source.TextLineBreak; _packedData = source._packedData | HasBeenUpdatedMask; } ////// Disposes linebreak object /// internal LineMetrics Dispose(bool returnUpdatedMetrics) { if(_textLineBreak != null) { _textLineBreak.Dispose(); if (returnUpdatedMetrics) { return new LineMetrics( #if DEBUG _wrappingWidth, #endif Length, _width, _height, _baseline, HasInlineObjects, null); } } return this; } #if DEBUG // ------------------------------------------------------------------ // Wrapping width for the line. // ------------------------------------------------------------------ internal double WrappingWidth { get { return _wrappingWidth; } } private double _wrappingWidth; #endif // ----------------------------------------------------------------- // Number or characters in the line. // ------------------------------------------------------------------ internal int Length { get { return (int) (_packedData & LengthMask); } } private uint _packedData; // ----------------------------------------------------------------- // Width of the line. // ----------------------------------------------------------------- internal double Width { get { Debug.Assert((_packedData & HasBeenUpdatedMask) != 0); return _width; } } private double _width; // ----------------------------------------------------------------- // Height of the line. // ------------------------------------------------------------------ internal double Height { get { return _height; } } private double _height; // ----------------------------------------------------------------- // Start of the line. Distance from paragraph edge to line start. // ------------------------------------------------------------------ internal double Start { get { Debug.Assert((_packedData & HasBeenUpdatedMask) != 0); return _start; } } private double _start; // ------------------------------------------------------------------ // Baseline offset of the line. // ----------------------------------------------------------------- internal double Baseline { get { return _baseline; } } private double _baseline; // ------------------------------------------------------------------ // Has inline objects? // ----------------------------------------------------------------- internal bool HasInlineObjects { get { return (_packedData & HasInlineObjectsMask) != 0; } } // ----------------------------------------------------------------- // Line break for formatting. (Line Break In) // ----------------------------------------------------------------- internal TextLineBreak TextLineBreak { get { return _textLineBreak; } } private TextLineBreak _textLineBreak; private static readonly uint HasBeenUpdatedMask = 0x40000000; private static readonly uint LengthMask = 0x3FFFFFFF; private static readonly uint HasInlineObjectsMask = 0x80000000; } } // 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
- WebPartZone.cs
- AssemblyCache.cs
- UnknownBitmapEncoder.cs
- DataRelationCollection.cs
- ExpressionNormalizer.cs
- CommandArguments.cs
- ObfuscateAssemblyAttribute.cs
- SafeTokenHandle.cs
- StringValidatorAttribute.cs
- SpellerError.cs
- StaticContext.cs
- DataGridViewCellLinkedList.cs
- UnsupportedPolicyOptionsException.cs
- HebrewCalendar.cs
- HitTestFilterBehavior.cs
- StylusSystemGestureEventArgs.cs
- IncrementalReadDecoders.cs
- ColorBlend.cs
- IfAction.cs
- ScriptComponentDescriptor.cs
- DBDataPermissionAttribute.cs
- SuppressIldasmAttribute.cs
- Odbc32.cs
- XsltException.cs
- EditBehavior.cs
- ConfigXmlReader.cs
- MapPathBasedVirtualPathProvider.cs
- XmlSchemaAnnotation.cs
- EntityConnectionStringBuilder.cs
- AuthenticatingEventArgs.cs
- AnnotationService.cs
- QueryInterceptorAttribute.cs
- messageonlyhwndwrapper.cs
- ToolboxDataAttribute.cs
- ApplicationInterop.cs
- PropertyTabAttribute.cs
- StatusStrip.cs
- CodeTypeMemberCollection.cs
- ThreadBehavior.cs
- EvidenceTypeDescriptor.cs
- TimeIntervalCollection.cs
- DependencySource.cs
- TransformerTypeCollection.cs
- PlainXmlWriter.cs
- WindowsFormsSynchronizationContext.cs
- CompensatableSequenceActivity.cs
- FilteredDataSetHelper.cs
- ProtectedUri.cs
- PartialCachingAttribute.cs
- SqlRecordBuffer.cs
- QuaternionKeyFrameCollection.cs
- InputBindingCollection.cs
- TabItem.cs
- SyndicationSerializer.cs
- OleDbStruct.cs
- PrintingPermission.cs
- SHA256Managed.cs
- BrowserCapabilitiesFactory.cs
- PropertyChangingEventArgs.cs
- XmlSchemaAnnotated.cs
- ResolveNameEventArgs.cs
- WMIInterop.cs
- XmlSerializerFactory.cs
- SurrogateEncoder.cs
- mansign.cs
- MatrixCamera.cs
- dsa.cs
- Parser.cs
- HttpCachePolicy.cs
- Errors.cs
- Process.cs
- SecurityChannel.cs
- TickBar.cs
- LayoutInformation.cs
- EndpointIdentityExtension.cs
- ACL.cs
- LinqDataSourceValidationException.cs
- GlyphTypeface.cs
- XmlPreloadedResolver.cs
- LookupNode.cs
- CalendarSelectionChangedEventArgs.cs
- IndexOutOfRangeException.cs
- RC2.cs
- XmlILStorageConverter.cs
- ActivityCodeDomSerializer.cs
- OracleRowUpdatingEventArgs.cs
- UpdatePanelTriggerCollection.cs
- TextLineResult.cs
- MasterPageCodeDomTreeGenerator.cs
- XmlBinaryReader.cs
- VisualState.cs
- HiddenFieldPageStatePersister.cs
- SafeNativeMethods.cs
- GenericArgumentsUpdater.cs
- GeneralTransform3D.cs
- XmlObjectSerializerWriteContextComplexJson.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- DateTimeSerializationSection.cs
- UnsafeNativeMethods.cs
- ExceptionNotification.cs