Added new attribute - start-fret for which fret the fretboard starts on

This commit is contained in:
2025-07-10 16:07:31 -04:00
parent dc6acbe385
commit 3cc35e8dba

View File

@@ -152,6 +152,7 @@ class GuitarDiagramsWebComponent extends HTMLElement {
"orient-horizontally", "orient-horizontally",
"fret-count", "fret-count",
"scale-factor", "scale-factor",
"start-fret",
"center-align", "center-align",
]; ];
} }
@@ -170,6 +171,9 @@ class GuitarDiagramsWebComponent extends HTMLElement {
case "scale-factor": case "scale-factor":
this.#config.scaleFactor = parseFloat(newValue); this.#config.scaleFactor = parseFloat(newValue);
break; break;
case "start-fret":
this.#config.fretStartingNumber = parseFloat(newValue);
break;
case "center-align": case "center-align":
if (newValue == "true") { if (newValue == "true") {
let canvas = this.#docRoot.getElementById(this.#config.canvasID); let canvas = this.#docRoot.getElementById(this.#config.canvasID);
@@ -534,11 +538,21 @@ class GuitarDiagramsWebComponent extends HTMLElement {
GuitarDiagramsWebComponent.stringNameFontSize * GuitarDiagramsWebComponent.stringNameFontSize *
GuitarDiagramsWebComponent.stringNamePaddingFactor * GuitarDiagramsWebComponent.stringNamePaddingFactor *
this.#config.scaleFactor; this.#config.scaleFactor;
paramMarker.posY +=
this.#config.fretStartingNumber == 0
? 0
: GuitarDiagramsWebComponent.fretNumberFontSize *
this.#config.scaleFactor;
} else { } else {
paramMarker.posY += paramMarker.posY +=
GuitarDiagramsWebComponent.stringNameFontSize * GuitarDiagramsWebComponent.stringNameFontSize *
GuitarDiagramsWebComponent.stringNamePaddingFactor * GuitarDiagramsWebComponent.stringNamePaddingFactor *
this.#config.scaleFactor; this.#config.scaleFactor;
paramMarker.posX +=
this.#config.fretStartingNumber == 0
? 0
: GuitarDiagramsWebComponent.fretNumberFontSize *
this.#config.scaleFactor;
} }
// paramMarker.posX = posX + boundingRect.left - window.pageXOffset; // paramMarker.posX = posX + boundingRect.left - window.pageXOffset;
@@ -975,7 +989,11 @@ class GuitarDiagramsWebComponent extends HTMLElement {
baseFreq = 82; baseFreq = 82;
} }
const semitoneOffset = Math.pow(2, marker.fret / 12); let currentFret = parseFloat(marker.fret);
if (typeof this.#config.fretStartingNumber !== "undefined") {
currentFret += parseFloat(this.#config.fretStartingNumber);
}
const semitoneOffset = Math.pow(2, currentFret / 12);
let finalNote = baseFreq * semitoneOffset; let finalNote = baseFreq * semitoneOffset;
return finalNote; return finalNote;
} }