public static IXamlDirect GetXamlDirectForWindow(CoreDispatcher dispatcher) { int hash = dispatcher.GetHashCode(); if (_xamlDirectCache.TryGetValue(hash, out IXamlDirect d)) { return(d); } d = XamlDirect.GetDefault(); _xamlDirectCache[hash] = d; return(d); }
public static IconElement GetGlyph(string glyph) { var direct = XamlDirect.GetDefault(); if (direct.IsXamlDirectEnabled) { var icon = direct.CreateInstance(XamlTypeIndex.FontIcon); direct.SetStringProperty(icon, XamlPropertyIndex.FontIcon_Glyph, glyph); return(direct.GetObject(icon) as FontIcon); } else { return(new FontIcon { Glyph = glyph }); } }
public static void SetTypography(IXamlDirectObject o, CanvasTypographyFeatureName f, XamlDirect _xamlDirect) { /* XAML Direct Helpers. Using XD is faster than setting Dependency Properties */ void Set(XamlPropertyIndex index, bool value) { _xamlDirect.SetBooleanProperty(o, index, value); } void SetE(XamlPropertyIndex index, uint e) { _xamlDirect.SetEnumProperty(o, index, e); } void SetI(XamlPropertyIndex index, bool val) { _xamlDirect.SetInt32Property(o, index, val ? 1 : 0); } /* TODO : ADD EASTASIAN TYPOGRAPY PROPERTIES */ /* Set CAPTIAL SPACING */ /* As Capital Spacing affects character spacing, it has no use when displaying single glyphs */ //Set(XamlPropertyIndex.Typography_CapitalSpacing, f == CanvasTypographyFeatureName.CapitalSpacing); /* Set KERNING */ /* As Kerning affects character spacing, it has no use when displaying single glyphs */ //Set(XamlPropertyIndex.Typography_Kerning, f == CanvasTypographyFeatureName.Kerning); /* Set SWASHES */ SetI(XamlPropertyIndex.Typography_StandardSwashes, f == CanvasTypographyFeatureName.Swash); SetI(XamlPropertyIndex.Typography_ContextualSwashes, f == CanvasTypographyFeatureName.ContextualSwash); /* Set ALTERNATES */ SetI(XamlPropertyIndex.Typography_AnnotationAlternates, f == CanvasTypographyFeatureName.AlternateAnnotationForms); SetI(XamlPropertyIndex.Typography_StylisticAlternates, f == CanvasTypographyFeatureName.StylisticAlternates); /* Contextual Alternates applies to combinations of characters, and as such has no purpose here yet */ Set(XamlPropertyIndex.Typography_ContextualAlternates, f == CanvasTypographyFeatureName.ContextualAlternates); /* Set MATHEMATICAL GREEK */ Set(XamlPropertyIndex.Typography_MathematicalGreek, f == CanvasTypographyFeatureName.MathematicalGreek); /* Set FORMS */ Set(XamlPropertyIndex.Typography_HistoricalForms, f == CanvasTypographyFeatureName.HistoricalForms); Set(XamlPropertyIndex.Typography_CaseSensitiveForms, f == CanvasTypographyFeatureName.CaseSensitiveForms); Set(XamlPropertyIndex.Typography_EastAsianExpertForms, f == CanvasTypographyFeatureName.ExpertForms); /* Set SLASHED ZERO */ Set(XamlPropertyIndex.Typography_SlashedZero, f == CanvasTypographyFeatureName.SlashedZero); /* Set LIGATURES */ /* Ligatures only apply to combinations of characters, and as such have no purpose here yet */ // Set(XamlPropertyIndex.Typography_StandardLigatures, f == CanvasTypographyFeatureName.StandardLigatures); // Set(XamlPropertyIndex.Typography_ContextualLigatures, f == CanvasTypographyFeatureName.ContextualLigatures); // Set(XamlPropertyIndex.Typography_HistoricalLigatures, f == CanvasTypographyFeatureName.HistoricalLigatures); // Set(XamlPropertyIndex.Typography_DiscretionaryLigatures, f == CanvasTypographyFeatureName.DiscretionaryLigatures); /* Set CAPITALS */ if (f == CanvasTypographyFeatureName.SmallCapitals) { SetE(XamlPropertyIndex.Typography_Capitals, (uint)FontCapitals.SmallCaps); } else if (f == CanvasTypographyFeatureName.SmallCapitalsFromCapitals) { SetE(XamlPropertyIndex.Typography_Capitals, (uint)FontCapitals.AllSmallCaps); } else if (f == CanvasTypographyFeatureName.PetiteCapitals) { SetE(XamlPropertyIndex.Typography_Capitals, (uint)FontCapitals.PetiteCaps); } else if (f == CanvasTypographyFeatureName.PetiteCapitalsFromCapitals) { SetE(XamlPropertyIndex.Typography_Capitals, (uint)FontCapitals.AllPetiteCaps); } else if (f == CanvasTypographyFeatureName.Titling) { SetE(XamlPropertyIndex.Typography_Capitals, (uint)FontCapitals.Titling); } else if (f == CanvasTypographyFeatureName.Unicase) { SetE(XamlPropertyIndex.Typography_Capitals, (uint)FontCapitals.Unicase); } else { SetE(XamlPropertyIndex.Typography_Capitals, (uint)FontCapitals.Normal); } /* Set NUMERAL ALIGNMENT */ /* Numeral Alignment only apply to combinations of characters, and as such have no purpose here yet */ //if (f == CanvasTypographyFeatureName.ProportionalFigures) // SetE(XamlPropertyIndex.Typography_NumeralAlignment, (uint)FontNumeralAlignment.Proportional); //else if (f == CanvasTypographyFeatureName.TabularFigures) // SetE(XamlPropertyIndex.Typography_NumeralAlignment, (uint)FontNumeralAlignment.Tabular); //else SetE(XamlPropertyIndex.Typography_NumeralAlignment, (uint)FontNumeralAlignment.Normal); /* Set NUMERAL STYLE */ if (f == CanvasTypographyFeatureName.OldStyleFigures) { SetE(XamlPropertyIndex.Typography_NumeralStyle, (uint)FontNumeralStyle.OldStyle); } else if (f == CanvasTypographyFeatureName.LiningFigures) { SetE(XamlPropertyIndex.Typography_NumeralStyle, (uint)FontNumeralStyle.Lining); } else { SetE(XamlPropertyIndex.Typography_NumeralStyle, (uint)FontNumeralStyle.Normal); } /* Set VARIANTS */ if (f == CanvasTypographyFeatureName.Ordinals) { SetE(XamlPropertyIndex.Typography_Variants, (uint)FontVariants.Ordinal); } else if (f == CanvasTypographyFeatureName.Superscript) { SetE(XamlPropertyIndex.Typography_Variants, (uint)FontVariants.Superscript); } else if (f == CanvasTypographyFeatureName.Subscript) { SetE(XamlPropertyIndex.Typography_Variants, (uint)FontVariants.Subscript); } else if (f == CanvasTypographyFeatureName.RubyNotationForms) { SetE(XamlPropertyIndex.Typography_Variants, (uint)FontVariants.Ruby); } else if (f == CanvasTypographyFeatureName.ScientificInferiors) { SetE(XamlPropertyIndex.Typography_Variants, (uint)FontVariants.Inferior); } else { SetE(XamlPropertyIndex.Typography_Variants, (uint)FontVariants.Normal); } /* Set STLYISTIC SETS */ Set(XamlPropertyIndex.Typography_StylisticSet1, f == CanvasTypographyFeatureName.StylisticSet1); Set(XamlPropertyIndex.Typography_StylisticSet2, f == CanvasTypographyFeatureName.StylisticSet2); Set(XamlPropertyIndex.Typography_StylisticSet3, f == CanvasTypographyFeatureName.StylisticSet3); Set(XamlPropertyIndex.Typography_StylisticSet4, f == CanvasTypographyFeatureName.StylisticSet4); Set(XamlPropertyIndex.Typography_StylisticSet5, f == CanvasTypographyFeatureName.StylisticSet5); Set(XamlPropertyIndex.Typography_StylisticSet6, f == CanvasTypographyFeatureName.StylisticSet6); Set(XamlPropertyIndex.Typography_StylisticSet7, f == CanvasTypographyFeatureName.StylisticSet7); Set(XamlPropertyIndex.Typography_StylisticSet8, f == CanvasTypographyFeatureName.StylisticSet8); Set(XamlPropertyIndex.Typography_StylisticSet9, f == CanvasTypographyFeatureName.StylisticSet9); Set(XamlPropertyIndex.Typography_StylisticSet10, f == CanvasTypographyFeatureName.StylisticSet10); Set(XamlPropertyIndex.Typography_StylisticSet11, f == CanvasTypographyFeatureName.StylisticSet11); Set(XamlPropertyIndex.Typography_StylisticSet12, f == CanvasTypographyFeatureName.StylisticSet12); Set(XamlPropertyIndex.Typography_StylisticSet13, f == CanvasTypographyFeatureName.StylisticSet13); Set(XamlPropertyIndex.Typography_StylisticSet14, f == CanvasTypographyFeatureName.StylisticSet14); Set(XamlPropertyIndex.Typography_StylisticSet15, f == CanvasTypographyFeatureName.StylisticSet15); Set(XamlPropertyIndex.Typography_StylisticSet16, f == CanvasTypographyFeatureName.StylisticSet16); Set(XamlPropertyIndex.Typography_StylisticSet17, f == CanvasTypographyFeatureName.StylisticSet17); Set(XamlPropertyIndex.Typography_StylisticSet18, f == CanvasTypographyFeatureName.StylisticSet18); Set(XamlPropertyIndex.Typography_StylisticSet19, f == CanvasTypographyFeatureName.StylisticSet19); Set(XamlPropertyIndex.Typography_StylisticSet20, f == CanvasTypographyFeatureName.StylisticSet20); }