Lots of changes - fixed font sizes, added play chord button, minified sample loading
This commit is contained in:
		| @@ -84,6 +84,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|     this.#outputSpeaker = SampleLibrary.load({ | ||||
|       instruments: "guitar-acoustic", | ||||
|       ext: ".ogg", | ||||
|       minify: true, | ||||
|     }); | ||||
|     this.#outputSpeaker.toMaster(); | ||||
|  | ||||
| @@ -134,10 +135,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|     if (markerList.length > 0 && this.getAttribute("show-chord") == "true") { | ||||
|       let chordsButton = document.createElement("button"); | ||||
|       const canvas = this.shadowRoot.getElementById(this.#config.canvasID); | ||||
|       chordsButton.setAttribute( | ||||
|         "onclick", | ||||
|         "this.getRootNode().host.playAllMarkers()", | ||||
|       ); | ||||
|       chordsButton.setAttribute("onclick", "this.getRootNode().host.playAllMarkers()"); | ||||
|       chordsButton.innerHTML = "Play chord"; | ||||
|  | ||||
|       this.#docRoot.appendChild(chordsButton); | ||||
| @@ -204,21 +202,14 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|     const canvas = this.shadowRoot.getElementById(this.#config.canvasID); | ||||
|     const context = canvas.getContext("2d"); | ||||
|  | ||||
|     let fretNumberFontSize = this.#scale( | ||||
|       GuitarDiagramsWebComponent.fretNumberFontSize, | ||||
|     ); | ||||
|     let fretNumberIndent = | ||||
|       this.#config.fretStartingNumber == 0 ? 0 : fretNumberFontSize; | ||||
|     let stringNameFontSize = this.#scale( | ||||
|       GuitarDiagramsWebComponent.stringNameFontSize, | ||||
|     ); | ||||
|     let fretNumberFontSize = this.#scale(GuitarDiagramsWebComponent.fretNumberFontSize); | ||||
|     let fretNumberIndent = this.#config.fretStartingNumber == 0 ? 0 : fretNumberFontSize; | ||||
|     let stringNameFontSize = this.#scale(GuitarDiagramsWebComponent.stringNameFontSize); | ||||
|     let stringNameIndent = | ||||
|       this.#config.stringNamesEnabled == false | ||||
|         ? 0 | ||||
|         : stringNameFontSize * | ||||
|           GuitarDiagramsWebComponent.stringNamePaddingFactor; | ||||
|     let canvasHeight = | ||||
|       this.#scale(this.#getFretboardLength()) + stringNameIndent; | ||||
|         : stringNameFontSize * GuitarDiagramsWebComponent.stringNamePaddingFactor; | ||||
|     let canvasHeight = this.#scale(this.#getFretboardLength()) + stringNameIndent; | ||||
|     let canvasWidth = this.#scale(this.#getFretboardWidth()) + fretNumberIndent; | ||||
|  | ||||
|     if (this.#config.orientHorizontally == true) { | ||||
| @@ -251,14 +242,9 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|     if (this.#config.stringNamesEnabled) { | ||||
|       let stringSpacing = this.#scale(GuitarDiagramsWebComponent.stringSpacing); | ||||
|       let stringIndent = this.#scale(GuitarDiagramsWebComponent.stringIndent); | ||||
|       let stringNameFontSize = this.#scale( | ||||
|         GuitarDiagramsWebComponent.stringNameFontSize, | ||||
|       ); | ||||
|       let fretNumberFontSize = this.#scale( | ||||
|         GuitarDiagramsWebComponent.fretNumberFontSize, | ||||
|       ); | ||||
|       let stringNamesIndent = | ||||
|         this.#config.fretStartingNumber == 0 ? 0 : fretNumberFontSize; | ||||
|       let stringNameFontSize = this.#scale(GuitarDiagramsWebComponent.stringNameFontSize); | ||||
|       let fretNumberFontSize = this.#scale(GuitarDiagramsWebComponent.fretNumberFontSize); | ||||
|       let stringNamesIndent = this.#config.fretStartingNumber == 0 ? 0 : fretNumberFontSize; | ||||
|       let posX; | ||||
|       let posY; | ||||
|       let stringNames = [...this.#config.stringNames]; | ||||
| @@ -270,11 +256,9 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|       for (const [stringNumber, stringName] of Object.entries(stringNames)) { | ||||
|         if (this.#config.orientHorizontally == true) { | ||||
|           posX = stringNameFontSize / 2; | ||||
|           posY = | ||||
|             stringIndent + stringNumber * stringSpacing + stringNamesIndent; | ||||
|           posY = stringIndent + stringNumber * stringSpacing + stringNamesIndent; | ||||
|         } else { | ||||
|           posX = | ||||
|             stringIndent + stringNumber * stringSpacing + stringNamesIndent; | ||||
|           posX = stringIndent + stringNumber * stringSpacing + stringNamesIndent; | ||||
|           posY = stringNameFontSize / 2; | ||||
|         } | ||||
|  | ||||
| @@ -290,15 +274,13 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|  | ||||
|       if (this.#config.orientHorizontally == true) { | ||||
|         canvas.translate( | ||||
|           stringNameFontSize * | ||||
|             GuitarDiagramsWebComponent.stringNamePaddingFactor, | ||||
|           stringNameFontSize * GuitarDiagramsWebComponent.stringNamePaddingFactor, | ||||
|           0, | ||||
|         ); | ||||
|       } else { | ||||
|         canvas.translate( | ||||
|           0, | ||||
|           stringNameFontSize * | ||||
|             GuitarDiagramsWebComponent.stringNamePaddingFactor, | ||||
|           stringNameFontSize * GuitarDiagramsWebComponent.stringNamePaddingFactor, | ||||
|         ); | ||||
|       } | ||||
|     } | ||||
| @@ -306,9 +288,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|  | ||||
|   #drawFretNumber() { | ||||
|     const canvas = this.shadowRoot.querySelector("canvas").getContext("2d"); | ||||
|     let fretNumberFontSize = this.#scale( | ||||
|       GuitarDiagramsWebComponent.fretNumberFontSize, | ||||
|     ); | ||||
|     let fretNumberFontSize = this.#scale(GuitarDiagramsWebComponent.fretNumberFontSize); | ||||
|  | ||||
|     if (this.#config.fretStartingNumber != 0) { | ||||
|       canvas.beginPath(); | ||||
| @@ -369,10 +349,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|  | ||||
|   #drawAllFretMarkers() { | ||||
|     if (this.#config.fretMarkersEnabled) { | ||||
|       if ( | ||||
|         this.#config.fretStartingNumber != 0 && | ||||
|         this.#config.fretStartingNumber % 2 == 0 | ||||
|       ) { | ||||
|       if (this.#config.fretStartingNumber != 0 && this.#config.fretStartingNumber % 2 == 0) { | ||||
|         this.#drawFretMarker(1); | ||||
|         this.#drawFretMarker(3); | ||||
|       } else { | ||||
| @@ -391,9 +368,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|     const canvas = this.shadowRoot.querySelector("canvas").getContext("2d"); | ||||
|     let fretboardWidth = this.#scale(this.#getFretboardWidth()); | ||||
|     let fretSpacing = this.#scale(GuitarDiagramsWebComponent.fretSpacing); | ||||
|     let fretMarkerRadius = this.#scale( | ||||
|       GuitarDiagramsWebComponent.fretMarkerRadius, | ||||
|     ); | ||||
|     let fretMarkerRadius = this.#scale(GuitarDiagramsWebComponent.fretMarkerRadius); | ||||
|     let posX = fretboardWidth / 2; | ||||
|     let posY = fretSpacing / 2 + fretSpacing * paramFretNumber; | ||||
|  | ||||
| @@ -452,12 +427,8 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|     const stringCount = this.#config.stringNames.length; | ||||
|     let stringIndent = this.#scale(GuitarDiagramsWebComponent.stringIndent); | ||||
|     let stringSpacing = this.#scale(GuitarDiagramsWebComponent.stringSpacing); | ||||
|     let stringBaseWidth = this.#scale( | ||||
|       GuitarDiagramsWebComponent.stringBaseWidth, | ||||
|     ); | ||||
|     let stringWidthFactor = this.#scale( | ||||
|       GuitarDiagramsWebComponent.stringWidthFactor, | ||||
|     ); | ||||
|     let stringBaseWidth = this.#scale(GuitarDiagramsWebComponent.stringBaseWidth); | ||||
|     let stringWidthFactor = this.#scale(GuitarDiagramsWebComponent.stringWidthFactor); | ||||
|     let fretboardLength = this.#scale(this.#getFretboardLength()); | ||||
|     let fretboardWidth = this.#scale(this.#getFretboardWidth()); | ||||
|     let posX = 0; | ||||
| @@ -473,18 +444,11 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|         (paramStringNumber - 1) * stringSpacing - | ||||
|         stringBaseWidth / 2; | ||||
|       endX = fretboardLength; | ||||
|       endY = | ||||
|         stringBaseWidth + | ||||
|         (stringCount - (paramStringNumber - 1)) * stringWidthFactor; | ||||
|       endY = stringBaseWidth + (stringCount - (paramStringNumber - 1)) * stringWidthFactor; | ||||
|     } else { | ||||
|       posX = | ||||
|         stringIndent + | ||||
|         (paramStringNumber - 1) * stringSpacing - | ||||
|         stringBaseWidth / 2; | ||||
|       posX = stringIndent + (paramStringNumber - 1) * stringSpacing - stringBaseWidth / 2; | ||||
|       posY = 0; | ||||
|       endX = | ||||
|         stringBaseWidth + | ||||
|         (stringCount - (paramStringNumber - 1)) * stringWidthFactor; | ||||
|       endX = stringBaseWidth + (stringCount - (paramStringNumber - 1)) * stringWidthFactor; | ||||
|       endY = fretboardLength; | ||||
|     } | ||||
|  | ||||
| @@ -506,9 +470,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|     let strokeWidth = this.#scale(this.#config.markerStrokeWidth); | ||||
|     let markerFontSize = this.#scale(this.#config.markerFontSize); | ||||
|     let posX = | ||||
|       stringIndent + | ||||
|       (stringCount - paramMarker.string) * stringSpacing + | ||||
|       strokeWidth * 0.5; | ||||
|       stringIndent + (stringCount - paramMarker.string) * stringSpacing + strokeWidth * 0.5; | ||||
|     let posY = (paramMarker.fret - 1) * fretSpacing + fretSpacing / 2; | ||||
|  | ||||
|     if (paramMarker.fret == 0) { | ||||
| @@ -516,16 +478,11 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|     } | ||||
|  | ||||
|     if (this.#config.orientHorizontally == true) { | ||||
|       posX = | ||||
|         stringIndent + | ||||
|         (paramMarker.string - 1) * stringSpacing + | ||||
|         strokeWidth * 0.5; | ||||
|       posX = stringIndent + (paramMarker.string - 1) * stringSpacing + strokeWidth * 0.5; | ||||
|       [posX, posY] = [posY, posX]; | ||||
|     } | ||||
|  | ||||
|     const boundingRect = this.shadowRoot | ||||
|       .querySelector("canvas") | ||||
|       .getBoundingClientRect(); | ||||
|     const boundingRect = this.shadowRoot.querySelector("canvas").getBoundingClientRect(); | ||||
|  | ||||
|     paramMarker.relativePosX = posX; | ||||
|     paramMarker.relativePosY = posY; | ||||
| @@ -541,8 +498,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|       paramMarker.posY += | ||||
|         this.#config.fretStartingNumber == 0 | ||||
|           ? 0 | ||||
|           : GuitarDiagramsWebComponent.fretNumberFontSize * | ||||
|             this.#config.scaleFactor; | ||||
|           : GuitarDiagramsWebComponent.fretNumberFontSize * this.#config.scaleFactor; | ||||
|     } else { | ||||
|       paramMarker.posY += | ||||
|         GuitarDiagramsWebComponent.stringNameFontSize * | ||||
| @@ -551,8 +507,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|       paramMarker.posX += | ||||
|         this.#config.fretStartingNumber == 0 | ||||
|           ? 0 | ||||
|           : GuitarDiagramsWebComponent.fretNumberFontSize * | ||||
|             this.#config.scaleFactor; | ||||
|           : GuitarDiagramsWebComponent.fretNumberFontSize * this.#config.scaleFactor; | ||||
|     } | ||||
|  | ||||
|     //    paramMarker.posX = posX + boundingRect.left - window.pageXOffset; | ||||
| @@ -680,19 +635,14 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|  | ||||
|       if ( | ||||
|         this.#config.changeOrientationEnabled && | ||||
|         !this.#docRoot.getElementById( | ||||
|           this.#config.canvasID + "-change-orientation-button", | ||||
|         ) | ||||
|         !this.#docRoot.getElementById(this.#config.canvasID + "-change-orientation-button") | ||||
|       ) { | ||||
|         let changeOrientationButton = this.#docRoot.createElement("input"); | ||||
|  | ||||
|         changeOrientationButton.type = "button"; | ||||
|         changeOrientationButton.id = | ||||
|           this.#config.canvasID + "-change-orientation-button"; | ||||
|         changeOrientationButton.id = this.#config.canvasID + "-change-orientation-button"; | ||||
|         changeOrientationButton.style = "margin: " + controlMargins + ";"; | ||||
|         changeOrientationButton.classList.add( | ||||
|           controlClassPrefix + "change-orientation-button", | ||||
|         ); | ||||
|         changeOrientationButton.classList.add(controlClassPrefix + "change-orientation-button"); | ||||
|         changeOrientationButton.classList.add(controlClass); | ||||
|         changeOrientationButton.value = String.fromCodePoint(0x1f500); | ||||
|  | ||||
| @@ -707,18 +657,14 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|  | ||||
|       if ( | ||||
|         this.#config.downloadImageEnabled && | ||||
|         !this.#docRoot.getElementById( | ||||
|           this.#config.canvasID + "-download-image-button", | ||||
|         ) | ||||
|         !this.#docRoot.getElementById(this.#config.canvasID + "-download-image-button") | ||||
|       ) { | ||||
|         let downloadButton = this.#docRoot.createElement("input"); | ||||
|  | ||||
|         downloadButton.type = "button"; | ||||
|         downloadButton.id = this.#config.canvasID + "-download-image-button"; | ||||
|         downloadButton.style = "margin: " + controlMargins + ";"; | ||||
|         downloadButton.classList.add( | ||||
|           controlClassPrefix + "download-image-button", | ||||
|         ); | ||||
|         downloadButton.classList.add(controlClassPrefix + "download-image-button"); | ||||
|         downloadButton.classList.add(controlClass); | ||||
|         downloadButton.value = String.fromCodePoint(0x1f4be); | ||||
|  | ||||
| @@ -747,8 +693,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|   #getFretboardWidth() { | ||||
|     let stringSpacing = GuitarDiagramsWebComponent.stringSpacing; | ||||
|     let stringIndent = GuitarDiagramsWebComponent.stringIndent; | ||||
|     let fretboardWidth = | ||||
|       this.#config.stringNames.length * stringSpacing + stringIndent / 2; | ||||
|     let fretboardWidth = this.#config.stringNames.length * stringSpacing + stringIndent / 2; | ||||
|  | ||||
|     return fretboardWidth; | ||||
|   } | ||||
| @@ -816,18 +761,12 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|       marker.fret = paramFret; | ||||
|       marker.text = paramText; | ||||
|       marker.playSound = playSound; | ||||
|       marker.shape = | ||||
|         paramShape == null | ||||
|           ? GuitarDiagramsWebComponent.Shape.Circle | ||||
|           : paramShape; | ||||
|       marker.shape = paramShape == null ? GuitarDiagramsWebComponent.Shape.Circle : paramShape; | ||||
|       marker.eventCallbacks = callbacks == null ? new Map() : callbacks; | ||||
|  | ||||
|       if (playSound) { | ||||
|         marker.eventCallbacks.set("click", (elem) => { | ||||
|           this.#outputSpeaker.triggerAttackRelease( | ||||
|             this.markerToNoteFrequency(marker), | ||||
|             "2n", | ||||
|           ); | ||||
|           this.#outputSpeaker.triggerAttackRelease(this.markerToNoteFrequency(marker), "2n"); | ||||
|         }); | ||||
|         marker.eventCallbacks.set("mousemove", (elem) => { | ||||
|           console.log("marker hovered"); | ||||
| @@ -864,13 +803,8 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|           markersWithEvent.forEach((marker) => { | ||||
|             if (marker.shape == GuitarDiagramsWebComponent.Shape.Circle) { | ||||
|               if ( | ||||
|                 Math.pow(marker.posX - mouseX, 2) + | ||||
|                   Math.pow(marker.posY - mouseY, 2) < | ||||
|                 Math.pow( | ||||
|                   GuitarDiagramsWebComponent.markerRadius * | ||||
|                     this.#config.scaleFactor, | ||||
|                   2, | ||||
|                 ) | ||||
|                 Math.pow(marker.posX - mouseX, 2) + Math.pow(marker.posY - mouseY, 2) < | ||||
|                 Math.pow(GuitarDiagramsWebComponent.markerRadius * this.#config.scaleFactor, 2) | ||||
|               ) { | ||||
|                 marker.eventCallbacks.get(event.type)(); | ||||
|               } | ||||
| @@ -883,35 +817,20 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|           markersWithEvent.forEach((marker) => { | ||||
|             if (marker.shape == GuitarDiagramsWebComponent.Shape.Circle) { | ||||
|               if ( | ||||
|                 Math.pow(marker.posX - mouseX, 2) + | ||||
|                   Math.pow(marker.posY - mouseY, 2) < | ||||
|                 Math.pow( | ||||
|                   GuitarDiagramsWebComponent.markerRadius * | ||||
|                     this.#config.scaleFactor, | ||||
|                   2, | ||||
|                 ) | ||||
|                 Math.pow(marker.posX - mouseX, 2) + Math.pow(marker.posY - mouseY, 2) < | ||||
|                 Math.pow(GuitarDiagramsWebComponent.markerRadius * this.#config.scaleFactor, 2) | ||||
|               ) { | ||||
|                 cursorPointer = true; | ||||
|                 const canvas = this.shadowRoot | ||||
|                   .querySelector("canvas") | ||||
|                   .getContext("2d"); | ||||
|                 const canvas = this.shadowRoot.querySelector("canvas").getContext("2d"); | ||||
|                 canvas.beginPath(); | ||||
|                 canvas.fillStyle = "yellow"; | ||||
|                 this.#drawMarkerCircle( | ||||
|                   marker.relativePosX, | ||||
|                   marker.relativePosY, | ||||
|                 ); | ||||
|                 this.#drawMarkerCircle(marker.relativePosX, marker.relativePosY); | ||||
|                 canvas.closePath(); | ||||
|               } else { | ||||
|                 const canvas = this.shadowRoot | ||||
|                   .querySelector("canvas") | ||||
|                   .getContext("2d"); | ||||
|                 const canvas = this.shadowRoot.querySelector("canvas").getContext("2d"); | ||||
|                 canvas.beginPath(); | ||||
|                 canvas.fillStyle = marker.colorFill; | ||||
|                 this.#drawMarkerCircle( | ||||
|                   marker.relativePosX, | ||||
|                   marker.relativePosY, | ||||
|                 ); | ||||
|                 this.#drawMarkerCircle(marker.relativePosX, marker.relativePosY); | ||||
|                 canvas.closePath(); | ||||
|               } | ||||
|             } | ||||
| @@ -927,9 +846,7 @@ class GuitarDiagramsWebComponent extends HTMLElement { | ||||
|   } | ||||
|  | ||||
|   playAllMarkers() { | ||||
|     let allNoteFrequencies = this.#markers.map((marker) => | ||||
|       this.markerToNoteFrequency(marker), | ||||
|     ); | ||||
|     let allNoteFrequencies = this.#markers.map((marker) => this.markerToNoteFrequency(marker)); | ||||
|  | ||||
|     // play slowly | ||||
|     let timeGap = 0; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user