TextJustifyRules.vb
''
'' This code is part of Document Solutions for Imaging demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.Drawing
Imports System.IO
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Imaging

'' TBD:
Public Class TextJustifyRules
    Public Function GenerateImage(
        ByVal pixelSize As Size,
        ByVal dpi As Single,
        ByVal opaque As Boolean,
        Optional ByVal sampleParams As String() = Nothing) As GcBitmap

        Dim regular = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "NotoSansJP-Regular.ttf"))
        Dim bold = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "NotoSerif-Bold.ttf"))

        Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi)

        Using g = bmp.CreateGraphics(Color.White)

            Dim tl = g.CreateTextLayout()
            ''tl.LineBreakingRules = LineBreakingRules.Unicode
            ''tl.WordBoundaryRules = WordBoundaryRules.Unicode
            ''tl.TextExtensionStrategy = TextExtensionStrategy.Default
            tl.TextAlignment = TextAlignment.Distributed
            tl.JustifiedSpaceExtension = 0F
            tl.JustifiedTextExtension = 20F

            Dim tf = New TextFormat() With {.FontSize = 26F, .Font = regular}
            Dim tfInfo = New TextFormat() With {.FontSize = 11F, .Font = bold}

            Dim marginx As Single = 260, marginy As Single = 36
            tl.MaxWidth = pixelSize.Width - marginx * 2
            Dim text = "abcdefg!1010101010abc;999999本列島で使され99 555"

            Dim y As Single = marginy
            y = DrawText(g, tl, y, marginx, tf, tfInfo, text)
            tl.TextExtensionStrategy = TextExtensionStrategy.EastAsianExcel
            y = DrawText(g, tl, y, marginx, tf, tfInfo, text)
            tl.TextExtensionStrategy = TextExtensionStrategy.Excel
            y = DrawText(g, tl, y, marginx, tf, tfInfo, text)
            tl.LineBreakingRules = LineBreakingRules.Simplified
            tl.WordBoundaryRules = WordBoundaryRules.Simplified
            tl.TextExtensionStrategy = TextExtensionStrategy.Default
            y = DrawText(g, tl, y, marginx, tf, tfInfo, text)
            tl.TextExtensionStrategy = TextExtensionStrategy.EastAsianExcel
            y = DrawText(g, tl, y, marginx, tf, tfInfo, text)
            tl.TextExtensionStrategy = TextExtensionStrategy.Excel
            y = DrawText(g, tl, y, marginx, tf, tfInfo, text)
        End Using
        Return bmp
    End Function

    Private Shared Function DrawText(g As GcGraphics, tl As TextLayout, y As Single, marginx As Single,
        tf As TextFormat, tfInfo As TextFormat, text As String) As Single

        Dim pt = New PointF(marginx, y + 20)
        tl.Append(text, tf)
        tl.PerformLayout(True)
        Dim rc = New RectangleF(pt, New SizeF(tl.ContentWidth, tl.ContentHeight))
        g.FillRectangle(rc, Color.PaleGoldenrod)
        g.DrawString($"LineBreakingRules.{tl.LineBreakingRules}, TextExtensionStrategy.{tl.TextExtensionStrategy}:",
            tfInfo, New PointF(marginx / 2.0F, y))
        g.DrawTextLayout(tl, pt)
        tl.Clear()
        Return rc.Bottom + 16
    End Function
End Class