Win2DでUWPアプリに日本語縦書き

MicrosoftがGititHubで公開しているWin2Dというライブラリ、Direct2DをUWPのCanvasで簡単に使えるようにしたものらしい。ちょっと試してみた。

' 空白ページのアイテム テンプレートについては、http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 を参照してください
Imports Windows.UI
Imports Microsoft.Graphics.Canvas.UI.Xaml
Imports Microsoft.Graphics.Canvas.Text


''' <summary>
''' それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
''' </summary>
Public NotInheritable Class MainPage
    Inherits Page
    Sub CanvasControl_Draw(sender As CanvasControl, args As CanvasDrawEventArgs)
        Dim textFormat = New CanvasTextFormat()
        Dim s As String = "こんにちは、" + vbCrLf + "私は後藤寿庵です。" + vbCrLf + "This is a pen."
        textFormat.FontSize = 24
        textFormat.Direction = CanvasTextDirection.TopToBottomThenRightToLeft   '縦書きを指定
        textFormat.VerticalGlyphOrientation = CanvasVerticalGlyphOrientation.Stacked '英字グリフを正立に
        args.DrawingSession.DrawText(s, 100, 100, Colors.Black, textFormat)
        textFormat.VerticalGlyphOrientation = CanvasVerticalGlyphOrientation.Default '英字グリフをデフォルトに
        args.DrawingSession.DrawText(s, 250, 100, Colors.Black, textFormat)
        textFormat.Direction = CanvasTextDirection.LeftToRightThenTopToBottom   '横書きを指定
        args.DrawingSession.DrawText(s, 270, 100, Colors.Black, textFormat)
    End Sub
End Class

なぜVBなのかといえば、慣れてるから。まあこの程度のコードならそのままC#に置き換えるのも難しくないだろう。
短いので説明の必要もないと思うが、何をやってるかといえば、CanvasTextFormatという、テキストの属性とかを定義するオブジェクトを作り、そこに行方向(CanvasTextDirection)とか、縦書き時のグリフの向き(CanvasVerticalGlyphOrientation これは漢字などのグリフではどちらでも変わらず、英数字の表示に影響する)を設定し、適当な座標にDrawingSession.DrawText()で描画しているだけ。フォントファミリーやサイズ、ウェイトなんかもCanvasTextFormatのプロパティとして簡単に設定できる。
結果:
f:id:juangotoh:20170613190819p:plain
確かに簡単だ。まあ、縦中横とかルビとかを実現しようと思ったらこれじゃ駄目なので、DrawText()じゃなくてDrawTextLayout()を使い、InlineObjectを定義するとかなんとかする必要は出てくると思うけど。

Direct2Dについての記事なのに、地味なテキストを表示するだけって…