Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Framework / MS / Internal / Text / TypographyProperties.cs / 1 / TypographyProperties.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: TypographyProperties.cs // // Description: Typography properties. // // History: // 06/13/2003 : [....] - created. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows; using System.Windows.Media; using System.Windows.Media.TextFormatting; namespace MS.Internal.Text { ////// Typography properties provider. /// internal sealed class TypographyProperties : TextRunTypographyProperties { ////// Used as indexes to bitscale for boolean properties /// private enum PropertyId { ///StandardLigatures property StandardLigatures = 0, ///ContextualLigatures property ContextualLigatures = 1, ///DiscretionaryLigatures property DiscretionaryLigatures = 2, ///HistoricalLigatures property HistoricalLigatures = 3, ///CaseSensitiveForms property CaseSensitiveForms = 4, ///ContextualAlternates property ContextualAlternates = 5, ///HistoricalForms property HistoricalForms = 6, ///Kerning property Kerning = 7, ///CapitalSpacing property CapitalSpacing = 8, ///StylisticSet1 property StylisticSet1 = 9, ///StylisticSet2 property StylisticSet2 = 10, ///StylisticSet3 property StylisticSet3 = 11, ///StylisticSet4 property StylisticSet4 = 12, ///StylisticSet5 property StylisticSet5 = 13, ///StylisticSet6 property StylisticSet6 = 14, ///StylisticSet7 property StylisticSet7 = 15, ///StylisticSet8 property StylisticSet8 = 16, ///StylisticSet9 property StylisticSet9 = 17, ///StylisticSet10 property StylisticSet10 = 18, ///StylisticSet11 property StylisticSet11 = 19, ///StylisticSet12 property StylisticSet12 = 20, ///StylisticSet13 property StylisticSet13 = 21, ///StylisticSet14 property StylisticSet14 = 22, ///StylisticSet15 property StylisticSet15 = 23, ///StylisticSet16 property StylisticSet16 = 24, ///StylisticSet17 property StylisticSet17 = 25, ///StylisticSet18 property StylisticSet18 = 26, ///StylisticSet19 property StylisticSet19 = 27, ///StylisticSet20 property StylisticSet20 = 28, ///SlashedZero property SlashedZero = 29, ///MathematicalGreek property MathematicalGreek = 30, ///EastAsianExpertForms property EastAsianExpertForms = 31, ////// Total number of properties. Should not be >32. /// Otherwise bitmask field _idPropertySetFlags should be changed to ulong /// PropertyCount = 32 } ////// Create new typographyProperties with deefault values /// public TypographyProperties() { // Flags are stored in uint (32 bits). // Any way to check it at compile time? Debug.Assert((uint)PropertyId.PropertyCount <= 32); ResetProperties(); } #region Public typography properties ////// /// public override bool StandardLigatures { get { return IsBooleanPropertySet(PropertyId.StandardLigatures); } } public void SetStandardLigatures(bool value) { SetBooleanProperty(PropertyId.StandardLigatures, value); } ////// /// public override bool ContextualLigatures { get { return IsBooleanPropertySet(PropertyId.ContextualLigatures); } } public void SetContextualLigatures(bool value) { SetBooleanProperty(PropertyId.ContextualLigatures, value); } ////// /// public override bool DiscretionaryLigatures { get { return IsBooleanPropertySet(PropertyId.DiscretionaryLigatures); } } public void SetDiscretionaryLigatures(bool value) { SetBooleanProperty(PropertyId.DiscretionaryLigatures, value); } ////// /// public override bool HistoricalLigatures { get { return IsBooleanPropertySet(PropertyId.HistoricalLigatures); } } public void SetHistoricalLigatures(bool value) { SetBooleanProperty(PropertyId.HistoricalLigatures, value); } ////// /// public override bool CaseSensitiveForms { get { return IsBooleanPropertySet(PropertyId.CaseSensitiveForms); } } public void SetCaseSensitiveForms(bool value) { SetBooleanProperty(PropertyId.CaseSensitiveForms, value); } ////// /// public override bool ContextualAlternates { get { return IsBooleanPropertySet(PropertyId.ContextualAlternates); } } public void SetContextualAlternates(bool value) { SetBooleanProperty(PropertyId.ContextualAlternates, value); } ////// /// public override bool HistoricalForms { get { return IsBooleanPropertySet(PropertyId.HistoricalForms); } } public void SetHistoricalForms(bool value) { SetBooleanProperty(PropertyId.HistoricalForms, value); } ////// /// public override bool Kerning { get { return IsBooleanPropertySet(PropertyId.Kerning); } } public void SetKerning(bool value) { SetBooleanProperty(PropertyId.Kerning, value); } ////// /// public override bool CapitalSpacing { get { return IsBooleanPropertySet(PropertyId.CapitalSpacing); } } public void SetCapitalSpacing(bool value) { SetBooleanProperty(PropertyId.CapitalSpacing, value); } ////// /// public override bool StylisticSet1 { get { return IsBooleanPropertySet(PropertyId.StylisticSet1); } } public void SetStylisticSet1(bool value) { SetBooleanProperty(PropertyId.StylisticSet1, value); } ////// /// public override bool StylisticSet2 { get { return IsBooleanPropertySet(PropertyId.StylisticSet2); } } public void SetStylisticSet2(bool value) { SetBooleanProperty(PropertyId.StylisticSet2, value); } ////// /// public override bool StylisticSet3 { get { return IsBooleanPropertySet(PropertyId.StylisticSet3); } } public void SetStylisticSet3(bool value) { SetBooleanProperty(PropertyId.StylisticSet3, value); } ////// /// public override bool StylisticSet4 { get { return IsBooleanPropertySet(PropertyId.StylisticSet4); } } public void SetStylisticSet4(bool value) { SetBooleanProperty(PropertyId.StylisticSet4, value); } ////// /// public override bool StylisticSet5 { get { return IsBooleanPropertySet(PropertyId.StylisticSet5); } } public void SetStylisticSet5(bool value) { SetBooleanProperty(PropertyId.StylisticSet5, value); } ////// /// public override bool StylisticSet6 { get { return IsBooleanPropertySet(PropertyId.StylisticSet6); } } public void SetStylisticSet6(bool value) { SetBooleanProperty(PropertyId.StylisticSet6, value); } ////// /// public override bool StylisticSet7 { get { return IsBooleanPropertySet(PropertyId.StylisticSet7); } } public void SetStylisticSet7(bool value) { SetBooleanProperty(PropertyId.StylisticSet7, value); } ////// /// public override bool StylisticSet8 { get { return IsBooleanPropertySet(PropertyId.StylisticSet8); } } public void SetStylisticSet8(bool value) { SetBooleanProperty(PropertyId.StylisticSet8, value); } ////// /// public override bool StylisticSet9 { get { return IsBooleanPropertySet(PropertyId.StylisticSet9); } } public void SetStylisticSet9(bool value) { SetBooleanProperty(PropertyId.StylisticSet9, value); } ////// /// public override bool StylisticSet10 { get { return IsBooleanPropertySet(PropertyId.StylisticSet10); } } public void SetStylisticSet10(bool value) { SetBooleanProperty(PropertyId.StylisticSet10, value); } ////// /// public override bool StylisticSet11 { get { return IsBooleanPropertySet(PropertyId.StylisticSet11); } } public void SetStylisticSet11(bool value) { SetBooleanProperty(PropertyId.StylisticSet11, value); } ////// /// public override bool StylisticSet12 { get { return IsBooleanPropertySet(PropertyId.StylisticSet12); } } public void SetStylisticSet12(bool value) { SetBooleanProperty(PropertyId.StylisticSet12, value); } ////// /// public override bool StylisticSet13 { get { return IsBooleanPropertySet(PropertyId.StylisticSet13); } } public void SetStylisticSet13(bool value) { SetBooleanProperty(PropertyId.StylisticSet13, value); } ////// /// public override bool StylisticSet14 { get { return IsBooleanPropertySet(PropertyId.StylisticSet14); } } public void SetStylisticSet14(bool value) { SetBooleanProperty(PropertyId.StylisticSet14, value); } ////// /// public override bool StylisticSet15 { get { return IsBooleanPropertySet(PropertyId.StylisticSet15); } } public void SetStylisticSet15(bool value) { SetBooleanProperty(PropertyId.StylisticSet15, value); } ////// /// public override bool StylisticSet16 { get { return IsBooleanPropertySet(PropertyId.StylisticSet16); } } public void SetStylisticSet16(bool value) { SetBooleanProperty(PropertyId.StylisticSet16, value); } ////// /// public override bool StylisticSet17 { get { return IsBooleanPropertySet(PropertyId.StylisticSet17); } } public void SetStylisticSet17(bool value) { SetBooleanProperty(PropertyId.StylisticSet17, value); } ////// /// public override bool StylisticSet18 { get { return IsBooleanPropertySet(PropertyId.StylisticSet18); } } public void SetStylisticSet18(bool value) { SetBooleanProperty(PropertyId.StylisticSet18, value); } ////// /// public override bool StylisticSet19 { get { return IsBooleanPropertySet(PropertyId.StylisticSet19); } } public void SetStylisticSet19(bool value) { SetBooleanProperty(PropertyId.StylisticSet19, value); } ////// /// public override bool StylisticSet20 { get { return IsBooleanPropertySet(PropertyId.StylisticSet20); } } public void SetStylisticSet20(bool value) { SetBooleanProperty(PropertyId.StylisticSet20, value); } ////// /// public override FontFraction Fraction { get { return _fraction; } } public void SetFraction(FontFraction value) { _fraction = value; OnPropertiesChanged(); } ////// /// public override bool SlashedZero { get { return IsBooleanPropertySet(PropertyId.SlashedZero); } } public void SetSlashedZero(bool value) { SetBooleanProperty(PropertyId.SlashedZero, value); } ////// /// public override bool MathematicalGreek { get { return IsBooleanPropertySet(PropertyId.MathematicalGreek); } } public void SetMathematicalGreek(bool value) { SetBooleanProperty(PropertyId.MathematicalGreek, value); } ////// /// public override bool EastAsianExpertForms { get { return IsBooleanPropertySet(PropertyId.EastAsianExpertForms); } } public void SetEastAsianExpertForms(bool value) { SetBooleanProperty(PropertyId.EastAsianExpertForms, value); } ////// /// public override FontVariants Variants { get { return _variant; } } public void SetVariants(FontVariants value) { _variant = value; OnPropertiesChanged(); } ////// /// public override FontCapitals Capitals { get { return _capitals; } } public void SetCapitals(FontCapitals value) { _capitals = value; OnPropertiesChanged(); } ////// /// public override FontNumeralStyle NumeralStyle { get { return _numeralStyle; } } public void SetNumeralStyle(FontNumeralStyle value) { _numeralStyle = value; OnPropertiesChanged(); } ////// /// public override FontNumeralAlignment NumeralAlignment { get { return _numeralAlignment; } } public void SetNumeralAlignment(FontNumeralAlignment value) { _numeralAlignment = value; OnPropertiesChanged(); } ////// /// public override FontEastAsianWidths EastAsianWidths { get { return _eastAsianWidths; } } public void SetEastAsianWidths(FontEastAsianWidths value) { _eastAsianWidths = value; OnPropertiesChanged(); } ////// /// public override FontEastAsianLanguage EastAsianLanguage { get { return _eastAsianLanguage; } } public void SetEastAsianLanguage(FontEastAsianLanguage value) { _eastAsianLanguage = value; OnPropertiesChanged(); } ////// /// public override int StandardSwashes { get { return _standardSwashes; } } public void SetStandardSwashes(int value) { _standardSwashes = value; OnPropertiesChanged(); } ////// /// public override int ContextualSwashes { get { return _contextualSwashes; } } public void SetContextualSwashes(int value) { _contextualSwashes = value; OnPropertiesChanged(); } ////// /// public override int StylisticAlternates { get { return _stylisticAlternates; } } public void SetStylisticAlternates(int value) { _stylisticAlternates = value; OnPropertiesChanged(); } ////// /// public override int AnnotationAlternates { get { return _annotationAlternates; } } public void SetAnnotationAlternates(int value) { _annotationAlternates = value; OnPropertiesChanged(); } #endregion Public typography properties ////// Check whether two Property sets are equal /// /// property to compare ///public override bool Equals(object other) { if (other == null) { return false; } if (this.GetType() != other.GetType()) { return false; } TypographyProperties genericOther = (TypographyProperties)other; return //This will cover all boolean properties _idPropertySetFlags == genericOther._idPropertySetFlags && //And this will cover the rest _variant == genericOther._variant && _capitals == genericOther._capitals && _fraction == genericOther._fraction && _numeralStyle == genericOther._numeralStyle && _numeralAlignment == genericOther._numeralAlignment && _eastAsianWidths == genericOther._eastAsianWidths && _eastAsianLanguage == genericOther._eastAsianLanguage && _standardSwashes == genericOther._standardSwashes && _contextualSwashes == genericOther._contextualSwashes && _stylisticAlternates == genericOther._stylisticAlternates && _annotationAlternates == genericOther._annotationAlternates; } public override int GetHashCode() { return (int)(_idPropertySetFlags >> 32) ^ (int)(_idPropertySetFlags & 0xFFFFFFFF) ^ (int)_variant << 28 ^ (int)_capitals << 24 ^ (int)_numeralStyle << 20 ^ (int)_numeralAlignment << 18 ^ (int)_eastAsianWidths << 14 ^ (int)_eastAsianLanguage << 10 ^ (int)_standardSwashes << 6 ^ (int)_contextualSwashes << 2 ^ (int)_stylisticAlternates ^ (int)_fraction << 16 ^ (int)_annotationAlternates << 12; } public static bool operator ==(TypographyProperties first, TypographyProperties second) { //Need to cast to object to do null comparision. if (((object)first) == null) return (((object)second) == null); return first.Equals(second); } public static bool operator !=(TypographyProperties first, TypographyProperties second) { return !(first == second); } #region Private methods /// /// Set all properties to default value /// private void ResetProperties() { //clean flags _idPropertySetFlags = 0; //assign non-trivial(not bolean) values _standardSwashes = 0; _contextualSwashes = 0; _stylisticAlternates = 0; _annotationAlternates = 0; _variant = FontVariants.Normal; _capitals = FontCapitals.Normal; _numeralStyle = FontNumeralStyle.Normal; _numeralAlignment = FontNumeralAlignment.Normal; _eastAsianWidths = FontEastAsianWidths.Normal; _eastAsianLanguage = FontEastAsianLanguage.Normal; _fraction = FontFraction.Normal; OnPropertiesChanged(); } ////// Check whether boolean property is set to non-default value /// /// PropertyId ///private bool IsBooleanPropertySet(PropertyId propertyId) { Debug.Assert((uint)propertyId < (uint)PropertyId.PropertyCount, "Invalid typography property id"); uint flagMask = (uint)(((uint)1) << ((int)propertyId)); return (_idPropertySetFlags & flagMask) != 0; } /// /// Set/clean flag that property value is non-default /// Used only internally to support quick checks while forming FeatureSet /// /// /// Property id /// Value of the flag private void SetBooleanProperty(PropertyId propertyId, bool flagValue) { Debug.Assert((uint)propertyId < (uint)PropertyId.PropertyCount, "Invalid typography property id"); uint flagMask = (uint)(((uint)1) << ((int)propertyId)); if (flagValue) _idPropertySetFlags |= flagMask; else _idPropertySetFlags &= ~flagMask; OnPropertiesChanged(); } private uint _idPropertySetFlags; private int _standardSwashes; private int _contextualSwashes; private int _stylisticAlternates; private int _annotationAlternates; private FontVariants _variant; private FontCapitals _capitals; private FontFraction _fraction; private FontNumeralStyle _numeralStyle; private FontNumeralAlignment _numeralAlignment; private FontEastAsianWidths _eastAsianWidths; private FontEastAsianLanguage _eastAsianLanguage; #endregion Private members } } // 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
- Point3D.cs
- SiteIdentityPermission.cs
- ManifestSignedXml.cs
- WebPartEditorOkVerb.cs
- InputLanguageEventArgs.cs
- ModulesEntry.cs
- Wizard.cs
- EventOpcode.cs
- XmlNamedNodeMap.cs
- BitVector32.cs
- ProgressiveCrcCalculatingStream.cs
- Rfc2898DeriveBytes.cs
- BindingOperations.cs
- SqlGatherProducedAliases.cs
- StorageInfo.cs
- EntitySqlQueryCacheKey.cs
- Figure.cs
- QueryOptionExpression.cs
- ProfileEventArgs.cs
- NoClickablePointException.cs
- OracleParameter.cs
- TextDecorationCollection.cs
- LayoutTableCell.cs
- DesignerDataSchemaClass.cs
- TemplateFactory.cs
- GroupBox.cs
- FileAuthorizationModule.cs
- FtpRequestCacheValidator.cs
- Vector.cs
- UserControl.cs
- TableCellCollection.cs
- ActionItem.cs
- ToolStripArrowRenderEventArgs.cs
- RefreshEventArgs.cs
- CalendarKeyboardHelper.cs
- TextProperties.cs
- UnaryQueryOperator.cs
- XXXOnTypeBuilderInstantiation.cs
- FlowDocumentPage.cs
- TableChangeProcessor.cs
- ToolTipAutomationPeer.cs
- Brush.cs
- SafeFileHandle.cs
- MatrixTransform.cs
- EntityCommand.cs
- DictionaryEntry.cs
- KeyValueConfigurationElement.cs
- Label.cs
- MbpInfo.cs
- RectangleHotSpot.cs
- WebPermission.cs
- ActiveXMessageFormatter.cs
- PreProcessor.cs
- EntityConnection.cs
- AttributeParameterInfo.cs
- HashAlgorithm.cs
- typedescriptorpermission.cs
- TextParagraph.cs
- ReliableSessionElement.cs
- XmlSerializerSection.cs
- WebPartHelpVerb.cs
- ObjectConverter.cs
- StylusEditingBehavior.cs
- XmlILConstructAnalyzer.cs
- ConfigurationLockCollection.cs
- ISAPIRuntime.cs
- SqlConnectionPoolProviderInfo.cs
- ExpressionBuilder.cs
- Panel.cs
- DataGridViewToolTip.cs
- ClassDataContract.cs
- SharedPersonalizationStateInfo.cs
- ClipboardProcessor.cs
- SafeLocalMemHandle.cs
- NullableBoolConverter.cs
- XsdDateTime.cs
- XmlILAnnotation.cs
- EntityEntry.cs
- MemberProjectionIndex.cs
- Cast.cs
- DataGridViewCellLinkedList.cs
- GetPageCompletedEventArgs.cs
- HtmlSelectionListAdapter.cs
- ListViewDataItem.cs
- ISO2022Encoding.cs
- OpenTypeLayoutCache.cs
- DivideByZeroException.cs
- DesignerTransactionCloseEvent.cs
- TextParagraph.cs
- IpcClientManager.cs
- ColumnHeaderConverter.cs
- SqlParameter.cs
- StyleSelector.cs
- ContextProperty.cs
- RefType.cs
- DetailsViewUpdatedEventArgs.cs
- ClipboardData.cs
- ModulesEntry.cs
- SqlDependency.cs
- WebServiceTypeData.cs