Skip to content

Commit

Permalink
fix(chord diagram): prevent fret markers outside the diagram
Browse files Browse the repository at this point in the history
  • Loading branch information
omnibrain committed Oct 10, 2024
1 parent 6267628 commit 6c3bb7c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/svguitar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -725,7 +725,7 @@ export class SVGuitarChord {
textY = y + padding
} else {
const lastFret = y
const firstFret = y - (this.settings.frets ?? defaultSettings.frets) * this.fretSpacing()
const firstFret = y - (this.numFrets()) * this.fretSpacing()
textX = firstFret + (lastFret - firstFret) / 2
textY = this.y(startX, 0) + padding
}
Expand Down Expand Up @@ -897,6 +897,10 @@ export class SVGuitarChord {
return this.settings.strings ?? defaultSettings.strings
}

private numFrets() {
return this.settings.frets ?? defaultSettings.frets
}

private stringSpacing(): number {
const sidePadding = this.settings.sidePadding ?? defaultSettings.sidePadding
const strings = this.numStrings()
Expand All @@ -915,7 +919,7 @@ export class SVGuitarChord {
}

private fretLinesYPos(startY: number): number[] {
const frets = this.settings.frets ?? defaultSettings.frets
const frets = this.numFrets()
const fretSpacing = this.fretSpacing()

return range(frets, 1).map((i) => startY + fretSpacing * i)
Expand Down Expand Up @@ -1041,7 +1045,7 @@ export class SVGuitarChord {
}

private drawGrid(y: number): number {
const frets = this.settings.frets ?? defaultSettings.frets
const frets = this.numFrets()
const fretSize = this.settings.fretSize ?? defaultSettings.fretSize
const relativeFingerSize = this.settings.fingerSize ?? defaultSettings.fingerSize
const stringXPositions = this.stringXPos()
Expand Down Expand Up @@ -1205,6 +1209,11 @@ export class SVGuitarChord {
fret: fretMarker,
} : fretMarker) as DoubleFretMarker | SingleFretMarker

if (fretMarkerOptions.fret > this.numFrets()) {
// don't draw fret markers outside the chord diagram
return;
}

const fretMarkerIndex = fretMarkerOptions.fret
const fretMarkerCenterX = constants.width / 2
const fretMarkerCenterY = y + (fretMarkerIndex + 1) * fretSpacing - fretSpacing / 2
Expand Down
1 change: 1 addition & 0 deletions test/svguitar.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1118,6 +1118,7 @@ describe('SVGuitarChord', () => {

saveSvg('fret markers horizontal', container.outerHTML)
})

it('Should remove all fret markers', () => {
svguitar
.chord({
Expand Down

0 comments on commit 6c3bb7c

Please sign in to comment.