private CanvasTextLayout CreateTextLayout(ICanvasResourceCreator resourceCreator, float canvasWidth, float canvasHeight) { string testString; if (CurrentTextLengthOption == TextLengthOption.Short) { testString = "one two"; } else { testString = "This is some text which demonstrates Win2D's text-to-geometry option; there are sub-options of this test which apply lining options such as underline or strike-through. Additionally, this example applies different text directions to ensure glyphs are transformed correctly."; } if (ThumbnailGenerator.IsDrawingThumbnail) { testString = "a"; } everyOtherWordBoundary = Utils.GetEveryOtherWord(testString); float sizeDim = Math.Min(canvasWidth, canvasHeight); CanvasTextFormat textFormat = new CanvasTextFormat() { FontSize = CurrentTextLengthOption == TextLengthOption.Paragraph? sizeDim * 0.09f : sizeDim * 0.3f, Direction = CurrentTextDirection, }; if (ThumbnailGenerator.IsDrawingThumbnail) { textFormat.FontSize = sizeDim * 0.75f; } CanvasTextLayout textLayout = new CanvasTextLayout(resourceCreator, testString, textFormat, canvasWidth, canvasHeight); if (CurrentTextEffectOption == TextEffectOption.UnderlineEveryOtherWord) { foreach (var wb in everyOtherWordBoundary) { textLayout.SetUnderline(wb.Start, wb.Length, true); } } else if (CurrentTextEffectOption == TextEffectOption.StrikeEveryOtherWord) { foreach (var wb in everyOtherWordBoundary) { textLayout.SetStrikethrough(wb.Start, wb.Length, true); } } textLayout.TrimmingGranularity = CanvasTextTrimmingGranularity.Character; textLayout.TrimmingSign = CanvasTrimmingSign.Ellipsis; textLayout.VerticalGlyphOrientation = CurrentVerticalGlyphOrientation; return(textLayout); }
public GlyphRotation() { this.InitializeComponent(); DataContext = this; CurrentTextEffectOption = TextEffectOption.UnderlineEveryOtherWord; CurrentTextDirection = CanvasTextDirection.RightToLeftThenBottomToTop; CurrentVerticalGlyphOrientation = CanvasVerticalGlyphOrientation.Default; ShowNonCustomText = true; testString = "This demonstrates the correct way to do glyph rotation from a custom text renderer in Win2D. Of course, if your script is always read left-to-right then top-to-bottom, there is no need to handle rotation. However, in general, callers of DrawGlyphRun should ensure that the correct transform is used- particularly for vertical text."; if (ThumbnailGenerator.IsDrawingThumbnail) { testString = "Glyph rotation"; CurrentTextDirection = CanvasTextDirection.TopToBottomThenLeftToRight; } everyOtherWordBoundary = Utils.GetEveryOtherWord(testString); }