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のプロパティとして簡単に設定できる。
結果:
確かに簡単だ。まあ、縦中横とかルビとかを実現しようと思ったらこれじゃ駄目なので、DrawText()じゃなくてDrawTextLayout()を使い、InlineObjectを定義するとかなんとかする必要は出てくると思うけど。
Direct2Dについての記事なのに、地味なテキストを表示するだけって…