diff --git a/packages/alphatab/src/Environment.ts b/packages/alphatab/src/Environment.ts index b74c9e0d49..eeab497712 100644 --- a/packages/alphatab/src/Environment.ts +++ b/packages/alphatab/src/Environment.ts @@ -58,6 +58,7 @@ import { createSlightNoteVibratoEffectInfo } from '@coderline/alphatab/rendering import { sustainPedalEffectInfo } from '@coderline/alphatab/rendering/effects/SustainPedalEffectInfo'; import { tabWhammyEffectInfo } from '@coderline/alphatab/rendering/effects/TabWhammyEffectInfo'; import { tapEffectInfo } from '@coderline/alphatab/rendering/effects/TapEffectInfo'; +import { hammerPullLabelEffectInfo, slideLabelEffectInfo } from '@coderline/alphatab/rendering/effects/EffectSlurLabelEffectInfo'; import { tempoEffectInfo } from '@coderline/alphatab/rendering/effects/TempoEffectInfo'; import { textEffectInfo } from '@coderline/alphatab/rendering/effects/TextEffectInfo'; import { trillEffectInfo } from '@coderline/alphatab/rendering/effects/TrillEffectInfo'; @@ -512,6 +513,9 @@ export class Environment { }, { effect: createGolpeEffectInfo(GolpeType.Finger), mode: EffectBandMode.OwnedTop }, + // last = closest to the staff: H/P directly above the staff, sl. stacked above + { effect: slideLabelEffectInfo, mode: EffectBandMode.OwnedTop }, + { effect: hammerPullLabelEffectInfo, mode: EffectBandMode.OwnedTop }, { effect: createGolpeEffectInfo(GolpeType.Thumb), mode: EffectBandMode.OwnedBottom }, { effect: crescendoEffectInfo, mode: EffectBandMode.SharedBottom }, @@ -524,7 +528,9 @@ export class Environment { // // Numbered new NumberedBarRendererFactory([ - { effect: numberedBarKeySignatureEffectInfo, mode: EffectBandMode.OwnedTop, order: 1000 } + { effect: numberedBarKeySignatureEffectInfo, mode: EffectBandMode.OwnedTop, order: 1000 }, + { effect: slideLabelEffectInfo, mode: EffectBandMode.OwnedTop }, + { effect: hammerPullLabelEffectInfo, mode: EffectBandMode.OwnedTop } ]), // @@ -557,6 +563,9 @@ export class Environment { mode: EffectBandMode.OwnedTop, shouldCreate: staff => !staff.showStandardNotation }, + // last = closest to the staff: H/P directly above the staff, sl. stacked above + { effect: slideLabelEffectInfo, mode: EffectBandMode.OwnedTop }, + { effect: hammerPullLabelEffectInfo, mode: EffectBandMode.OwnedTop }, { effect: createGolpeEffectInfo(GolpeType.Thumb), diff --git a/packages/alphatab/src/model/Note.ts b/packages/alphatab/src/model/Note.ts index d3cb5f2a87..df7ab93409 100644 --- a/packages/alphatab/src/model/Note.ts +++ b/packages/alphatab/src/model/Note.ts @@ -12,6 +12,7 @@ import { Ottavia } from '@coderline/alphatab/model/Ottavia'; import { SlideInType } from '@coderline/alphatab/model/SlideInType'; import { SlideOutType } from '@coderline/alphatab/model/SlideOutType'; import { Slur } from '@coderline/alphatab/model/Slur'; +import type { SlurSegment } from '@coderline/alphatab/model/SlurSegment'; import { SlurSegmentKind } from '@coderline/alphatab/model/SlurSegmentKind'; import type { Staff } from '@coderline/alphatab/model/Staff'; import { VibratoType } from '@coderline/alphatab/model/VibratoType'; @@ -620,6 +621,15 @@ export class Note { */ public effectSlur: Slur | null = null; + /** + * The {@link SlurSegment} of the effect slur chain starting at this note + * (hammer-on, pull-off or legato slide to the next note). Populated by `finish()`. + * @clone_ignore + * @json_ignore + * @internal + */ + public effectSlurSegment: SlurSegment | null = null; + /** * The ornament applied on the note. */ @@ -936,6 +946,7 @@ export class Note { } break; } + this.effectSlurSegment = null; let effectSlurDestination: Note | null = null; let effectSlurSegmentKind: SlurSegmentKind | null = null; if (this.isHammerPullOrigin && this.hammerPullDestination) { @@ -955,12 +966,14 @@ export class Note { if (effectSlurSegmentKind !== null && chainOrigin.effectSlur !== null) { chainOrigin.effectSlur.destinationNote = effectSlurDestination; - chainOrigin.effectSlur.segments.push({ + const segment: SlurSegment = { fromNote: this, toNote: effectSlurDestination, kind: effectSlurSegmentKind, text: null - }); + }; + chainOrigin.effectSlur.segments.push(segment); + this.effectSlurSegment = segment; } } else { this.isEffectSlurOrigin = true; @@ -973,12 +986,14 @@ export class Note { slur.originNote = this; slur.destinationNote = effectSlurDestination; if (effectSlurSegmentKind !== null) { - slur.segments.push({ + const segment: SlurSegment = { fromNote: this, toNote: effectSlurDestination, kind: effectSlurSegmentKind, text: null - }); + }; + slur.segments.push(segment); + this.effectSlurSegment = segment; } this.effectSlur = slur; } diff --git a/packages/alphatab/src/rendering/BarRendererBase.ts b/packages/alphatab/src/rendering/BarRendererBase.ts index dff23fe8ad..7f925045a0 100644 --- a/packages/alphatab/src/rendering/BarRendererBase.ts +++ b/packages/alphatab/src/rendering/BarRendererBase.ts @@ -259,6 +259,16 @@ export class BarRendererBase { return this._contentTopOverflow + this.topEffects.height; } + /** The overflow of the bar content above the staff, without the effect bands. */ + public get contentTopOverflow() { + return this._contentTopOverflow; + } + + /** The overflow of the bar content below the staff, without the effect bands. */ + public get contentBottomOverflow() { + return this._contentBottomOverflow; + } + public get bottomOverflow() { return this._contentBottomOverflow + this.bottomEffects.height; } diff --git a/packages/alphatab/src/rendering/EffectBand.ts b/packages/alphatab/src/rendering/EffectBand.ts index 00cdc0251a..5c6da90efe 100644 --- a/packages/alphatab/src/rendering/EffectBand.ts +++ b/packages/alphatab/src/rendering/EffectBand.ts @@ -2,9 +2,10 @@ import { type Beat, BeatSubElement } from '@coderline/alphatab/model/Beat'; import type { Voice } from '@coderline/alphatab/model/Voice'; import type { ICanvas } from '@coderline/alphatab/platform/ICanvas'; import type { BarRendererBase } from '@coderline/alphatab/rendering/BarRendererBase'; +import { BeatXPosition } from '@coderline/alphatab/rendering/BeatXPosition'; import type { EffectBandContainer } from '@coderline/alphatab/rendering/EffectBandContainer'; import { EffectBarGlyphSizing } from '@coderline/alphatab/rendering/EffectBarGlyphSizing'; -import type { EffectInfo } from '@coderline/alphatab/rendering/EffectInfo'; +import { EffectBandPlacementCategory, type EffectInfo } from '@coderline/alphatab/rendering/EffectInfo'; import type { EffectGlyph } from '@coderline/alphatab/rendering/glyphs/EffectGlyph'; import { Glyph } from '@coderline/alphatab/rendering/glyphs/Glyph'; import { GroupedEffectGlyph } from '@coderline/alphatab/rendering/glyphs/GroupedEffectGlyph'; @@ -118,6 +119,14 @@ export class EffectBand extends Glyph { } } + /** + * Marks the x-range as stale after glyph extents changed outside {@link alignGlyphs} + * (e.g. resolved in {@link EffectInfo.finalizeBand}). + */ + public invalidateXRange(): void { + this._xRangeBaseDirty = true; + } + public clearPublishedSpans(): void { // Defer base recomputation if stale (alignGlyphs invalidated it). if (this._xRangeBaseDirty) { @@ -423,6 +432,75 @@ export class EffectBand extends Glyph { return true; } + private readonly _placementRangeScratch: EffectBandXRange = { xStart: 0, xEnd: 0 }; + + /** + * Collects the renderer-local x-ranges of this band for the vertical placement: the ranges which must be + * clear of other content (`clearStarts`/`clearEnds`) and the ranges the band occupies (`xStarts`/`xEnds`). + * @remarks + * Note-attached bands (markers like tap or the hammer-on/pull-off labels) place each glyph on its own + * ({@link EffectGlyph.getPlacementClearanceLeft}), so other markers can share the row in the gaps + * between them. Markers attached to a beat keep the noteheads and stems of their beat clear, even where + * the marker is narrower (e.g. a pick stroke above the stem of its note). All other bands (lines, spans, + * system markers) and bands with cross-bar spans keep and occupy their whole range + * ({@link computeLocalXRange}). + * @returns `false` when the band has no usable range. + */ + public collectPlacementRanges( + clearStarts: number[], + clearEnds: number[], + xStarts: number[], + xEnds: number[] + ): boolean { + if (this.isEmpty) { + return false; + } + if ( + this.info.placementCategory === EffectBandPlacementCategory.NoteAttached && + this.info.sizingMode !== EffectBarGlyphSizing.FullBar && + this._chainHeads.length === 0 + ) { + const sizing = this.info.sizingMode; + const beatAttached = + sizing === EffectBarGlyphSizing.SingleOnBeat || + sizing === EffectBarGlyphSizing.SingleOnBeatToEnd || + sizing === EffectBarGlyphSizing.GroupedOnBeat || + sizing === EffectBarGlyphSizing.GroupedOnBeatToEnd; + let found = false; + for (const v of this._uniqueEffectGlyphs) { + for (const g of v) { + const left = g.getBoundingBoxLeft(); + const right = g.getBoundingBoxRight(); + if (Number.isNaN(left) || Number.isNaN(right)) { + continue; + } + let clearStart = Math.min(left, g.getPlacementClearanceLeft()); + let clearEnd = Math.max(right, g.getPlacementClearanceRight()); + if (beatAttached && g.beat) { + clearStart = Math.min(clearStart, this.renderer.getBeatX(g.beat, BeatXPosition.OnNotes)); + clearEnd = Math.max(clearEnd, this.renderer.getBeatX(g.beat, BeatXPosition.PostNotes)); + } + clearStarts.push(clearStart); + clearEnds.push(clearEnd); + xStarts.push(left); + xEnds.push(right); + found = true; + } + } + return found; + } + + const range = this._placementRangeScratch; + if (!this.computeLocalXRange(range)) { + return false; + } + clearStarts.push(range.xStart); + clearEnds.push(range.xEnd); + xStarts.push(range.xStart); + xEnds.push(range.xEnd); + return true; + } + private _alignGlyph(sizing: EffectBarGlyphSizing, beat: Beat): void { const g: EffectGlyph = this._effectGlyphs[beat.voice.index].get(beat.index)!; const container = this.renderer.getBeatContainer(beat)!; diff --git a/packages/alphatab/src/rendering/EffectSystemPlacement.ts b/packages/alphatab/src/rendering/EffectSystemPlacement.ts index 41df1f8c2f..80b1a078c4 100644 --- a/packages/alphatab/src/rendering/EffectSystemPlacement.ts +++ b/packages/alphatab/src/rendering/EffectSystemPlacement.ts @@ -1,4 +1,4 @@ -import type { EffectBand, EffectBandXRange } from '@coderline/alphatab/rendering/EffectBand'; +import type { EffectBand } from '@coderline/alphatab/rendering/EffectBand'; import { EffectBandPlacementCategory } from '@coderline/alphatab/rendering/EffectInfo'; import type { Skyline } from '@coderline/alphatab/rendering/skyline/Skyline'; import type { RenderStaff } from '@coderline/alphatab/rendering/staves/RenderStaff'; @@ -14,12 +14,11 @@ export class EffectSystemPlacement { // Reusable scratch buffers; rebuilt every finalize cycle. private readonly _top: EffectBand[] = []; private readonly _bottom: EffectBand[] = []; - private readonly _contentTop: number[] = []; - private readonly _contentBottom: number[] = []; private readonly _groupBands: EffectBand[] = []; private readonly _groupXStarts: number[] = []; private readonly _groupXEnds: number[] = []; - private readonly _xRangeScratch: EffectBandXRange = { xStart: 0, xEnd: 0 }; + private readonly _clearXStarts: number[] = []; + private readonly _clearXEnds: number[] = []; public constructor(staff: RenderStaff) { this._staff = staff; @@ -32,22 +31,14 @@ export class EffectSystemPlacement { const top = this._top; const bottom = this._bottom; - const contentTop = this._contentTop; - const contentBottom = this._contentBottom; // splice() instead of `.length = 0`: transpile-safe array clear. top.splice(0, top.length); bottom.splice(0, bottom.length); - contentTop.splice(0, contentTop.length); - contentBottom.splice(0, contentBottom.length); - // container.height = post-placement max - pre-placement max. - // Snapshot pre-placement skyline, filter non-empty bands, and run - // `finalizeBand` (settles dynamic-height effects like TabWhammy) in - // one walk. + // Filter non-empty bands and run `finalizeBand` (settles dynamic-height + // effects like TabWhammy) in one walk. for (let i = 0; i < staff.barRenderers.length; i++) { const r = staff.barRenderers[i]; - contentTop.push(sky.upSky.maxHeightInRange(r.x, r.x + r.width)); - contentBottom.push(sky.downSky.maxHeightInRange(r.x, r.x + r.width)); for (const b of r.topEffects.bands) { if (!b.isEmpty) { // Reset; `_placeSide` only writes it when computeLocalXRange succeeds, @@ -76,13 +67,17 @@ export class EffectSystemPlacement { this._placeSide(top, sky.upSky, contentSky ? contentSky.upSky : null, pad, /* isTop */ true); this._placeSide(bottom, sky.downSky, contentSky ? contentSky.downSky : null, pad, /* isTop */ false); + // A bar reserves its own content and the bands placed on it. Bands know their final + // position (magnitude + height), so the reserved height does not depend on the skyline before + // placement, which also contains content of other bars reaching into this bar (ties, brackets) + // and misses content registered as overflow without a skyline entry. for (let i = 0; i < staff.barRenderers.length; i++) { const r = staff.barRenderers[i]; - const topMax = sky.upSky.maxHeightInRange(r.x, r.x + r.width); - r.topEffects.height = Math.max(0, Math.ceil(topMax - contentTop[i])); - - const bottomMax = sky.downSky.maxHeightInRange(r.x, r.x + r.width); - r.bottomEffects.height = Math.max(0, Math.ceil(bottomMax - contentBottom[i])); + r.topEffects.height = EffectSystemPlacement._effectsHeight(r.topEffects.bands, r.contentTopOverflow); + r.bottomEffects.height = EffectSystemPlacement._effectsHeight( + r.bottomEffects.bands, + r.contentBottomOverflow + ); r.registerStaffOverflows(); } @@ -97,6 +92,20 @@ export class EffectSystemPlacement { } } + /** The height the placed bands add on top of the given content overflow. */ + private static _effectsHeight(bands: EffectBand[], contentOverflow: number): number { + let max = 0; + for (const b of bands) { + if (!b.isEmpty) { + const outer = b.placedMagnitude + b.height; + if (outer > max) { + max = outer; + } + } + } + return Math.max(0, Math.ceil(max - contentOverflow)); + } + /** Sort by precomputed {@link EffectBand.sortKey} (placementCategory, order desc, voice, renderer). */ private static _sortByPriority(bands: EffectBand[]): void { bands.sort((a, b) => a.sortKey - b.sortKey); @@ -150,24 +159,31 @@ export class EffectSystemPlacement { groupBands.splice(0, groupBands.length); groupXStarts.splice(0, groupXStarts.length); groupXEnds.splice(0, groupXEnds.length); - const xRange = this._xRangeScratch; let groupMagnitude = 0; for (let k = i; k < groupEnd; k++) { const m = bands[k]; - if (!m.computeLocalXRange(xRange)) { + // one entry per occupied range (note-attached bands: one per glyph) + const clearStarts = this._clearXStarts; + const clearEnds = this._clearXEnds; + clearStarts.splice(0, clearStarts.length); + clearEnds.splice(0, clearEnds.length); + const firstRange = groupXStarts.length; + if (!m.collectPlacementRanges(clearStarts, clearEnds, groupXStarts, groupXEnds)) { continue; } - const xStart = m.renderer.x + xRange.xStart; - const xEnd = m.renderer.x + xRange.xEnd; - const mag = isTop - ? querySky.placeAbove(xStart, xEnd, m.height, pad) - : querySky.placeBelow(xStart, xEnd, m.height, pad); - if (mag > groupMagnitude) { - groupMagnitude = mag; + for (let r = firstRange; r < groupXStarts.length; r++) { + groupXStarts[r] = m.renderer.x + groupXStarts[r]; + groupXEnds[r] = m.renderer.x + groupXEnds[r]; + const clearStart = m.renderer.x + clearStarts[r - firstRange]; + const clearEnd = m.renderer.x + clearEnds[r - firstRange]; + const mag = isTop + ? querySky.placeAbove(clearStart, clearEnd, m.height, pad) + : querySky.placeBelow(clearStart, clearEnd, m.height, pad); + if (mag > groupMagnitude) { + groupMagnitude = mag; + } + groupBands.push(m); } - groupBands.push(m); - groupXStarts.push(xStart); - groupXEnds.push(xEnd); } for (let k = 0; k < groupBands.length; k++) { const b = groupBands[k]; diff --git a/packages/alphatab/src/rendering/effects/EffectSlurLabelEffectInfo.ts b/packages/alphatab/src/rendering/effects/EffectSlurLabelEffectInfo.ts new file mode 100644 index 0000000000..2e8adffd1c --- /dev/null +++ b/packages/alphatab/src/rendering/effects/EffectSlurLabelEffectInfo.ts @@ -0,0 +1,125 @@ +import type { Beat } from '@coderline/alphatab/model/Beat'; +import type { SlurSegment } from '@coderline/alphatab/model/SlurSegment'; +import { SlurSegmentKind } from '@coderline/alphatab/model/SlurSegmentKind'; +import { NotationElement } from '@coderline/alphatab/NotationSettings'; +import type { BarRendererBase } from '@coderline/alphatab/rendering/BarRendererBase'; +import type { EffectBand } from '@coderline/alphatab/rendering/EffectBand'; +import { EffectBarGlyphSizing } from '@coderline/alphatab/rendering/EffectBarGlyphSizing'; +import { EffectBandPlacementCategory, type EffectInfo } from '@coderline/alphatab/rendering/EffectInfo'; +import type { EffectGlyph } from '@coderline/alphatab/rendering/glyphs/EffectGlyph'; +import { EffectSlurLabelGlyph } from '@coderline/alphatab/rendering/glyphs/EffectSlurLabelGlyph'; + +function labelText(segment: SlurSegment): string { + if (segment.text !== null) { + return segment.text; + } + if (segment.kind === SlurSegmentKind.LegatoSlide) { + return 'sl.'; + } + return segment.toNote.realValue >= segment.fromNote.realValue ? 'H' : 'P'; +} + +function hasSegment(beat: Beat, kind: SlurSegmentKind): boolean { + for (const n of beat.notes) { + if (n.isVisible && n.effectSlurSegment && n.effectSlurSegment.kind === kind) { + return true; + } + } + return false; +} + +/** + * Creates the effect info showing the labels of one kind of effect slur segment + * (hammer-on/pull-off or legato slide) above the staff. + * @remarks + * Like in Guitar Pro the labels are not attached to the slur arcs: all notes of a beat take + * one label, centered between the beat and the beat where the segment ends. + * @internal + */ +function createEffectSlurLabelEffectInfo( + effectId: string, + kind: SlurSegmentKind, + notationElement: NotationElement +): EffectInfo { + return { + effectId, + notationElement, + hideOnMultiTrack: false, + sizingMode: EffectBarGlyphSizing.SingleOnBeat, + // labels sit between the beats and must not widen them + contributesToBeatSpacing: false, + shouldCreateGlyph: (_renderer: BarRendererBase, beat: Beat): boolean => hasSegment(beat, kind), + createNewGlyph: (renderer: BarRendererBase, beat: Beat): EffectGlyph => { + // different texts (e.g. H on one string, P on another) are stacked, + // the label of the higher note on top + const texts: string[] = []; + const textPitches: number[] = []; + let endBeat: Beat = beat; + for (const n of beat.notes) { + const segment = n.effectSlurSegment; + if (!n.isVisible || !segment || segment.kind !== kind) { + continue; + } + const text = labelText(segment); + const existing = texts.indexOf(text); + if (existing === -1) { + texts.push(text); + textPitches.push(n.realValue); + } else if (n.realValue > textPitches[existing]) { + textPitches[existing] = n.realValue; + } + // isAfter (not the display start): grace notes share the display start of their main note + if (segment.toNote.beat.isAfter(endBeat)) { + endBeat = segment.toNote.beat; + } + } + const lines: string[] = []; + while (texts.length > 0) { + let highest = 0; + for (let i = 1; i < texts.length; i++) { + if (textPitches[i] > textPitches[highest]) { + highest = i; + } + } + lines.push(texts[highest]); + texts.splice(highest, 1); + textPitches.splice(highest, 1); + } + return new EffectSlurLabelGlyph( + lines, + renderer.resources.getFontForNotationElement(notationElement), + endBeat + ); + }, + canExpand: (_from: Beat, _to: Beat): boolean => true, + placementCategory: EffectBandPlacementCategory.NoteAttached, + // all bars of the system have their final positions here, labels can be centered + // towards beats in later bars before the band is placed vertically. + finalizeBand: (band: EffectBand): void => { + for (const voiceGlyphs of band.glyphsByVoice) { + for (const g of voiceGlyphs) { + (g as EffectSlurLabelGlyph).resolveOffset(); + } + } + band.invalidateXRange(); + } + }; +} + +/** + * @internal + */ +export const hammerPullLabelEffectInfo: EffectInfo = createEffectSlurLabelEffectInfo( + 'EffectHammerOnPullOffText', + SlurSegmentKind.HammerPull, + NotationElement.EffectHammerOnPullOffText +); + +/** + * @internal + */ +export const slideLabelEffectInfo: EffectInfo = createEffectSlurLabelEffectInfo( + 'EffectSlideText', + SlurSegmentKind.LegatoSlide, + NotationElement.EffectSlideText +); diff --git a/packages/alphatab/src/rendering/glyphs/DirectionsContainerGlyph.ts b/packages/alphatab/src/rendering/glyphs/DirectionsContainerGlyph.ts index 1625102911..39e1a4c07a 100644 --- a/packages/alphatab/src/rendering/glyphs/DirectionsContainerGlyph.ts +++ b/packages/alphatab/src/rendering/glyphs/DirectionsContainerGlyph.ts @@ -63,10 +63,12 @@ class JumpDirectionGlyph extends Glyph { const align = canvas.textAlign; canvas.font = this.renderer.resources.elementFonts.get(NotationElement.EffectDirections)!; - canvas.textBaseline = TextBaseline.Middle; + // like other text effects (TextGlyph) drawn from the top: the measured height is the ink height, + // centering it on the font's middle line paints text without descenders above the glyph + canvas.textBaseline = TextBaseline.Top; canvas.textAlign = TextAlign.Right; - canvas.fillText(this._text, cx + this.x, cy + this.y + this.height / 2); + canvas.fillText(this._text, cx + this.x, cy + this.y); canvas.font = font; canvas.textBaseline = baseline; diff --git a/packages/alphatab/src/rendering/glyphs/EffectGlyph.ts b/packages/alphatab/src/rendering/glyphs/EffectGlyph.ts index 61bbf60b0f..fce389a67f 100644 --- a/packages/alphatab/src/rendering/glyphs/EffectGlyph.ts +++ b/packages/alphatab/src/rendering/glyphs/EffectGlyph.ts @@ -34,4 +34,20 @@ export class EffectGlyph extends Glyph { public constructor(x: number = 0, y: number = 0) { super(x, y); } + + /** + * The left edge of the range this glyph must keep clear of other content in the vertical placement. + * Defaults to the bounding box; glyphs can reach further than they occupy themselves. + */ + public getPlacementClearanceLeft(): number { + return this.getBoundingBoxLeft(); + } + + /** + * The right edge of the range this glyph must keep clear of other content in the vertical placement. + * @see getPlacementClearanceLeft + */ + public getPlacementClearanceRight(): number { + return this.getBoundingBoxRight(); + } } diff --git a/packages/alphatab/src/rendering/glyphs/EffectSlurLabelGlyph.ts b/packages/alphatab/src/rendering/glyphs/EffectSlurLabelGlyph.ts new file mode 100644 index 0000000000..30a2c7ff97 --- /dev/null +++ b/packages/alphatab/src/rendering/glyphs/EffectSlurLabelGlyph.ts @@ -0,0 +1,104 @@ +import type { Beat } from '@coderline/alphatab/model/Beat'; +import type { Font } from '@coderline/alphatab/model/Font'; +import { type ICanvas, TextAlign } from '@coderline/alphatab/platform/ICanvas'; +import { BeatXPosition } from '@coderline/alphatab/rendering/BeatXPosition'; +import { EffectGlyph } from '@coderline/alphatab/rendering/glyphs/EffectGlyph'; +import { TextGlyph } from '@coderline/alphatab/rendering/glyphs/TextGlyph'; + +/** + * The label of hammer-ons, pull-offs and legato slides (H, P, sl.) shown above the staff. + * @remarks + * The glyph belongs to the beat where the effect starts, but the label is centered between + * this beat and the beat where the effect ends (or the end of the system for effects continuing + * on the next system). The offset to this center is resolved via {@link resolveOffset} once all bars + * of the system have their final positions. + * + * In the vertical placement the label keeps its whole segment (start to end beat) clear, so it is placed + * above everything on the segment (e.g. fret numbers sticking out of the tab staff), but it only occupies + * the range of its text, so other markers can share the row next to it. + * + * Several labels of one beat (e.g. H on one string, P on another) are stacked with the usual effect band + * padding between them, as if they were separate bands. + * @internal + */ +export class EffectSlurLabelGlyph extends EffectGlyph { + private _endBeat: Beat; + private _texts: string[]; + private _font: Font; + private _lines: TextGlyph[] = []; + private _labelOffset: number = 0; + private _segmentStart: number = 0; + private _segmentEnd: number = 0; + + public constructor(lines: string[], font: Font, endBeat: Beat) { + super(0, 0); + this._endBeat = endBeat; + this._texts = lines; + this._font = font; + } + + public override doLayout(): void { + const padding = this.renderer.settings.display.effectBandPaddingBottom; + let y = 0; + let width = 0; + this._lines = []; + for (const text of this._texts) { + const line = new TextGlyph(0, 0, text, this._font, TextAlign.Center); + this._lines.push(line); + line.renderer = this.renderer; + line.y = y; + line.doLayout(); + y += line.height + padding; + if (line.width > width) { + width = line.width; + } + } + this.width = width; + this.height = this._lines.length > 0 ? y - padding : 0; + } + + /** + * Centers the label between its beat and the end beat (or the end of the system). + */ + public resolveOffset(): void { + const renderer = this.renderer; + const staff = renderer.staff!; + const startX = renderer.x + renderer.getBeatX(this.beat!, BeatXPosition.MiddleNotes); + + let endX: number; + const endRenderer = renderer.scoreRenderer.layout!.getRendererForBar(staff.staffId, this._endBeat.voice.bar); + if (endRenderer && endRenderer.staff === staff) { + endX = endRenderer.x + endRenderer.getBeatX(this._endBeat, BeatXPosition.MiddleNotes); + } else { + // continued on the next system: center up to the end of this system + const lastRenderer = staff.barRenderers[staff.barRenderers.length - 1]; + endX = lastRenderer.x + lastRenderer.width; + } + + this._labelOffset = (startX + endX) / 2 - (renderer.x + this.x); + this._segmentStart = startX - renderer.x; + this._segmentEnd = endX - renderer.x; + } + + public override getBoundingBoxLeft(): number { + return this.x + this._labelOffset - this.width / 2; + } + + public override getBoundingBoxRight(): number { + return this.x + this._labelOffset + this.width / 2; + } + + public override getPlacementClearanceLeft(): number { + return Math.min(this.getBoundingBoxLeft(), this._segmentStart); + } + + public override getPlacementClearanceRight(): number { + return Math.max(this.getBoundingBoxRight(), this._segmentEnd); + } + + public override paint(cx: number, cy: number, canvas: ICanvas): void { + for (const line of this._lines) { + line.paint(cx + this.x + this._labelOffset, cy + this.y, canvas); + } + } +} diff --git a/packages/alphatab/src/rendering/glyphs/NumberedSlurGlyph.ts b/packages/alphatab/src/rendering/glyphs/NumberedSlurGlyph.ts index 78502bfd2d..0f43e0f2a0 100644 --- a/packages/alphatab/src/rendering/glyphs/NumberedSlurGlyph.ts +++ b/packages/alphatab/src/rendering/glyphs/NumberedSlurGlyph.ts @@ -43,7 +43,6 @@ export class NumberedSlurGlyph extends TabSlurGlyph { case BeamDirection.Up: if (startNote.realValue > this.startNote.realValue) { this.startNote = startNote; - this.invalidateLabels(); // labels live on startNote } if (endNote.realValue > this.endNote.realValue) { this.endNote = endNote; @@ -52,7 +51,6 @@ export class NumberedSlurGlyph extends TabSlurGlyph { case BeamDirection.Down: if (startNote.realValue < this.startNote.realValue) { this.startNote = startNote; - this.invalidateLabels(); } if (endNote.realValue < this.endNote.realValue) { this.endNote = endNote; diff --git a/packages/alphatab/src/rendering/glyphs/ScoreSlurGlyph.ts b/packages/alphatab/src/rendering/glyphs/ScoreSlurGlyph.ts index 6d0647c51e..c729baaa2d 100644 --- a/packages/alphatab/src/rendering/glyphs/ScoreSlurGlyph.ts +++ b/packages/alphatab/src/rendering/glyphs/ScoreSlurGlyph.ts @@ -2,36 +2,16 @@ import { GraceType } from '@coderline/alphatab/model/GraceType'; import { NoteXPosition, NoteYPosition } from '@coderline/alphatab/rendering/BarRendererBase'; import { BeatXPosition } from '@coderline/alphatab/rendering/BeatXPosition'; import { ScoreTieGlyph } from '@coderline/alphatab/rendering/glyphs/ScoreTieGlyph'; -import { type TieGlyphLabel, TieGlyphLabels } from '@coderline/alphatab/rendering/glyphs/TieGlyphLabel'; import { BeamDirection } from '@coderline/alphatab/rendering/utils/BeamDirection'; /** * @internal */ export class ScoreSlurGlyph extends ScoreTieGlyph { - private _labels: TieGlyphLabel[] | null = null; - public override getTieHeight(startX: number, _startY: number, endX: number, _endY: number): number { return (Math.log2(endX - startX + 1) * this.renderer.settings.notation.slurHeight) / 2; } - protected override getSlurLabels(): TieGlyphLabel[] | null { - if (this._labels === null) { - this._labels = []; - const slur = this.startNote.beat.effectSlur; - if (slur !== null) { - const notationSettings = this.renderer.settings.notation; - for (const s of slur.segments) { - const label = TieGlyphLabels.build(s, s.toNote.realValue >= s.fromNote.realValue); - if (notationSettings.isNotationElementVisible(label.element)) { - this._labels.push(label); - } - } - } - } - return this._labels.length > 0 ? this._labels : null; - } - protected override calculateStartX(): number { return ( this.renderer.x + diff --git a/packages/alphatab/src/rendering/glyphs/TabSlurGlyph.ts b/packages/alphatab/src/rendering/glyphs/TabSlurGlyph.ts index dec5b67b44..e5efe08523 100644 --- a/packages/alphatab/src/rendering/glyphs/TabSlurGlyph.ts +++ b/packages/alphatab/src/rendering/glyphs/TabSlurGlyph.ts @@ -1,7 +1,6 @@ import type { Beat } from '@coderline/alphatab/model/Beat'; import type { Note } from '@coderline/alphatab/model/Note'; import { TabTieGlyph } from '@coderline/alphatab/rendering/glyphs/TabTieGlyph'; -import { TieGlyphLabels, type TieGlyphLabel } from '@coderline/alphatab/rendering/glyphs/TieGlyphLabel'; import { BeamDirection } from '@coderline/alphatab/rendering/utils/BeamDirection'; /** @@ -22,8 +21,6 @@ export interface TabEffectSlurGroup { * @internal */ export class TabSlurGlyph extends TabTieGlyph { - private _labels: TieGlyphLabel[] | null = null; - /** * Gets the notes the effect slur arc on the given side of the beat connects. * @returns The notes, or null if no effect slur chain starts on this side of the beat. @@ -62,28 +59,7 @@ export class TabSlurGlyph extends TabTieGlyph { return { startNote: startNote!, endNote: endNote! }; } - protected invalidateLabels(): void { - this._labels = null; - } - public override getTieHeight(startX: number, _startY: number, endX: number, _endY: number): number { return (Math.log(endX - startX + 1) * this.renderer.settings.notation.slurHeight) / 2; } - - protected override getSlurLabels(): TieGlyphLabel[] | null { - if (this._labels === null) { - this._labels = []; - const slur = this.startNote.effectSlur; - if (slur !== null) { - const notationSettings = this.renderer.settings.notation; - for (const s of slur.segments) { - const label = TieGlyphLabels.build(s, s.toNote.fret >= s.fromNote.fret); - if (notationSettings.isNotationElementVisible(label.element)) { - this._labels.push(label); - } - } - } - } - return this._labels.length > 0 ? this._labels : null; - } } diff --git a/packages/alphatab/src/rendering/glyphs/TieGlyph.ts b/packages/alphatab/src/rendering/glyphs/TieGlyph.ts index 9b7c58c6d8..736a7d432c 100644 --- a/packages/alphatab/src/rendering/glyphs/TieGlyph.ts +++ b/packages/alphatab/src/rendering/glyphs/TieGlyph.ts @@ -1,8 +1,7 @@ import type { Note } from '@coderline/alphatab/model/Note'; -import { type ICanvas, TextAlign, TextBaseline } from '@coderline/alphatab/platform/ICanvas'; +import type { ICanvas } from '@coderline/alphatab/platform/ICanvas'; import { type BarRendererBase, NoteXPosition, NoteYPosition } from '@coderline/alphatab/rendering/BarRendererBase'; import { Glyph } from '@coderline/alphatab/rendering/glyphs/Glyph'; -import type { ResolvedTieGlyphLabel, TieGlyphLabel } from '@coderline/alphatab/rendering/glyphs/TieGlyphLabel'; import type { LineBarRenderer } from '@coderline/alphatab/rendering/LineBarRenderer'; import { BeamDirection } from '@coderline/alphatab/rendering/utils/BeamDirection'; import { Bounds } from '@coderline/alphatab/rendering/utils/Bounds'; @@ -43,12 +42,6 @@ export abstract class TieGlyph extends Glyph implements ITieGlyph { private _tieHeight: number = 0; private _boundingBox?: Bounds; private _shouldPaint: boolean = false; - // Resolved per-label paint state. Lazily grown; re-layouts mutate - // existing entries in place and update `_resolvedLabelCount` to - // signal how many of them are valid this pass. - private _resolvedLabels: ResolvedTieGlyphLabel[] = []; - private _resolvedLabelCount: number = 0; - private _labelBaselineOffset: number = 0; public get checkForOverflow() { return this._shouldPaint && this._boundingBox !== undefined; @@ -159,12 +152,6 @@ export abstract class TieGlyph extends Glyph implements ITieGlyph { this.y = Math.min(this._startY, this._endY); const down = this.tieDirection === BeamDirection.Down; let tieBoundingBox: Bounds; - // Bezier control points for the tie. Computed once and reused - // for both the bounding box (via _calculateActualTieHeightFromCps) - // and label-apex sampling further below — avoids a redundant - // call to _computeBezierControlPoints (and its 14-element array - // allocation) per labeled slur per layout. - let cps: number[] = []; if (this.shouldDrawBendSlur()) { this._tieHeight = 0; tieBoundingBox = TieGlyph.calculateBendSlurHeight( @@ -178,7 +165,7 @@ export abstract class TieGlyph extends Glyph implements ITieGlyph { } else { this._tieHeight = this.getTieHeight(this._startX, this._startY, this._endX, this._endY); const tieThickness = this.renderer.smuflMetrics.tieMidpointThickness; - cps = TieGlyph._computeBezierControlPoints( + const cps = TieGlyph._computeBezierControlPoints( 1, this._startX, this._startY, @@ -200,74 +187,6 @@ export abstract class TieGlyph extends Glyph implements ITieGlyph { } this._boundingBox = tieBoundingBox; - this._resolvedLabelCount = 0; - const labels = this.getSlurLabels(); - if (labels !== null && labels.length > 0 && this.shouldPaintLabels()) { - const res = this.renderer.settings.display.resources; - const padding = this.renderer.smuflMetrics.oneStaffSpace * 0.25; - let maxTextHeight = 0; - - // Single Y line for all labels — the outer arc apex. - // Painted offset adds `padding` on the outward side, so - // every label sits the same fixed distance from its arc. - const labelLineY = - cps.length > 0 - ? 0.125 * cps[7] + 0.375 * cps[9] + 0.375 * cps[11] + 0.125 * cps[13] - : (this._startY + this._endY) / 2; - - for (const label of labels) { - const fromX = this.resolveLabelAnchorX(label.fromNote); - const toX = this.resolveLabelAnchorX(label.toNote); - if (fromX === null || toX === null) { - continue; - } - const midX = (fromX + toX) / 2; - if (midX < this._startX || midX > this._endX) { - continue; - } - - // Per-element font.size as an upper bound on glyph - // height — avoids per-label measureText calls. All H/P - // and sl. labels use the same _effectFont, so this is - // typically computed once. - const font = res.getFontForNotationElement(label.element); - if (font.size > maxTextHeight) { - maxTextHeight = font.size; - } - - // grow cache lazily; mutate existing slot in place otherwise - let slot: ResolvedTieGlyphLabel; - if (this._resolvedLabelCount < this._resolvedLabels.length) { - slot = this._resolvedLabels[this._resolvedLabelCount]; - slot.x = midX; - slot.y = labelLineY; - slot.text = label.text; - slot.element = label.element; - } else { - slot = { - x: midX, - y: labelLineY, - text: label.text, - element: label.element - }; - this._resolvedLabels.push(slot); - } - this._resolvedLabelCount++; - } - - if (this._resolvedLabelCount > 0) { - // canvas.textBaseline is 'hanging' (TextBaseline.Top), so - // fillText positions `y` at the glyph's top edge. - if (this.tieDirection === BeamDirection.Up) { - tieBoundingBox.y -= maxTextHeight + padding; - this._labelBaselineOffset = -(maxTextHeight + padding); - } else { - this._labelBaselineOffset = padding; - } - tieBoundingBox.h += maxTextHeight + padding; - } - } - this.height = tieBoundingBox.h; if (this.tieDirection === BeamDirection.Up) { @@ -328,74 +247,6 @@ export abstract class TieGlyph extends Glyph implements ITieGlyph { this.renderer.smuflMetrics.tieMidpointThickness ); } - - if (this._resolvedLabelCount > 0) { - const ta = canvas.textAlign; - const tb = canvas.textBaseline; - canvas.textAlign = TextAlign.Center; - canvas.textBaseline = TextBaseline.Top; - const res = this.renderer.resources; - let lastElement = -1; - for (let i = 0; i < this._resolvedLabelCount; i++) { - const label = this._resolvedLabels[i]; - if (label.element !== lastElement) { - canvas.font = res.getFontForNotationElement(label.element); - lastElement = label.element; - } - canvas.fillText(label.text, cx + label.x, cy + rendererY + label.y + this._labelBaselineOffset); - } - canvas.textAlign = ta; - canvas.textBaseline = tb; - } - } - - /** - * Returns the labels to paint along this slur, or `null` when there - * are none. Override in subclasses. - */ - protected getSlurLabels(): TieGlyphLabel[] | null { - return null; - } - - /** - * Whether label painting is enabled. Defaults to `true`. Subclasses - * may override to disable labels on the bend-slur path or other - * special cases. - */ - protected shouldPaintLabels(): boolean { - return !this.shouldDrawBendSlur(); - } - - /** - * Looks up the absolute X coordinate of an anchor note. Reuses - * the start/end bar renderers already resolved by the subclass - * (NoteTieGlyph) when the note's bar matches — most labels live - * in the slur's start or end bar, so this avoids the double Map - * lookup in `getRendererForBar` per label per layout. Returns - * `null` when the note's bar is not rendered on this glyph's - * staff (cross-system case). - */ - protected resolveLabelAnchorX(note: Note): number | null { - const bar = note.beat.voice.bar; - let renderer: LineBarRenderer | null = null; - const start = this.lookupStartBeatRenderer(); - if (start !== null && start.bar === bar) { - renderer = start; - } else { - const end = this.lookupEndBeatRenderer(); - if (end !== null && end.bar === bar) { - renderer = end; - } else { - renderer = this.renderer.scoreRenderer.layout!.getRendererForBar( - this.renderer.staff!.staffId, - bar - ) as LineBarRenderer | null; - } - } - if (renderer === null) { - return null; - } - return renderer.x + renderer.getNoteX(note, NoteXPosition.Center); } protected abstract shouldDrawBendSlur(): boolean; diff --git a/packages/alphatab/src/rendering/glyphs/TieGlyphLabel.ts b/packages/alphatab/src/rendering/glyphs/TieGlyphLabel.ts deleted file mode 100644 index 8e6ca43599..0000000000 --- a/packages/alphatab/src/rendering/glyphs/TieGlyphLabel.ts +++ /dev/null @@ -1,63 +0,0 @@ -import type { Note } from '@coderline/alphatab/model/Note'; -import type { SlurSegment } from '@coderline/alphatab/model/SlurSegment'; -import { SlurSegmentKind } from '@coderline/alphatab/model/SlurSegmentKind'; -import { NotationElement } from '@coderline/alphatab/NotationSettings'; - -/** - * One resolved label to paint along a tie/slur arc. Built once per - * slur glyph from the model-side {@link SlurSegment}s; consumed by - * `TieGlyph` during layout (X/Y resolution) and paint. - * @record - * @internal - */ -export interface TieGlyphLabel { - fromNote: Note; - toNote: Note; - text: string; - element: NotationElement; -} - -/** - * A label whose paint position has been resolved against the current - * layout. Stored on the glyph in a lazily-grown cache so re-layouts - * mutate existing entries instead of allocating. - * @record - * @internal - */ -export interface ResolvedTieGlyphLabel { - x: number; - y: number; - text: string; - element: NotationElement; -} - -/** - * Helpers for building `TieGlyphLabel` instances from model-side - * {@link SlurSegment}s. - * @internal - */ -export class TieGlyphLabels { - /** - * Builds a `TieGlyphLabel` for one segment of a slur. The - * `isAscending` flag selects between the H/P glyph for hammer-on - * vs. pull-off — score side passes a comparison on `realValue`, - * tab side passes a comparison on `fret`. - */ - public static build(s: SlurSegment, isAscending: boolean): TieGlyphLabel { - if (s.kind === SlurSegmentKind.LegatoSlide) { - return { - fromNote: s.fromNote, - toNote: s.toNote, - text: s.text !== null ? s.text : 'sl.', - element: NotationElement.EffectSlideText - }; - } - // HammerPull - return { - fromNote: s.fromNote, - toNote: s.toNote, - text: s.text !== null ? s.text : isAscending ? 'H' : 'P', - element: NotationElement.EffectHammerOnPullOffText - }; - } -} diff --git a/packages/alphatab/src/rendering/staves/StaffSystem.ts b/packages/alphatab/src/rendering/staves/StaffSystem.ts index 200eb3f5a5..98fbf199ec 100644 --- a/packages/alphatab/src/rendering/staves/StaffSystem.ts +++ b/packages/alphatab/src/rendering/staves/StaffSystem.ts @@ -1206,16 +1206,28 @@ export class StaffSystem { * @param padding The minimum padding between the content of the staves. * @returns The additional space to add between the staves (0 if the existing space is enough). */ - private static _requiredStaffContentPadding(upper: RenderStaff, lower: RenderStaff, padding: number): number { + private static _requiredStaffContentPadding( + upper: RenderStaff, + lower: RenderStaff, + padding: number, + horizontalPadding: number + ): number { const upperSky = upper.systemSkyline.downSky; const lowerSky = lower.systemSkyline.upSky; - // the maximum combined extent of both staves into the space between them + // the maximum combined extent of both staves into the space between them. + // content of the other staff horizontally closer than `horizontalPadding` to a segment counts as well + // (e.g. a fingering number right next to a stem of the staff above). let contentExtent = 0; for (let i = 0, n = upperSky.segmentCount; i < n; i++) { const h = upperSky.segmentHeight(i); if (h > 0) { - const combined = h + lowerSky.maxHeightInRange(upperSky.segmentXStart(i), upperSky.segmentXEnd(i)); + const combined = + h + + lowerSky.maxHeightInRange( + upperSky.segmentXStart(i) - horizontalPadding, + upperSky.segmentXEnd(i) + horizontalPadding + ); if (combined > contentExtent) { contentExtent = combined; } @@ -1224,7 +1236,12 @@ export class StaffSystem { for (let i = 0, n = lowerSky.segmentCount; i < n; i++) { const h = lowerSky.segmentHeight(i); if (h > 0) { - const combined = h + upperSky.maxHeightInRange(lowerSky.segmentXStart(i), lowerSky.segmentXEnd(i)); + const combined = + h + + upperSky.maxHeightInRange( + lowerSky.segmentXStart(i) - horizontalPadding, + lowerSky.segmentXEnd(i) + horizontalPadding + ); if (combined > contentExtent) { contentExtent = combined; } @@ -1295,7 +1312,8 @@ export class StaffSystem { const extra = StaffSystem._requiredStaffContentPadding( previousStaff, staff, - smufl.staffContentPadding + smufl.staffContentPadding, + smufl.beatContentPadding ); if (extra > 0) { staff.y += extra; diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-a.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-a.png index 149d097fd1..d1093c8677 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-a.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-a.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-ab.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-ab.png index 982cec6f30..4652bc3217 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-ab.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-ab.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-b.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-b.png index 22e60e499a..f5ebea0e2b 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-b.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-b.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-bb.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-bb.png index 27123f2255..7bfd0bd591 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-bb.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-bb.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-c.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-c.png index 66b1bfa247..adee6f2acb 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-c.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-c.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-cb.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-cb.png index 2c6985dff2..ca25d2646c 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-cb.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-cb.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-csharp.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-csharp.png index a43718da97..808d3668a0 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-csharp.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-csharp.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-d.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-d.png index b2b120127e..ac7cc6ee94 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-d.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-d.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-db.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-db.png index 10c722ac41..62e722f751 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-db.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-db.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-e.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-e.png index 876431d2c5..fe03c7a2fc 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-e.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-e.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-eb.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-eb.png index a1d7a3dad0..e0a8bfb1dc 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-eb.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-eb.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-f.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-f.png index b52ec5ddf8..4e5b5d12c7 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-f.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-f.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-fsharp.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-fsharp.png index 1a298a240f..8dfae368ef 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-fsharp.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-fsharp.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-g.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-g.png index 3b14e2c834..0e3762aa73 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-g.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-g.png differ diff --git a/packages/alphatab/test-data/guitarpro8/transposition-tonality-gb.png b/packages/alphatab/test-data/guitarpro8/transposition-tonality-gb.png index 98ef33679d..f80b14efbc 100644 Binary files a/packages/alphatab/test-data/guitarpro8/transposition-tonality-gb.png and b/packages/alphatab/test-data/guitarpro8/transposition-tonality-gb.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/BeetAnGeSample.png b/packages/alphatab/test-data/musicxml-samples/BeetAnGeSample.png index 9e6df41a2f..310cde0e04 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/BeetAnGeSample.png and b/packages/alphatab/test-data/musicxml-samples/BeetAnGeSample.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/Binchois.png b/packages/alphatab/test-data/musicxml-samples/Binchois.png index 6a73340f8c..8c073dedf7 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/Binchois.png and b/packages/alphatab/test-data/musicxml-samples/Binchois.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/BrahWiMeSample.png b/packages/alphatab/test-data/musicxml-samples/BrahWiMeSample.png index 98d7205dad..a5d6188934 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/BrahWiMeSample.png and b/packages/alphatab/test-data/musicxml-samples/BrahWiMeSample.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/BrookeWestSample.png b/packages/alphatab/test-data/musicxml-samples/BrookeWestSample.png index b70ddfddfd..9905268e0e 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/BrookeWestSample.png and b/packages/alphatab/test-data/musicxml-samples/BrookeWestSample.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/Chant.png b/packages/alphatab/test-data/musicxml-samples/Chant.png index 9461acf331..3008c6e093 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/Chant.png and b/packages/alphatab/test-data/musicxml-samples/Chant.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/DebuMandSample.png b/packages/alphatab/test-data/musicxml-samples/DebuMandSample.png index d34ca4faa6..337a87d3f1 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/DebuMandSample.png and b/packages/alphatab/test-data/musicxml-samples/DebuMandSample.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/Dichterliebe01.png b/packages/alphatab/test-data/musicxml-samples/Dichterliebe01.png index 3f20564108..9ff0c4fab4 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/Dichterliebe01.png and b/packages/alphatab/test-data/musicxml-samples/Dichterliebe01.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/Echigo.png b/packages/alphatab/test-data/musicxml-samples/Echigo.png index 51f7832bed..dcf127772a 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/Echigo.png and b/packages/alphatab/test-data/musicxml-samples/Echigo.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/FaurReveSample.png b/packages/alphatab/test-data/musicxml-samples/FaurReveSample.png index 33c30d2eca..2b4d727bf9 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/FaurReveSample.png and b/packages/alphatab/test-data/musicxml-samples/FaurReveSample.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/MahlFaGe4Sample.png b/packages/alphatab/test-data/musicxml-samples/MahlFaGe4Sample.png index 9ff1e9d3af..8fd26b8df0 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/MahlFaGe4Sample.png and b/packages/alphatab/test-data/musicxml-samples/MahlFaGe4Sample.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/MozaChloSample.png b/packages/alphatab/test-data/musicxml-samples/MozaChloSample.png index 7d5e7ca247..b9312c353a 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/MozaChloSample.png and b/packages/alphatab/test-data/musicxml-samples/MozaChloSample.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/MozaVeilSample.png b/packages/alphatab/test-data/musicxml-samples/MozaVeilSample.png index 1655432fa7..64a5d33578 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/MozaVeilSample.png and b/packages/alphatab/test-data/musicxml-samples/MozaVeilSample.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/MozartTrio.png b/packages/alphatab/test-data/musicxml-samples/MozartTrio.png index 1062134b34..8e3430c605 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/MozartTrio.png and b/packages/alphatab/test-data/musicxml-samples/MozartTrio.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/Saltarello.png b/packages/alphatab/test-data/musicxml-samples/Saltarello.png index 5446ea585f..c3745ce335 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/Saltarello.png and b/packages/alphatab/test-data/musicxml-samples/Saltarello.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/SchbAvMaSample.png b/packages/alphatab/test-data/musicxml-samples/SchbAvMaSample.png index 61b612fcea..cd7d380916 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/SchbAvMaSample.png and b/packages/alphatab/test-data/musicxml-samples/SchbAvMaSample.png differ diff --git a/packages/alphatab/test-data/musicxml-samples/Telemann.png b/packages/alphatab/test-data/musicxml-samples/Telemann.png index 2530598b33..88a8de8a4c 100644 Binary files a/packages/alphatab/test-data/musicxml-samples/Telemann.png and b/packages/alphatab/test-data/musicxml-samples/Telemann.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/01a-Pitches-Pitches.png b/packages/alphatab/test-data/musicxml-testsuite/01a-Pitches-Pitches.png index be8f1ef5a2..e8ec579316 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/01a-Pitches-Pitches.png and b/packages/alphatab/test-data/musicxml-testsuite/01a-Pitches-Pitches.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/02a-Rests-Durations.png b/packages/alphatab/test-data/musicxml-testsuite/02a-Rests-Durations.png index b7b064c707..e98e9106e0 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/02a-Rests-Durations.png and b/packages/alphatab/test-data/musicxml-testsuite/02a-Rests-Durations.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/02c-Rests-MultiMeasureRests.png b/packages/alphatab/test-data/musicxml-testsuite/02c-Rests-MultiMeasureRests.png index bcebf295c2..e2e53dfe2d 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/02c-Rests-MultiMeasureRests.png and b/packages/alphatab/test-data/musicxml-testsuite/02c-Rests-MultiMeasureRests.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/03a-Rhythm-Durations.png b/packages/alphatab/test-data/musicxml-testsuite/03a-Rhythm-Durations.png index 5790a2dff9..879fbb1704 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/03a-Rhythm-Durations.png and b/packages/alphatab/test-data/musicxml-testsuite/03a-Rhythm-Durations.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/13b-KeySignatures-ChurchModes.png b/packages/alphatab/test-data/musicxml-testsuite/13b-KeySignatures-ChurchModes.png index 96492c8f5a..1f4fd98af5 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/13b-KeySignatures-ChurchModes.png and b/packages/alphatab/test-data/musicxml-testsuite/13b-KeySignatures-ChurchModes.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/14a-StaffDetails-LineChanges.png b/packages/alphatab/test-data/musicxml-testsuite/14a-StaffDetails-LineChanges.png index 27fd2a0d61..71f67578e1 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/14a-StaffDetails-LineChanges.png and b/packages/alphatab/test-data/musicxml-testsuite/14a-StaffDetails-LineChanges.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/21d-Chords-SchubertStabatMater.png b/packages/alphatab/test-data/musicxml-testsuite/21d-Chords-SchubertStabatMater.png index 4090c59548..c6b8c39057 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/21d-Chords-SchubertStabatMater.png and b/packages/alphatab/test-data/musicxml-testsuite/21d-Chords-SchubertStabatMater.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/21f-Chord-ElementInBetween.png b/packages/alphatab/test-data/musicxml-testsuite/21f-Chord-ElementInBetween.png index a1ad3d9b0b..f84e1d86a2 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/21f-Chord-ElementInBetween.png and b/packages/alphatab/test-data/musicxml-testsuite/21f-Chord-ElementInBetween.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/22a-Noteheads.png b/packages/alphatab/test-data/musicxml-testsuite/22a-Noteheads.png index 6859e37318..cad084a4d1 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/22a-Noteheads.png and b/packages/alphatab/test-data/musicxml-testsuite/22a-Noteheads.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/22b-Staff-Notestyles.png b/packages/alphatab/test-data/musicxml-testsuite/22b-Staff-Notestyles.png index 46f4114a24..04c9fff669 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/22b-Staff-Notestyles.png and b/packages/alphatab/test-data/musicxml-testsuite/22b-Staff-Notestyles.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/23b-Tuplets-Styles.png b/packages/alphatab/test-data/musicxml-testsuite/23b-Tuplets-Styles.png index 7656428cc4..8b9fa12b2b 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/23b-Tuplets-Styles.png and b/packages/alphatab/test-data/musicxml-testsuite/23b-Tuplets-Styles.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/23e-Tuplets-Tremolo.png b/packages/alphatab/test-data/musicxml-testsuite/23e-Tuplets-Tremolo.png index 1c5487f28e..a85c7a7c6e 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/23e-Tuplets-Tremolo.png and b/packages/alphatab/test-data/musicxml-testsuite/23e-Tuplets-Tremolo.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/24g-GraceNote-Dynamics.png b/packages/alphatab/test-data/musicxml-testsuite/24g-GraceNote-Dynamics.png index 6ff7b2ca08..ea5c9f74e6 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/24g-GraceNote-Dynamics.png and b/packages/alphatab/test-data/musicxml-testsuite/24g-GraceNote-Dynamics.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/24h-GraceNote-Simultaneous.png b/packages/alphatab/test-data/musicxml-testsuite/24h-GraceNote-Simultaneous.png index 91e8b19b9f..a166bbf06b 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/24h-GraceNote-Simultaneous.png and b/packages/alphatab/test-data/musicxml-testsuite/24h-GraceNote-Simultaneous.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/31a-Directions.png b/packages/alphatab/test-data/musicxml-testsuite/31a-Directions.png index da63c21d77..55e2d51d97 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/31a-Directions.png and b/packages/alphatab/test-data/musicxml-testsuite/31a-Directions.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/31b-Directions-Order.png b/packages/alphatab/test-data/musicxml-testsuite/31b-Directions-Order.png index 62fff0e28a..9a96c87391 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/31b-Directions-Order.png and b/packages/alphatab/test-data/musicxml-testsuite/31b-Directions-Order.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/31c-MetronomeMarks.png b/packages/alphatab/test-data/musicxml-testsuite/31c-MetronomeMarks.png index aba7359aac..bed9fe109d 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/31c-MetronomeMarks.png and b/packages/alphatab/test-data/musicxml-testsuite/31c-MetronomeMarks.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/31d-Directions-Compounds.png b/packages/alphatab/test-data/musicxml-testsuite/31d-Directions-Compounds.png index d7c60801cd..2ff5b629f8 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/31d-Directions-Compounds.png and b/packages/alphatab/test-data/musicxml-testsuite/31d-Directions-Compounds.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/32a-Notations.png b/packages/alphatab/test-data/musicxml-testsuite/32a-Notations.png index 304ece1ccc..f23a3d5e40 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/32a-Notations.png and b/packages/alphatab/test-data/musicxml-testsuite/32a-Notations.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/33a-Spanners.png b/packages/alphatab/test-data/musicxml-testsuite/33a-Spanners.png index e1410d3ff4..efbcf14b07 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/33a-Spanners.png and b/packages/alphatab/test-data/musicxml-testsuite/33a-Spanners.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/33da-Spanners-OctaveShifts-before.png b/packages/alphatab/test-data/musicxml-testsuite/33da-Spanners-OctaveShifts-before.png index 65e3d6e2c9..d4b0c2af37 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/33da-Spanners-OctaveShifts-before.png and b/packages/alphatab/test-data/musicxml-testsuite/33da-Spanners-OctaveShifts-before.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/33db-Spanners-OctaveShifts-after.png b/packages/alphatab/test-data/musicxml-testsuite/33db-Spanners-OctaveShifts-after.png index 65e3d6e2c9..d4b0c2af37 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/33db-Spanners-OctaveShifts-after.png and b/packages/alphatab/test-data/musicxml-testsuite/33db-Spanners-OctaveShifts-after.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/33h-Spanners-Glissando.png b/packages/alphatab/test-data/musicxml-testsuite/33h-Spanners-Glissando.png index 3d35494bcd..8da5db0e0b 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/33h-Spanners-Glissando.png and b/packages/alphatab/test-data/musicxml-testsuite/33h-Spanners-Glissando.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/34a-Print-Object-Spanners.png b/packages/alphatab/test-data/musicxml-testsuite/34a-Print-Object-Spanners.png index 4c796444cf..8bbc1bd04b 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/34a-Print-Object-Spanners.png and b/packages/alphatab/test-data/musicxml-testsuite/34a-Print-Object-Spanners.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/34b-Colors.png b/packages/alphatab/test-data/musicxml-testsuite/34b-Colors.png index 542cd54c00..6eba27e84a 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/34b-Colors.png and b/packages/alphatab/test-data/musicxml-testsuite/34b-Colors.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/34c-Font-Size.png b/packages/alphatab/test-data/musicxml-testsuite/34c-Font-Size.png index 46f2d6d8f0..d7c46ff2f8 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/34c-Font-Size.png and b/packages/alphatab/test-data/musicxml-testsuite/34c-Font-Size.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/41e-StaffGroups-InstrumentNames-Linebroken.png b/packages/alphatab/test-data/musicxml-testsuite/41e-StaffGroups-InstrumentNames-Linebroken.png index 5bebb802a7..f224494318 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/41e-StaffGroups-InstrumentNames-Linebroken.png and b/packages/alphatab/test-data/musicxml-testsuite/41e-StaffGroups-InstrumentNames-Linebroken.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/42a-MultiVoice-TwoVoicesOnStaff-Lyrics.png b/packages/alphatab/test-data/musicxml-testsuite/42a-MultiVoice-TwoVoicesOnStaff-Lyrics.png index f42d389f19..f9dc3736fb 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/42a-MultiVoice-TwoVoicesOnStaff-Lyrics.png and b/packages/alphatab/test-data/musicxml-testsuite/42a-MultiVoice-TwoVoicesOnStaff-Lyrics.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/42b-MultiVoice-MidMeasureClefChange.png b/packages/alphatab/test-data/musicxml-testsuite/42b-MultiVoice-MidMeasureClefChange.png index 3eb98cfdfe..a03f40ca52 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/42b-MultiVoice-MidMeasureClefChange.png and b/packages/alphatab/test-data/musicxml-testsuite/42b-MultiVoice-MidMeasureClefChange.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/43e-Multistaff-ClefDynamics.png b/packages/alphatab/test-data/musicxml-testsuite/43e-Multistaff-ClefDynamics.png index a377227b5c..03efc9bbc6 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/43e-Multistaff-ClefDynamics.png and b/packages/alphatab/test-data/musicxml-testsuite/43e-Multistaff-ClefDynamics.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/43f-MultiStaff-Lyrics.png b/packages/alphatab/test-data/musicxml-testsuite/43f-MultiStaff-Lyrics.png index 08286e6e17..e6aecf3e15 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/43f-MultiStaff-Lyrics.png and b/packages/alphatab/test-data/musicxml-testsuite/43f-MultiStaff-Lyrics.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/45b-RepeatWithAlternatives.png b/packages/alphatab/test-data/musicxml-testsuite/45b-RepeatWithAlternatives.png index 4e37079d3b..274ff26292 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/45b-RepeatWithAlternatives.png and b/packages/alphatab/test-data/musicxml-testsuite/45b-RepeatWithAlternatives.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/45d-Repeats-MultipleEndings.png b/packages/alphatab/test-data/musicxml-testsuite/45d-Repeats-MultipleEndings.png index e1af8c02f1..f05ac523d7 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/45d-Repeats-MultipleEndings.png and b/packages/alphatab/test-data/musicxml-testsuite/45d-Repeats-MultipleEndings.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/45e-Repeats-Combination.png b/packages/alphatab/test-data/musicxml-testsuite/45e-Repeats-Combination.png index 16b16fc4e2..4473b51413 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/45e-Repeats-Combination.png and b/packages/alphatab/test-data/musicxml-testsuite/45e-Repeats-Combination.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/45f-Repeats-InvalidEndings.png b/packages/alphatab/test-data/musicxml-testsuite/45f-Repeats-InvalidEndings.png index a823381b9c..b91ed12b40 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/45f-Repeats-InvalidEndings.png and b/packages/alphatab/test-data/musicxml-testsuite/45f-Repeats-InvalidEndings.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/45i-Repeats-Nested.png b/packages/alphatab/test-data/musicxml-testsuite/45i-Repeats-Nested.png index c784329c81..0b686505a2 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/45i-Repeats-Nested.png and b/packages/alphatab/test-data/musicxml-testsuite/45i-Repeats-Nested.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/46a-Barlines.png b/packages/alphatab/test-data/musicxml-testsuite/46a-Barlines.png index b2b03fd1e2..7f315eccc8 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/46a-Barlines.png and b/packages/alphatab/test-data/musicxml-testsuite/46a-Barlines.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/46g-PickupMeasure-Chordnames-FiguredBass.png b/packages/alphatab/test-data/musicxml-testsuite/46g-PickupMeasure-Chordnames-FiguredBass.png index 4a864d97c8..bda8ee1295 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/46g-PickupMeasure-Chordnames-FiguredBass.png and b/packages/alphatab/test-data/musicxml-testsuite/46g-PickupMeasure-Chordnames-FiguredBass.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/52a-PageLayout.png b/packages/alphatab/test-data/musicxml-testsuite/52a-PageLayout.png index 4e31cd7190..55c80f3ba8 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/52a-PageLayout.png and b/packages/alphatab/test-data/musicxml-testsuite/52a-PageLayout.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/52b-Breaks.png b/packages/alphatab/test-data/musicxml-testsuite/52b-Breaks.png index f42ca3c4af..f6a77c53ea 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/52b-Breaks.png and b/packages/alphatab/test-data/musicxml-testsuite/52b-Breaks.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/61a-Lyrics.png b/packages/alphatab/test-data/musicxml-testsuite/61a-Lyrics.png index 01bdc3443e..57f20b91a9 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/61a-Lyrics.png and b/packages/alphatab/test-data/musicxml-testsuite/61a-Lyrics.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/61b-MultipleLyrics.png b/packages/alphatab/test-data/musicxml-testsuite/61b-MultipleLyrics.png index a03081f7ef..503be37288 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/61b-MultipleLyrics.png and b/packages/alphatab/test-data/musicxml-testsuite/61b-MultipleLyrics.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/61c-Lyrics-Pianostaff.png b/packages/alphatab/test-data/musicxml-testsuite/61c-Lyrics-Pianostaff.png index 819e6ba6dc..ea6b6fd43c 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/61c-Lyrics-Pianostaff.png and b/packages/alphatab/test-data/musicxml-testsuite/61c-Lyrics-Pianostaff.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/61h-Lyrics-BeamsMelismata.png b/packages/alphatab/test-data/musicxml-testsuite/61h-Lyrics-BeamsMelismata.png index d73a935a02..cad45bdb19 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/61h-Lyrics-BeamsMelismata.png and b/packages/alphatab/test-data/musicxml-testsuite/61h-Lyrics-BeamsMelismata.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/61k-Lyrics-SpannersExtenders.png b/packages/alphatab/test-data/musicxml-testsuite/61k-Lyrics-SpannersExtenders.png index cac14bcd4a..e335d3d5c8 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/61k-Lyrics-SpannersExtenders.png and b/packages/alphatab/test-data/musicxml-testsuite/61k-Lyrics-SpannersExtenders.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/71a-Chordnames.png b/packages/alphatab/test-data/musicxml-testsuite/71a-Chordnames.png index 1d05e379cf..94b56b6391 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/71a-Chordnames.png and b/packages/alphatab/test-data/musicxml-testsuite/71a-Chordnames.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/71c-ChordsFrets.png b/packages/alphatab/test-data/musicxml-testsuite/71c-ChordsFrets.png index 0467d3965b..a5fdcf4034 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/71c-ChordsFrets.png and b/packages/alphatab/test-data/musicxml-testsuite/71c-ChordsFrets.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/71e-TabStaves.png b/packages/alphatab/test-data/musicxml-testsuite/71e-TabStaves.png index f5fc328317..3f5ddcaba6 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/71e-TabStaves.png and b/packages/alphatab/test-data/musicxml-testsuite/71e-TabStaves.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/71f-AllChordTypes.png b/packages/alphatab/test-data/musicxml-testsuite/71f-AllChordTypes.png index 12b6684cb0..56ec43e1c0 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/71f-AllChordTypes.png and b/packages/alphatab/test-data/musicxml-testsuite/71f-AllChordTypes.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/71g-MultipleChordnames.png b/packages/alphatab/test-data/musicxml-testsuite/71g-MultipleChordnames.png index ef19e18c25..a2db8ead2e 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/71g-MultipleChordnames.png and b/packages/alphatab/test-data/musicxml-testsuite/71g-MultipleChordnames.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/72c-TransposingInstruments-Change.png b/packages/alphatab/test-data/musicxml-testsuite/72c-TransposingInstruments-Change.png index dcc97733a1..625dd945ff 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/72c-TransposingInstruments-Change.png and b/packages/alphatab/test-data/musicxml-testsuite/72c-TransposingInstruments-Change.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/73a-Percussion.png b/packages/alphatab/test-data/musicxml-testsuite/73a-Percussion.png index 72991a8455..b5e813b06f 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/73a-Percussion.png and b/packages/alphatab/test-data/musicxml-testsuite/73a-Percussion.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/75a-AccordionRegistrations.png b/packages/alphatab/test-data/musicxml-testsuite/75a-AccordionRegistrations.png index fb4fe4c09d..9831726bdd 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/75a-AccordionRegistrations.png and b/packages/alphatab/test-data/musicxml-testsuite/75a-AccordionRegistrations.png differ diff --git a/packages/alphatab/test-data/musicxml-testsuite/99b-Lyrics-BeamsMelismata-IgnoreBeams.png b/packages/alphatab/test-data/musicxml-testsuite/99b-Lyrics-BeamsMelismata-IgnoreBeams.png index d73a935a02..cad45bdb19 100644 Binary files a/packages/alphatab/test-data/musicxml-testsuite/99b-Lyrics-BeamsMelismata-IgnoreBeams.png and b/packages/alphatab/test-data/musicxml-testsuite/99b-Lyrics-BeamsMelismata-IgnoreBeams.png differ diff --git a/packages/alphatab/test-data/musicxml3/chord-diagram.png b/packages/alphatab/test-data/musicxml3/chord-diagram.png index f8e2118691..df64949f88 100644 Binary files a/packages/alphatab/test-data/musicxml3/chord-diagram.png and b/packages/alphatab/test-data/musicxml3/chord-diagram.png differ diff --git a/packages/alphatab/test-data/musicxml3/first-bar-tempo.png b/packages/alphatab/test-data/musicxml3/first-bar-tempo.png index 160bebca8e..879d68a2c7 100644 Binary files a/packages/alphatab/test-data/musicxml3/first-bar-tempo.png and b/packages/alphatab/test-data/musicxml3/first-bar-tempo.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/onnotes-beat.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/onnotes-beat.png index 4c2785a8fb..8551985f3f 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/onnotes-beat.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/onnotes-beat.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/real-bar.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/real-bar.png index ff24f82f59..3067d07e33 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/real-bar.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/real-bar.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/real-beat.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/real-beat.png index 337dd7eb51..96bf4cc01b 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/real-beat.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/real-beat.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/real-master.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/real-master.png index 5b3a0abe60..e0eab2526c 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/real-master.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/real-master.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/real-note.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/real-note.png index a812abfdc5..cedb6b8dce 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/real-note.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/real-note.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/real-system.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/real-system.png index ffa671558b..4bbe1cdc56 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/real-system.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/real-system.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-bar.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-bar.png index ff24f82f59..3067d07e33 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-bar.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-bar.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-beat.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-beat.png index 2d73c1711e..35d03b7c1f 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-beat.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-beat.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-master.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-master.png index f4bb4463c4..53047b95ce 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-master.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-master.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-note.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-note.png index a812abfdc5..cedb6b8dce 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-note.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-note.png differ diff --git a/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-system.png b/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-system.png index f60c5141c7..e70c8659e3 100644 Binary files a/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-system.png and b/packages/alphatab/test-data/visual-tests/bounds-lookup/visual-system.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/beat-tempo-change.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/beat-tempo-change.png index 992e4a3570..02738e91af 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/beat-tempo-change.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/beat-tempo-change.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/bend-vibrato-default.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/bend-vibrato-default.png index 8c78f03dc1..31d744bf6d 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/bend-vibrato-default.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/bend-vibrato-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/bend-vibrato-songbook.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/bend-vibrato-songbook.png index c8f6b33bf0..0aa00b1313 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/bend-vibrato-songbook.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/bend-vibrato-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/chords.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/chords.png index 2e71d1f52f..7cb58fe61d 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/chords.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/chords.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/dead-slap.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/dead-slap.png index 2484eb6bb2..d3440e1455 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/dead-slap.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/dead-slap.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/directions-simple.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/directions-simple.png index f11d8417ca..b3254f5e19 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/directions-simple.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/directions-simple.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/directions-symbols.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/directions-symbols.png index 879b824b69..b6e6d52a18 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/directions-symbols.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/directions-symbols.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/dynamics.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/dynamics.png index 26dc411622..ffed5188f5 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/dynamics.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/dynamics.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/fade-in.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/fade-in.png index 1d61c4fcd5..acb56055e5 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/fade-in.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/fade-in.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/fade.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/fade.png index e4809d08e4..13b263ecd4 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/fade.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/fade.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/fingering-new.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/fingering-new.png index a2302d4fd2..f0522c570f 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/fingering-new.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/fingering-new.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/free-time.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/free-time.png index 7475201a58..592d6e8cad 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/free-time.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/free-time.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-asc-then-desc.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-asc-then-desc.png index 7101313a2b..90e1f5a20c 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-asc-then-desc.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-asc-then-desc.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at1.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at1.png index 834bd44244..9f2f4b643e 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at1.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at1.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at10.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at10.png index ae931ff185..f5b48c5403 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at10.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at10.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at11.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at11.png index 64fafefa13..72357869ba 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at11.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at11.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at12.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at12.png index bf1d084fc9..3331bc623c 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at12.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at12.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at13.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at13.png index 7890c1f06a..060d901386 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at13.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at13.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at14.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at14.png index d9c5906409..65d8f6b848 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at14.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at14.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at2.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at2.png index bde1635c9b..4feacba93c 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at2.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at2.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at3.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at3.png index b69da99213..736dccc9bf 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at3.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at3.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at4.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at4.png index b252445361..db01463152 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at4.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at4.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at5.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at5.png index 8d8fd6a30a..f9fecb0a89 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at5.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at5.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at6.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at6.png index 6ddf94be50..4c9f920020 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at6.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at6.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at7.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at7.png index 6b7f6f783f..fb4f704ec0 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at7.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at7.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at8.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at8.png index 46a32478d3..6ac6f333b8 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at8.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at8.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at9.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at9.png index a81134be4a..a85a2d8d2b 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at9.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-at9.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chain-across-other-string.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chain-across-other-string.png index 6a53b28a98..0a2c59f524 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chain-across-other-string.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chain-across-other-string.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-mixed-kinds.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-mixed-kinds.png index a6c97f2876..54f36f0ae8 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-mixed-kinds.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-mixed-kinds.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-opposite-stems.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-opposite-stems.png index 469f8ea641..4fc6443f1c 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-opposite-stems.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-opposite-stems.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-slide-accidentals.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-slide-accidentals.png index 0bd09b4d6e..45cbc1032e 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-slide-accidentals.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-slide-accidentals.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-stems-up.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-stems-up.png index 2e93217aba..431c990040 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-stems-up.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-stems-up.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-with-chain.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-with-chain.png index c69ff18f24..2d2441b48c 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-with-chain.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-chord-with-chain.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-across-bar.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-across-bar.png new file mode 100644 index 0000000000..7679f42fb0 Binary files /dev/null and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-across-bar.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-disabled.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-disabled.png index fff3f26725..9c44be7327 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-disabled.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-disabled.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-system-break.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-system-break.png new file mode 100644 index 0000000000..dfba8b64ed Binary files /dev/null and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-system-break.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-mixed-h-slide.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-mixed-h-slide.png index 2126f3a8ea..df7ae57511 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-mixed-h-slide.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-mixed-h-slide.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-mixed-slide-h-p.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-mixed-slide-h-p.png index dccaeae6e9..1b0edf72a6 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-mixed-slide-h-p.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-mixed-slide-h-p.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-multi-voice-beamed.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-multi-voice-beamed.png index 043c22c8f7..67b35a1b94 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-multi-voice-beamed.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-multi-voice-beamed.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-multi-voice.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-multi-voice.png index 25af7d69a1..339bdde14f 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-multi-voice.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-multi-voice.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-pull-off-chain.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-pull-off-chain.png index b96f5f1001..051370c322 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-pull-off-chain.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-pull-off-chain.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-score-only.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-score-only.png index bd809463a4..1ba466dfd8 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-score-only.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-score-only.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-tab-only.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-tab-only.png index 12c5a25f40..29724f0d62 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-tab-only.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/hopo-arcs-tab-only.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/legato.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/legato.png index b1174acc05..1473afa523 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/legato.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/legato.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-multi-line-spacing.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-multi-line-spacing.png index 3e7747068f..c919357345 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-multi-line-spacing.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-multi-line-spacing.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-multi-line.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-multi-line.png index 25ce896fc8..ebd7c172a4 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-multi-line.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-multi-line.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-single-line.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-single-line.png index fdda2286fe..c80c06ee79 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-single-line.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/lyrics-single-line.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/markers.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/markers.png index dfd781196c..fa68f51a7e 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/markers.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/markers.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/ornaments.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/ornaments.png index 386a5717db..382daa9ebd 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/ornaments.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/ornaments.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/palm-mute.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/palm-mute.png index a25bc7038e..0e6c6bf83c 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/palm-mute.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/palm-mute.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/pick-stroke.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/pick-stroke.png index 2abf317908..de5b47b200 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/pick-stroke.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/pick-stroke.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/slides.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/slides.png index 8e05eec385..2c0e961787 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/slides.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/slides.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/string-numbers.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/string-numbers.png index 5a95fbfdf4..2d9aa338bf 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/string-numbers.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/string-numbers.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-1200.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-1200.png index 5e96c9bce8..d7de418741 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-1200.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-1200.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-600.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-600.png index 68ca40674f..5302cd388a 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-600.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-600.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-850.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-850.png index 6207936363..4d19c6957d 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-850.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/sustain-850.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tap.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tap.png index 7cfe999d04..fcff03a59f 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tap.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tap.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tempo-text.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tempo-text.png index 432a0d0a4a..24f764c711 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tempo-text.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tempo-text.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tempo.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tempo.png index 819f08c6ab..e9f0b10e89 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tempo.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tempo.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/text.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/text.png index 2e03fe6be9..592cd20a2b 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/text.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/text.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/timer.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/timer.png index e0a549c64e..5c398c73df 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/timer.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/timer.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-bar.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-bar.png index 83bc33d235..832e607fb1 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-bar.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-bar.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags-bottom.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags-bottom.png index a5df9a79b1..a63a298a34 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags-bottom.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags-bottom.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags-mixed.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags-mixed.png index 16df805e7b..1ccee2bf4e 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags-mixed.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags-mixed.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags.png index d2d39293c4..fdd4be5768 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-flags.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-picking.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-picking.png index dcf3a194a3..f4ef74a463 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-picking.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-picking.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-buzzroll-beams.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-buzzroll-beams.png index cc1b511f84..8b739265e5 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-buzzroll-beams.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-buzzroll-beams.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-buzzroll-flags.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-buzzroll-flags.png index 0095c2a42f..8e93d7e545 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-buzzroll-flags.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-buzzroll-flags.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-default-beams.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-default-beams.png index 387e248ea9..c4f69aa12e 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-default-beams.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-default-beams.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-default-flags.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-default-flags.png index 81fb2a3abf..43dd2245dd 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-default-flags.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-standard-default-flags.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-buzzroll-beams.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-buzzroll-beams.png index 946489e7e9..baf7be49f6 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-buzzroll-beams.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-buzzroll-beams.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-buzzroll-flags.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-buzzroll-flags.png index dc02ffcdb1..e9d8839d6d 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-buzzroll-flags.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-buzzroll-flags.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-default-beams.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-default-beams.png index 37c096b36f..adaced894b 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-default-beams.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-default-beams.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-default-flags.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-default-flags.png index f6a7e39664..a632ba7c96 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-default-flags.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tremolo-tabs-default-flags.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/trill.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/trill.png index bfe2b390ea..896dfed721 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/trill.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/trill.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets-advanced.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets-advanced.png index 80ee15c3cc..fa5ee48d86 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets-advanced.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets-advanced.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets-huge.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets-huge.png index 2d4be4bc29..de363991a0 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets-huge.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets-huge.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets.png index e8befe8818..b47e5285fa 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/tuplets.png differ diff --git a/packages/alphatab/test-data/visual-tests/effects-and-annotations/vibrato.png b/packages/alphatab/test-data/visual-tests/effects-and-annotations/vibrato.png index 317badb6eb..2b827ec331 100644 Binary files a/packages/alphatab/test-data/visual-tests/effects-and-annotations/vibrato.png and b/packages/alphatab/test-data/visual-tests/effects-and-annotations/vibrato.png differ diff --git a/packages/alphatab/test-data/visual-tests/general/alternate-endings.png b/packages/alphatab/test-data/visual-tests/general/alternate-endings.png index debe8fa4ee..32e034dacb 100644 Binary files a/packages/alphatab/test-data/visual-tests/general/alternate-endings.png and b/packages/alphatab/test-data/visual-tests/general/alternate-endings.png differ diff --git a/packages/alphatab/test-data/visual-tests/general/font-fallback.png b/packages/alphatab/test-data/visual-tests/general/font-fallback.png index fb9bdeee3c..b961222e6c 100644 Binary files a/packages/alphatab/test-data/visual-tests/general/font-fallback.png and b/packages/alphatab/test-data/visual-tests/general/font-fallback.png differ diff --git a/packages/alphatab/test-data/visual-tests/general/repeats.png b/packages/alphatab/test-data/visual-tests/general/repeats.png index aa96946105..6969c902bd 100644 Binary files a/packages/alphatab/test-data/visual-tests/general/repeats.png and b/packages/alphatab/test-data/visual-tests/general/repeats.png differ diff --git a/packages/alphatab/test-data/visual-tests/general/tuning.png b/packages/alphatab/test-data/visual-tests/general/tuning.png index 0f7e3681bc..9a6dc6de86 100644 Binary files a/packages/alphatab/test-data/visual-tests/general/tuning.png and b/packages/alphatab/test-data/visual-tests/general/tuning.png differ diff --git a/packages/alphatab/test-data/visual-tests/grace-spacing/grace-at-bar-boundary.png b/packages/alphatab/test-data/visual-tests/grace-spacing/grace-at-bar-boundary.png index 928aa8d0bd..b7aee92f8b 100644 Binary files a/packages/alphatab/test-data/visual-tests/grace-spacing/grace-at-bar-boundary.png and b/packages/alphatab/test-data/visual-tests/grace-spacing/grace-at-bar-boundary.png differ diff --git a/packages/alphatab/test-data/visual-tests/grace-spacing/grace-multi-track.png b/packages/alphatab/test-data/visual-tests/grace-spacing/grace-multi-track.png index acbcd72eaf..6e2d444e0e 100644 Binary files a/packages/alphatab/test-data/visual-tests/grace-spacing/grace-multi-track.png and b/packages/alphatab/test-data/visual-tests/grace-spacing/grace-multi-track.png differ diff --git a/packages/alphatab/test-data/visual-tests/grace-spacing/grace-multiple-consecutive.png b/packages/alphatab/test-data/visual-tests/grace-spacing/grace-multiple-consecutive.png index b0f982d405..331555d64a 100644 Binary files a/packages/alphatab/test-data/visual-tests/grace-spacing/grace-multiple-consecutive.png and b/packages/alphatab/test-data/visual-tests/grace-spacing/grace-multiple-consecutive.png differ diff --git a/packages/alphatab/test-data/visual-tests/grace-spacing/grace-single-before-regular-note.png b/packages/alphatab/test-data/visual-tests/grace-spacing/grace-single-before-regular-note.png index 0599ed2adf..d502868b82 100644 Binary files a/packages/alphatab/test-data/visual-tests/grace-spacing/grace-single-before-regular-note.png and b/packages/alphatab/test-data/visual-tests/grace-spacing/grace-single-before-regular-note.png differ diff --git a/packages/alphatab/test-data/visual-tests/grace-spacing/grace-without-host-incomplete-group.png b/packages/alphatab/test-data/visual-tests/grace-spacing/grace-without-host-incomplete-group.png index 945c836059..e0500149c3 100644 Binary files a/packages/alphatab/test-data/visual-tests/grace-spacing/grace-without-host-incomplete-group.png and b/packages/alphatab/test-data/visual-tests/grace-spacing/grace-without-host-incomplete-group.png differ diff --git a/packages/alphatab/test-data/visual-tests/guitar-tabs/rhythm-with-beams.png b/packages/alphatab/test-data/visual-tests/guitar-tabs/rhythm-with-beams.png index 5c960e6199..ee76b5819f 100644 Binary files a/packages/alphatab/test-data/visual-tests/guitar-tabs/rhythm-with-beams.png and b/packages/alphatab/test-data/visual-tests/guitar-tabs/rhythm-with-beams.png differ diff --git a/packages/alphatab/test-data/visual-tests/guitar-tabs/rhythm.png b/packages/alphatab/test-data/visual-tests/guitar-tabs/rhythm.png index b1d1f6cc13..a7832d976e 100644 Binary files a/packages/alphatab/test-data/visual-tests/guitar-tabs/rhythm.png and b/packages/alphatab/test-data/visual-tests/guitar-tabs/rhythm.png differ diff --git a/packages/alphatab/test-data/visual-tests/guitar-tabs/string-variations.png b/packages/alphatab/test-data/visual-tests/guitar-tabs/string-variations.png index 437802f3b8..c257324131 100644 Binary files a/packages/alphatab/test-data/visual-tests/guitar-tabs/string-variations.png and b/packages/alphatab/test-data/visual-tests/guitar-tabs/string-variations.png differ diff --git a/packages/alphatab/test-data/visual-tests/issues/bottom-effect-band.png b/packages/alphatab/test-data/visual-tests/issues/bottom-effect-band.png index 88a06b746f..514dea59e8 100644 Binary files a/packages/alphatab/test-data/visual-tests/issues/bottom-effect-band.png and b/packages/alphatab/test-data/visual-tests/issues/bottom-effect-band.png differ diff --git a/packages/alphatab/test-data/visual-tests/issues/let-ring-empty-voice.png b/packages/alphatab/test-data/visual-tests/issues/let-ring-empty-voice.png index a4de309c14..81e49d4fdf 100644 Binary files a/packages/alphatab/test-data/visual-tests/issues/let-ring-empty-voice.png and b/packages/alphatab/test-data/visual-tests/issues/let-ring-empty-voice.png differ diff --git a/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-no-padding.png b/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-no-padding.png index bcd7c4746d..a5861b8685 100644 Binary files a/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-no-padding.png and b/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-no-padding.png differ diff --git a/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-with-label.png b/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-with-label.png index f1ae900066..4694a4b81e 100644 Binary files a/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-with-label.png and b/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-with-label.png differ diff --git a/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-without-label.png b/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-without-label.png index f995111590..88c6a6e428 100644 Binary files a/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-without-label.png and b/packages/alphatab/test-data/visual-tests/issues/no-label-padding-left-without-label.png differ diff --git a/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-380.png b/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-380.png index 6e26d99ba4..464d8c97a3 100644 Binary files a/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-380.png and b/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-380.png differ diff --git a/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-400.png b/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-400.png index f2e624e3a0..8054aac48a 100644 Binary files a/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-400.png and b/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-400.png differ diff --git a/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-500.png b/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-500.png index c08ee20199..0a1f7dc450 100644 Binary files a/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-500.png and b/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-500.png differ diff --git a/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-600.png b/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-600.png index 2392256b9e..ad627cb040 100644 Binary files a/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-600.png and b/packages/alphatab/test-data/visual-tests/issues/whammy-resize-wrap-600.png differ diff --git a/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-above-threshold-stretched.png b/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-above-threshold-stretched.png index 93b0cecef7..af9ed5f25f 100644 Binary files a/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-above-threshold-stretched.png and b/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-above-threshold-stretched.png differ diff --git a/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-below-threshold-not-stretched.png b/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-below-threshold-not-stretched.png index e5ca153f39..5fe97cb8cb 100644 Binary files a/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-below-threshold-not-stretched.png and b/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-below-threshold-not-stretched.png differ diff --git a/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-default-never-stretches.png b/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-default-never-stretches.png index e5ca153f39..5fe97cb8cb 100644 Binary files a/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-default-never-stretches.png and b/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-default-never-stretches.png differ diff --git a/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-threshold-disabled-stretches.png b/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-threshold-disabled-stretches.png index fd0097743d..0be8d8d0e7 100644 Binary files a/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-threshold-disabled-stretches.png and b/packages/alphatab/test-data/visual-tests/last-system-threshold/last-system-threshold-disabled-stretches.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/accolade-on-revert.png b/packages/alphatab/test-data/visual-tests/layout/accolade-on-revert.png index 830dcd5f62..d1c28b3b3f 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/accolade-on-revert.png and b/packages/alphatab/test-data/visual-tests/layout/accolade-on-revert.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-all.png b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-all.png index 3e8d2b4f09..7b35d255ca 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-all.png and b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-all.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-first.png b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-first.png index ea408b0ea4..84e980f351 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-first.png and b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-first.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-hide.png b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-hide.png index da4cad3860..591b825ffd 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-hide.png and b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-bar-override-hide.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-all.png b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-all.png index c2a25084b4..a0ba3e009c 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-all.png and b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-all.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-first.png b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-first.png index c8065a35ba..9926f72b8e 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-first.png and b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-first.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-hide.png b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-hide.png index 1fe7e8d7b3..119135705b 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-hide.png and b/packages/alphatab/test-data/visual-tests/layout/barnumberdisplay-stylesheet-hide.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/barnumbers.png b/packages/alphatab/test-data/visual-tests/layout/barnumbers.png index 0eacf3c69f..eaf99f995c 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/barnumbers.png and b/packages/alphatab/test-data/visual-tests/layout/barnumbers.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/brackets-braces-none.png b/packages/alphatab/test-data/visual-tests/layout/brackets-braces-none.png index 8841058332..6632044244 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/brackets-braces-none.png and b/packages/alphatab/test-data/visual-tests/layout/brackets-braces-none.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/brackets-braces-similar.png b/packages/alphatab/test-data/visual-tests/layout/brackets-braces-similar.png index 8bb932c451..c09f19408a 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/brackets-braces-similar.png and b/packages/alphatab/test-data/visual-tests/layout/brackets-braces-similar.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/brackets-braces-staves.png b/packages/alphatab/test-data/visual-tests/layout/brackets-braces-staves.png index 96ee7cd867..84bf18e276 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/brackets-braces-staves.png and b/packages/alphatab/test-data/visual-tests/layout/brackets-braces-staves.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/hide-empty-staves-in-first.png b/packages/alphatab/test-data/visual-tests/layout/hide-empty-staves-in-first.png index 5254d63d9f..86b7d11d54 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/hide-empty-staves-in-first.png and b/packages/alphatab/test-data/visual-tests/layout/hide-empty-staves-in-first.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/hide-empty-staves.png b/packages/alphatab/test-data/visual-tests/layout/hide-empty-staves.png index 835982dd1e..2852654a98 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/hide-empty-staves.png and b/packages/alphatab/test-data/visual-tests/layout/hide-empty-staves.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/horizontal-layout.png b/packages/alphatab/test-data/visual-tests/layout/horizontal-layout.png index e9e769f015..e9cec6a8e6 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/horizontal-layout.png and b/packages/alphatab/test-data/visual-tests/layout/horizontal-layout.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/inline-tuning-first-system.png b/packages/alphatab/test-data/visual-tests/layout/inline-tuning-first-system.png index ff0337e768..d3441f5cb3 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/inline-tuning-first-system.png and b/packages/alphatab/test-data/visual-tests/layout/inline-tuning-first-system.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/inline-tuning-per-track-hidden.png b/packages/alphatab/test-data/visual-tests/layout/inline-tuning-per-track-hidden.png index 2a12689c16..5b2ac47280 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/inline-tuning-per-track-hidden.png and b/packages/alphatab/test-data/visual-tests/layout/inline-tuning-per-track-hidden.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/inline-tuning-seven-string.png b/packages/alphatab/test-data/visual-tests/layout/inline-tuning-seven-string.png index 900e0ed29f..c5a5c76be0 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/inline-tuning-seven-string.png and b/packages/alphatab/test-data/visual-tests/layout/inline-tuning-seven-string.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/inline-tuning-with-bracket.png b/packages/alphatab/test-data/visual-tests/layout/inline-tuning-with-bracket.png index 2c4619e642..2f85a3add1 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/inline-tuning-with-bracket.png and b/packages/alphatab/test-data/visual-tests/layout/inline-tuning-with-bracket.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-1-600.png b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-1-600.png index 6a80012df2..f9cc9f4717 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-1-600.png and b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-1-600.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-2-300.png b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-2-300.png index e50b83cf67..8612001f2d 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-2-300.png and b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-2-300.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-3-700.png b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-3-700.png index 2501897b06..0ce8f744b5 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-3-700.png and b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-down-3-700.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-0-600.png b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-0-600.png index 3c35025124..801c2ac53c 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-0-600.png and b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-0-600.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-2-700.png b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-2-700.png index 829e965532..969b99154b 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-2-700.png and b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-2-700.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-3-300.png b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-3-300.png index e50b83cf67..8612001f2d 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-3-300.png and b/packages/alphatab/test-data/visual-tests/layout/multi-system-slur-scale-up-3-300.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multi-track.png b/packages/alphatab/test-data/visual-tests/layout/multi-track.png index bb59f03355..3e48f5e28f 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multi-track.png and b/packages/alphatab/test-data/visual-tests/layout/multi-track.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multi-voice.png b/packages/alphatab/test-data/visual-tests/layout/multi-voice.png index 8e0eadb9f9..bf7f1c0fbb 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multi-voice.png and b/packages/alphatab/test-data/visual-tests/layout/multi-voice.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multibar-rest-all-tracks.png b/packages/alphatab/test-data/visual-tests/layout/multibar-rest-all-tracks.png index 5767a22fc6..06fb463629 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multibar-rest-all-tracks.png and b/packages/alphatab/test-data/visual-tests/layout/multibar-rest-all-tracks.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multibar-rest-multi-track.png b/packages/alphatab/test-data/visual-tests/layout/multibar-rest-multi-track.png index ea20e2e06e..9973cce5ad 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multibar-rest-multi-track.png and b/packages/alphatab/test-data/visual-tests/layout/multibar-rest-multi-track.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/multibar-rest-single-track.png b/packages/alphatab/test-data/visual-tests/layout/multibar-rest-single-track.png index f7153e9910..b1d93d4e1d 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/multibar-rest-single-track.png and b/packages/alphatab/test-data/visual-tests/layout/multibar-rest-single-track.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/page-layout-5barsperrow.png b/packages/alphatab/test-data/visual-tests/layout/page-layout-5barsperrow.png index 199c1032e2..89759f2efd 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/page-layout-5barsperrow.png and b/packages/alphatab/test-data/visual-tests/layout/page-layout-5barsperrow.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/page-layout-justify-last-row.png b/packages/alphatab/test-data/visual-tests/layout/page-layout-justify-last-row.png index 1874dd5db7..4edbf60777 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/page-layout-justify-last-row.png and b/packages/alphatab/test-data/visual-tests/layout/page-layout-justify-last-row.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/page-layout.png b/packages/alphatab/test-data/visual-tests/layout/page-layout.png index badca4777c..e95f09aca8 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/page-layout.png and b/packages/alphatab/test-data/visual-tests/layout/page-layout.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/single-staff-brackets-hide.png b/packages/alphatab/test-data/visual-tests/layout/single-staff-brackets-hide.png index 79decfd7b4..fa889ed2fd 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/single-staff-brackets-hide.png and b/packages/alphatab/test-data/visual-tests/layout/single-staff-brackets-hide.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/single-staff-brackets-show.png b/packages/alphatab/test-data/visual-tests/layout/single-staff-brackets-show.png index 78f1022f14..7e11a8768d 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/single-staff-brackets-show.png and b/packages/alphatab/test-data/visual-tests/layout/single-staff-brackets-show.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/system-divider.png b/packages/alphatab/test-data/visual-tests/layout/system-divider.png index 89e69a701b..97e8dca02e 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/system-divider.png and b/packages/alphatab/test-data/visual-tests/layout/system-divider.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/system-layout-tex.png b/packages/alphatab/test-data/visual-tests/layout/system-layout-tex.png index 02f5a5777a..46204f81ba 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/system-layout-tex.png and b/packages/alphatab/test-data/visual-tests/layout/system-layout-tex.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/track-names-all-systems-multi.png b/packages/alphatab/test-data/visual-tests/layout/track-names-all-systems-multi.png index 889d50efa2..f092be3534 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/track-names-all-systems-multi.png and b/packages/alphatab/test-data/visual-tests/layout/track-names-all-systems-multi.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/track-names-first-system.png b/packages/alphatab/test-data/visual-tests/layout/track-names-first-system.png index 9f143bf53f..ccff0128fb 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/track-names-first-system.png and b/packages/alphatab/test-data/visual-tests/layout/track-names-first-system.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-all.png b/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-all.png index 7eb673ae5d..a054ff8d3b 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-all.png and b/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-all.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-horizontal.png b/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-horizontal.png index efd1e4b546..358466e354 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-horizontal.png and b/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-horizontal.png differ diff --git a/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-short-name.png b/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-short-name.png index c64f4d5788..86134b6a9e 100644 Binary files a/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-short-name.png and b/packages/alphatab/test-data/visual-tests/layout/track-names-full-name-short-name.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Chord-v2_Eighth_Chord-Automatic-Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Chord-v2_Eighth_Chord-Automatic-Stem.png index 30ce0d728b..3035a03de8 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Chord-v2_Eighth_Chord-Automatic-Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Chord-v2_Eighth_Chord-Automatic-Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Chord-v2_Eighth_Single-Automatic-Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Chord-v2_Eighth_Single-Automatic-Stem.png index 208da9ae23..5e6022307f 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Chord-v2_Eighth_Single-Automatic-Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Chord-v2_Eighth_Single-Automatic-Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Single-v2_Eighth_Single-Automatic-Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Single-v2_Eighth_Single-Automatic-Stem.png index 198f760080..eb81fcd869 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Single-v2_Eighth_Single-Automatic-Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_16th_Single-v2_Eighth_Single-Automatic-Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Automatic_Stem.png index 75ba66a3c1..e273786c11 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Reversed_Stem.png index 02e203ff0d..a4453e60da 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Same_Stem.png index 8e7a50ecb3..aba4ecf8ed 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Chord-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Automatic_Stem.png index e23317ef1c..cc7c9a9f24 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Reversed_Stem.png index 118d29ff64..d3265ce96e 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Same_Stem.png index 2524d95cdd..022c90f40d 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-V2_8th_Flag_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Automatic_Stem.png index 843ab8c479..c505a896f8 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Reversed_Stem.png index ed6a26cca9..57547c55b6 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Same_Stem.png index 091bf64b4b..ee9206b792 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Chord-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Automatic_Stem.png index 2f4be384c3..d600a172f6 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Reversed_Stem.png index 8b8e634d86..98d69a0ddf 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Same_Stem.png index f4203876d0..a3aeed1f4a 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Half_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Automatic_Stem.png index 5e88bcfc40..2c15c14f86 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Reversed_Stem.png index 9472f6e1be..133c869415 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Same_Stem.png index 65d8ed6558..92157bf760 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Chord-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Automatic_Stem.png index 36acc942e1..4032c731af 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Reversed_Stem.png index b3d60cffe6..70eeb6acaf 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Same_Stem.png index 366313dd75..ef1e097a3d 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Chord-v2_Quarter_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Automatic_Stem.png index 077bb0d436..17e38b92ee 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Reversed_Stem.png index 640a2c641d..d49c48990e 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Same_Stem.png index 1d79af0229..316e2cb59d 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_8th_Flag_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Automatic_Stem.png index 1271fe95e7..52108cfd6f 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Reversed_Stem.png index f12f12ca8a..431e313807 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Same_Stem.png index eacc2cbfce..99a3eff872 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Half_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Automatic_Stem.png index d9c219edc7..3484a92090 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Reversed_Stem.png index fb230858b4..2b7efd7a4e 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Same_Stem.png index 334ee7f93c..27a4cc003e 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_8th_Flag_Single-v2_Quarter_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Chord-v2_Eighth_Chord-Automatic-Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Chord-v2_Eighth_Chord-Automatic-Stem.png index e9e7c93356..aafb2ddef6 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Chord-v2_Eighth_Chord-Automatic-Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Chord-v2_Eighth_Chord-Automatic-Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Chord-v2_Eighth_Single-Automatic-Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Chord-v2_Eighth_Single-Automatic-Stem.png index 932a19a0a1..fea496733c 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Chord-v2_Eighth_Single-Automatic-Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Chord-v2_Eighth_Single-Automatic-Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Single-v2_Eighth_Single-Automatic-Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Single-v2_Eighth_Single-Automatic-Stem.png index 9b007fbf59..050667ae2a 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Single-v2_Eighth_Single-Automatic-Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Eighth_Single-v2_Eighth_Single-Automatic-Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Automatic_Stem.png index 228f15cf4d..61fcebf9e6 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Reversed_Stem.png index 5146ac5961..d387291a51 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Same_Stem.png index e74c220149..5a2a3c4e70 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Chord-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Automatic_Stem.png index 6626794ade..dce20e8012 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Reversed_Stem.png index eb378d9c30..66e09c4c72 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Same_Stem.png index 7f2c215fe7..da903c1ce8 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Chord-v2_Full_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Automatic_Stem.png index 7055d3daef..74874a3124 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Reversed_Stem.png index ebcb4d6523..50c625f55d 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Same_Stem.png index 912a24dea2..328678d4f1 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Full_Single-v2_Full_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Automatic_Stem.png index e9668d2c6f..7c0fb5dd13 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Reversed_Stem.png index a784f7de03..91ba81fb81 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Same_Stem.png index 17b4c98778..97e2d77451 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Chord-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Automatic_Stem.png index 65c2184a8f..de329db748 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Reversed_Stem.png index f2c2dbd40d..abf2c2aeeb 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Same_Stem.png index 69146f6fc7..5a16c19952 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Chord-v2_Full_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Automatic_Stem.png index 707cf1fbde..1090e6b4e1 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Reversed_Stem.png index 3afacc82fa..569cf6c07b 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Same_Stem.png index b7107de4f6..bac683c67d 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Half_Single-v2_Full_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Automatic_Stem.png index 98a010a5da..e48ec129fa 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Reversed_Stem.png index 6e68200c64..7f8cc2af87 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Same_Stem.png index 6e68200c64..7f8cc2af87 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-Half_Chord-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Automatic_Stem.png index cff9e976a1..f2a69248e4 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Reversed_Stem.png index 8c5d81f3cb..8ffd183bb6 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Same_Stem.png index ba79692c14..b26cca327b 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Half_Chord-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Automatic_Stem.png index 57e6309681..40294c7701 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Reversed_Stem.png index c9f32d8f22..e35d684762 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Same_Stem.png index 2e879a97ec..4bda560953 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Chord-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Automatic_Stem.png index 6aeb57b01c..5bfdf507dd 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Reversed_Stem.png index f01ee027d9..d943e14699 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Same_Stem.png index 0cc68c9864..6adbc5132f 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Chord-v2_Quarter_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Automatic_Stem.png index 10aa7e52df..65ef4dd80e 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Reversed_Stem.png index 0d402c0b25..595a03882a 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Same_Stem.png index e28af7d81b..6eea57c0d9 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Half_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Automatic_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Automatic_Stem.png index 502557e3df..0826123d67 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Automatic_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Automatic_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Reversed_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Reversed_Stem.png index 9fa561f42d..0b51101520 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Reversed_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Reversed_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Same_Stem.png b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Same_Stem.png index 5ef0575fca..85d1e85c4e 100644 Binary files a/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Same_Stem.png and b/packages/alphatab/test-data/visual-tests/multivoice/v1_Quarter_Single-v2_Quarter_Single-Same_Stem.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/accidentals-advanced-alphatex.png b/packages/alphatab/test-data/visual-tests/music-notation/accidentals-advanced-alphatex.png index 364faf93b2..7f52a10544 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/accidentals-advanced-alphatex.png and b/packages/alphatab/test-data/visual-tests/music-notation/accidentals-advanced-alphatex.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/accidentals-advanced.png b/packages/alphatab/test-data/visual-tests/music-notation/accidentals-advanced.png index 0d3942b55d..af24fc198f 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/accidentals-advanced.png and b/packages/alphatab/test-data/visual-tests/music-notation/accidentals-advanced.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/beams-advanced.png b/packages/alphatab/test-data/visual-tests/music-notation/beams-advanced.png index 93a3087052..6615b3088a 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/beams-advanced.png and b/packages/alphatab/test-data/visual-tests/music-notation/beams-advanced.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/brushes-ukulele.png b/packages/alphatab/test-data/visual-tests/music-notation/brushes-ukulele.png index 29ec83a31a..fcdbe9f50b 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/brushes-ukulele.png and b/packages/alphatab/test-data/visual-tests/music-notation/brushes-ukulele.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/brushes.png b/packages/alphatab/test-data/visual-tests/music-notation/brushes.png index 1736fdadf1..5cdef215ee 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/brushes.png and b/packages/alphatab/test-data/visual-tests/music-notation/brushes.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/clefs.png b/packages/alphatab/test-data/visual-tests/music-notation/clefs.png index 248af08a69..1d82f9c052 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/clefs.png and b/packages/alphatab/test-data/visual-tests/music-notation/clefs.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/forced-accidentals.png b/packages/alphatab/test-data/visual-tests/music-notation/forced-accidentals.png index 0c083a2723..6bb73d9e88 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/forced-accidentals.png and b/packages/alphatab/test-data/visual-tests/music-notation/forced-accidentals.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/key-signatures-g2.png b/packages/alphatab/test-data/visual-tests/music-notation/key-signatures-g2.png index 0f4f934855..0e78b8da46 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/key-signatures-g2.png and b/packages/alphatab/test-data/visual-tests/music-notation/key-signatures-g2.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/key-signatures-mixed.png b/packages/alphatab/test-data/visual-tests/music-notation/key-signatures-mixed.png index 78cf470d5f..ebc6efc3a8 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/key-signatures-mixed.png and b/packages/alphatab/test-data/visual-tests/music-notation/key-signatures-mixed.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/key-signatures.png b/packages/alphatab/test-data/visual-tests/music-notation/key-signatures.png index 0f4f934855..0e78b8da46 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/key-signatures.png and b/packages/alphatab/test-data/visual-tests/music-notation/key-signatures.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/notes-rests-beams.png b/packages/alphatab/test-data/visual-tests/music-notation/notes-rests-beams.png index e926353955..12c8c9b9c6 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/notes-rests-beams.png and b/packages/alphatab/test-data/visual-tests/music-notation/notes-rests-beams.png differ diff --git a/packages/alphatab/test-data/visual-tests/music-notation/time-signatures.png b/packages/alphatab/test-data/visual-tests/music-notation/time-signatures.png index 8d43587259..7f5a9f9ef4 100644 Binary files a/packages/alphatab/test-data/visual-tests/music-notation/time-signatures.png and b/packages/alphatab/test-data/visual-tests/music-notation/time-signatures.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/chord-diagrams-off.png b/packages/alphatab/test-data/visual-tests/notation-elements/chord-diagrams-off.png index 773fb6682f..6a960b8b3c 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/chord-diagrams-off.png and b/packages/alphatab/test-data/visual-tests/notation-elements/chord-diagrams-off.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/chord-diagrams-on.png b/packages/alphatab/test-data/visual-tests/notation-elements/chord-diagrams-on.png index ce3af0e0ed..8fd33265ac 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/chord-diagrams-on.png and b/packages/alphatab/test-data/visual-tests/notation-elements/chord-diagrams-on.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/effects-off.png b/packages/alphatab/test-data/visual-tests/notation-elements/effects-off.png index e1f211dfd5..b18c264f67 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/effects-off.png and b/packages/alphatab/test-data/visual-tests/notation-elements/effects-off.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/guitar-tuning-off.png b/packages/alphatab/test-data/visual-tests/notation-elements/guitar-tuning-off.png index a0b5395159..8a1d16c072 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/guitar-tuning-off.png and b/packages/alphatab/test-data/visual-tests/notation-elements/guitar-tuning-off.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/guitar-tuning-on.png b/packages/alphatab/test-data/visual-tests/notation-elements/guitar-tuning-on.png index 9e8ef9ce1d..8feea81c77 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/guitar-tuning-on.png and b/packages/alphatab/test-data/visual-tests/notation-elements/guitar-tuning-on.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/parenthesis-on-tied-bends-off.png b/packages/alphatab/test-data/visual-tests/notation-elements/parenthesis-on-tied-bends-off.png index eb490d6078..2b3d87288e 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/parenthesis-on-tied-bends-off.png and b/packages/alphatab/test-data/visual-tests/notation-elements/parenthesis-on-tied-bends-off.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/parenthesis-on-tied-bends-on.png b/packages/alphatab/test-data/visual-tests/notation-elements/parenthesis-on-tied-bends-on.png index c87ceb637a..b105c06c6f 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/parenthesis-on-tied-bends-on.png and b/packages/alphatab/test-data/visual-tests/notation-elements/parenthesis-on-tied-bends-on.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-album.png b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-album.png index 5725b49088..8f238c6cea 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-album.png and b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-album.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-all.png b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-all.png index 1d7a8fc904..7c63582455 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-all.png and b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-all.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-artist.png b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-artist.png index 6077b83cad..de9dac2d62 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-artist.png and b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-artist.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-copyright.png b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-copyright.png index c764551a6c..33e08aeccb 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-copyright.png and b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-copyright.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-music.png b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-music.png index b5237b314b..ff7ab87015 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-music.png and b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-music.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-subtitle.png b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-subtitle.png index cc1ee1cad2..562775aa33 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-subtitle.png and b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-subtitle.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-title.png b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-title.png index e62e8a8fb0..f098da3619 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-title.png and b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-title.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-words-and-music.png b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-words-and-music.png index d482846903..c6bf96548f 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-words-and-music.png and b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-words-and-music.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-words.png b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-words.png index 31e7623aad..9da592b50e 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/score-info-words.png and b/packages/alphatab/test-data/visual-tests/notation-elements/score-info-words.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/tab-notes-on-tied-bends-off.png b/packages/alphatab/test-data/visual-tests/notation-elements/tab-notes-on-tied-bends-off.png index d82f2e5f80..572fa077a1 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/tab-notes-on-tied-bends-off.png and b/packages/alphatab/test-data/visual-tests/notation-elements/tab-notes-on-tied-bends-off.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/tab-notes-on-tied-bends-on.png b/packages/alphatab/test-data/visual-tests/notation-elements/tab-notes-on-tied-bends-on.png index 5d1af6c03c..a9a85c1a5c 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/tab-notes-on-tied-bends-on.png and b/packages/alphatab/test-data/visual-tests/notation-elements/tab-notes-on-tied-bends-on.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/track-names-off.png b/packages/alphatab/test-data/visual-tests/notation-elements/track-names-off.png index 82645ccbe4..4102bcbc4b 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/track-names-off.png and b/packages/alphatab/test-data/visual-tests/notation-elements/track-names-off.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/track-names-on.png b/packages/alphatab/test-data/visual-tests/notation-elements/track-names-on.png index 8473a2c9ba..e06805539e 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/track-names-on.png and b/packages/alphatab/test-data/visual-tests/notation-elements/track-names-on.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/zeros-on-dive-whammys-off.png b/packages/alphatab/test-data/visual-tests/notation-elements/zeros-on-dive-whammys-off.png index 3bcc7c0689..60d4d5b7d8 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/zeros-on-dive-whammys-off.png and b/packages/alphatab/test-data/visual-tests/notation-elements/zeros-on-dive-whammys-off.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-elements/zeros-on-dive-whammys-on.png b/packages/alphatab/test-data/visual-tests/notation-elements/zeros-on-dive-whammys-on.png index 20d79ce089..0b3ebb45fb 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-elements/zeros-on-dive-whammys-on.png and b/packages/alphatab/test-data/visual-tests/notation-elements/zeros-on-dive-whammys-on.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/accentuations-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/accentuations-default.png index bc32a1b0a5..36880e1c90 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/accentuations-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/accentuations-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/accentuations-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/accentuations-songbook.png index be8dadc823..7a7c61b1fd 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/accentuations-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/accentuations-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/bends-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/bends-default.png index 077c710197..f5737ca67b 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/bends-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/bends-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/bends-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/bends-songbook.png index a0d62f0107..0af2155225 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/bends-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/bends-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/crescendo-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/crescendo-default.png index da7f310bac..de7469617f 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/crescendo-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/crescendo-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/crescendo-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/crescendo-songbook.png index da7f310bac..de7469617f 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/crescendo-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/crescendo-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/dead-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/dead-default.png index ecc9b09722..fac35c8352 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/dead-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/dead-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/dead-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/dead-songbook.png index ecc9b09722..fac35c8352 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/dead-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/dead-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/dynamics-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/dynamics-default.png index 8585a5a570..6a1c889e96 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/dynamics-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/dynamics-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/dynamics-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/dynamics-songbook.png index 8585a5a570..6a1c889e96 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/dynamics-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/dynamics-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/fingering-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/fingering-default.png index 0552d0f109..2bf6ad6daf 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/fingering-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/fingering-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/full-default-large.png b/packages/alphatab/test-data/visual-tests/notation-legend/full-default-large.png index 2fbb8933fc..3454f64264 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/full-default-large.png and b/packages/alphatab/test-data/visual-tests/notation-legend/full-default-large.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/full-default-small.png b/packages/alphatab/test-data/visual-tests/notation-legend/full-default-small.png index 63fbf5b7f8..0a37e5ef53 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/full-default-small.png and b/packages/alphatab/test-data/visual-tests/notation-legend/full-default-small.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/full-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/full-default.png index a8ef7c6a70..fa50b83055 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/full-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/full-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/full-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/full-songbook.png index 2b115d9f08..425c2702ca 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/full-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/full-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/grace-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/grace-default.png index 7380055656..f4a9856c37 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/grace-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/grace-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/grace-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/grace-songbook.png index 68520046ee..c21470b1ba 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/grace-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/grace-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/hammer-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/hammer-default.png index e664c228c9..e96757b267 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/hammer-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/hammer-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/hammer-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/hammer-songbook.png index e664c228c9..e96757b267 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/hammer-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/hammer-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/let-ring-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/let-ring-default.png index 5995a6189b..47772537fa 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/let-ring-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/let-ring-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/mixed-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/mixed-default.png index 9bbd87100d..766fde00af 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/mixed-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/mixed-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/mixed-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/mixed-songbook.png index a38df7421e..e837f37f96 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/mixed-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/mixed-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/pick-stroke-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/pick-stroke-default.png index b222837c7a..a34ea8d021 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/pick-stroke-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/pick-stroke-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/pick-stroke-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/pick-stroke-songbook.png index b222837c7a..a34ea8d021 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/pick-stroke-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/pick-stroke-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-1300.png b/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-1300.png index 2f79c16428..5aa9c6aa0a 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-1300.png and b/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-1300.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-1500.png b/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-1500.png index 5a7667e4e8..0eb089b7fb 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-1500.png and b/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-1500.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-500.png b/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-500.png index f0542dd12c..198645be43 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-500.png and b/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-500.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-800.png b/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-800.png index ff330677d6..9f0b7ebdc2 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-800.png and b/packages/alphatab/test-data/visual-tests/notation-legend/resize-sequence-800.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/slides-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/slides-default.png index bdac33c0fb..3832f94e91 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/slides-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/slides-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/slides-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/slides-songbook.png index bdac33c0fb..3832f94e91 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/slides-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/slides-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/smufl-petaluma-1300.png b/packages/alphatab/test-data/visual-tests/notation-legend/smufl-petaluma-1300.png index 68f3142b16..679c1d1f5d 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/smufl-petaluma-1300.png and b/packages/alphatab/test-data/visual-tests/notation-legend/smufl-petaluma-1300.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/staccatissimo-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/staccatissimo-default.png index 2d197d4f75..66d2ee34f8 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/staccatissimo-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/staccatissimo-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/staccatissimo-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/staccatissimo-songbook.png index 2d197d4f75..66d2ee34f8 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/staccatissimo-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/staccatissimo-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/tap-riff-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/tap-riff-default.png index aed1e9573a..5033cf799b 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/tap-riff-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/tap-riff-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/tap-riff-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/tap-riff-songbook.png index aed1e9573a..5033cf799b 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/tap-riff-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/tap-riff-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/text-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/text-default.png index 3f0472ec80..92f0a8d657 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/text-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/text-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/text-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/text-songbook.png index 3f0472ec80..92f0a8d657 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/text-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/text-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/tied-note-accidentals-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/tied-note-accidentals-default.png index 5fd16ae8e3..af9e22b027 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/tied-note-accidentals-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/tied-note-accidentals-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/tied-note-accidentals-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/tied-note-accidentals-songbook.png index bfe6b1baf7..aa91e5032c 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/tied-note-accidentals-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/tied-note-accidentals-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/trill-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/trill-default.png index ca9391d1ac..ed533ca1c2 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/trill-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/trill-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/trill-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/trill-songbook.png index ca9391d1ac..ed533ca1c2 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/trill-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/trill-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/triplet-feel-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/triplet-feel-default.png index 445f308a27..9ebd870ff5 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/triplet-feel-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/triplet-feel-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/triplet-feel-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/triplet-feel-songbook.png index 445f308a27..9ebd870ff5 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/triplet-feel-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/triplet-feel-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/wah-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/wah-default.png index 265219896e..fe9d39709d 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/wah-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/wah-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/wah-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/wah-songbook.png index 265219896e..fe9d39709d 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/wah-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/wah-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/whammy-default.png b/packages/alphatab/test-data/visual-tests/notation-legend/whammy-default.png index 5ee2faf3b1..bcd1df2daa 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/whammy-default.png and b/packages/alphatab/test-data/visual-tests/notation-legend/whammy-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/notation-legend/whammy-songbook.png b/packages/alphatab/test-data/visual-tests/notation-legend/whammy-songbook.png index 21bcc1a954..2f73b85e33 100644 Binary files a/packages/alphatab/test-data/visual-tests/notation-legend/whammy-songbook.png and b/packages/alphatab/test-data/visual-tests/notation-legend/whammy-songbook.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-beat-text-end-overflow.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-beat-text-end-overflow.png index 9935c3e85a..ef58494a06 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-beat-text-end-overflow.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-beat-text-end-overflow.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-cross-bar-end-and-start.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-cross-bar-end-and-start.png index 006e3f86a3..0cbcdae0e3 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-cross-bar-end-and-start.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-cross-bar-end-and-start.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-end-of-system.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-end-of-system.png index ab9b9593b3..7aa8356953 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-end-of-system.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-end-of-system.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-lyrics-tight-bar.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-lyrics-tight-bar.png index 040b7d18de..1ac871065e 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-lyrics-tight-bar.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-lyrics-tight-bar.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-band-no-spurious-overlap-control.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-band-no-spurious-overlap-control.png index 6f2448373b..ada31f296d 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-band-no-spurious-overlap-control.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-band-no-spurious-overlap-control.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-band-no-spurious-overlap.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-band-no-spurious-overlap.png index 1784fe9d01..afa9be5a04 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-band-no-spurious-overlap.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-band-no-spurious-overlap.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-staff-aggregation.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-staff-aggregation.png index 7276924a9e..ab7a41217b 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-staff-aggregation.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-multi-staff-aggregation.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-non-overlapping-lyrics-no-widening.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-non-overlapping-lyrics-no-widening.png index 76b78609bd..fb9b8ecba2 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-non-overlapping-lyrics-no-widening.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-non-overlapping-lyrics-no-widening.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-reconciles-on-resize.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-reconciles-on-resize.png index d5fbf17e9f..346aef29ce 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-reconciles-on-resize.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-reconciles-on-resize.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-single-rod-internal-overhang.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-single-rod-internal-overhang.png index f52b3aca3a..ed2d54961f 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-single-rod-internal-overhang.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-single-rod-internal-overhang.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-single-rod-no-stretch.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-single-rod-no-stretch.png index 636e35faca..be5341b7c7 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-single-rod-no-stretch.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-single-rod-no-stretch.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-sparse-lyrics.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-sparse-lyrics.png index b848b5bcdb..9a61802316 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-sparse-lyrics.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-sparse-lyrics.png differ diff --git a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-text-plus-lyric-same-beat.png b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-text-plus-lyric-same-beat.png index bdeef3f8f2..fba46ccb95 100644 Binary files a/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-text-plus-lyric-same-beat.png and b/packages/alphatab/test-data/visual-tests/overlay-rod-spacing/overlay-rod-text-plus-lyric-same-beat.png differ diff --git a/packages/alphatab/test-data/visual-tests/prefix-overhead/page-automatic-ignores-displayscale.png b/packages/alphatab/test-data/visual-tests/prefix-overhead/page-automatic-ignores-displayscale.png index 6fa74e1aa1..46fa3d72a9 100644 Binary files a/packages/alphatab/test-data/visual-tests/prefix-overhead/page-automatic-ignores-displayscale.png and b/packages/alphatab/test-data/visual-tests/prefix-overhead/page-automatic-ignores-displayscale.png differ diff --git a/packages/alphatab/test-data/visual-tests/prefix-overhead/page-automatic-prefix-system-start.png b/packages/alphatab/test-data/visual-tests/prefix-overhead/page-automatic-prefix-system-start.png index 7e2a40ec3a..221654a2a4 100644 Binary files a/packages/alphatab/test-data/visual-tests/prefix-overhead/page-automatic-prefix-system-start.png and b/packages/alphatab/test-data/visual-tests/prefix-overhead/page-automatic-prefix-system-start.png differ diff --git a/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-authored-scale-with-prefix.png b/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-authored-scale-with-prefix.png index 31124e55e9..f1e0443b65 100644 Binary files a/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-authored-scale-with-prefix.png and b/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-authored-scale-with-prefix.png differ diff --git a/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-prefix-midline-keysig-change.png b/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-prefix-midline-keysig-change.png index 7c29d5d16a..af3bb46b89 100644 Binary files a/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-prefix-midline-keysig-change.png and b/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-prefix-midline-keysig-change.png differ diff --git a/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-prefix-system-start.png b/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-prefix-system-start.png index 16b3783465..593d352cd3 100644 Binary files a/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-prefix-system-start.png and b/packages/alphatab/test-data/visual-tests/prefix-overhead/parchment-prefix-system-start.png differ diff --git a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-alto-F3.png b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-alto-F3.png index 955a08662f..75f584449a 100644 Binary files a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-alto-F3.png and b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-alto-F3.png differ diff --git a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-bass-G2.png b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-bass-G2.png index 3dd86419f9..2e9d2fe033 100644 Binary files a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-bass-G2.png and b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-bass-G2.png differ diff --git a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-default.png b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-default.png index 652f539a46..7fbe3ce598 100644 Binary files a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-default.png and b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-default.png differ diff --git a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-1.png b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-1.png index c864b502c2..6f51a33658 100644 Binary files a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-1.png and b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-1.png differ diff --git a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-2.png b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-2.png index 26c41f1e27..139dd7dba7 100644 Binary files a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-2.png and b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-2.png differ diff --git a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-3.png b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-3.png index 3a552c60f6..9f545a2e8f 100644 Binary files a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-3.png and b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-3.png differ diff --git a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-4.png b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-4.png index 59e6cb8e67..8fd62a9e27 100644 Binary files a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-4.png and b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-staff-lines-4.png differ diff --git a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-tenor-D3.png b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-tenor-D3.png index c57e138136..d83df46b3a 100644 Binary files a/packages/alphatab/test-data/visual-tests/rest-position/rest-position-tenor-D3.png and b/packages/alphatab/test-data/visual-tests/rest-position/rest-position-tenor-D3.png differ diff --git a/packages/alphatab/test-data/visual-tests/skyline-coverage/mixed-staves.png b/packages/alphatab/test-data/visual-tests/skyline-coverage/mixed-staves.png index a2db2bc1b4..4deec7aa47 100644 Binary files a/packages/alphatab/test-data/visual-tests/skyline-coverage/mixed-staves.png and b/packages/alphatab/test-data/visual-tests/skyline-coverage/mixed-staves.png differ diff --git a/packages/alphatab/test-data/visual-tests/skyline-coverage/numbered-notation.png b/packages/alphatab/test-data/visual-tests/skyline-coverage/numbered-notation.png index 7f58aa74a5..9bf4c1c6ce 100644 Binary files a/packages/alphatab/test-data/visual-tests/skyline-coverage/numbered-notation.png and b/packages/alphatab/test-data/visual-tests/skyline-coverage/numbered-notation.png differ diff --git a/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w1300.png b/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w1300.png index 513d568f1e..38704ebad2 100644 Binary files a/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w1300.png and b/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w1300.png differ diff --git a/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w500.png b/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w500.png index 01fa57e477..49e7ca8555 100644 Binary files a/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w500.png and b/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w500.png differ diff --git a/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w800.png b/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w800.png index 6a4f143fa3..114a3baadd 100644 Binary files a/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w800.png and b/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/mixed-content-w800.png differ diff --git a/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/numbered-notation-w1300.png b/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/numbered-notation-w1300.png index 11d592a4c3..fb739da478 100644 Binary files a/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/numbered-notation-w1300.png and b/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/numbered-notation-w1300.png differ diff --git a/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/numbered-notation-w700.png b/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/numbered-notation-w700.png index cbfaed84ee..d97bb4984f 100644 Binary files a/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/numbered-notation-w700.png and b/packages/alphatab/test-data/visual-tests/skyline-resize-coverage/numbered-notation-w700.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-notes/beaming-anacrusis.png b/packages/alphatab/test-data/visual-tests/special-notes/beaming-anacrusis.png index 69bfd58e11..7276df7d37 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-notes/beaming-anacrusis.png and b/packages/alphatab/test-data/visual-tests/special-notes/beaming-anacrusis.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-notes/full-bar-notes-rests.png b/packages/alphatab/test-data/visual-tests/special-notes/full-bar-notes-rests.png index 0c36b4c4ab..0d0cb5fb49 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-notes/full-bar-notes-rests.png and b/packages/alphatab/test-data/visual-tests/special-notes/full-bar-notes-rests.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-notes/ghost-notes.png b/packages/alphatab/test-data/visual-tests/special-notes/ghost-notes.png index a448c40c08..103556379f 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-notes/ghost-notes.png and b/packages/alphatab/test-data/visual-tests/special-notes/ghost-notes.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-1300-2.png b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-1300-2.png index 76eb0efa17..acc9a89753 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-1300-2.png and b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-1300-2.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-1300.png b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-1300.png index 695c22138a..acc9a89753 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-1300.png and b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-1300.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-800.png b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-800.png index f4eb3d38d1..dbbabe2bd4 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-800.png and b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced-800.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced.png b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced.png index 695c22138a..acc9a89753 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced.png and b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-advanced.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-alignment.png b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-alignment.png index 606aaa3a10..7fc0354477 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-alignment.png and b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes-alignment.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes.png b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes.png index ccb544eaea..810a8b329e 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-notes/grace-notes.png and b/packages/alphatab/test-data/visual-tests/special-notes/grace-notes.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-notes/tied-notes.png b/packages/alphatab/test-data/visual-tests/special-notes/tied-notes.png index df425795d5..94d1d38ce5 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-notes/tied-notes.png and b/packages/alphatab/test-data/visual-tests/special-notes/tied-notes.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-tracks/drum-tabs.png b/packages/alphatab/test-data/visual-tests/special-tracks/drum-tabs.png index 73cfad8e34..f7a7a06f80 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-tracks/drum-tabs.png and b/packages/alphatab/test-data/visual-tests/special-tracks/drum-tabs.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-tracks/grand-staff.png b/packages/alphatab/test-data/visual-tests/special-tracks/grand-staff.png index 794a96626b..67f500fe8b 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-tracks/grand-staff.png and b/packages/alphatab/test-data/visual-tests/special-tracks/grand-staff.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-tracks/numbered-durations.png b/packages/alphatab/test-data/visual-tests/special-tracks/numbered-durations.png index 6b8919a78b..bc472d1b21 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-tracks/numbered-durations.png and b/packages/alphatab/test-data/visual-tests/special-tracks/numbered-durations.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-tracks/numbered-tuplets.png b/packages/alphatab/test-data/visual-tests/special-tracks/numbered-tuplets.png index 5e1a059232..222ec14aae 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-tracks/numbered-tuplets.png and b/packages/alphatab/test-data/visual-tests/special-tracks/numbered-tuplets.png differ diff --git a/packages/alphatab/test-data/visual-tests/special-tracks/numbered.png b/packages/alphatab/test-data/visual-tests/special-tracks/numbered.png index 70ecf8970c..ff42ec3d3a 100644 Binary files a/packages/alphatab/test-data/visual-tests/special-tracks/numbered.png and b/packages/alphatab/test-data/visual-tests/special-tracks/numbered.png differ diff --git a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-all-four.png b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-all-four.png index 16b0f0fdd6..bda73458a2 100644 Binary files a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-all-four.png and b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-all-four.png differ diff --git a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-numbered-only.png b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-numbered-only.png index 5b1bf3c685..820f5c5ab8 100644 Binary files a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-numbered-only.png and b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-numbered-only.png differ diff --git a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-score-tab.png b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-score-tab.png index 368bc18333..06d2447520 100644 Binary files a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-score-tab.png and b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-score-tab.png differ diff --git a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-slash-numbered.png b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-slash-numbered.png index 7f838678f4..dd83926a1b 100644 Binary files a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-slash-numbered.png and b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-slash-numbered.png differ diff --git a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-tab-only.png b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-tab-only.png index fa60b23eef..24cb24e96c 100644 Binary files a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-tab-only.png and b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-tab-only.png differ diff --git a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-tab-slash.png b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-tab-slash.png index 319b79200d..5926ab14e6 100644 Binary files a/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-tab-slash.png and b/packages/alphatab/test-data/visual-tests/staff-display-config/cascade-tab-slash.png differ diff --git a/packages/alphatab/test-data/visual-tests/staff-display-config/override-l1-ks-change-hide.png b/packages/alphatab/test-data/visual-tests/staff-display-config/override-l1-ks-change-hide.png index a293b204b0..c3e959b9d3 100644 Binary files a/packages/alphatab/test-data/visual-tests/staff-display-config/override-l1-ks-change-hide.png and b/packages/alphatab/test-data/visual-tests/staff-display-config/override-l1-ks-change-hide.png differ diff --git a/packages/alphatab/test-data/visual-tests/staff-display-config/override-l1-ts-hide-firstbar.png b/packages/alphatab/test-data/visual-tests/staff-display-config/override-l1-ts-hide-firstbar.png index eef4fa8de2..49fe192c88 100644 Binary files a/packages/alphatab/test-data/visual-tests/staff-display-config/override-l1-ts-hide-firstbar.png and b/packages/alphatab/test-data/visual-tests/staff-display-config/override-l1-ts-hide-firstbar.png differ diff --git a/packages/alphatab/test-data/visual-tests/staff-display-config/override-l2-tab-ts-hide.png b/packages/alphatab/test-data/visual-tests/staff-display-config/override-l2-tab-ts-hide.png index 5790f6cc39..5a853b2d1e 100644 Binary files a/packages/alphatab/test-data/visual-tests/staff-display-config/override-l2-tab-ts-hide.png and b/packages/alphatab/test-data/visual-tests/staff-display-config/override-l2-tab-ts-hide.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-duration-proportions.png b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-duration-proportions.png index b370862913..9a7ab8e331 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-duration-proportions.png and b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-duration-proportions.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-rest-bar-not-ballooning.png b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-rest-bar-not-ballooning.png index 607293cf29..b93532f156 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-rest-bar-not-ballooning.png and b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-rest-bar-not-ballooning.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-spacing-ratio-loose.png b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-spacing-ratio-loose.png index 5fc932fd27..1a0b20066a 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-spacing-ratio-loose.png and b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-spacing-ratio-loose.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-spacing-ratio-tight.png b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-spacing-ratio-tight.png index c5b1454159..9be217afd3 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-spacing-ratio-tight.png and b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-spacing-ratio-tight.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-stretch-force-orthogonal-high.png b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-stretch-force-orthogonal-high.png index 46c3e2ad83..31a4e981e2 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-stretch-force-orthogonal-high.png and b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-stretch-force-orthogonal-high.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-stretch-force-orthogonal-low.png b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-stretch-force-orthogonal-low.png index 106ff02c75..e72432af09 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/power-law-stretch-force-orthogonal-low.png and b/packages/alphatab/test-data/visual-tests/system-spacing/power-law-stretch-force-orthogonal-low.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-aligns-same-duration-notes.png b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-aligns-same-duration-notes.png index 59bff34826..af93978058 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-aligns-same-duration-notes.png and b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-aligns-same-duration-notes.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-horizontal-preserves-local.png b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-horizontal-preserves-local.png index 5602b37712..b9dc578738 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-horizontal-preserves-local.png and b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-horizontal-preserves-local.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-multiple-short-arrivals.png b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-multiple-short-arrivals.png index 2f184b3aaa..e652969ad7 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-multiple-short-arrivals.png and b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-multiple-short-arrivals.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-page-automatic.png b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-page-automatic.png index 9116e8d94e..774360578c 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-page-automatic.png and b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-page-automatic.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-per-system-isolation.png b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-per-system-isolation.png index 05b8896705..1a3e276d05 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-per-system-isolation.png and b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-per-system-isolation.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-reconciles-on-resize.png b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-reconciles-on-resize.png index 70cde59659..b8819a2e36 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-reconciles-on-resize.png and b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-reconciles-on-resize.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-shorter-note-first.png b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-shorter-note-first.png index a6d57be037..61fb191fbc 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-shorter-note-first.png and b/packages/alphatab/test-data/visual-tests/system-spacing/shared-min-duration-shorter-note-first.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/stretch-formula-duration-spacing.png b/packages/alphatab/test-data/visual-tests/system-spacing/stretch-formula-duration-spacing.png index 488c276bcf..a2ebf7e179 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/stretch-formula-duration-spacing.png and b/packages/alphatab/test-data/visual-tests/system-spacing/stretch-formula-duration-spacing.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/system-min-duration-grace-notes-excluded.png b/packages/alphatab/test-data/visual-tests/system-spacing/system-min-duration-grace-notes-excluded.png index b6cd63d8fc..ea06d22e64 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/system-min-duration-grace-notes-excluded.png and b/packages/alphatab/test-data/visual-tests/system-spacing/system-min-duration-grace-notes-excluded.png differ diff --git a/packages/alphatab/test-data/visual-tests/system-spacing/system-min-duration-multi-track-aggregation.png b/packages/alphatab/test-data/visual-tests/system-spacing/system-min-duration-multi-track-aggregation.png index 36018023bd..16d6fe9c63 100644 Binary files a/packages/alphatab/test-data/visual-tests/system-spacing/system-min-duration-multi-track-aggregation.png and b/packages/alphatab/test-data/visual-tests/system-spacing/system-min-duration-multi-track-aggregation.png differ diff --git a/packages/alphatab/test-data/visual-tests/systems-layout/bars-adjusted-automatic.png b/packages/alphatab/test-data/visual-tests/systems-layout/bars-adjusted-automatic.png index f03e678f9e..a0dd1c42c1 100644 Binary files a/packages/alphatab/test-data/visual-tests/systems-layout/bars-adjusted-automatic.png and b/packages/alphatab/test-data/visual-tests/systems-layout/bars-adjusted-automatic.png differ diff --git a/packages/alphatab/test-data/visual-tests/systems-layout/bars-adjusted-model.png b/packages/alphatab/test-data/visual-tests/systems-layout/bars-adjusted-model.png index fa1fefbad9..dabb791242 100644 Binary files a/packages/alphatab/test-data/visual-tests/systems-layout/bars-adjusted-model.png and b/packages/alphatab/test-data/visual-tests/systems-layout/bars-adjusted-model.png differ diff --git a/packages/alphatab/test-data/visual-tests/systems-layout/horizontal-fixed-sizes-single-track.png b/packages/alphatab/test-data/visual-tests/systems-layout/horizontal-fixed-sizes-single-track.png index 7ba6652eaf..53c8c78c4f 100644 Binary files a/packages/alphatab/test-data/visual-tests/systems-layout/horizontal-fixed-sizes-single-track.png and b/packages/alphatab/test-data/visual-tests/systems-layout/horizontal-fixed-sizes-single-track.png differ diff --git a/packages/alphatab/test-data/visual-tests/systems-layout/horizontal-fixed-sizes-two-tracks.png b/packages/alphatab/test-data/visual-tests/systems-layout/horizontal-fixed-sizes-two-tracks.png index bb63b9de6c..17dd8c4d3f 100644 Binary files a/packages/alphatab/test-data/visual-tests/systems-layout/horizontal-fixed-sizes-two-tracks.png and b/packages/alphatab/test-data/visual-tests/systems-layout/horizontal-fixed-sizes-two-tracks.png differ diff --git a/packages/alphatab/test-data/visual-tests/systems-layout/multi-track-single-track.png b/packages/alphatab/test-data/visual-tests/systems-layout/multi-track-single-track.png index 5bac441ddd..387bfcfd50 100644 Binary files a/packages/alphatab/test-data/visual-tests/systems-layout/multi-track-single-track.png and b/packages/alphatab/test-data/visual-tests/systems-layout/multi-track-single-track.png differ diff --git a/packages/alphatab/test-data/visual-tests/systems-layout/multi-track-two-tracks.png b/packages/alphatab/test-data/visual-tests/systems-layout/multi-track-two-tracks.png index 34ff79b8da..7683304ce2 100644 Binary files a/packages/alphatab/test-data/visual-tests/systems-layout/multi-track-two-tracks.png and b/packages/alphatab/test-data/visual-tests/systems-layout/multi-track-two-tracks.png differ diff --git a/packages/alphatab/test-data/visual-tests/systems-layout/resized.png b/packages/alphatab/test-data/visual-tests/systems-layout/resized.png index 18bb779aec..ae5fa82aec 100644 Binary files a/packages/alphatab/test-data/visual-tests/systems-layout/resized.png and b/packages/alphatab/test-data/visual-tests/systems-layout/resized.png differ diff --git a/packages/alphatab/test/visualTests/features/EffectsAndAnnotations.test.ts b/packages/alphatab/test/visualTests/features/EffectsAndAnnotations.test.ts index 8a9e641e49..f83f384426 100644 --- a/packages/alphatab/test/visualTests/features/EffectsAndAnnotations.test.ts +++ b/packages/alphatab/test/visualTests/features/EffectsAndAnnotations.test.ts @@ -648,6 +648,21 @@ describe('EffectsAndAnnotationsTests', () => { '\\voice :8 5.1{h} 7.1 5.1{h} 7.1 r.2 | \\voice :8 5.4{h} 7.4 5.4{h} 7.4 r.2 |' )); + // Labels sit above the staff, centered between the beats of their segment. + // across a bar line: centered between the beats in both bars + it('labels-across-bar', async () => await test('labels-across-bar', ':2 r 5.3{h} | 7.3{h} 5.3')); + // across a system break: on the first system, centered up to the system end; nothing on the continuation. + // The pull-off crosses the break, the hammer-on stays on the first system; mixed kinds stack. + it('labels-system-break', async () => { + const settings = new Settings(); + settings.display.layoutMode = LayoutMode.Parchment; + await VisualTestHelper.runVisualTestTex( + '\\track { defaultSystemsLayout 1 } :4 r r 5.3{h} 7.3{h} | 5.3 r r (5.1{h} 5.2{sl}) | (7.1 9.2) r r r', + 'test-data/visual-tests/effects-and-annotations/hopo-arcs-labels-system-break.png', + settings + ); + }); + // Score-only — confirms ScoreSlurGlyph paints labels even // without the tab staff present. it('score-only', async () =>