Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / MS / Internal / TextFormatting / ThousandthOfEmRealPoints.cs / 1 / ThousandthOfEmRealPoints.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: ThousandthOfEmRealPoints class // // History: // 1/13/2005: Garyyang Created the file // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Collections.Generic; using System.Windows; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; namespace MS.Internal.TextFormatting { ////// This is a fixed-size implementation of IList<Point>. It is aimed to reduce the double values storage /// while providing enough precision for glyph run operations. Current usage pattern suggests that there is no /// need to support resizing functionality (i.e. Add(), Insert(), Remove(), RemoveAt()). /// /// For each point being stored, it will store the X and Y coordinates of the point into two seperate ThousandthOfEmRealDoubles, /// which scales double to 16-bit integer if possible. /// /// internal sealed class ThousandthOfEmRealPoints : IList{ //---------------------------------- // Constructor //---------------------------------- internal ThousandthOfEmRealPoints( double emSize, int capacity ) { Debug.Assert(capacity >= 0); InitArrays(emSize, capacity); } internal ThousandthOfEmRealPoints( double emSize, IList pointValues ) { Debug.Assert(pointValues != null); InitArrays(emSize, pointValues.Count); // do the setting for (int i = 0; i < Count; i++) { _xArray[i] = pointValues[i].X; _yArray[i] = pointValues[i].Y; } } //------------------------------------- // Internal properties //------------------------------------- public int Count { get { return _xArray.Count; } } public bool IsReadOnly { get { return false; } } public Point this[int index] { get { // underlying array does boundary check return new Point(_xArray[index], _yArray[index]); } set { // underlying array does boundary check _xArray[index] = value.X; _yArray[index] = value.Y; } } //------------------------------------ // internal methods //------------------------------------ public int IndexOf(Point item) { // linear search for (int i = 0; i < Count; i++) { if (_xArray[i] == item.X && _yArray[i] == item.Y) { return i; } } return -1; } public void Clear() { _xArray.Clear(); _yArray.Clear(); } public bool Contains(Point item) { return IndexOf(item) >= 0; } public void CopyTo(Point[] array, int arrayIndex) { // parameter validations if (array == null) { throw new ArgumentNullException("array"); } if (array.Rank != 1) { throw new ArgumentException( SR.Get(SRID.Collection_CopyTo_ArrayCannotBeMultidimensional), "array"); } if (arrayIndex < 0) { throw new ArgumentOutOfRangeException("arrayIndex"); } if (arrayIndex >= array.Length) { throw new ArgumentException( SR.Get( SRID.Collection_CopyTo_IndexGreaterThanOrEqualToArrayLength, "arrayIndex", "array"), "arrayIndex"); } if ((array.Length - Count - arrayIndex) < 0) { throw new ArgumentException( SR.Get( SRID.Collection_CopyTo_NumberOfElementsExceedsArrayLength, "arrayIndex", "array")); } // do the copying here for (int i = 0; i < Count; i++) { array[arrayIndex + i] = this[i]; } } public IEnumerator GetEnumerator() { for (int i = 0; i < Count; i++) { yield return this[i]; } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return ((IEnumerable )this).GetEnumerator(); } public void Add(Point value) { // not supported, same as Point[] throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } public void Insert(int index, Point item) { // not supported, same as Point[] throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } public bool Remove(Point item) { // not supported, same as Point[] throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } public void RemoveAt(int index) { // not supported, same as Point[] throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } //--------------------------------------------- // Private methods //--------------------------------------------- private void InitArrays(double emSize, int capacity) { _xArray = new ThousandthOfEmRealDoubles(emSize, capacity); _yArray = new ThousandthOfEmRealDoubles(emSize, capacity); } //---------------------------------------- // Private members //---------------------------------------- private ThousandthOfEmRealDoubles _xArray; // scaled double array for X coordinates private ThousandthOfEmRealDoubles _yArray; // scaled double array for Y coordinates } } // 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. // // // // Description: ThousandthOfEmRealPoints class // // History: // 1/13/2005: Garyyang Created the file // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Collections.Generic; using System.Windows; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; namespace MS.Internal.TextFormatting { ////// This is a fixed-size implementation of IList<Point>. It is aimed to reduce the double values storage /// while providing enough precision for glyph run operations. Current usage pattern suggests that there is no /// need to support resizing functionality (i.e. Add(), Insert(), Remove(), RemoveAt()). /// /// For each point being stored, it will store the X and Y coordinates of the point into two seperate ThousandthOfEmRealDoubles, /// which scales double to 16-bit integer if possible. /// /// internal sealed class ThousandthOfEmRealPoints : IList{ //---------------------------------- // Constructor //---------------------------------- internal ThousandthOfEmRealPoints( double emSize, int capacity ) { Debug.Assert(capacity >= 0); InitArrays(emSize, capacity); } internal ThousandthOfEmRealPoints( double emSize, IList pointValues ) { Debug.Assert(pointValues != null); InitArrays(emSize, pointValues.Count); // do the setting for (int i = 0; i < Count; i++) { _xArray[i] = pointValues[i].X; _yArray[i] = pointValues[i].Y; } } //------------------------------------- // Internal properties //------------------------------------- public int Count { get { return _xArray.Count; } } public bool IsReadOnly { get { return false; } } public Point this[int index] { get { // underlying array does boundary check return new Point(_xArray[index], _yArray[index]); } set { // underlying array does boundary check _xArray[index] = value.X; _yArray[index] = value.Y; } } //------------------------------------ // internal methods //------------------------------------ public int IndexOf(Point item) { // linear search for (int i = 0; i < Count; i++) { if (_xArray[i] == item.X && _yArray[i] == item.Y) { return i; } } return -1; } public void Clear() { _xArray.Clear(); _yArray.Clear(); } public bool Contains(Point item) { return IndexOf(item) >= 0; } public void CopyTo(Point[] array, int arrayIndex) { // parameter validations if (array == null) { throw new ArgumentNullException("array"); } if (array.Rank != 1) { throw new ArgumentException( SR.Get(SRID.Collection_CopyTo_ArrayCannotBeMultidimensional), "array"); } if (arrayIndex < 0) { throw new ArgumentOutOfRangeException("arrayIndex"); } if (arrayIndex >= array.Length) { throw new ArgumentException( SR.Get( SRID.Collection_CopyTo_IndexGreaterThanOrEqualToArrayLength, "arrayIndex", "array"), "arrayIndex"); } if ((array.Length - Count - arrayIndex) < 0) { throw new ArgumentException( SR.Get( SRID.Collection_CopyTo_NumberOfElementsExceedsArrayLength, "arrayIndex", "array")); } // do the copying here for (int i = 0; i < Count; i++) { array[arrayIndex + i] = this[i]; } } public IEnumerator GetEnumerator() { for (int i = 0; i < Count; i++) { yield return this[i]; } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return ((IEnumerable )this).GetEnumerator(); } public void Add(Point value) { // not supported, same as Point[] throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } public void Insert(int index, Point item) { // not supported, same as Point[] throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } public bool Remove(Point item) { // not supported, same as Point[] throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } public void RemoveAt(int index) { // not supported, same as Point[] throw new NotSupportedException(SR.Get(SRID.CollectionIsFixedSize)); } //--------------------------------------------- // Private methods //--------------------------------------------- private void InitArrays(double emSize, int capacity) { _xArray = new ThousandthOfEmRealDoubles(emSize, capacity); _yArray = new ThousandthOfEmRealDoubles(emSize, capacity); } //---------------------------------------- // Private members //---------------------------------------- private ThousandthOfEmRealDoubles _xArray; // scaled double array for X coordinates private ThousandthOfEmRealDoubles _yArray; // scaled double array for Y coordinates } } // 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
- UTF8Encoding.cs
- X509CertificateStore.cs
- ReflectionUtil.cs
- FlowchartDesigner.Helpers.cs
- StreamingContext.cs
- TemplateContainer.cs
- SmtpFailedRecipientsException.cs
- ComponentManagerBroker.cs
- XmlSchemaCompilationSettings.cs
- NameValueCollection.cs
- PageTheme.cs
- InvalidateEvent.cs
- OleTxTransaction.cs
- DataGridHeaderBorder.cs
- OracleEncoding.cs
- SmtpLoginAuthenticationModule.cs
- ExplicitDiscriminatorMap.cs
- Validator.cs
- Stack.cs
- UserMapPath.cs
- DoubleCollection.cs
- SerializationException.cs
- DataQuery.cs
- ReachVisualSerializerAsync.cs
- CollectionViewGroupInternal.cs
- WindowsRichEdit.cs
- BuildTopDownAttribute.cs
- FixedSOMTable.cs
- TypeInfo.cs
- PolyBezierSegment.cs
- ClientFormsIdentity.cs
- XmlSchemaRedefine.cs
- TableLayoutSettingsTypeConverter.cs
- SourceFileInfo.cs
- SpecialTypeDataContract.cs
- WorkflowRuntimeBehavior.cs
- HttpSessionStateBase.cs
- WeakKeyDictionary.cs
- DiscoveryInnerClientManaged11.cs
- ClientTarget.cs
- NamedPipeAppDomainProtocolHandler.cs
- SqlDataSourceCommandEventArgs.cs
- PersistenceTypeAttribute.cs
- FormatStringEditor.cs
- PointCollectionConverter.cs
- FederatedMessageSecurityOverHttpElement.cs
- SqlCaseSimplifier.cs
- NotFiniteNumberException.cs
- FormViewInsertEventArgs.cs
- SqlCacheDependency.cs
- COM2TypeInfoProcessor.cs
- EventLogTraceListener.cs
- HostingEnvironmentException.cs
- XmlNode.cs
- CodeAccessSecurityEngine.cs
- AppSettingsSection.cs
- OutOfMemoryException.cs
- ExpressionTable.cs
- UIElementCollection.cs
- ObjectNotFoundException.cs
- ResolveCriteriaCD1.cs
- ButtonBase.cs
- SQLConvert.cs
- SelectedCellsCollection.cs
- ControlCachePolicy.cs
- ActivitiesCollection.cs
- RolePrincipal.cs
- TextPenaltyModule.cs
- TextRangeAdaptor.cs
- WindowsStatusBar.cs
- DataRecordInternal.cs
- DSASignatureDeformatter.cs
- CommandEventArgs.cs
- ConfigDefinitionUpdates.cs
- ExeConfigurationFileMap.cs
- QilValidationVisitor.cs
- TargetFrameworkAttribute.cs
- PTProvider.cs
- DataContractSerializerFaultFormatter.cs
- XmlWrappingReader.cs
- ObjectListField.cs
- As.cs
- SQLString.cs
- UxThemeWrapper.cs
- Empty.cs
- QueryTreeBuilder.cs
- NotificationContext.cs
- ExpressionReplacer.cs
- HelpEvent.cs
- DataGridViewComboBoxEditingControl.cs
- PropertyInfoSet.cs
- InkCanvasAutomationPeer.cs
- Page.cs
- ConnectionStringsSection.cs
- TimeoutException.cs
- Rect3DValueSerializer.cs
- DefaultValueAttribute.cs
- MailWebEventProvider.cs
- PersonalizationEntry.cs
- EncoderExceptionFallback.cs