From 7ec92f55c436de679fcb77056ce26dd40cd7a405 Mon Sep 17 00:00:00 2001 From: James Mizen Date: Thu, 12 Sep 2024 17:05:02 +0100 Subject: [PATCH 01/10] Fix verse above layout --- src/engraving/rendering/dev/lyricslayout.cpp | 7 +++---- vtest/scores/lyrics-22.mscz | Bin 0 -> 20489 bytes 2 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 vtest/scores/lyrics-22.mscz diff --git a/src/engraving/rendering/dev/lyricslayout.cpp b/src/engraving/rendering/dev/lyricslayout.cpp index 63627ab667e28..d8b89109de636 100644 --- a/src/engraving/rendering/dev/lyricslayout.cpp +++ b/src/engraving/rendering/dev/lyricslayout.cpp @@ -609,18 +609,17 @@ void LyricsLayout::setDefaultPositions(staff_idx_t staffIdx, const LyricsVersesM double staffHeight = ctx.dom().staff(staffIdx)->staffHeight(); double lyricsLineHeightFactor = ctx.conf().styleD(Sid::lyricsLineHeight); - int totVersesAbove = int(lyricsVersesAbove.size()) - 1; - + int maxVerseAbove = !lyricsVersesAbove.empty() ? lyricsVersesAbove.crbegin()->first : 0; for (auto& pair : lyricsVersesAbove) { int verse = pair.first; const LyricsVerse& lyricsVerse = pair.second; for (Lyrics* lyrics : lyricsVerse.lyrics()) { - double y = -(totVersesAbove - verse) * lyrics->lineSpacing() * lyricsLineHeightFactor; + double y = -(maxVerseAbove - verse) * lyrics->lineSpacing() * lyricsLineHeightFactor; lyrics->setYRelativeToStaff(y); } for (LyricsLineSegment* lyricsLineSegment : lyricsVerse.lines()) { Lyrics* lyrics = lyricsLineSegment->lyricsLine()->lyrics(); - double y = -(totVersesAbove - verse) * lyrics->lineSpacing() * lyricsLineHeightFactor; + double y = -(maxVerseAbove - verse) * lyrics->lineSpacing() * lyricsLineHeightFactor; lyricsLineSegment->move(PointF(0.0, y + lyricsLineSegment->baseLineShift())); } } diff --git a/vtest/scores/lyrics-22.mscz b/vtest/scores/lyrics-22.mscz new file mode 100644 index 0000000000000000000000000000000000000000..04b6d0007f7d0b612bf975eb0715a5b4ccbc4300 GIT binary patch literal 20489 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 Z@PAjwgZq@AzuSRGDT1UU5BT4;{{Wz;6X^f| literal 0 HcmV?d00001 From c14cdc2660cbc8e3e55c8add41082750ccfbe1ba Mon Sep 17 00:00:00 2001 From: James Mizen Date: Fri, 13 Sep 2024 09:56:05 +0100 Subject: [PATCH 02/10] Fix lyric collisions --- src/engraving/rendering/dev/lyricslayout.cpp | 12 +++++++++--- vtest/scores/lyrics-23.mscz | Bin 0 -> 21094 bytes 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 vtest/scores/lyrics-23.mscz diff --git a/src/engraving/rendering/dev/lyricslayout.cpp b/src/engraving/rendering/dev/lyricslayout.cpp index d8b89109de636..cd7dab843f83a 100644 --- a/src/engraving/rendering/dev/lyricslayout.cpp +++ b/src/engraving/rendering/dev/lyricslayout.cpp @@ -650,10 +650,13 @@ void LyricsLayout::checkCollisionsWithStaffElements(System* system, staff_idx_t SkylineLine& staffSkylineNorth = systemStaff->skyline().north(); SkylineLine& staffSkylineSouth = systemStaff->skyline().south(); - int maxVerseAbove = int(lyricsVersesAbove.size()); - int maxVerseBelow = int(lyricsVersesBelow.size()); + int maxVerseAbove = !lyricsVersesAbove.empty() ? lyricsVersesAbove.crbegin()->first : 0; + int maxVerseBelow = !lyricsVersesBelow.empty() ? lyricsVersesBelow.crbegin()->first : 0; - for (int verse = maxVerseAbove - 1; verse >= 0; --verse) { + for (int verse = maxVerseAbove; verse >= 0; --verse) { + if (lyricsVersesAbove.count(verse) == 0) { + continue; + } SkylineLine verseSkyline = createSkylineForVerse(verse, false, lyricsVersesAbove, system); double minDistance = -verseSkyline.minDistance(staffSkylineNorth); if (minDistance < lyricsMinDist) { @@ -663,6 +666,9 @@ void LyricsLayout::checkCollisionsWithStaffElements(System* system, staff_idx_t } for (int verse = 0; verse < maxVerseBelow; ++verse) { + if (lyricsVersesBelow.count(verse) == 0) { + continue; + } SkylineLine verseSkyline = createSkylineForVerse(verse, true, lyricsVersesBelow, system); double minDistance = -staffSkylineSouth.minDistance(verseSkyline); if (minDistance < lyricsMinDist) { diff --git a/vtest/scores/lyrics-23.mscz b/vtest/scores/lyrics-23.mscz new file mode 100644 index 0000000000000000000000000000000000000000..e88aed6db42539723827d00aad39f8ce4a4d3ae2 GIT binary patch literal 21094 zcmY(pb8si`6D=Iu`NX#EWMkX5Hnwfswr$(m*tWIt#&3S#``$lp)zqo3p3_}3&v~Y& zr=}I8LBRk(Ku}OXoQiasLq`Owesn-Uf9ZjN5P^VzoQ&-pP4%6eJ*-XXZJeA+e6;Ph z+Ebt2U(o~^F}*=$cwC;qlb-usxpPJ(xdpFg&VAnqyG*o`DwSd?sUv3V2=0g-_0csG zXQdCcylP}4H;Ua+pWgcXs#6(yQ>I%hSNZ#J31akmDOcT|3bpt@KJMeP+W2#NKW-oT zdi1W_j-Pb5lM{G&GGp{|zpqE4R#&^qOf9}FzjpwL$NZHeH+SCN&aU3vexKCD33s*C z`1o$8NktRZ?A%VcaiR-lrCPU_#B-B#NNh6gqpa< zeRh|!V!c`Uai&iX(}kKHrcHY`m#d1SGc;EujEKxA6VOjAz+4Akre8d@=_W@yX2t$p zQ*P=y_3Hhj_)7`h$x|u#yXrwc;WJqj;KguqD zwe`}>#>JiJArp#Mt!(Nx>8D(7-;Pv%xcl|dxsCD+=M?{YYtd_+a6E-^IZ|!u_1(Cc zRPC3C*B;8%`#}1)R*!b!)L4z*otL$-+rWMc{tCOlKXVqE zjAzmAiHM9{dnMIymh7Jx_YmoZ#UvOiCG)dB2XQ_+R#x7&;irr0S^z8S z@IWyd_VjYl_M_4N`1fkMDZ~HyabGqurJm@hNq>2pz>F4+m|{_8B;qOwqa&figQ8lB zq$EZJ|L@FPNHzYuSIccSAf6>q@gmFUeXY|&zm{NwqW{c%<*q|eGLk^h@ek<$5b51y z34~r~Lr)EkRxfhlFsyRdW@RUx-)^1lW-0UE6jAiWX=9fc7hT)7>yY}!NC;PoNz)cx zw3X}EMxXA_Q=0~x1{bUwXj34IP0}nc%CkHX)~rkCKl9moJO^Y9!Z;<5b+SF5I#-n& zzZ5EHvCEI%8oq3+`?mG@>C#GlKH7b?**3RtuZPIdJ#!%@hqvbwC{ca#dWb@gH6#{* ztt>xlZL%`A$Gmps;xq;Mh_xxP*BdbHfMEP(2{Zcy4d#{6^3mQ~2qlhLAX3N<(++p?ai zJr=;2Ys*csY9s2xft8>6W!Sf+nq_(}evSRoHU$6D>6qPeJWe=DOeP%e=zRsLvu%Qe zRjQnZM-G!+?^3}~X}4Tx{iisN3i3@Exi(MjRGXjz-Nf5iHIYALk)Q3DLGU$7nQs#t zk19_RzD$AJX`ouvPio8$WI;c1>G*Fgp7b15b5T-jIrv$+{#2RGQ-3?1YQYzKt!>q| zuXF~kW3z4xb;;u4`K3Cx*~evuI!QV* z?Mj&yL0P5cseB*i2Bb9&V8 zbMm&8o1y^XFTN!kaJ@ABi^(v?&+9x$Q?E_FO-S^LPC5)6A&h}!sy=BHxE!$1SQ|wN zR(pn<8|uXrhScHL24$eE#Tsq(M`YtX6_iIVx9xOB!Un8UOp;Cz`v<}6`tOf2WJQT0 zb#{af`mD<40!kz~E1rSr#k^jx7T!G3&U(Vz?{e3;yvS0z3q zwL&RVE_ain)nX36xcDM+1cv`cWEo1c+IH>W44eA$v%8j9bX51*`8=~5&iIJ1s-^hZtLq?qrwfs8t!A{Q9jVzt3y?V5vU+h%qf%Lk9TQYMI$ z@Ds?a&yO-`%IwhJkPBnrfVL>qV~j%ONOqgw$?x<~-odygTxssLFqZo8-F?2;7_IP` zsZqT_B0D}aR_{|Lr(-pJn~}Ya=thl7{p_(35b`2&{A2x9pw`^O#nGTlmv&pF+Tvsb z#LPKitjLySIgQSVHd^5s;k1PiJE$AQ+VCer<3utFm)w2uP-LMKx{ahMa+Ybdt8$em zZgZo`FvassNd`psnd%qq={Q;SxS^|#5jCob9&Y{yQ#$f&MhhrU0_Q$8a|h;R%_?cF z*={nwt9^{}x`*!>pnZ@vMb?)jC^eobH}LcnsH>>aty)^ zy_dxgZ{!RSV$@H02YjedOO%i83?QT1So(dM_==b-$5_-{xI+4mfLXM7K;q*YH1 zR!`XZkL%@XX&+Mz6_U!lA02z?RZAt~9k`Sf`5nTb`XEK3|PKBN2C-vQrZxc6V z$z*#|l377PIQU=UM=4{Yx`qox=4*>$#9#Hh8+c~&Rhyn2El$;fQP#}cwhfYm!7EKE zO6B&d?}XLpgz&Df+X za=$9uEF<-%CBSG!2Zg}VcrD*~GHaFR=VPlwR7fr4WC5e-#|+jIZNqR+{=a>A=M`7W zHb)R)q;;z7%drbzGlr|JYuXgb{7owr=di{o(~&AhahnU(hA*E!YMeX9Q3!s!ZNApt zmbSH94wG|I8(J$@@^7COmYsq8>-+CZrl18IsG~eEQ;B1E~JK5d((>Lm17>&vxHX7)ilymuPg+qzVWGJB9X+hb+ zRkh-Q@LEd`9x`P0QH9WiLCsBp@X*MYouoC;Oy}dI*3gD$E2Om0nzwSXN(dL1bKKbx zk5kUY`lZC5%y{Q%=MsH?#NJHfB*uPn+0sMcG@JjE?f3;aPm7S~lM#J0C0}4@O7P8y zdz_Lf)<5|P!a7gukm&PvE!IbfbAB^`p7&O*W*_OKcE=C|>tgLN$TNqBcC|zq$o=0n z4*13=*)OwQuH}pJ-omEz8?1uG3u0fb#UnKs$ZMe*pJKvl;P7Lf+j=gzl{6%~c%zq4RtEt`1Z-ugk;J$BtGT5Pr zt&4^Mo9C+jQe-5epbK4f|;p-zVU8RR(GrX(kQnwOB)%ir(KT?JvOepqWi+5)&KDY2o zqjXPw(Q)(qY)04iRXC#~&qUL`&8DP}Jp&6t7B;FM$~(d3BrVl&U(WOmC&Nlqp=P={ zBc%QsUI!9lqW;vVb6e2Bb#0P)e&04jnnoZklkwAiueW=-Wd%rRdg``#*#dHT5ypFK zg&pk0P34-(PdD|+a%C)^k!^1wN7rH5Rc^CdWP30p8x9-c!8KzN3`=~`w4zpS)MUC^ zz{ox0CcV-n%8^4zVbbbXn`%eHERO{w{mnX2< z{vsC??%nV&@6#27ncRWcBB-~sZZfp93^O0*6y!Ou)5n*iOMdz0W}f-n?i;{(TeD6E z(`0jh;$`zDy^Y0mq8Z=xu9Dff)`77%82WHMv$LK&QKnntr)lFVZ>at`OfTs`tHAHg zsI@x5=~^dEvT}%OD~FLUW~=6en7e1S4(4HC2&5U%AYFH zJRi5rYT&Rpppp=Y>!j<3*Ng=8bu7{u*-@FfB5a)t^{uaiZ#w##6f3%YDJ1UmbR!e} zVHk1L-)K-D-D)Y?jiT@}2;LdR`Ina>L;& zv~2fcqt7X%OF=CUa@^T6%&^?rS(CbaGto1VL-NmeR9smf{~**3GiC{QQma4;!Bz?GM-8=Z$T-$6z}2 z4~9$8G$N-f#315JVKj}T24ir_#+{`u-3~%jTa>G}l@f^*;sBC`Vu`(S0604S0Ea5p z?5$xRXo=VK!>Vb^cI)R=Cn~P&hlR-+KJG`6r@IE9WD}|}4xIs06uF=hZ6FonE^CLI zqg9)9qxr!UajB#fwlK9J$P6BZfxKen3y;%EzAW;3%bIIj!%W7RYRmMk@A?VNRezrA zDmks9$_G+uL=xo|hO>v6K0VdOe%Lz7u&>)EY2)VnpYpsuhO}!umK;(GLzpI)sK5H@ zyMlmd2cwZ5)@|9ofBKI*>lAeve;af`fE9@|p7;IzuG;*#Uv6i=Z5H{CChR8Kxyznu zOuzqJ<#oxe8qITA^Jw0M)$1uT4*dx zIB5kYVyAACl1B8TtreQg4Qg#>Q1+sg>C>-aqX}?*CSLD=QI^D=62yBUzyeG852-L_ z^aD6)!6?BIqEHff@^bbI>0EoyGhl<0mR#?HX8L_^6|UAYGWMk1yF~QvHK#nJPo}qw z&Tsr)mOT}>Q#LJAx_9!EW|TaxE?Lu*Ril?I?(c&XJTH@$t5;3*WHqGgu8Z8&>7Lg? zpt#RzQoVZj=q;kmX_@PSL_%x?Irlx-H|nx5V@xkOFR_xy;;I+)qeq)wAZ-72vIv$@;lOC))w zS8mLX0Vx$h-yzv2ldN6>9{HsDgpP15$@X5-LViR-iD%C#AH(U+brHhH<|2iOQ~EV2 zoTgD2mTZ(0zF>px)+z@EZEuaA?RtD8M)`zfQ%unUWNcT881d90oU!xyjxb`(STrdV zdN{H;svFyCV$h04vtK?OY4I3wL8vKP%J8)lz<_salFj*8O5q5i!c9i&n zBq1~|xLiPKc~6+U2#fhgv(vlyOxbV8mG5gh*$&H3=d!@e3Z6*D1=CLw8Q4rvd%&Ny z=H+mcbxZejnbKT{+H52jb13y^ZG}IX#aTN~kX33YD(OXs&oZI?F2~b*G%Ji6q zPd)lHGpF4?jS6uw(~mN9jbzCF2#~El(~iF5 zDN$tsHaOChrEH6poL)RKbL2FOWr`(S&L8Pt1Nsa07@jKnXa1I2ZVh|N5DC#rKR2wg zWx{}F?CHQLHF{UWs3={tJVq~!D=!BeR8$HcqyAE5QB%YDtITGjV&PU7EE$gC#r_`q zC$`M(+hyk*P$c}dmdfXKCx;BTrRta(%A>$xYHA~xJqdseew`{sG=Zif_96t;fmU%* zKr{gfgKQiGw7h_3m_zW!w~_z;h!yn;Z{7S$ZOGLvEzZTU2NrtXPCY7N&Kz5#x_0|W8zPeVH5PcHRkr^oLiP^+}l6M z>=l2UP50|c)75R=bW>8NeqtG)_RQ96{^Vd%tuF4ewR$z`Z}sJbOgmf7cALvX3A=3A zrb@6k2)5h5JMDE=8^pm{(?nQP&a`?q6$nSY7X*m+X)0?zt)Reco`S&mMB|MEZQTr~ zuiZ^c!{=j*z?R3R7PbB;*}cj!kku`W3`y zs(6<7(qg=owW7y02ND>-kq$7b(mh;!>=2G6I0&;{bpm*}c~Ff5VR%fd7;ul@kgV!Z zrmdR}cc(TLD&XWMyO8{rz^t(=otZ4;D)#r4B&74A;$$Wuj3=j=tfc3bdkz6d{2keD zK)x}yNb0vk=J$FX`+7!?>b&>JY3y+60$v_<*Aj}_5u-X8(CW`cJb3otiA-D zA=y9rDy~Bp9q~vAdVKt=n&E9qebBOvcKIwZAkbXcmzju`yOlK^S4&EUJNb^cuov}k z(f|=v1DB||7m;bmbVvy28H~L9j{;q$Frt9KBZ`K607>HLI}}W+b8AR)P$Kp_I7s5~ z7jGaT)(YO*?oPhHN_%P7ipOXNDKn1-7)4-!6H=ijkNrG&B?MQ;?c(a9%djJ?*;G5; zW#efBtb&70by~52zzHvj2{7>n&H^XWFn;|1mbNaeG8E5Tp^p7Yjo_oeUN%mgOETW+ z7+DSoVn)#3?7Cl+Gg~Ggd+SAoNZyTTD?Ov}ySqi-HCD17HS<@hZ7LTD?q0E?gTqxj z#gB6QC(xSy;rO@3KhlkHTL9+X2~I^+hxl_gVh{Gil&NaZKZ+`TKh#;Ea0qls>S5LJdaHpvql%Tc+s_G9i zysSSlH>{ks5Hm{dxIZb80CF@~k8tu-E=Ey?>%rZsPYX?En<{bkVsLa2efQ#Mutw`C zmlwUyBiEJQaQ5QdNm&iF$L@;6g}GT-6&bV=^j=UBIM=BRTn;85SdPHg6oXNWFr%PY?vNKLo5e^7sZuNY-HQ^nAbpl z>~544y9UU#zOXwhLfXj=_mV=H=NGsyskNk!Y`gIYLqHiAU zEvKvdhnxlQQ=OiW4s;1D3ed{LbP8h#jwrQ*(EwI+#a%2E;s8}iQ~?NKw2W}L$qF)y z!$oN-E1^GpzHm0shS|1*slnCX%}FWzcRCo{O^x)84C9;z5 zl3-JZo($+d%B&II0wJp@+A0Ap?$|h(n zEp}*t$cmSfdnAjQ5Sa(;8mcYmrf*57$JgKLpr8(L@%9UB{P{&c%bxWlot`Mfx0}{V zfj5`Yo6JTP>*P(Pt+e6iDsL4ApNoI_JFS+V%1H^=QehGz#c_quMwTM_1i^D|0bvME zXcD5tC#+j1q!OiAz~wiJ#8J*lX)zt$@ggFY&<1!;utetKJttZMYw5@*1*yOL8isC^ zPK}g?@MBMnw^^W|&fG zalGF&r;R*!{w{}{X41jGk;7y@Bz1*0QG8GERh}-wAlwBiLXjy$yIjkG-wU>Q7mjzQzWB{My{CuvGY! z%Fiy_!B%!Y6%K|@3atojFoBT}0ndnxlmm%5CyP-4l^U2UN&s%(DwJ6g9%Fz^3*Jan z1}a}T8)t#V#F9vMEMf%+Ebw2h42Fl1oDM{%glU02P*~^+h2CblOwR=GC#Tp46Z+V$3sa%m>&R^ECRSeM!^KndG-~rIT}6@qYIJMEjUk9wOP?p?=YD{ zl^pL#USi(AuV&{XPNq`Q@oKGu5nCKQDML$hd)@uiTq!-S<9Jd8_x0u^IIqpQ(8(eX zaZEKx!$4v^Hn3Vid8Rq69Hpu$GvF#*l^}vks9$tw^e!G!i){Y{UflD2L}=dwg% zEVM>fU<`^>Ar)U=vJjNAk3@A`jUz)&E3opugCzSk4mKc@OE47vq5G5!4b>OE5h*M1 zkDksu4Xv`wbpd9$J_r=^4C3K8u$B_@{IB9aR9sf%^-N@B)8OnS!JwJ&RCp`SYj(4` zQ}WN9hkjz)ZRaSi7lXtHn7zTG6DmpIG75l98X#j}OFIOG`l7iNLLJGsoj>K{z7-)4 ziQ<2eGR+P11tWUvI~c7M3f-s@Y}E_tn2M?~-}LH#1Mh1LW(5Z$OItVr$!efyftdFf zeogx$@f9KegM&1M&brOZ!kd~hQm@j3tS6LAuY#yQnxXdT=XjVV6yC)AaUq^j6aS)Z?s;m(jTEezmiT5Gbd_@cZDYZlPL*}v5 zC~)luWTzrVF2B*))78uO{_ zC%p8+hFm5+;Q@v`W>Ep8$Sa04C-}Tj*~m=@t8$51y8er391W63DNU~b4xo^F`{3>m zrGth|JTAQ^Q-(AAon8*XBxyyllRPrxeI~hTY$}-em(3YSy0@}x90)a_g?-B3wo{xs zuq59N(*@+;aPn^|l!PKf7re*$a0ALc3T#6hzyeEjJb0wUF*s*3TzRVuNBs=;HM>K# z_^8zJ^WpFIMtf91#KoXPi9ec{roGSvbyBH;c=rO7jwHmkSe1b|d{m?`loVuTZ2!~K z*(8ZQE%359PJ@anp~WDxVn{J?6ogtKB`)U@&7&(90*p~Q_c4@VMSx~N>!>J~MzJ(b z2`54|Ob^;jU{BX#$j+jez@SuJe}~RrVEKZVdQk;9b5h!K>wYDFUMplW&_s|c)u=On zVDYzc%lZSxJ1fRoAT= z3`>{d8$e*&d{po-jpaf};$H(ce^BF-Y^Bizz}SCJMiITXKyX5a{0%04c*xwZf0g=$KnamVywq8<9x95p zmgem?HBy#i46|2MnV)%-M3xid|AJGiERYxLBHI%tdhS>XhaB#jhYvfaG<4**gn$MP zUxW*RXDq=5KpT}Kf*?2Vv=CB4sQTZ;F0P$oQvEBf=u5I&g8dWL#GCn|)X7E!Pb)bs z>#(^jVx27Y(qhUp?c(Hc-Y4ia{P@#IcvENUs?w6^a?gXEAH>U=%=+bb1n7n2QZs*` z+CS>4fPtxq^8j-{*(`t~s2#I0)t|WYpAHT)5!Smw7CRyIt4UU9ft5?D0>Rup{olTfYi)PNKh2Ozf7u z0qPlsG@w8js}RIaX(C<*3=2pgSp@o-j);}=a(|8rRQ*MUnERg4Ty|`@z-Te7h5Yuv z)|7GZW@M`Us#0Vle1z97FL_{|i`)?MoSP)W+K~RIGk2=f1adqvg`H6IB5@2J&MAr! z+DJ!kf*_t6=Ol^|9nEz>!j6q*Be~rU7kKJVW3TM0bG~$QHxu5=l-pTDB0Q~pVPl2M z9%^G_cHJZHts)YXyXm3Wokx8iY0r>$)VFkmdoHYn0O$JF6C)%;{B_2;mjh>mL?&HT z4gsv$9S2M+FuXIWz=;&^#sq*l1Kk-WtPI$#@m}LNK4@GUb&}@S*d4a6HktOe1L^xO&iY_%TkYkS$-lG}Uji;!(Kzy%D?xjF>b zi%3$-aD$bku}e9q8-Wlt6P1vvuR%#@oU=!ycjeTe6k-VAfCWfkTfwl>o);s>=NE@w z{O<>&?p=|ILJdbFbi`sr_#$-VB6Rp-#DDl>K*ugh(#tg{Mp|UcDP+q*0B*oW&P7Jg zNeRkO@ybv!%TUqEPyuDAxMfKq|1k`*<(#wSelT?G{K&(Bo6Lb5&4F9gfg9X`TlGKu zF-9D?r$?yRrI=zCsUjE8{ReXjIddjCb50JOD-WGve(=CK^5-~o&J6z_gDQHlBKCiH z{+Ba{k3r6iRL+c8&Wuvdj8M*u`ak?JIOWVbI7h^&N*%a`9k_86+F1Z)ELdet-q|zG z*)s;&Gb-6L3fVLE*)u5rF@hYp7ah2N5C^}k>2%~gd-z;u_#AiS9QVig4}T2YvGZRT zWowipta7K6a;Km$Zm|c>^oP#5af=#2h(i3STrvD;pz}ixbSoKjh?{`TtkI7*I9_3iI;AXoy}s^v=e=U>sb1VM~iu`dQmz7ce=epqJ4RP?~{v{`$hf(&U+N?-+ZUHARsDo$e!6V%8Iac^0 z3vSu}mCZBs;L%!O|9^}m2hY^FMHaj=Ge)^tmH&c=u(v`Q8;#)l8>k#x(%ecOtZInjaxTl#d)Jpqs_+W*zrIRgmO53=* zmkk0|$GCft&36=K^&gg%&XnT|)|E|SJ#m;o3Z`+S0(iMATp*j-3PPv7DrV91r+>FG z#ZI1@8o8(Xs{W_6dQs6~KRIJj)2A%Vp-M}ao@^{+PphyW_ip4mND4vfptvbOoPfM28ekMLP9Jphxr=q}6KbJXc<4=9{4bTnD z-tv0rETYgtusLB~cLmCZ)wnDW6r5=$2u`vVIMXel3m+YrHnjiHgfaQvcJH*+HGl2>*6hvS;Sm3AZR!b}UuP5Cw2ufl%0_@Hy zyA6Wn94-JlKzlMBum~c9rAbqP62h4{TueB#DU|}pE}$p_h2veNX-)8K+AzmKXE@N9 zt}%FEQq`%MPZ<0|bSB(kQ;DgS!B#ms(+P_G=y6wxMI*16uNlOBD$uiitbr&m72gGV z!dRPx*GYkO!j0mkkQWH}S7E-v>_gjjJtqZ~Ujh5e=I#0`@XHe`!m)m3-t*!5KA0vcqO`%<;6eDJYVJlz)huG_=p)2Y8Qa^0x2R;pmc zmvY~`#^AQeVA{l%#+KD0N+~G*WIXk7H$QQ8b@cdDg(<7y&F4i7$g7pnp4t*cM{0xS(V`= zoMnjJkUn>$_U`W2t!c?WL?EaJ^?}Y5%TvwU22c0Flm*UZ1}(mxH;KC8WM&KY7SICu z5#v_e+>*ais30#f?x&7eaIO_4V5c>y%&Z{)_e0=<{uu?rN;^f_dVMvLdXami0P9Rx z81gNji$bLkzuNA?Kdv7o3PQP!`-SBIx`3FK+HbKMh;~fniT0aDIh4#(d?H#XTN~aX z);zESB62C$K?fPtb+!>PH#bO(b}B=G==QQKgU@P|Yn5%+Dbf0PorzNnMZ`}4#j3zm z<2h!3H+{vq4iG3Vk{y%VfH%XK!XVnp#~>TzOTj#H+V2s06nZBEdwc(Dq{$305Y5t% zb3?8%P}DR)qmndV^^dk!V=D4d`;#>$jWG;F&p&7RDC%x@YDsxqs{>KXG2Bduu64+^ z&mAs9f9x-sHo<2I)umxNw96?IpUN@FWUI|n7nd9U*|W<>qm zApfynzIrXb+O1K`K6tDObt-T#W>g-sTR)C$8l1mz?-ZzL{j43;}s{Zw)_+|EYdTGEKLCYigF?xE6J*I zGXiHTVX6C3x_F3!*Zfnt_rYf-5&o|800R;u1OW-yqh2EWcA;RM?&s$eEqTD=Z=G^>4wz(TxFY30jozSiwGI(jM zCDVeqQpFw``La2Pl7j`@jhv00_pdCa^?72(lm`X;Js_`KFQ)ZXW_ilT z19n<)hAlho%c9A9zHFL=`vcOaV3--=#$2j|v&jk&XoGvH(e#AH@fbJN5CeLxvQB{u zZScn0Ve!hM95_%8=^wA?#R%qec-0(Iikwsu@j1CaKG78;7YBxy+H%(sO2D&wajW_y zDMt(@68|#MNx%iB#0+%fkH9@H-z7+>W2sZ@Y7~OcVnzhMh|=$xF|PQze~TsdLPw_$ zGs31G)5BXCzQq!pO|pWCMvJ9OL*?6w_N*Y462u{OC&A@mFE_*Q)_dFS$Hr1i+@lOG zrF@ImhHX6AOBk69?{U!nLxw4}!l^yw3N`yT#RTIpFlD9K@wZXxP=G*Vj3>C&)~z3O zE~%3}qM*U>2x}DOY_0dWog{h*W@wi=*chpr?#cOVWvnm{JCWHXBV^Zs{&~^!!uO~4M8n8g%>E7`^h*mcPz*3F=s%&k^)8?L_e?TE#J^rkL7uHQZ# z?IHIthkZZ~ik(+rTVJq*Z!FPirv_GsrDt4+_pH zX;z5g8|*4G+-@`Zdi-tQK_P*y`2dbw>>{BAlTzOIUNl&X0T*N;=#=1G0%m}(f;h-$ z{t}!V(VThjrQn1OA8RQ87v%q2F8e=NLA0@ffNF4ofG~f`rHZ+WjghUPg|!od^ZzyJ z?QPArJ5wrCJM@`$XnHKrGT_(xj;$-5Z+DIlak&;O2 z@t(GOJtdGmiYkBZ94GH=m_v?5xHB9-VR$&#c8pTQu}X)@bO&OoWu2)-M?a=a-CGi4 zE%71oQ}mjgXH039j1VpOIA5s7uecnC7zxcy1?ei=-BQR;BD+}qUNBses++WQks)fo zn9f!g{&wNMsRsO}C@T)v6g4alXV)*L*<3%~#yGpa-o_k*Lj1>fook3=5@DL)Q8$~W zwPP#j7(XQJ_v%=3S&t+lBPNEroICF1=7QTq#fDd1nND^6G&g*-Do}t=I|g!y@I`hB z-72OfR{96`x^XE>Q%6TeT-;2fJd0{y>Sgc%cE|}2FLyXs1=+j&+}ZErdb7>R2{Ea; zZeeau_yLcpL{zjTeDSTkobs>4_I3#xnnObao4Iq*srBV>(FYkzQo^kd=3{FW! z1su2%gCX3T{Ea$~l0b8F^VA0A12dZ(13!P#LILB2z{_JYK=xp@p~1|r^1ZUMk`O_2 z-I+*qQw?M?e4D?>2)oJ$_g(}c7}>_cNUkTM+p|ZrjX5zfdisw9OVlyt349NnlQI z^fu=Db!R1f(rLa||4&5x_q?xpPw*T6ZZs zYwIJ6(es_2sM_jodQz330TY_gT;4tr@^f}EAO{N(;qlqLRDk`D@lH*-T zWV1*n$}ik@brg)%wynH0cEMT)mZQmG7X_4RJgJC7`>v#Iw}8OF!P(i{%{DvEHh=#i zH)eTn`hKT+_AQQI(Rb;#LWD@KudlJkiGNs#-i+)zF=At58yg#kqfD7@k^-_~AVEMt z=Kf3y7;1csnha&u_jbI#XwFu|gH~B40U}@}Y#Zj(n32Egoc?m;#FK%720aF$AH@-H zgIn>u>&KrPLKU_b78V9o5E_b#;uHXwqLlua3N2Lx7ay%>PQSi4YAZ;)xxG9(KU4Y{ zA5LexPU(^*k-&�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 J# Date: Mon, 16 Sep 2024 11:19:48 +0100 Subject: [PATCH 03/10] Fix lyrics below layout --- src/engraving/rendering/dev/lyricslayout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engraving/rendering/dev/lyricslayout.cpp b/src/engraving/rendering/dev/lyricslayout.cpp index cd7dab843f83a..a02bf56fbea8a 100644 --- a/src/engraving/rendering/dev/lyricslayout.cpp +++ b/src/engraving/rendering/dev/lyricslayout.cpp @@ -665,7 +665,7 @@ void LyricsLayout::checkCollisionsWithStaffElements(System* system, staff_idx_t } } - for (int verse = 0; verse < maxVerseBelow; ++verse) { + for (int verse = 0; verse <= maxVerseBelow; ++verse) { if (lyricsVersesBelow.count(verse) == 0) { continue; } From 4f88da04eec8da78709777f0d0d4b4dfe0669dae Mon Sep 17 00:00:00 2001 From: James Mizen Date: Thu, 12 Sep 2024 11:18:37 +0100 Subject: [PATCH 04/10] Prevent edit staff UI setting tab related settings when editing other stave types --- src/notation/view/widgets/editstafftype.cpp | 46 ++++++++++----------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/notation/view/widgets/editstafftype.cpp b/src/notation/view/widgets/editstafftype.cpp index c7a7b3a307c17..3ee298b221924 100644 --- a/src/notation/view/widgets/editstafftype.cpp +++ b/src/notation/view/widgets/editstafftype.cpp @@ -442,30 +442,30 @@ void EditStaffType::setFromDlg() staffType.setShowLedgerLines(showLedgerLinesPercussion->isChecked()); staffType.setStemless(stemlessPercussion->isChecked()); } - staffType.setDurationFontName(durFontName->currentText()); - staffType.setDurationFontSize(durFontSize->value()); - staffType.setDurationFontUserY(durY->value()); - staffType.setFretFontName(fretFontName->currentText()); - staffType.setFretFontSize(fretFontSize->value()); - staffType.setFretFontUserY(fretY->value()); - staffType.setLinesThrough(linesThroughRadio->isChecked()); - staffType.setMinimStyle(minimNoneRadio->isChecked() ? mu::engraving::TablatureMinimStyle::NONE - : (minimShortRadio->isChecked() ? mu::engraving::TablatureMinimStyle::SHORTER : mu::engraving:: - TablatureMinimStyle:: - SLASHED)); - staffType.setSymbolRepeat(valuesRepeatNever->isChecked() ? mu::engraving::TablatureSymbolRepeat::NEVER - : (valuesRepeatSystem->isChecked() ? mu::engraving::TablatureSymbolRepeat::SYSTEM - : valuesRepeatMeasure->isChecked() ? mu::engraving::TablatureSymbolRepeat::MEASURE - : mu::engraving::TablatureSymbolRepeat::ALWAYS)); - staffType.setOnLines(onLinesRadio->isChecked()); - staffType.setShowRests(showRests->isChecked()); - staffType.setUpsideDown(upsideDown->isChecked()); - staffType.setShowTabFingering(showTabFingering->isChecked()); - staffType.setUseNumbers(numbersRadio->isChecked()); - //note values - staffType.setStemsDown(stemBelowRadio->isChecked()); - staffType.setStemsThrough(stemThroughRadio->isChecked()); if (staffType.group() == mu::engraving::StaffGroup::TAB) { + staffType.setDurationFontName(durFontName->currentText()); + staffType.setDurationFontSize(durFontSize->value()); + staffType.setDurationFontUserY(durY->value()); + staffType.setFretFontName(fretFontName->currentText()); + staffType.setFretFontSize(fretFontSize->value()); + staffType.setFretFontUserY(fretY->value()); + staffType.setLinesThrough(linesThroughRadio->isChecked()); + staffType.setMinimStyle(minimNoneRadio->isChecked() ? mu::engraving::TablatureMinimStyle::NONE + : (minimShortRadio->isChecked() ? mu::engraving::TablatureMinimStyle::SHORTER : mu::engraving:: + TablatureMinimStyle:: + SLASHED)); + staffType.setSymbolRepeat(valuesRepeatNever->isChecked() ? mu::engraving::TablatureSymbolRepeat::NEVER + : (valuesRepeatSystem->isChecked() ? mu::engraving::TablatureSymbolRepeat::SYSTEM + : valuesRepeatMeasure->isChecked() ? mu::engraving::TablatureSymbolRepeat::MEASURE + : mu::engraving::TablatureSymbolRepeat::ALWAYS)); + staffType.setOnLines(onLinesRadio->isChecked()); + staffType.setShowRests(showRests->isChecked()); + staffType.setUpsideDown(upsideDown->isChecked()); + staffType.setShowTabFingering(showTabFingering->isChecked()); + staffType.setUseNumbers(numbersRadio->isChecked()); + //note values + staffType.setStemsDown(stemBelowRadio->isChecked()); + staffType.setStemsThrough(stemThroughRadio->isChecked()); staffType.setGenKeysig(false); staffType.setStemless(true); // assume no note values staffType.setGenDurations(false); // " " From fd58d718625bd57d50e8b1de4add99f9bed539d5 Mon Sep 17 00:00:00 2001 From: James Mizen Date: Mon, 9 Sep 2024 16:15:17 +0100 Subject: [PATCH 05/10] Use next segment in any voice for end of melisma --- src/engraving/rendering/dev/lyricslayout.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/engraving/rendering/dev/lyricslayout.cpp b/src/engraving/rendering/dev/lyricslayout.cpp index a02bf56fbea8a..7bc0275baa860 100644 --- a/src/engraving/rendering/dev/lyricslayout.cpp +++ b/src/engraving/rendering/dev/lyricslayout.cpp @@ -451,8 +451,11 @@ void LyricsLayout::createOrRemoveLyricsLine(Lyrics* item, LayoutContext& ctx) EngravingItem* endSegmentElement = endSegment->element(track); if (endSegment->tick() == endTick && endSegmentElement && endSegmentElement->type() == ElementType::CHORD) { // everything is OK if we have reached a chord at right tick on right track - // advance to next CR, or last segment if no next CR - endSegment = endSegment->nextCR(track, false); + // advance to next CR after duration of note, or last segment if no next CR + const Score* score = item->score(); + const Chord* endChord = toChord(endSegmentElement); + + endSegment = score ? score->tick2segment(endSegment->tick() + endChord->ticks(), true, SegmentType::ChordRest) : nullptr; } else { // FIXUP - lyrics tick count not valid // this happens if edits to score have removed the original end segment From 94d724920797d297c16d2e7240b8d15ef8d87b34 Mon Sep 17 00:00:00 2001 From: Michele Spagnolo Date: Fri, 13 Sep 2024 08:26:17 +0200 Subject: [PATCH 06/10] Update src/engraving/rendering/score/lyricslayout.cpp Co-authored-by: James Mizen --- src/engraving/rendering/dev/lyricslayout.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/engraving/rendering/dev/lyricslayout.cpp b/src/engraving/rendering/dev/lyricslayout.cpp index 7bc0275baa860..91518d0ec3988 100644 --- a/src/engraving/rendering/dev/lyricslayout.cpp +++ b/src/engraving/rendering/dev/lyricslayout.cpp @@ -452,10 +452,17 @@ void LyricsLayout::createOrRemoveLyricsLine(Lyrics* item, LayoutContext& ctx) if (endSegment->tick() == endTick && endSegmentElement && endSegmentElement->type() == ElementType::CHORD) { // everything is OK if we have reached a chord at right tick on right track // advance to next CR after duration of note, or last segment if no next CR - const Score* score = item->score(); + const Segment* endChordSeg = endSegment; const Chord* endChord = toChord(endSegmentElement); - endSegment = score ? score->tick2segment(endSegment->tick() + endChord->ticks(), true, SegmentType::ChordRest) : nullptr; + endSegment = endChordSeg->nextCR(track, false); + + if (!endSegment) { + endSegment = endChordSeg; + while (endSegment && endSegment->tick() < endChord->tick() + endChord->ticks()) { + endSegment = endSegment->nextCR(muse::nidx, true); + } + } } else { // FIXUP - lyrics tick count not valid // this happens if edits to score have removed the original end segment From c8116fa6672b9bb819cb50c794eb121bba8b23e2 Mon Sep 17 00:00:00 2001 From: James Mizen Date: Mon, 16 Sep 2024 09:03:45 +0100 Subject: [PATCH 07/10] Don't layout voltas with no staff --- src/engraving/rendering/dev/systemlayout.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/engraving/rendering/dev/systemlayout.cpp b/src/engraving/rendering/dev/systemlayout.cpp index a26c3cc41c335..db154b2b93611 100644 --- a/src/engraving/rendering/dev/systemlayout.cpp +++ b/src/engraving/rendering/dev/systemlayout.cpp @@ -1134,6 +1134,9 @@ void SystemLayout::layoutSystemElements(System* system, LayoutContext& ctx) if (!sp->systemFlag() && sp->staff() && !sp->staff()->show()) { continue; } + if (sp->systemFlag() && sp->staffIdxOrNextVisible() == muse::nidx) { + continue; + } if (sp->tick2() == stick && sp->isPedal() && toPedal(sp)->connect45HookToNext()) { pedal.push_back(sp); From 69d0dac96336993f3e524d7125ba7c35c82c9897 Mon Sep 17 00:00:00 2001 From: James Mizen Date: Fri, 13 Sep 2024 14:03:45 +0100 Subject: [PATCH 08/10] Snap gradual tempo changes to tempo text in mmrs --- src/engraving/dom/gradualtempochange.cpp | 1 + vtest/scores/mmrest-20.mscz | Bin 0 -> 18876 bytes 2 files changed, 1 insertion(+) create mode 100644 vtest/scores/mmrest-20.mscz diff --git a/src/engraving/dom/gradualtempochange.cpp b/src/engraving/dom/gradualtempochange.cpp index 0d8c7c15652ed..68669036254da 100644 --- a/src/engraving/dom/gradualtempochange.cpp +++ b/src/engraving/dom/gradualtempochange.cpp @@ -359,6 +359,7 @@ TempoText* GradualTempoChangeSegment::findElementToSnapAfter() const // It is the next tempoChange which looks for a tempoChange before. Fraction refTick = tempoChange()->tick2(); Measure* measure = score()->tick2measure(refTick); + measure = style().styleB(Sid::createMultiMeasureRests) && measure->hasMMRest() ? measure->mmRest() : measure; if (!measure) { return nullptr; } diff --git a/vtest/scores/mmrest-20.mscz b/vtest/scores/mmrest-20.mscz new file mode 100644 index 0000000000000000000000000000000000000000..93ce1df05f5a733a98e51827cc9f960130c02245 GIT binary patch literal 18876 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 literal 0 HcmV?d00001 From 3e63c471f8591fa1a58218b7216f213695881961 Mon Sep 17 00:00:00 2001 From: James Mizen Date: Tue, 17 Sep 2024 16:44:53 +0100 Subject: [PATCH 09/10] Set up cross measure durations earlier --- src/engraving/rendering/dev/beamlayout.cpp | 9 +---- src/engraving/rendering/dev/measurelayout.cpp | 1 + src/engraving/rendering/dev/modifydom.cpp | 35 ++++++++++++++++++ src/engraving/rendering/dev/modifydom.h | 1 + vtest/scores/cross-measure-1.mscz | Bin 0 -> 18168 bytes 5 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 vtest/scores/cross-measure-1.mscz diff --git a/src/engraving/rendering/dev/beamlayout.cpp b/src/engraving/rendering/dev/beamlayout.cpp index 31efb23dccad8..90c68cf85b56b 100644 --- a/src/engraving/rendering/dev/beamlayout.cpp +++ b/src/engraving/rendering/dev/beamlayout.cpp @@ -644,8 +644,6 @@ void BeamLayout::beamGraceNotes(LayoutContext& ctx, Chord* mainNote, bool after) void BeamLayout::createBeams(LayoutContext& ctx, Measure* measure) { - bool crossMeasure = ctx.conf().styleB(Sid::crossMeasureValues); - for (track_idx_t track = 0; track < ctx.dom().ntracks(); ++track) { const Staff* stf = ctx.dom().staff(track2staff(track)); @@ -738,17 +736,12 @@ void BeamLayout::createBeams(LayoutContext& ctx, Measure* measure) cr->removeDeleteBeam(false); } - // handle grace notes and cross-measure beaming + // handle grace notes // (tied chords?) if (cr->isChord()) { Chord* chord = toChord(cr); beamGraceNotes(ctx, chord, false); // grace before beamGraceNotes(ctx, chord, true); // grace after - // set up for cross-measure values as soon as possible - // to have all computations (stems, hooks, ...) consistent with it - if (!chord->isGrace()) { - ChordLayout::crossMeasureSetup(chord, crossMeasure, ctx); - } } if (cr->isRest() && cr->beamMode() == BeamMode::AUTO) { diff --git a/src/engraving/rendering/dev/measurelayout.cpp b/src/engraving/rendering/dev/measurelayout.cpp index 504bd326aab24..27837d71dca00 100644 --- a/src/engraving/rendering/dev/measurelayout.cpp +++ b/src/engraving/rendering/dev/measurelayout.cpp @@ -869,6 +869,7 @@ void MeasureLayout::layoutMeasure(MeasureBase* currentMB, LayoutContext& ctx) checkStaffMoveValidity(measure, ctx); // ---- Modify DOM ---- + ModifyDom::setCrossMeasure(measure, ctx); ModifyDom::connectTremolo(measure); ModifyDom::cmdUpdateNotes(measure, ctx.dom()); ModifyDom::createStems(measure, ctx); diff --git a/src/engraving/rendering/dev/modifydom.cpp b/src/engraving/rendering/dev/modifydom.cpp index b0578c3d020b1..495a2ee6016d1 100644 --- a/src/engraving/rendering/dev/modifydom.cpp +++ b/src/engraving/rendering/dev/modifydom.cpp @@ -32,9 +32,44 @@ #include "dom/keysig.h" #include "dom/hook.h" #include "dom/part.h" +#include "rendering/dev/chordlayout.h" using namespace mu::engraving::rendering::dev; +void ModifyDom::setCrossMeasure(const Measure* measure, LayoutContext& ctx) +{ + bool crossMeasure = ctx.conf().styleB(Sid::crossMeasureValues); + const DomAccessor& dom = ctx.dom(); + for (staff_idx_t staffIdx = 0; staffIdx < dom.nstaves(); ++staffIdx) { + const Staff* staff = dom.staff(staffIdx); + if (!staff->show()) { + continue; + } + + track_idx_t startTrack = staffIdx * VOICES; + track_idx_t endTrack = startTrack + VOICES; + + for (const Segment& segment : measure->segments()) { + if (!segment.isJustType(SegmentType::ChordRest)) { + continue; + } + + for (track_idx_t t = startTrack; t < endTrack; ++t) { + ChordRest* cr = segment.cr(t); + if (!cr) { + continue; + } + if (cr->isChord()) { + Chord* chord = toChord(cr); + if (!chord->isGrace()) { + ChordLayout::crossMeasureSetup(chord, crossMeasure, ctx); + } + } + } + } + } +} + void ModifyDom::connectTremolo(Measure* m) { m->connectTremolo(); diff --git a/src/engraving/rendering/dev/modifydom.h b/src/engraving/rendering/dev/modifydom.h index 3ebc20a67393c..3086f1b1582d9 100644 --- a/src/engraving/rendering/dev/modifydom.h +++ b/src/engraving/rendering/dev/modifydom.h @@ -36,6 +36,7 @@ class ModifyDom { public: + static void setCrossMeasure(const Measure* measure, LayoutContext& ctx); static void connectTremolo(Measure* m); static void cmdUpdateNotes(const Measure* measure, const DomAccessor& dom); static void createStems(const Measure* measure, LayoutContext& ctx); diff --git a/vtest/scores/cross-measure-1.mscz b/vtest/scores/cross-measure-1.mscz new file mode 100644 index 0000000000000000000000000000000000000000..daf2aab37e5d66f986fa053c82a35b98b203a42b GIT binary patch literal 18168 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 W1bDLo2jLhP*nqGDn4Y3sK|BBiTAcL& literal 0 HcmV?d00001 From 08b5521dacbeaf7799072534fca8925a237c3a11 Mon Sep 17 00:00:00 2001 From: James Mizen Date: Thu, 19 Sep 2024 16:50:10 +0100 Subject: [PATCH 10/10] Port fix for corruption on xml comment --- src/framework/global/serialization/xmlstreamreader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/framework/global/serialization/xmlstreamreader.cpp b/src/framework/global/serialization/xmlstreamreader.cpp index dafb02b2a9029..092d630a67ef5 100644 --- a/src/framework/global/serialization/xmlstreamreader.cpp +++ b/src/framework/global/serialization/xmlstreamreader.cpp @@ -157,7 +157,7 @@ static std::pair resolveNode(XMLNode* curr } XMLNode* sibling = currentNode->NextSibling(); - if (!sibling || sibling->ToElement() || sibling->ToText()) { + if (!sibling || sibling->ToElement() || sibling->ToText() || sibling->ToComment()) { return { currentNode, XmlStreamReader::TokenType::EndElement }; } }