Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Core / MS / Internal / TextFormatting / DrawingState.cs / 1 / DrawingState.cs
//------------------------------------------------------------------------ // // Microsoft Windows Client Platform // Copyright (C) Microsoft Corporation // // File: DrawingState.cs // // Contents: Drawing state of full text // // Created: 1-29-2005 [....] ([....]) // //----------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows; using System.Windows.Media; namespace MS.Internal.TextFormatting { ////// Formatting state of full text /// internal sealed class DrawingState : IDisposable { private TextMetrics.FullTextLine _currentLine; // full text line currently formatted private DrawingContext _drawingContext; // current drawing context private Point _lineOrigin; // line origin XY relative to drawing context reference location private Point _vectorToLineOrigin; // vector to line origin in UV relative to paragraph start private MatrixTransform _antiInversion; // anti-inversion transform applied on drawing surface private bool _overrideBaseGuidelineY; // a flag indicating whether a new guideline overrides the line's Y guideline private double _baseGuidelineY; // the Y guideline of the text line. ////// Construct drawing state for full text /// internal DrawingState( DrawingContext drawingContext, Point lineOrigin, MatrixTransform antiInversion, TextMetrics.FullTextLine currentLine ) { _drawingContext = drawingContext; _antiInversion = antiInversion; _currentLine = currentLine; if (antiInversion == null) { _lineOrigin = lineOrigin; } else { _vectorToLineOrigin = lineOrigin; } if (_drawingContext != null) { // LineServices draws GlyphRun and TextDecorations in multiple // callbacks and GlyphRuns may have different baselines. Pushing guideline // for each DrawGlyphRun are too costly. We optimize for the common case where // GlyphRuns and TextDecorations in the TextLine share the same baseline. _baseGuidelineY = lineOrigin.Y + currentLine.Baseline; _drawingContext.PushGuidelineY1(_baseGuidelineY); } } ////// Set guideline Y for a drawing operation if necessary. It is a no-op if the Y value is the same /// as the guideline Y of the line. Otherwise, it will push the Y to override the guideline of the line. /// A SetGuidelineY() must be paired with an UnsetGuidelineY() to ensure balanced push and pop. /// internal void SetGuidelineY(double runGuidelineY) { if (_drawingContext == null) return; Invariant.Assert(!_overrideBaseGuidelineY); if (runGuidelineY != _baseGuidelineY) { // Push a new guideline to override the line's guideline _drawingContext.PushGuidelineY1(runGuidelineY); _overrideBaseGuidelineY = true; // the new Guideline Y overrides the line's guideline until next unset. } } ////// Unset guideline Y for a drawing operation if necessary. It is a no-op if the Y value is the same /// as the guideline Y of the line. Otherwise, it will push the Y to override the guideline of the line. /// A SetGuidelineY() must be paired with an UnsetGuidelineY() to ensure balanced push and pop. /// internal void UnsetGuidelineY() { if (_overrideBaseGuidelineY) { _drawingContext.Pop(); _overrideBaseGuidelineY = false; } } ////// Clean up internal state. /// public void Dispose() { // clear the guideline at line's baseline if (_drawingContext != null) { _drawingContext.Pop(); } } ////// Current drawing context /// internal DrawingContext DrawingContext { get { return _drawingContext; } } ////// Anti-inversion transform applied on drawing surface /// internal MatrixTransform AntiInversion { get { return _antiInversion; } } ////// Origin XY of the current line relative to the drawing context reference location /// internal Point LineOrigin { get { return _lineOrigin; } } ////// Vector to line origin in UV relative to paragraph start /// internal Point VectorToLineOrigin { get { return _vectorToLineOrigin; } } ////// Line currently being drawn /// internal TextMetrics.FullTextLine CurrentLine { get { return _currentLine; } } } } // 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
- HierarchicalDataTemplate.cs
- EmptyStringExpandableObjectConverter.cs
- DynamicDataRouteHandler.cs
- RemotingServices.cs
- FunctionImportMapping.cs
- NonBatchDirectoryCompiler.cs
- JavaScriptString.cs
- SelectionRange.cs
- SqlDataSourceSelectingEventArgs.cs
- TextHidden.cs
- StylusLogic.cs
- PtsPage.cs
- mediaeventshelper.cs
- ParenthesizePropertyNameAttribute.cs
- FrugalList.cs
- NamedObjectList.cs
- SqlDataSourceFilteringEventArgs.cs
- XmlSecureResolver.cs
- WasEndpointConfigContainer.cs
- MbpInfo.cs
- WebPartManager.cs
- XPathAxisIterator.cs
- CallbackValidatorAttribute.cs
- UnsafeNativeMethods.cs
- SqlDataSourceView.cs
- KeyToListMap.cs
- EditModeSwitchButton.cs
- ImageSource.cs
- HttpException.cs
- DataGridViewAutoSizeModeEventArgs.cs
- SmiEventSink_DeferedProcessing.cs
- Comparer.cs
- SafeFileMapViewHandle.cs
- ObjectListGeneralPage.cs
- ComplexTypeEmitter.cs
- EntitySetBaseCollection.cs
- WebPartMinimizeVerb.cs
- PeekCompletedEventArgs.cs
- QualificationDataItem.cs
- FixedTextContainer.cs
- HttpContextServiceHost.cs
- UnsafeNativeMethods.cs
- Utils.cs
- XNodeValidator.cs
- EntityCommandExecutionException.cs
- LocalizableAttribute.cs
- FormsAuthenticationCredentials.cs
- HostedImpersonationContext.cs
- PolicyException.cs
- Binding.cs
- ResXBuildProvider.cs
- WebSysDisplayNameAttribute.cs
- Calendar.cs
- GenericParameterDataContract.cs
- DebugTraceHelper.cs
- SuppressMessageAttribute.cs
- SerializationException.cs
- ContentValidator.cs
- Internal.cs
- AudienceUriMode.cs
- NotifyParentPropertyAttribute.cs
- FileLogRecordEnumerator.cs
- QuaternionRotation3D.cs
- iisPickupDirectory.cs
- DbProviderConfigurationHandler.cs
- KoreanCalendar.cs
- FormClosingEvent.cs
- DecodeHelper.cs
- XmlTextEncoder.cs
- WebServiceReceive.cs
- ToolConsole.cs
- DataControlLinkButton.cs
- VectorCollectionConverter.cs
- CatalogZoneBase.cs
- RefreshPropertiesAttribute.cs
- Code.cs
- ValuePatternIdentifiers.cs
- HyperLinkStyle.cs
- WebPartConnectionsConnectVerb.cs
- FormatterServices.cs
- ContentType.cs
- MembershipPasswordException.cs
- SchemaName.cs
- RSAOAEPKeyExchangeDeformatter.cs
- ResourceDictionaryCollection.cs
- SmiRequestExecutor.cs
- SoapMessage.cs
- __FastResourceComparer.cs
- TraceListeners.cs
- CodeTypeReferenceCollection.cs
- AllMembershipCondition.cs
- PackagingUtilities.cs
- SimpleBitVector32.cs
- CDSsyncETWBCLProvider.cs
- SQLRoleProvider.cs
- ObjectKeyFrameCollection.cs
- WindowsScroll.cs
- KeyGesture.cs
- PolyLineSegmentFigureLogic.cs
- Publisher.cs