clone

fifteen puzzle games for the terminal, with daily puzzles, weekly ladders and xp, built on bubble tea

bug/architecture-test-trim-path
puzzletea / export / pdf / render_kit.go
render_kit.go 2.8K
1package pdfexport23import "codeberg.org/go-pdf/fpdf"45type Rect struct {6 X float647 Y float648 W float649 H float6410}1112const (13 SansFontFamily = sansFontFamily14 PDFFontSizeDelta = pdfFontSizeDelta1516 PrimaryTextGray = primaryTextGray17 SecondaryTextGray = secondaryTextGray18 RuleTextGray = ruleTextGray19 DimTextGray = dimTextGray2021 ThinGridLineMM = thinGridLineMM22 MajorGridLineMM = majorGridLineMM23 OuterBorderLineMM = outerBorderLineMM2425 InstructionLineHMM = instructionLineHMM2627 PuzzleBottomInsetMM = puzzleBottomInsetMM28 WordSearchGridGapMM = wordSearchGridListGap2930 PuzzleWordBankFontSize = puzzleWordBankFontSize31 PuzzleWordBankHeadSize = puzzleWordBankHeadSize32)3334func PuzzleBodyRect(pageW, pageH float64, pageNo int) Rect {35 area := puzzleBodyRect(pageW, pageH, pageNo)36 return Rect{X: area.x, Y: area.y, W: area.w, H: area.h}37}3839func PuzzleBoardRect(pageW, pageH float64, pageNo, ruleLines int) Rect {40 area := puzzleBoardRect(pageW, pageH, pageNo, ruleLines)41 return Rect{X: area.x, Y: area.y, W: area.w, H: area.h}42}4344func CenteredOrigin(area Rect, cols, rows int, cellSize float64) (float64, float64) {45 internal := rectMM{x: area.X, y: area.Y, w: area.W, h: area.H}46 return centeredOrigin(internal, cols, rows, cellSize)47}4849func InstructionY(boardBottom, pageH float64, lineCount int) float64 {50 return instructionY(boardBottom, pageH, lineCount)51}5253func FitCompactCellSize(cols, rows int, area Rect) float64 {54 internal := rectMM{x: area.X, y: area.Y, w: area.W, h: area.H}55 return fitBoardCellSize(cols, rows, internal, boardFamilyCompact)56}5758func FitSudokuCellSize(cols, rows int, area Rect) float64 {59 internal := rectMM{x: area.X, y: area.Y, w: area.W, h: area.H}60 return fitBoardCellSize(cols, rows, internal, boardFamilySudoku)61}6263func FitHashiCellSize(cols, rows int, area Rect) float64 {64 internal := rectMM{x: area.X, y: area.Y, w: area.W, h: area.H}65 return fitBoardCellSize(cols, rows, internal, boardFamilyHashi)66}6768func FitNonogramCellSize(cols, rows int, area Rect) float64 {69 internal := rectMM{x: area.X, y: area.Y, w: area.W, h: area.H}70 return fitBoardCellSize(cols, rows, internal, boardFamilyNonogram)71}7273func FitWordSearchCellSize(cols, rows int, area Rect) float64 {74 internal := rectMM{x: area.X, y: area.Y, w: area.W, h: area.H}75 return fitBoardCellSize(cols, rows, internal, boardFamilyWordSearch)76}7778func FitTableCellSize(cols, rows int, area Rect) float64 {79 internal := rectMM{x: area.X, y: area.Y, w: area.W, h: area.H}80 return fitBoardCellSize(cols, rows, internal, boardFamilyTable)81}8283func StandardCellFontSize(cellSize, scale float64) float64 {84 return standardCellFontSize(cellSize, scale)85}8687func ClampStandardCellFontSize(fontSize float64) float64 {88 return clampStandardCellFontSize(fontSize)89}9091func SetInstructionStyle(pdf *fpdf.Fpdf) {92 setInstructionStyle(pdf)93}