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 / SectionVisual.cs / 1 / SectionVisual.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: SectionVisual.cs // // Description: Visual representing a section. // // History: // 05/20/2003 : grzegorz - created. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows; using System.Windows.Media; using System.Windows.Threading; using MS.Internal.Text; using MS.Internal.PtsHost.UnsafeNativeMethods; namespace MS.Internal.PtsHost { // --------------------------------------------------------------------- // Visual representing a section. // --------------------------------------------------------------------- internal class SectionVisual : DrawingVisual { // ------------------------------------------------------------------ // Constructor. // ----------------------------------------------------------------- internal SectionVisual() { } // ------------------------------------------------------------------ // Set information about column rules that are necessary for rendering // process. Draw column rules if necessary. // // arrayColumnDesc - column description including rectangle coordinates, etc // columnVStart - vertical start coordinate of column rule // columnHeight - height of column rule // columnProperties - column properties. // ------------------------------------------------------------------ internal void DrawColumnRules(ref PTS.FSTRACKDESCRIPTION[] arrayColumnDesc, double columnVStart, double columnHeight, ColumnPropertiesGroup columnProperties) { // Compute column rules data first. Point[] rulePositions = null; double ruleWidth = columnProperties.ColumnRuleWidth; if (arrayColumnDesc.Length > 1) { if (ruleWidth > 0) { int gapWidth = (arrayColumnDesc[1].fsrc.u - (arrayColumnDesc[0].fsrc.u + arrayColumnDesc[0].fsrc.du)) / 2; rulePositions = new Point[(arrayColumnDesc.Length - 1)*2]; for (int index = 1; index < arrayColumnDesc.Length; index++) { double u = TextDpi.FromTextDpi(arrayColumnDesc[index].fsrc.u - gapWidth); double v = columnVStart; double dv = columnHeight; rulePositions[(index-1)*2].X = u; rulePositions[(index-1)*2].Y = v; rulePositions[(index-1)*2+1].X = u; rulePositions[(index-1)*2+1].Y = v + dv; } } } // Check if update of the visual render data is needed. bool needsUpdate = _ruleWidth != ruleWidth; if (!needsUpdate && _rulePositions != rulePositions) { int prevSize = _rulePositions == null ? 0 : _rulePositions.Length; int newSize = rulePositions == null ? 0 : rulePositions.Length; if (prevSize == newSize) { for (int index = 0; index < rulePositions.Length; index++) { if (!DoubleUtil.AreClose(rulePositions[index].X, _rulePositions[index].X) || !DoubleUtil.AreClose(rulePositions[index].Y, _rulePositions[index].Y)) { needsUpdate = true; break; } } } else { needsUpdate = true; } } // Draw column rules if necessary if (needsUpdate) { _ruleWidth = ruleWidth; _rulePositions = rulePositions; // Open DrawingContext and draw background. // If background is not set, Open will clear the render data, but it // will preserve visual children. using (DrawingContext dc = RenderOpen()) { if (rulePositions != null) { // We do not want to cause the user's Brush to become frozen when we // freeze pen below, therefore we make our own copy of the Brush if // it is not already frozen. Brush columnRuleBrush = (Brush)FreezableOperations.GetAsFrozenIfPossible(columnProperties.ColumnRuleBrush); Pen pen = new Pen(columnRuleBrush, ruleWidth); // Freeze the pen if possible. Doing this avoids the overhead of // maintaining changed handlers. if (pen.CanFreeze) { pen.Freeze(); } for (int index = 0; index < rulePositions.Length; index += 2) { dc.DrawLine(pen, rulePositions[index], rulePositions[index + 1]); } } } } } // ----------------------------------------------------------------- // Column rules positions // ------------------------------------------------------------------ private Point[] _rulePositions; // ----------------------------------------------------------------- // Pen for column rule. // ----------------------------------------------------------------- private double _ruleWidth; } } // 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: SectionVisual.cs // // Description: Visual representing a section. // // History: // 05/20/2003 : grzegorz - created. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows; using System.Windows.Media; using System.Windows.Threading; using MS.Internal.Text; using MS.Internal.PtsHost.UnsafeNativeMethods; namespace MS.Internal.PtsHost { // --------------------------------------------------------------------- // Visual representing a section. // --------------------------------------------------------------------- internal class SectionVisual : DrawingVisual { // ------------------------------------------------------------------ // Constructor. // ----------------------------------------------------------------- internal SectionVisual() { } // ------------------------------------------------------------------ // Set information about column rules that are necessary for rendering // process. Draw column rules if necessary. // // arrayColumnDesc - column description including rectangle coordinates, etc // columnVStart - vertical start coordinate of column rule // columnHeight - height of column rule // columnProperties - column properties. // ------------------------------------------------------------------ internal void DrawColumnRules(ref PTS.FSTRACKDESCRIPTION[] arrayColumnDesc, double columnVStart, double columnHeight, ColumnPropertiesGroup columnProperties) { // Compute column rules data first. Point[] rulePositions = null; double ruleWidth = columnProperties.ColumnRuleWidth; if (arrayColumnDesc.Length > 1) { if (ruleWidth > 0) { int gapWidth = (arrayColumnDesc[1].fsrc.u - (arrayColumnDesc[0].fsrc.u + arrayColumnDesc[0].fsrc.du)) / 2; rulePositions = new Point[(arrayColumnDesc.Length - 1)*2]; for (int index = 1; index < arrayColumnDesc.Length; index++) { double u = TextDpi.FromTextDpi(arrayColumnDesc[index].fsrc.u - gapWidth); double v = columnVStart; double dv = columnHeight; rulePositions[(index-1)*2].X = u; rulePositions[(index-1)*2].Y = v; rulePositions[(index-1)*2+1].X = u; rulePositions[(index-1)*2+1].Y = v + dv; } } } // Check if update of the visual render data is needed. bool needsUpdate = _ruleWidth != ruleWidth; if (!needsUpdate && _rulePositions != rulePositions) { int prevSize = _rulePositions == null ? 0 : _rulePositions.Length; int newSize = rulePositions == null ? 0 : rulePositions.Length; if (prevSize == newSize) { for (int index = 0; index < rulePositions.Length; index++) { if (!DoubleUtil.AreClose(rulePositions[index].X, _rulePositions[index].X) || !DoubleUtil.AreClose(rulePositions[index].Y, _rulePositions[index].Y)) { needsUpdate = true; break; } } } else { needsUpdate = true; } } // Draw column rules if necessary if (needsUpdate) { _ruleWidth = ruleWidth; _rulePositions = rulePositions; // Open DrawingContext and draw background. // If background is not set, Open will clear the render data, but it // will preserve visual children. using (DrawingContext dc = RenderOpen()) { if (rulePositions != null) { // We do not want to cause the user's Brush to become frozen when we // freeze pen below, therefore we make our own copy of the Brush if // it is not already frozen. Brush columnRuleBrush = (Brush)FreezableOperations.GetAsFrozenIfPossible(columnProperties.ColumnRuleBrush); Pen pen = new Pen(columnRuleBrush, ruleWidth); // Freeze the pen if possible. Doing this avoids the overhead of // maintaining changed handlers. if (pen.CanFreeze) { pen.Freeze(); } for (int index = 0; index < rulePositions.Length; index += 2) { dc.DrawLine(pen, rulePositions[index], rulePositions[index + 1]); } } } } } // ----------------------------------------------------------------- // Column rules positions // ------------------------------------------------------------------ private Point[] _rulePositions; // ----------------------------------------------------------------- // Pen for column rule. // ----------------------------------------------------------------- private double _ruleWidth; } } // 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
- DesignerCapabilities.cs
- LinkedList.cs
- Soap11ServerProtocol.cs
- Vars.cs
- DesignTimeTemplateParser.cs
- FixUp.cs
- RegexGroup.cs
- BaseCollection.cs
- HierarchicalDataBoundControl.cs
- filewebresponse.cs
- AuthenticationConfig.cs
- GlobalItem.cs
- OwnerDrawPropertyBag.cs
- ConfigDefinitionUpdates.cs
- XmlNodeChangedEventArgs.cs
- DependentList.cs
- CacheMemory.cs
- CompositeKey.cs
- PersonalizationAdministration.cs
- XmlSchema.cs
- RenamedEventArgs.cs
- ActivitiesCollection.cs
- BaseCollection.cs
- DeviceContexts.cs
- Viewport2DVisual3D.cs
- BindingCompleteEventArgs.cs
- ToolStripItemImageRenderEventArgs.cs
- BinHexEncoder.cs
- EmptyStringExpandableObjectConverter.cs
- _Win32.cs
- RequestStatusBarUpdateEventArgs.cs
- WindowsClaimSet.cs
- SiteMapNode.cs
- HScrollBar.cs
- Axis.cs
- WpfKnownMemberInvoker.cs
- TextModifier.cs
- List.cs
- XmlDigitalSignatureProcessor.cs
- FamilyTypefaceCollection.cs
- UpdateManifestForBrowserApplication.cs
- SqlProvider.cs
- DeploymentExceptionMapper.cs
- XmlAtomicValue.cs
- RangeBaseAutomationPeer.cs
- ConfigPathUtility.cs
- SqlNotificationEventArgs.cs
- LinqDataSourceStatusEventArgs.cs
- ImageField.cs
- XsdValidatingReader.cs
- TokenCreationException.cs
- TabControlAutomationPeer.cs
- DataGridCaption.cs
- RegexParser.cs
- DefaultTraceListener.cs
- RuntimeEnvironment.cs
- XmlImplementation.cs
- LocalServiceSecuritySettings.cs
- BooleanConverter.cs
- XmlSchemaSet.cs
- DataGridViewToolTip.cs
- GlobalEventManager.cs
- Hyperlink.cs
- TypeSemantics.cs
- ParserOptions.cs
- XslAst.cs
- CodeMethodMap.cs
- Hash.cs
- SqlProviderServices.cs
- CodeAccessPermission.cs
- RegexEditorDialog.cs
- TextEditorParagraphs.cs
- CacheMemory.cs
- __ComObject.cs
- XmlSchemaSimpleTypeUnion.cs
- OleDbEnumerator.cs
- Function.cs
- HttpFileCollectionWrapper.cs
- FormCollection.cs
- RuntimeWrappedException.cs
- XmlSignatureManifest.cs
- ByteStorage.cs
- XsltArgumentList.cs
- WriteTimeStream.cs
- Constants.cs
- CustomAttributeFormatException.cs
- LockingPersistenceProvider.cs
- PublisherMembershipCondition.cs
- AnnotationMap.cs
- ItemsPresenter.cs
- Config.cs
- GridProviderWrapper.cs
- HtmlSelect.cs
- ConfigurationConverterBase.cs
- SecureUICommand.cs
- JoinSymbol.cs
- EntityDataSourceUtil.cs
- HTTP_SERVICE_CONFIG_URLACL_PARAM.cs
- CultureInfoConverter.cs
- WebPartConnectionsEventArgs.cs