127 lines
3.1 KiB
Go
127 lines
3.1 KiB
Go
|
package wpdf
|
||
|
|
||
|
import "gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||
|
|
||
|
type PDFRectOpt struct {
|
||
|
x *float64
|
||
|
y *float64
|
||
|
lineWidth *float64
|
||
|
drawColor *PDFColor
|
||
|
fillColor *PDFColor
|
||
|
radiusTL *float64
|
||
|
radiusTR *float64
|
||
|
radiusBR *float64
|
||
|
radiusBL *float64
|
||
|
}
|
||
|
|
||
|
func NewPDFRectOpt() *PDFRectOpt {
|
||
|
return &PDFRectOpt{}
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) X(v float64) *PDFRectOpt {
|
||
|
opt.x = &v
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) Y(v float64) *PDFRectOpt {
|
||
|
opt.y = &v
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) LineWidth(v float64) *PDFRectOpt {
|
||
|
opt.lineWidth = &v
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) DrawColor(cr, cg, cb int) *PDFRectOpt {
|
||
|
opt.drawColor = &PDFColor{R: cr, G: cg, B: cb}
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) DrawColorHex(c uint32) *PDFRectOpt {
|
||
|
opt.drawColor = &PDFColor{R: int((c >> 16) & 0xFF), G: int((c >> 8) & 0xFF), B: int((c >> 0) & 0xFF)}
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) FillColor(cr, cg, cb int) *PDFRectOpt {
|
||
|
opt.fillColor = &PDFColor{R: cr, G: cg, B: cb}
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) FillColorHex(c uint32) *PDFRectOpt {
|
||
|
opt.fillColor = &PDFColor{R: int((c >> 16) & 0xFF), G: int((c >> 8) & 0xFF), B: int((c >> 0) & 0xFF)}
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) Rounded(radius float64) *PDFRectOpt {
|
||
|
opt.radiusTL = &radius
|
||
|
opt.radiusTR = &radius
|
||
|
opt.radiusBR = &radius
|
||
|
opt.radiusBL = &radius
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) RadiusTL(radius float64) *PDFRectOpt {
|
||
|
opt.radiusTL = &radius
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) RadiusTR(radius float64) *PDFRectOpt {
|
||
|
opt.radiusTR = &radius
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) RadiusBL(radius float64) *PDFRectOpt {
|
||
|
opt.radiusBL = &radius
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (opt *PDFRectOpt) RadiusBR(radius float64) *PDFRectOpt {
|
||
|
opt.radiusBR = &radius
|
||
|
return opt
|
||
|
}
|
||
|
|
||
|
func (b *WPDFBuilder) Rect(w float64, h float64, styleStr PDFRectStyle, opts ...*PDFRectOpt) {
|
||
|
x := b.GetX()
|
||
|
y := b.GetY()
|
||
|
var lineWidth *float64
|
||
|
var drawColor *PDFColor
|
||
|
var fillColor *PDFColor
|
||
|
radiusTL := float64(0)
|
||
|
radiusTR := float64(0)
|
||
|
radiusBR := float64(0)
|
||
|
radiusBL := float64(0)
|
||
|
|
||
|
for _, opt := range opts {
|
||
|
x = langext.Coalesce(opt.x, x)
|
||
|
y = langext.Coalesce(opt.y, y)
|
||
|
lineWidth = langext.CoalesceOpt(opt.lineWidth, lineWidth)
|
||
|
drawColor = langext.CoalesceOpt(opt.drawColor, drawColor)
|
||
|
fillColor = langext.CoalesceOpt(opt.fillColor, fillColor)
|
||
|
radiusTL = langext.Coalesce(opt.radiusTL, radiusTL)
|
||
|
radiusTR = langext.Coalesce(opt.radiusTR, radiusTR)
|
||
|
radiusBR = langext.Coalesce(opt.radiusBR, radiusBR)
|
||
|
radiusBL = langext.Coalesce(opt.radiusBL, radiusBL)
|
||
|
}
|
||
|
|
||
|
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 fillColor != nil {
|
||
|
oldR, oldG, oldB := b.GetFillColor()
|
||
|
b.SetFillColor(fillColor.R, fillColor.G, fillColor.B)
|
||
|
defer func() { b.SetFillColor(oldR, oldG, oldB) }()
|
||
|
}
|
||
|
|
||
|
b.b.RoundedRectExt(x, y, w, h, radiusTL, radiusTR, radiusBR, radiusBL, string(styleStr))
|
||
|
}
|