Skip to content

Commit

Permalink
Merge pull request #194 from stringsync/spanners
Browse files Browse the repository at this point in the history
Fix spanners extra width calculation
  • Loading branch information
jaredjj3 authored Jan 3, 2024
2 parents cff66f3 + 40bc445 commit dcf9c52
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 10 deletions.
6 changes: 1 addition & 5 deletions src/rendering/chorus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,7 @@ export class Chorus {
);

const vfFormatter = new vexflow.Formatter();
return (
vfFormatter.joinVoices(vfVoices).preCalculateMinTotalWidth(vfVoices) +
spanners.getPadding() +
this.config.VOICE_PADDING
);
return vfFormatter.joinVoices(vfVoices).preCalculateMinTotalWidth(vfVoices) + this.config.VOICE_PADDING;
}
return 0;
}
Expand Down
6 changes: 5 additions & 1 deletion src/rendering/measurefragment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,11 @@ export class MeasureFragment {
return 0;
}

return vfFormatter.preCalculateMinTotalWidth(vfVoices) + spanners.getPadding() + this.config.VOICE_PADDING;
return (
vfFormatter.preCalculateMinTotalWidth(vfVoices) +
spanners.getExtraMeasureFragmentWidth(opts.address) +
this.config.VOICE_PADDING
);
}

private getNonVoiceWidth(): number {
Expand Down
5 changes: 3 additions & 2 deletions src/rendering/spanners.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { OctaveShift, OctaveShiftRendering } from './octaveshift';
import { SpannerData } from './types';
import { SpannerMap } from './spannermap';
import * as util from '@/util';
import { Address } from './address';

/** The result of rendering spanners. */
export type SpannersRendering = {
Expand All @@ -32,8 +33,8 @@ export class Spanners {
private octaveShifts = SpannerMap.keyless<OctaveShift>();

/** Returns the additional padding needed to accommodate some spanners. */
getPadding(): number {
return util.sum(this.tuplets.values().map((tuplet) => tuplet.getPadding()));
getExtraMeasureFragmentWidth(address: Address<'measurefragment'>): number {
return util.sum(this.tuplets.values().map((tuplet) => tuplet.getExtraMeasureFragmentWidth(address)));
}

/** Extracts and processes all the spanners within the given data. */
Expand Down
13 changes: 11 additions & 2 deletions src/rendering/tuplet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import * as util from '@/util';
import * as conversions from './conversions';
import { SpannerData } from './types';
import { SpannerMap } from './spannermap';
import { Address } from './address';

const TUPLET_PADDING_PER_NOTE = 10;

Expand All @@ -18,6 +19,7 @@ export type TupletRendering = {
export type TupletFragment =
| {
type: 'start';
address: Address<'voice'>;
vexflow: {
note: vexflow.Note;
location: vexflow.TupletLocation;
Expand All @@ -26,6 +28,7 @@ export type TupletFragment =
}
| {
type: 'unspecified' | 'stop';
address: Address<'voice'>;
vexflow: {
note: vexflow.Note;
};
Expand Down Expand Up @@ -59,6 +62,7 @@ export class Tuplet {
Tuplet.commit(
{
type: 'start',
address: data.address,
vexflow: {
location: conversions.fromAboveBelowToTupletLocation(tuplet.getPlacement()),
note: data.vexflow.staveNote,
Expand All @@ -72,6 +76,7 @@ export class Tuplet {
Tuplet.commit(
{
type: 'stop',
address: data.address,
vexflow: {
note: data.vexflow.staveNote,
},
Expand All @@ -83,6 +88,7 @@ export class Tuplet {
Tuplet.commit(
{
type: 'unspecified',
address: data.address,
vexflow: {
note: data.vexflow.staveNote,
},
Expand Down Expand Up @@ -117,8 +123,11 @@ export class Tuplet {
}

/** Returns the padding required by the tuplet based on its size. */
getPadding(): number {
return this.fragments.length * TUPLET_PADDING_PER_NOTE;
getExtraMeasureFragmentWidth(address: Address<'measurefragment'>): number {
return (
this.fragments.filter((fragment) => fragment.address.isMemberOf('measurefragment', address)).length *
TUPLET_PADDING_PER_NOTE
);
}

/** Renders a tuplet. */
Expand Down

0 comments on commit dcf9c52

Please sign in to comment.