Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Text / LineMetrics.cs / 1305600 / LineMetrics.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: LineMetrics.cs // // Description: Cached metrics of a text line. // // History: // 04/25/2003 : [....] - 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 : [....] - 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
- WinCategoryAttribute.cs
- Matrix3DValueSerializer.cs
- QueryRewriter.cs
- DataStorage.cs
- DynamicExpression.cs
- ZipIOExtraFieldZip64Element.cs
- XmlElementAttribute.cs
- AnimationClock.cs
- IntegerValidator.cs
- FaultDescriptionCollection.cs
- TargetFrameworkUtil.cs
- FixedPosition.cs
- GeneralTransform3D.cs
- StateRuntime.cs
- RuleValidation.cs
- OperationCanceledException.cs
- MessageQueueConverter.cs
- BufferedReadStream.cs
- Emitter.cs
- DataGridViewCellValueEventArgs.cs
- SettingsPropertyIsReadOnlyException.cs
- AddInControllerImpl.cs
- BrowserDefinitionCollection.cs
- ToolStripSplitButton.cs
- ElasticEase.cs
- ActiveXHelper.cs
- EndPoint.cs
- SmtpDateTime.cs
- CatalogZoneBase.cs
- HttpGetProtocolImporter.cs
- EntityContainer.cs
- PolygonHotSpot.cs
- GreenMethods.cs
- ControlBuilderAttribute.cs
- OdbcDataReader.cs
- ToolStripItemClickedEventArgs.cs
- GroupBoxRenderer.cs
- ResourceExpressionBuilder.cs
- WebPartDeleteVerb.cs
- BamlVersionHeader.cs
- WSDualHttpBinding.cs
- ObjectDataSourceMethodEventArgs.cs
- GroupItem.cs
- CodeDirectoryCompiler.cs
- PassportAuthenticationModule.cs
- SmiRequestExecutor.cs
- TCEAdapterGenerator.cs
- FreeIndexList.cs
- FormViewUpdateEventArgs.cs
- XmlQueryRuntime.cs
- ModelVisual3D.cs
- HitTestParameters3D.cs
- Rect3D.cs
- SmtpFailedRecipientException.cs
- DiscreteKeyFrames.cs
- HitTestWithPointDrawingContextWalker.cs
- CrossContextChannel.cs
- TableSectionStyle.cs
- BasicKeyConstraint.cs
- Rect.cs
- ResourceLoader.cs
- SymbolType.cs
- SubqueryTrackingVisitor.cs
- DataGridCommandEventArgs.cs
- GenerateScriptTypeAttribute.cs
- DataServiceQueryProvider.cs
- _ProxyChain.cs
- AspNetHostingPermission.cs
- TextTreeExtractElementUndoUnit.cs
- ProjectionPlan.cs
- SystemInfo.cs
- Method.cs
- TextElementCollection.cs
- SqlClientFactory.cs
- Domain.cs
- LayoutUtils.cs
- EncryptedXml.cs
- SqlOuterApplyReducer.cs
- Win32SafeHandles.cs
- ModelServiceImpl.cs
- COM2PropertyPageUITypeConverter.cs
- OdbcConnectionFactory.cs
- WebPartDescription.cs
- AttributedMetaModel.cs
- MetadataItemSerializer.cs
- ColumnReorderedEventArgs.cs
- TextRunCache.cs
- LinkLabelLinkClickedEvent.cs
- SQLString.cs
- _UriTypeConverter.cs
- HtmlProps.cs
- WrappedReader.cs
- ListViewInsertedEventArgs.cs
- HandlerWithFactory.cs
- _NestedMultipleAsyncResult.cs
- VisualTreeUtils.cs
- NativeCompoundFileAPIs.cs
- PathSegmentCollection.cs
- RegexGroupCollection.cs
- MethodInfo.cs