Mike Schwörer
b78a468632
Some checks failed
Build Docker and Deploy / Run goext test-suite (push) Has been cancelled
89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
package wpdf
|
|
|
|
import (
|
|
"gogs.mikescher.com/BlackForestBytes/goext/dataext"
|
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
|
)
|
|
|
|
type PDFLineOpt struct {
|
|
lineWidth *float64
|
|
drawColor *PDFColor
|
|
alpha *dataext.Tuple[float64, PDFBlendMode]
|
|
capStyle *PDFLineCapStyle
|
|
}
|
|
|
|
func NewPDFLineOpt() *PDFLineOpt {
|
|
return &PDFLineOpt{}
|
|
}
|
|
|
|
func (opt *PDFLineOpt) LineWidth(v float64) *PDFLineOpt {
|
|
opt.lineWidth = &v
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFLineOpt) DrawColor(cr, cg, cb int) *PDFLineOpt {
|
|
opt.drawColor = langext.Ptr(rgbToColor(cr, cg, cb))
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFLineOpt) DrawColorHex(c uint32) *PDFLineOpt {
|
|
opt.drawColor = langext.Ptr(hexToColor(c))
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFLineOpt) Alpha(alpha float64, blendMode PDFBlendMode) *PDFLineOpt {
|
|
opt.alpha = &dataext.Tuple[float64, PDFBlendMode]{V1: alpha, V2: blendMode}
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFLineOpt) CapButt() *PDFLineOpt {
|
|
opt.capStyle = langext.Ptr(CapButt)
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFLineOpt) CapSquare() *PDFLineOpt {
|
|
opt.capStyle = langext.Ptr(CapSquare)
|
|
return opt
|
|
}
|
|
|
|
func (opt *PDFLineOpt) CapRound() *PDFLineOpt {
|
|
opt.capStyle = langext.Ptr(CapRound)
|
|
return opt
|
|
}
|
|
|
|
func (b *WPDFBuilder) Line(x1 float64, y1 float64, x2 float64, y2 float64, opts ...*PDFLineOpt) {
|
|
var lineWidth *float64
|
|
var drawColor *PDFColor
|
|
var alphaOverride *dataext.Tuple[float64, PDFBlendMode]
|
|
capStyle := CapButt
|
|
|
|
for _, opt := range opts {
|
|
lineWidth = langext.CoalesceOpt(opt.lineWidth, lineWidth)
|
|
drawColor = langext.CoalesceOpt(opt.drawColor, drawColor)
|
|
alphaOverride = langext.CoalesceOpt(opt.alpha, alphaOverride)
|
|
capStyle = langext.Coalesce(opt.capStyle, capStyle)
|
|
}
|
|
|
|
if lineWidth != nil {
|
|
old := b.GetLineWidth()
|
|
b.SetLineWidth(*lineWidth)
|
|
defer func() { b.SetLineWidth(old) }()
|
|
}
|
|
|
|
if drawColor != nil {
|
|
oldR, oldG, oldB := b.GetDrawColor()
|
|
b.SetDrawColor(drawColor.R, drawColor.G, drawColor.B)
|
|
defer func() { b.SetDrawColor(oldR, oldG, oldB) }()
|
|
}
|
|
|
|
if alphaOverride != nil {
|
|
oldA, oldBMS := b.b.GetAlpha()
|
|
b.b.SetAlpha(alphaOverride.V1, string(alphaOverride.V2))
|
|
defer func() { b.b.SetAlpha(oldA, oldBMS) }()
|
|
}
|
|
|
|
b.b.SetLineCapStyle(string(capStyle))
|
|
|
|
b.b.Line(x1, y1, x2, y2)
|
|
}
|