Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / MS / Internal / PtsHost / MbpInfo.cs / 1 / MbpInfo.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: MbpInfo.cs // // Description: Provides paragraph level margin collapsing support. // //--------------------------------------------------------------------------- using System; using System.Windows; // DependencyObject using System.Windows.Documents; // Block using MS.Internal.Text; // TextDpi using System.Windows.Media; // Brush using MS.Internal.PtsHost.UnsafeNativeMethods; // Pts namespace MS.Internal.PtsHost { ////// Provides services for MBP handling. /// internal sealed class MbpInfo { ////// Get MbpInfo from DependencyObject. /// /// DependencyObject for which MBP properties are retrieved. internal static MbpInfo FromElement(DependencyObject o) { if (o is Block || o is AnchoredBlock || o is TableCell || o is ListItem) { MbpInfo mbp = new MbpInfo((TextElement)o); double lineHeight = DynamicPropertyReader.GetLineHeightValue(o); if (mbp.IsMarginAuto) { ResolveAutoMargin(mbp, o, lineHeight); } if (mbp.IsPaddingAuto) { ResolveAutoPadding(mbp, o, lineHeight); } return mbp; } return _empty; } ////// Mirrors margin /// internal void MirrorMargin() { ReverseFlowDirection(ref _margin); } ////// Mirrors border and padding /// internal void MirrorBP() { ReverseFlowDirection(ref _border); ReverseFlowDirection(ref _padding); } ////// Reverses flow direction for a given thickness /// private static void ReverseFlowDirection(ref Thickness thickness) { double temp = thickness.Left; thickness.Left = thickness.Right; thickness.Right = temp; } ////// Static constructor. /// static MbpInfo() { _empty = new MbpInfo(); } ////// Private constructor. /// private MbpInfo() { _margin = new Thickness(); _border = new Thickness(); _padding = new Thickness(); _borderBrush = new SolidColorBrush(); } ////// Constructor. /// /// Block for which MBP properties are retrieved. private MbpInfo(TextElement block) { _margin = (Thickness)block.GetValue(Block.MarginProperty); _border = (Thickness)block.GetValue(Block.BorderThicknessProperty); _padding = (Thickness)block.GetValue(Block.PaddingProperty); _borderBrush = (Brush)block.GetValue(Block.BorderBrushProperty); } ////// Resolve Auto values for Margin. /// private static void ResolveAutoMargin(MbpInfo mbp, DependencyObject o, double lineHeight) { Thickness defaultMargin; if (o is Paragraph) { DependencyObject parent = ((Paragraph)o).Parent; if (parent is ListItem || parent is TableCell || parent is AnchoredBlock) { defaultMargin = new Thickness(0); } else { defaultMargin = new Thickness(0, lineHeight, 0, lineHeight); } } else if (o is Table || o is List) { defaultMargin = new Thickness(0, lineHeight, 0, lineHeight); } else if (o is Figure || o is Floater) { defaultMargin = new Thickness(0.5 * lineHeight); } else { defaultMargin = new Thickness(0); } mbp.Margin = new Thickness( Double.IsNaN(mbp.Margin.Left) ? defaultMargin.Left : mbp.Margin.Left, Double.IsNaN(mbp.Margin.Top) ? defaultMargin.Top : mbp.Margin.Top, Double.IsNaN(mbp.Margin.Right) ? defaultMargin.Right : mbp.Margin.Right, Double.IsNaN(mbp.Margin.Bottom) ? defaultMargin.Bottom : mbp.Margin.Bottom); } ////// Resolve Auto values for Padding. /// private static void ResolveAutoPadding(MbpInfo mbp, DependencyObject o, double lineHeight) { Thickness defaultPadding; if (o is Figure || o is Floater) { defaultPadding = new Thickness(0.5 * lineHeight); } else if (o is List) { defaultPadding = ListMarkerSourceInfo.CalculatePadding((List)o, lineHeight); } else { defaultPadding = new Thickness(0); } mbp.Padding = new Thickness( Double.IsNaN(mbp.Padding.Left) ? defaultPadding.Left : mbp.Padding.Left, Double.IsNaN(mbp.Padding.Top) ? defaultPadding.Top : mbp.Padding.Top, Double.IsNaN(mbp.Padding.Right) ? defaultPadding.Right : mbp.Padding.Right, Double.IsNaN(mbp.Padding.Bottom) ? defaultPadding.Bottom : mbp.Padding.Bottom); } ////// Combined value of left Margin, Border and Padding. /// internal int MBPLeft { get { return TextDpi.ToTextDpi(_margin.Left) + TextDpi.ToTextDpi(_border.Left) + TextDpi.ToTextDpi(_padding.Left); } } ////// Combined value of right Margin, Border and Padding. /// internal int MBPRight { get { return TextDpi.ToTextDpi(_margin.Right) + TextDpi.ToTextDpi(_border.Right) + TextDpi.ToTextDpi(_padding.Right); } } ////// Combined value of top Margin, Border and Padding. /// internal int MBPTop { get { return TextDpi.ToTextDpi(_margin.Top) + TextDpi.ToTextDpi(_border.Top) + TextDpi.ToTextDpi(_padding.Top); } } ////// Combined value of top Margin, Border and Padding. /// internal int MBPBottom { get { return TextDpi.ToTextDpi(_margin.Bottom) + TextDpi.ToTextDpi(_border.Bottom) + TextDpi.ToTextDpi(_padding.Bottom); } } ////// Combined value of left Border and Padding. /// internal int BPLeft { get { return TextDpi.ToTextDpi(_border.Left) + TextDpi.ToTextDpi(_padding.Left); } } ////// Combined value of right Border and Padding. /// internal int BPRight { get { return TextDpi.ToTextDpi(_border.Right) + TextDpi.ToTextDpi(_padding.Right); } } ////// Combined value of top Border and Padding. /// internal int BPTop { get { return TextDpi.ToTextDpi(_border.Top) + TextDpi.ToTextDpi(_padding.Top); } } ////// Combined value of bottom Border and Padding. /// internal int BPBottom { get { return TextDpi.ToTextDpi(_border.Bottom) + TextDpi.ToTextDpi(_padding.Bottom); } } ////// Left Border /// internal int BorderLeft { get { return TextDpi.ToTextDpi(_border.Left); } } ////// Right Border /// internal int BorderRight { get { return TextDpi.ToTextDpi(_border.Right); } } ////// Top Border /// internal int BorderTop { get { return TextDpi.ToTextDpi(_border.Top); } } ////// Bottom Border /// internal int BorderBottom { get { return TextDpi.ToTextDpi(_border.Bottom); } } ////// Left margin. /// internal int MarginLeft { get { return TextDpi.ToTextDpi(_margin.Left); } } ////// Right margin. /// internal int MarginRight { get { return TextDpi.ToTextDpi(_margin.Right); } } ////// top margin. /// internal int MarginTop { get { return TextDpi.ToTextDpi(_margin.Top); } } ////// Bottom margin. /// internal int MarginBottom { get { return TextDpi.ToTextDpi(_margin.Bottom); } } ////// Margin thickness. /// internal Thickness Margin { get { return _margin; } set { _margin = value; } } ////// Border thickness. /// internal Thickness Border { get { return _border; } set { _border = value; } } internal Thickness Padding { get { return _padding; } set { _padding = value; } } ////// Border brush. /// internal Brush BorderBrush { get { return _borderBrush; } } ////// Whether any padding value is Auto. /// private bool IsPaddingAuto { get { return ( Double.IsNaN(_padding.Left) || Double.IsNaN(_padding.Right) || Double.IsNaN(_padding.Top) || Double.IsNaN(_padding.Bottom)); } } ////// Whether any margin value is Auto. /// private bool IsMarginAuto { get { return ( Double.IsNaN(_margin.Left) || Double.IsNaN(_margin.Right) || Double.IsNaN(_margin.Top) || Double.IsNaN(_margin.Bottom)); } } ////// Margin thickness. /// private Thickness _margin; ////// Border thickness. /// private Thickness _border; ////// Padding thickness. /// private Thickness _padding; ////// Border brush. /// private Brush _borderBrush; ////// Empty MBPInfo instance. /// private static MbpInfo _empty; } } // 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: MbpInfo.cs // // Description: Provides paragraph level margin collapsing support. // //--------------------------------------------------------------------------- using System; using System.Windows; // DependencyObject using System.Windows.Documents; // Block using MS.Internal.Text; // TextDpi using System.Windows.Media; // Brush using MS.Internal.PtsHost.UnsafeNativeMethods; // Pts namespace MS.Internal.PtsHost { ////// Provides services for MBP handling. /// internal sealed class MbpInfo { ////// Get MbpInfo from DependencyObject. /// /// DependencyObject for which MBP properties are retrieved. internal static MbpInfo FromElement(DependencyObject o) { if (o is Block || o is AnchoredBlock || o is TableCell || o is ListItem) { MbpInfo mbp = new MbpInfo((TextElement)o); double lineHeight = DynamicPropertyReader.GetLineHeightValue(o); if (mbp.IsMarginAuto) { ResolveAutoMargin(mbp, o, lineHeight); } if (mbp.IsPaddingAuto) { ResolveAutoPadding(mbp, o, lineHeight); } return mbp; } return _empty; } ////// Mirrors margin /// internal void MirrorMargin() { ReverseFlowDirection(ref _margin); } ////// Mirrors border and padding /// internal void MirrorBP() { ReverseFlowDirection(ref _border); ReverseFlowDirection(ref _padding); } ////// Reverses flow direction for a given thickness /// private static void ReverseFlowDirection(ref Thickness thickness) { double temp = thickness.Left; thickness.Left = thickness.Right; thickness.Right = temp; } ////// Static constructor. /// static MbpInfo() { _empty = new MbpInfo(); } ////// Private constructor. /// private MbpInfo() { _margin = new Thickness(); _border = new Thickness(); _padding = new Thickness(); _borderBrush = new SolidColorBrush(); } ////// Constructor. /// /// Block for which MBP properties are retrieved. private MbpInfo(TextElement block) { _margin = (Thickness)block.GetValue(Block.MarginProperty); _border = (Thickness)block.GetValue(Block.BorderThicknessProperty); _padding = (Thickness)block.GetValue(Block.PaddingProperty); _borderBrush = (Brush)block.GetValue(Block.BorderBrushProperty); } ////// Resolve Auto values for Margin. /// private static void ResolveAutoMargin(MbpInfo mbp, DependencyObject o, double lineHeight) { Thickness defaultMargin; if (o is Paragraph) { DependencyObject parent = ((Paragraph)o).Parent; if (parent is ListItem || parent is TableCell || parent is AnchoredBlock) { defaultMargin = new Thickness(0); } else { defaultMargin = new Thickness(0, lineHeight, 0, lineHeight); } } else if (o is Table || o is List) { defaultMargin = new Thickness(0, lineHeight, 0, lineHeight); } else if (o is Figure || o is Floater) { defaultMargin = new Thickness(0.5 * lineHeight); } else { defaultMargin = new Thickness(0); } mbp.Margin = new Thickness( Double.IsNaN(mbp.Margin.Left) ? defaultMargin.Left : mbp.Margin.Left, Double.IsNaN(mbp.Margin.Top) ? defaultMargin.Top : mbp.Margin.Top, Double.IsNaN(mbp.Margin.Right) ? defaultMargin.Right : mbp.Margin.Right, Double.IsNaN(mbp.Margin.Bottom) ? defaultMargin.Bottom : mbp.Margin.Bottom); } ////// Resolve Auto values for Padding. /// private static void ResolveAutoPadding(MbpInfo mbp, DependencyObject o, double lineHeight) { Thickness defaultPadding; if (o is Figure || o is Floater) { defaultPadding = new Thickness(0.5 * lineHeight); } else if (o is List) { defaultPadding = ListMarkerSourceInfo.CalculatePadding((List)o, lineHeight); } else { defaultPadding = new Thickness(0); } mbp.Padding = new Thickness( Double.IsNaN(mbp.Padding.Left) ? defaultPadding.Left : mbp.Padding.Left, Double.IsNaN(mbp.Padding.Top) ? defaultPadding.Top : mbp.Padding.Top, Double.IsNaN(mbp.Padding.Right) ? defaultPadding.Right : mbp.Padding.Right, Double.IsNaN(mbp.Padding.Bottom) ? defaultPadding.Bottom : mbp.Padding.Bottom); } ////// Combined value of left Margin, Border and Padding. /// internal int MBPLeft { get { return TextDpi.ToTextDpi(_margin.Left) + TextDpi.ToTextDpi(_border.Left) + TextDpi.ToTextDpi(_padding.Left); } } ////// Combined value of right Margin, Border and Padding. /// internal int MBPRight { get { return TextDpi.ToTextDpi(_margin.Right) + TextDpi.ToTextDpi(_border.Right) + TextDpi.ToTextDpi(_padding.Right); } } ////// Combined value of top Margin, Border and Padding. /// internal int MBPTop { get { return TextDpi.ToTextDpi(_margin.Top) + TextDpi.ToTextDpi(_border.Top) + TextDpi.ToTextDpi(_padding.Top); } } ////// Combined value of top Margin, Border and Padding. /// internal int MBPBottom { get { return TextDpi.ToTextDpi(_margin.Bottom) + TextDpi.ToTextDpi(_border.Bottom) + TextDpi.ToTextDpi(_padding.Bottom); } } ////// Combined value of left Border and Padding. /// internal int BPLeft { get { return TextDpi.ToTextDpi(_border.Left) + TextDpi.ToTextDpi(_padding.Left); } } ////// Combined value of right Border and Padding. /// internal int BPRight { get { return TextDpi.ToTextDpi(_border.Right) + TextDpi.ToTextDpi(_padding.Right); } } ////// Combined value of top Border and Padding. /// internal int BPTop { get { return TextDpi.ToTextDpi(_border.Top) + TextDpi.ToTextDpi(_padding.Top); } } ////// Combined value of bottom Border and Padding. /// internal int BPBottom { get { return TextDpi.ToTextDpi(_border.Bottom) + TextDpi.ToTextDpi(_padding.Bottom); } } ////// Left Border /// internal int BorderLeft { get { return TextDpi.ToTextDpi(_border.Left); } } ////// Right Border /// internal int BorderRight { get { return TextDpi.ToTextDpi(_border.Right); } } ////// Top Border /// internal int BorderTop { get { return TextDpi.ToTextDpi(_border.Top); } } ////// Bottom Border /// internal int BorderBottom { get { return TextDpi.ToTextDpi(_border.Bottom); } } ////// Left margin. /// internal int MarginLeft { get { return TextDpi.ToTextDpi(_margin.Left); } } ////// Right margin. /// internal int MarginRight { get { return TextDpi.ToTextDpi(_margin.Right); } } ////// top margin. /// internal int MarginTop { get { return TextDpi.ToTextDpi(_margin.Top); } } ////// Bottom margin. /// internal int MarginBottom { get { return TextDpi.ToTextDpi(_margin.Bottom); } } ////// Margin thickness. /// internal Thickness Margin { get { return _margin; } set { _margin = value; } } ////// Border thickness. /// internal Thickness Border { get { return _border; } set { _border = value; } } internal Thickness Padding { get { return _padding; } set { _padding = value; } } ////// Border brush. /// internal Brush BorderBrush { get { return _borderBrush; } } ////// Whether any padding value is Auto. /// private bool IsPaddingAuto { get { return ( Double.IsNaN(_padding.Left) || Double.IsNaN(_padding.Right) || Double.IsNaN(_padding.Top) || Double.IsNaN(_padding.Bottom)); } } ////// Whether any margin value is Auto. /// private bool IsMarginAuto { get { return ( Double.IsNaN(_margin.Left) || Double.IsNaN(_margin.Right) || Double.IsNaN(_margin.Top) || Double.IsNaN(_margin.Bottom)); } } ////// Margin thickness. /// private Thickness _margin; ////// Border thickness. /// private Thickness _border; ////// Padding thickness. /// private Thickness _padding; ////// Border brush. /// private Brush _borderBrush; ////// Empty MBPInfo instance. /// private static MbpInfo _empty; } } // 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
- ImageBrush.cs
- SelectionItemProviderWrapper.cs
- TypeExtensionConverter.cs
- DesignTimeValidationFeature.cs
- GenerateTemporaryAssemblyTask.cs
- TextAction.cs
- ByteAnimationUsingKeyFrames.cs
- MsmqInputSessionChannelListener.cs
- LocalBuilder.cs
- PropertyGrid.cs
- HttpHandlerActionCollection.cs
- DeclarativeCatalogPart.cs
- PaginationProgressEventArgs.cs
- RewritingValidator.cs
- XmlAttributeOverrides.cs
- OleDbCommand.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- TTSEvent.cs
- HttpPostProtocolReflector.cs
- CapabilitiesSection.cs
- ConditionalAttribute.cs
- FieldAccessException.cs
- EntityReference.cs
- XPathScanner.cs
- IssuerInformation.cs
- ConnectionsZoneDesigner.cs
- DynamicValueConverter.cs
- RpcCryptoContext.cs
- DropSource.cs
- PartialList.cs
- EFDataModelProvider.cs
- CodeGenerator.cs
- CornerRadiusConverter.cs
- SqlProfileProvider.cs
- DiscriminatorMap.cs
- FrameAutomationPeer.cs
- sqlstateclientmanager.cs
- ToolStripInSituService.cs
- EmbeddedMailObject.cs
- Schema.cs
- XmlAttributeProperties.cs
- IndentedWriter.cs
- PageContentAsyncResult.cs
- AutomationElementCollection.cs
- httpstaticobjectscollection.cs
- WebSysDescriptionAttribute.cs
- BindingBase.cs
- WebConfigurationHost.cs
- CodeStatementCollection.cs
- ProcessModelInfo.cs
- BitmapMetadata.cs
- SafeCancelMibChangeNotify.cs
- ToolboxBitmapAttribute.cs
- CircleEase.cs
- TrustManagerPromptUI.cs
- MbpInfo.cs
- CheckBox.cs
- GenerateHelper.cs
- WrappedKeySecurityToken.cs
- ListViewGroup.cs
- Splitter.cs
- Rect.cs
- ScopeCompiler.cs
- FixedSOMPage.cs
- WebHeaderCollection.cs
- XslAst.cs
- PerformanceCounterManager.cs
- ObjectStorage.cs
- DictionaryMarkupSerializer.cs
- CapiNative.cs
- TableItemProviderWrapper.cs
- LoginUtil.cs
- safelinkcollection.cs
- MsmqIntegrationChannelListener.cs
- DiffuseMaterial.cs
- EntitySetRetriever.cs
- XmlQueryContext.cs
- UserControlParser.cs
- DataGrid.cs
- Model3D.cs
- XpsFixedDocumentSequenceReaderWriter.cs
- ControllableStoryboardAction.cs
- SpeakCompletedEventArgs.cs
- Random.cs
- WmiPutTraceRecord.cs
- Confirm.cs
- Timer.cs
- WhitespaceRuleReader.cs
- exports.cs
- XmlSchemaValidator.cs
- Transform.cs
- _SafeNetHandles.cs
- VariantWrapper.cs
- PaintValueEventArgs.cs
- WebRequest.cs
- InnerItemCollectionView.cs
- SatelliteContractVersionAttribute.cs
- AsyncResult.cs
- XmlWrappingReader.cs
- TypographyProperties.cs