Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / MS / Internal / PtsHost / RunClient.cs / 1 / RunClient.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: RunClient.cs // // Description: RunClient represents opaque data storage associated with runs // consumed by TextFormatter. // // History: // 05/05/2003 : grzegorz - moving from Avalon branch. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Media; using System.Windows.Media.TextFormatting; using MS.Internal; using MS.Internal.Text; using MS.Internal.Documents; using MS.Internal.PtsHost.UnsafeNativeMethods; namespace MS.Internal.PtsHost { ////// Inline object run. /// internal sealed class InlineObjectRun : TextEmbeddedObject { ////// Constructor. /// /// Number of text position in the text array occupied by the inline object. /// UIElement representing the inline object. /// Text run properties for the inline object. /// Paragraph - the host of the inline object. internal InlineObjectRun(int cch, UIElement element, TextRunProperties textProps, TextParagraph host) { _cch = cch; _textProps = textProps; _host = host; _inlineUIContainer = (InlineUIContainer)LogicalTreeHelper.GetParent(element); } ////// Get inline object's measurement metrics. /// /// Remaining paragraph width. ///Inline object metrics. public override TextEmbeddedObjectMetrics Format(double remainingParagraphWidth) { Size desiredSize = _host.MeasureChild(this); // Make sure that LS/PTS limitations are not exceeded for object's size. TextDpi.EnsureValidObjSize(ref desiredSize); double baseline = desiredSize.Height; double baselineOffsetValue = (double)UIElementIsland.Root.GetValue(TextBlock.BaselineOffsetProperty); if(!DoubleUtil.IsNaN(baselineOffsetValue)) { baseline = baselineOffsetValue; } return new TextEmbeddedObjectMetrics(desiredSize.Width, desiredSize.Height, baseline); } ////// Get computed bounding box of the inline object. /// /// Run is drawn from right to left. /// Run is drawn with its side parallel to baseline. ///Computed bounding box size of text object. public override Rect ComputeBoundingBox(bool rightToLeft, bool sideways) { // Initially assume that bounding box is the same as layout box. // NOTE: PTS requires bounding box during line formatting. This eventually triggers // TextFormatter to call this function. // But at that time computed size is not available yet. Use desired size instead. Size size = UIElementIsland.Root.DesiredSize; double baseline = !sideways ? size.Height : size.Width; double baselineOffsetValue = (double)UIElementIsland.Root.GetValue(TextBlock.BaselineOffsetProperty); if (!sideways && !DoubleUtil.IsNaN(baselineOffsetValue)) { baseline = (double) baselineOffsetValue; } return new Rect(0, -baseline, sideways ? size.Height : size.Width, sideways ? size.Width : size.Height); } ////// Draw the inline object. /// /// Drawing context. /// Origin where the object is drawn. /// Run is drawn from right to left. /// Run is drawn with its side parallel to baseline. public override void Draw(DrawingContext drawingContext, Point origin, bool rightToLeft, bool sideways) { // Inline object has its own visual and it is attached to a visual // tree during arrange process. // Do nothing here. } ////// Reference to character buffer. /// public override CharacterBufferReference CharacterBufferReference { get { return new CharacterBufferReference(String.Empty, 0); } } ////// Length of the inline object run. /// public override int Length { get { return _cch; } } ////// A set of properties shared by every characters in the run /// public override TextRunProperties Properties { get { return _textProps; } } ////// Line break condition before the inline object. /// public override LineBreakCondition BreakBefore { get { return LineBreakCondition.BreakDesired; } } ////// Line break condition after the inline object. /// public override LineBreakCondition BreakAfter { get { return LineBreakCondition.BreakDesired; } } ////// Flag indicates whether inline object has fixed size regardless of where /// it is placed within a line. /// public override bool HasFixedSize { get { // Size of inline object is not dependent on position in the line. return true; } } ////// UIElementIsland representing embedded Element Layout island within content world. /// internal UIElementIsland UIElementIsland { get { return _inlineUIContainer.UIElementIsland; } } ////// Number of text position in the text array occupied by the inline object. /// private readonly int _cch; ////// Text run properties for the inline object. /// private readonly TextRunProperties _textProps; ////// Paragraph - the host of the inline object. /// private readonly TextParagraph _host; ////// Inline UI Container associated with this run client /// private InlineUIContainer _inlineUIContainer; } ////// Floating object run. /// internal sealed class FloatingRun : TextHidden { internal FloatingRun(int length, bool figure) : base(length) { _figure = figure; } internal bool Figure { get { return _figure; } } private readonly bool _figure; } ////// Custom paragraph break run. /// internal sealed class ParagraphBreakRun : TextEndOfParagraph { internal ParagraphBreakRun(int length, PTS.FSFLRES breakReason) : base(length) { BreakReason = breakReason; } internal readonly PTS.FSFLRES BreakReason; } ////// Custom line break run. /// internal sealed class LineBreakRun : TextEndOfLine { internal LineBreakRun(int length, PTS.FSFLRES breakReason) : base(length) { BreakReason = breakReason; } internal readonly PTS.FSFLRES BreakReason; } } // 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: RunClient.cs // // Description: RunClient represents opaque data storage associated with runs // consumed by TextFormatter. // // History: // 05/05/2003 : grzegorz - moving from Avalon branch. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Media; using System.Windows.Media.TextFormatting; using MS.Internal; using MS.Internal.Text; using MS.Internal.Documents; using MS.Internal.PtsHost.UnsafeNativeMethods; namespace MS.Internal.PtsHost { ////// Inline object run. /// internal sealed class InlineObjectRun : TextEmbeddedObject { ////// Constructor. /// /// Number of text position in the text array occupied by the inline object. /// UIElement representing the inline object. /// Text run properties for the inline object. /// Paragraph - the host of the inline object. internal InlineObjectRun(int cch, UIElement element, TextRunProperties textProps, TextParagraph host) { _cch = cch; _textProps = textProps; _host = host; _inlineUIContainer = (InlineUIContainer)LogicalTreeHelper.GetParent(element); } ////// Get inline object's measurement metrics. /// /// Remaining paragraph width. ///Inline object metrics. public override TextEmbeddedObjectMetrics Format(double remainingParagraphWidth) { Size desiredSize = _host.MeasureChild(this); // Make sure that LS/PTS limitations are not exceeded for object's size. TextDpi.EnsureValidObjSize(ref desiredSize); double baseline = desiredSize.Height; double baselineOffsetValue = (double)UIElementIsland.Root.GetValue(TextBlock.BaselineOffsetProperty); if(!DoubleUtil.IsNaN(baselineOffsetValue)) { baseline = baselineOffsetValue; } return new TextEmbeddedObjectMetrics(desiredSize.Width, desiredSize.Height, baseline); } ////// Get computed bounding box of the inline object. /// /// Run is drawn from right to left. /// Run is drawn with its side parallel to baseline. ///Computed bounding box size of text object. public override Rect ComputeBoundingBox(bool rightToLeft, bool sideways) { // Initially assume that bounding box is the same as layout box. // NOTE: PTS requires bounding box during line formatting. This eventually triggers // TextFormatter to call this function. // But at that time computed size is not available yet. Use desired size instead. Size size = UIElementIsland.Root.DesiredSize; double baseline = !sideways ? size.Height : size.Width; double baselineOffsetValue = (double)UIElementIsland.Root.GetValue(TextBlock.BaselineOffsetProperty); if (!sideways && !DoubleUtil.IsNaN(baselineOffsetValue)) { baseline = (double) baselineOffsetValue; } return new Rect(0, -baseline, sideways ? size.Height : size.Width, sideways ? size.Width : size.Height); } ////// Draw the inline object. /// /// Drawing context. /// Origin where the object is drawn. /// Run is drawn from right to left. /// Run is drawn with its side parallel to baseline. public override void Draw(DrawingContext drawingContext, Point origin, bool rightToLeft, bool sideways) { // Inline object has its own visual and it is attached to a visual // tree during arrange process. // Do nothing here. } ////// Reference to character buffer. /// public override CharacterBufferReference CharacterBufferReference { get { return new CharacterBufferReference(String.Empty, 0); } } ////// Length of the inline object run. /// public override int Length { get { return _cch; } } ////// A set of properties shared by every characters in the run /// public override TextRunProperties Properties { get { return _textProps; } } ////// Line break condition before the inline object. /// public override LineBreakCondition BreakBefore { get { return LineBreakCondition.BreakDesired; } } ////// Line break condition after the inline object. /// public override LineBreakCondition BreakAfter { get { return LineBreakCondition.BreakDesired; } } ////// Flag indicates whether inline object has fixed size regardless of where /// it is placed within a line. /// public override bool HasFixedSize { get { // Size of inline object is not dependent on position in the line. return true; } } ////// UIElementIsland representing embedded Element Layout island within content world. /// internal UIElementIsland UIElementIsland { get { return _inlineUIContainer.UIElementIsland; } } ////// Number of text position in the text array occupied by the inline object. /// private readonly int _cch; ////// Text run properties for the inline object. /// private readonly TextRunProperties _textProps; ////// Paragraph - the host of the inline object. /// private readonly TextParagraph _host; ////// Inline UI Container associated with this run client /// private InlineUIContainer _inlineUIContainer; } ////// Floating object run. /// internal sealed class FloatingRun : TextHidden { internal FloatingRun(int length, bool figure) : base(length) { _figure = figure; } internal bool Figure { get { return _figure; } } private readonly bool _figure; } ////// Custom paragraph break run. /// internal sealed class ParagraphBreakRun : TextEndOfParagraph { internal ParagraphBreakRun(int length, PTS.FSFLRES breakReason) : base(length) { BreakReason = breakReason; } internal readonly PTS.FSFLRES BreakReason; } ////// Custom line break run. /// internal sealed class LineBreakRun : TextEndOfLine { internal LineBreakRun(int length, PTS.FSFLRES breakReason) : base(length) { BreakReason = breakReason; } internal readonly PTS.FSFLRES BreakReason; } } // 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
- Rect.cs
- QilExpression.cs
- sqlser.cs
- DependencyPropertyAttribute.cs
- ServiceDefaults.cs
- NameSpaceExtractor.cs
- SourceSwitch.cs
- WindowsRegion.cs
- SaveFileDialog.cs
- SafeNativeMethodsCLR.cs
- OledbConnectionStringbuilder.cs
- ProviderCollection.cs
- PipelineComponent.cs
- SequenceDesignerAccessibleObject.cs
- VisualProxy.cs
- EventArgs.cs
- ConfigXmlElement.cs
- DataTableMappingCollection.cs
- CacheDependency.cs
- ISessionStateStore.cs
- TemplateParser.cs
- BamlResourceContent.cs
- InfoCardRSACryptoProvider.cs
- PrinterUnitConvert.cs
- SafeNativeMemoryHandle.cs
- Rotation3D.cs
- ActiveDocumentEvent.cs
- Crypto.cs
- ModuleConfigurationInfo.cs
- ErrorHandler.cs
- ObjectDataSourceSelectingEventArgs.cs
- DESCryptoServiceProvider.cs
- ExpandSegment.cs
- UserControlCodeDomTreeGenerator.cs
- smtppermission.cs
- MultiplexingFormatMapping.cs
- ComponentConverter.cs
- XmlDeclaration.cs
- SmtpFailedRecipientsException.cs
- Visitor.cs
- MatrixCamera.cs
- HashAlgorithm.cs
- DeferredTextReference.cs
- ProvidersHelper.cs
- ParallelQuery.cs
- ConstructorExpr.cs
- NamespaceDecl.cs
- BuildResultCache.cs
- MenuItemBindingCollection.cs
- PermissionListSet.cs
- ProviderConnectionPointCollection.cs
- DurationConverter.cs
- MarkedHighlightComponent.cs
- AncestorChangedEventArgs.cs
- LicenseManager.cs
- Privilege.cs
- EdmProviderManifest.cs
- NavigatorOutput.cs
- SQLMoneyStorage.cs
- MultiPageTextView.cs
- recordstatescratchpad.cs
- SystemNetHelpers.cs
- TableLayout.cs
- HideDisabledControlAdapter.cs
- SerializationTrace.cs
- InheritanceContextHelper.cs
- ToolStripPanelRenderEventArgs.cs
- WebPartDeleteVerb.cs
- DeflateStreamAsyncResult.cs
- TargetConverter.cs
- RTLAwareMessageBox.cs
- HostingPreferredMapPath.cs
- BamlTreeMap.cs
- QuaternionRotation3D.cs
- GridViewSortEventArgs.cs
- MethodRental.cs
- PolygonHotSpot.cs
- MessageQuerySet.cs
- CultureTableRecord.cs
- DesignerSerializerAttribute.cs
- hwndwrapper.cs
- XmlDataSourceView.cs
- ScriptingWebServicesSectionGroup.cs
- BrushValueSerializer.cs
- ItemsPresenter.cs
- IIS7WorkerRequest.cs
- QueryOptionExpression.cs
- DefaultHttpHandler.cs
- DataGridColumnHeaderCollection.cs
- CompModSwitches.cs
- MobileComponentEditorPage.cs
- SHA1Cng.cs
- ParameterElementCollection.cs
- XsdDataContractExporter.cs
- HttpStreamMessage.cs
- ObjectDataSourceStatusEventArgs.cs
- AuthenticationModuleElement.cs
- BamlResourceContent.cs
- ViewDesigner.cs
- SafeNativeMethods.cs