Gradients.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' LinearGradientBrush と RadialGradientBrush を使用して
'' グラデーション塗りを作成する方法を示します。
Public Class Gradients
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim g = doc.NewPage().Graphics
        Dim testRectSize = New SizeF(72 * 4, 72)
        Dim dy = 12
        '' ラベルを描画するテキストレイアウト。
        Dim tl = g.CreateTextLayout()
        tl.DefaultFormat.FontName = "Yu Gothic"
        tl.DefaultFormat.FontSize = 16
        tl.DefaultFormat.ForeColor = Color.Chartreuse
        tl.MaxWidth = testRectSize.Width
        tl.MaxHeight = testRectSize.Height
        tl.TextAlignment = TextAlignment.Center
        tl.ParagraphAlignment = ParagraphAlignment.Center
        '' ノート:
        Dim rc = Util.AddNote("LinearGradientBrush を使用した線形グラデーション:", doc.Pages.Last, New RectangleF(72, 36, 500, 100))
        '' テキストの挿入位置。
        Dim ip = New PointF(rc.Left, rc.Bottom + dy)
        '' グラデーションが塗りつぶされた矩形を描画するローカルアクション。
        Dim drawSwatch As Action(Of GCDRAW.Brush, String) =
            Sub(ByVal b_, ByVal txt_)
                Dim rect = New RectangleF(ip, testRectSize)
                '' 矩形をグラデーションブラシで塗りつぶします。
                g.FillRectangle(rect, b_)
                '' 境界線やテキストを描画します。
                g.DrawRectangle(rect, Color.Magenta)
                tl.Clear()
                tl.Append(txt_)
                tl.MaxHeight = testRectSize.Height
                tl.MaxWidth = testRectSize.Width
                tl.PerformLayout(True)
                g.DrawTextLayout(tl, ip)
                ip.Y += rect.Height + dy
            End Sub
        '' 水平グラデーション。
        Dim linearGradBrush = New LinearGradientBrush(Color.Red, Color.Blue)
        drawSwatch(linearGradBrush, $"線形グラデーション{vbCrLf}{linearGradBrush.StartPoint} から {linearGradBrush.EndPoint} まで")
        '' 垂直グラデーション。
        linearGradBrush = New LinearGradientBrush(Color.Red, New PointF(0, 0), Color.Green, New PointF(0, 1))
        drawSwatch(linearGradBrush, $"線形グラデーション{vbCrLf}{linearGradBrush.StartPoint} から {linearGradBrush.EndPoint} まで")
        '' 対角線グラデーション(対角線をよりよく表示するためにスウォッチの高さを上げます)。
        testRectSize.Height *= 2
        linearGradBrush = New LinearGradientBrush(Color.Red, New PointF(0, 0), Color.Teal, New PointF(1, 1))
        drawSwatch(linearGradBrush, $"線形グラデーション{vbCrLf}{linearGradBrush.StartPoint} から {linearGradBrush.EndPoint} まで")
        '' 放射グラデーション。
        rc = Util.AddNote("RadialGradientBrush を使用した放射グラデーション:", doc.Pages.Last, New RectangleF(ip, New SizeF(500, 100)))
        ip.Y = rc.Bottom + dy
        '' 中央に中心点。
        Dim radialGradBrush = New RadialGradientBrush(Color.Orange, Color.Purple)
        drawSwatch(radialGradBrush, $"放射グラデーション{vbCrLf}原点 {radialGradBrush.GradientOrigin}")
        '' 右下隅に中心点。
        radialGradBrush = New RadialGradientBrush(Color.OrangeRed, Color.DarkBlue, New PointF(1, 1))
        drawSwatch(radialGradBrush, $"放射グラデーション{vbCrLf}原点{radialGradBrush.GradientOrigin}")
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class