@@ -854,6 +854,45 @@ export class Stave extends Element {
854
854
}
855
855
856
856
static formatBegModifiers ( staves : Stave [ ] ) : void {
857
+ const adjustCategoryStartX = ( category : Category ) => {
858
+ let minStartX = 0 ;
859
+ // Calculate min start X for the category
860
+ staves . forEach ( ( stave ) => {
861
+ const modifiers = stave . getModifiers ( StaveModifierPosition . BEGIN , category ) ;
862
+ // Consider only the first instance
863
+ if ( modifiers . length > 0 && modifiers [ 0 ] . getX ( ) > minStartX ) minStartX = modifiers [ 0 ] . getX ( ) ;
864
+ } ) ;
865
+ let adjustX = 0 ;
866
+ staves . forEach ( ( stave ) => {
867
+ adjustX = 0 ;
868
+ const modifiers = stave . getModifiers ( StaveModifierPosition . BEGIN , category ) ;
869
+ // Calculate adjustement required for the stave
870
+ modifiers . forEach ( ( modifier ) => {
871
+ if ( minStartX - modifier . getX ( ) > adjustX ) adjustX = minStartX - modifier . getX ( ) ;
872
+ } ) ;
873
+ const allModifiers = stave . getModifiers ( StaveModifierPosition . BEGIN ) ;
874
+ let bAdjust = false ;
875
+ // Apply adjustment to all the modifiers in and beyond the category
876
+ allModifiers . forEach ( ( modifier ) => {
877
+ if ( modifier . getCategory ( ) === category ) bAdjust = true ;
878
+ if ( bAdjust && adjustX > 0 ) modifier . setX ( modifier . getX ( ) + adjustX ) ;
879
+ } ) ;
880
+ // Apply adjustment also to note start.
881
+ stave . setNoteStartX ( stave . getNoteStartX ( ) + adjustX ) ;
882
+ } ) ;
883
+ } ;
884
+
885
+ // Make sure that staves are formatted
886
+ staves . forEach ( ( stave ) => {
887
+ if ( ! stave . formatted ) stave . format ( ) ;
888
+ } ) ;
889
+ // Align Clefs
890
+ adjustCategoryStartX ( Category . Clef ) ;
891
+ // Align key signatures
892
+ adjustCategoryStartX ( Category . KeySignature ) ;
893
+ // Align time signatures
894
+ adjustCategoryStartX ( Category . TimeSignature ) ;
895
+
857
896
let maxX = 0 ;
858
897
// align note start
859
898
staves . forEach ( ( stave ) => {
@@ -878,20 +917,5 @@ export class Stave extends Element {
878
917
if ( ( modifier as Barline ) . getType ( ) == BarlineType . REPEAT_BEGIN ) modifier . setX ( maxX ) ;
879
918
} ) ;
880
919
} ) ;
881
-
882
- maxX = 0 ;
883
- // Align time signatures
884
- staves . forEach ( ( stave ) => {
885
- const modifiers = stave . getModifiers ( StaveModifierPosition . BEGIN , Category . TimeSignature ) ;
886
- modifiers . forEach ( ( modifier ) => {
887
- if ( modifier . getX ( ) > maxX ) maxX = modifier . getX ( ) ;
888
- } ) ;
889
- } ) ;
890
- staves . forEach ( ( stave ) => {
891
- const modifiers = stave . getModifiers ( StaveModifierPosition . BEGIN , Category . TimeSignature ) ;
892
- modifiers . forEach ( ( modifier ) => {
893
- modifier . setX ( maxX ) ;
894
- } ) ;
895
- } ) ;
896
920
}
897
921
}
0 commit comments