func Grid(canvas *pdf.Canvas, x, y, w, h, step float64) { canvas.Push() canvas.SetColor(0.75, 0.75, 0.75) canvas.Translate(unit(x), unit(y)) rowCount := int(math.Floor(h / step)) for row := 0; row < rowCount; row++ { bottom := float64(row) * step top := bottom + step start := 0.0 if row%2 == 0 { start += step } for left := start; left < w; left += (2 * step) { right := left + step bottomLeft := point(left, bottom) topRight := point(right, top) path := new(pdf.Path) path.Rectangle(pdf.Rectangle{bottomLeft, topRight}) canvas.Fill(path) } } canvas.Pop() }
func traceCurve(a, b, c, d pdf.Point, canvas *pdf.Canvas) { path := new(pdf.Path) path.Move(a) path.Curve(b, c, d) canvas.Stroke(path) }
func EngraveStaff(origin pdf.Point, width, height, lineWidth pdf.Unit, canvas *pdf.Canvas) { path := new(pdf.Path) noteHeight := pdf.Unit(height / 4) for i := 0; i < 5; i++ { path.Move(origin) path.Line(pdf.Point{origin.X + width, origin.Y}) origin.Y = origin.Y + noteHeight } canvas.Push() canvas.SetLineWidth(lineWidth) canvas.Stroke(path) canvas.Pop() }
func EngraveSurrogateNoteHead(origin pdf.Point, size pdf.Unit, canvas *pdf.Canvas) { outline := new(pdf.Path) topRight := pdf.Point{origin.X + size, origin.Y + size} outline.Rectangle(pdf.Rectangle{origin, topRight}) mid := pdf.Point{origin.X + pdf.Unit(size/2), origin.Y + pdf.Unit(size/2)} midPoints := new(pdf.Path) midPoints.Move(pdf.Point{mid.X, origin.Y}) midPoints.Line(pdf.Point{mid.X, origin.Y + size}) midPoints.Move(pdf.Point{origin.X, mid.Y}) midPoints.Line(pdf.Point{origin.X + size, mid.Y}) canvas.Push() canvas.SetColor(0.6, 0.6, 0.6) canvas.Fill(outline) canvas.SetLineWidth(pdf.Unit(0.1)) canvas.Stroke(midPoints) canvas.Pop() }