Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Core / CSharp / 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 Worachai Chaoweeraprasit (wchao)
//
//-----------------------------------------------------------------------
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.
//------------------------------------------------------------------------
//
// Microsoft Windows Client Platform
// Copyright (C) Microsoft Corporation
//
// File: DrawingState.cs
//
// Contents: Drawing state of full text
//
// Created: 1-29-2005 Worachai Chaoweeraprasit (wchao)
//
//-----------------------------------------------------------------------
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
- ControlCachePolicy.cs
- RootDesignerSerializerAttribute.cs
- Attribute.cs
- CodeAccessSecurityEngine.cs
- EntryWrittenEventArgs.cs
- XmlSchemaComplexContentRestriction.cs
- ControlCachePolicy.cs
- CategoryAttribute.cs
- ServiceOperation.cs
- WebPartRestoreVerb.cs
- SqlDelegatedTransaction.cs
- controlskin.cs
- ToolboxDataAttribute.cs
- SqlCommand.cs
- SQLInt32Storage.cs
- RoutedEventArgs.cs
- ReferencedType.cs
- PropertyConverter.cs
- XamlPoint3DCollectionSerializer.cs
- WebRequestModuleElementCollection.cs
- LocalIdCollection.cs
- SerializerWriterEventHandlers.cs
- SortKey.cs
- FigureParaClient.cs
- OracleParameter.cs
- CacheForPrimitiveTypes.cs
- ImageBrush.cs
- MemberInfoSerializationHolder.cs
- DataBindingValueUIHandler.cs
- MultiByteCodec.cs
- AssertFilter.cs
- InvariantComparer.cs
- SQLInt32.cs
- MULTI_QI.cs
- TemplateBindingExtensionConverter.cs
- DefaultAsyncDataDispatcher.cs
- XamlReader.cs
- ThumbAutomationPeer.cs
- PageCodeDomTreeGenerator.cs
- StdValidatorsAndConverters.cs
- SymbolType.cs
- Terminate.cs
- CodeGroup.cs
- COM2Properties.cs
- ActionFrame.cs
- ImageSourceConverter.cs
- ListItem.cs
- FileEnumerator.cs
- DataGridViewRowHeaderCell.cs
- ConfigurationLocationCollection.cs
- HierarchicalDataBoundControlAdapter.cs
- HtmlListAdapter.cs
- XmlWrappingReader.cs
- XamlSerializerUtil.cs
- TimeZone.cs
- DrawingImage.cs
- DateTimeOffsetStorage.cs
- LifetimeServices.cs
- InlinedAggregationOperatorEnumerator.cs
- Misc.cs
- ClientData.cs
- EmbossBitmapEffect.cs
- GeneralTransformGroup.cs
- HttpWebRequest.cs
- Run.cs
- SocketAddress.cs
- VerticalAlignConverter.cs
- DesignerSerializerAttribute.cs
- Debug.cs
- DefaultWorkflowTransactionService.cs
- RemoteHelper.cs
- X509AsymmetricSecurityKey.cs
- FilterInvalidBodyAccessException.cs
- SystemResourceHost.cs
- FrameworkElementAutomationPeer.cs
- ObjectStorage.cs
- AxHost.cs
- SharedUtils.cs
- BCLDebug.cs
- StateMachineHelpers.cs
- OuterProxyWrapper.cs
- DesignerObject.cs
- OdbcErrorCollection.cs
- CallbackHandler.cs
- WinFormsUtils.cs
- ManagementEventArgs.cs
- NetCodeGroup.cs
- ProbeDuplex11AsyncResult.cs
- RequiredAttributeAttribute.cs
- ConfigurationSettings.cs
- ClickablePoint.cs
- Pair.cs
- DecimalAnimationBase.cs
- Int64Animation.cs
- TextTreeRootTextBlock.cs
- StorageRoot.cs
- SecurityContext.cs
- Component.cs
- DataGridCaption.cs
- WindowsListViewItemCheckBox.cs