From 99cfefdda1676c63874fdf566c5d870df8c9ae6a Mon Sep 17 00:00:00 2001 From: Raman Varabets Date: Sun, 30 Jun 2024 12:47:50 +0800 Subject: [PATCH] Fix SVG output for user fonts producing non-color glyphs Signed-off-by: Raman Varabets --- src/cairo-svg-surface.c | 4 ++++ test/reference/user-font-color.svg11.ref.png | Bin 0 -> 10309 bytes 2 files changed, 4 insertions(+) create mode 100644 test/reference/user-font-color.svg11.ref.png diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c index b830d91e0..e8cd8c63f 100644 --- a/src/cairo-svg-surface.c +++ b/src/cairo-svg-surface.c @@ -1403,6 +1403,10 @@ _cairo_svg_document_emit_color_glyph_data (cairo_svg_document_t *document, if (unlikely (status)) { return status; } + // User fonts always have a recording surface, but they may not be color glyphs. + if (scaled_glyph->color_glyph_set && !scaled_glyph->color_glyph) { + return CAIRO_INT_STATUS_UNSUPPORTED; + } cairo_surface_t *paginated_surface = _cairo_svg_surface_create_for_document (document, CAIRO_CONTENT_COLOR_ALPHA, diff --git a/test/reference/user-font-color.svg11.ref.png b/test/reference/user-font-color.svg11.ref.png new file mode 100644 index 0000000000000000000000000000000000000000..55f4febf35df149c9896f4066986a83b6db57b5e GIT binary patch literal 10309 zcmbt)XH-*Lw{{c-8=^GnpeP^+N*71~K|z`{5$RH-_ZA3&pn?cUkxr!dUL+tjSb!i% zuhJsD2_du)O1K-&`SjfP9q%3Yj&JaTv9s4+bFR7Pn$LQkxq~$xDN>$eItK!QD3u=G z*8+h~_JcqtgwC7$r8VS6gFqZ0rTh0DdnK)mBO+;^r_AHk zpXflzz9>Uq31nVm2`4A{YtlXn=pJ-SNF43y(R17voc>lDbeX1h%#h*4<<-@(W{E2w zE_WJ#4@|#!xz)R{`~q)C=iw#N{7W`rDLaLN289Bx&aXi&Yn3PS}hPU^+FUvOeRpu0r6w z>zz60*`ZrU;IX^Z#agP$153f>FL?VYJowfX;}?VTexUy9HtS*e!nZCj^yBZX?EB5p z7uO;Vl^1XCHwr@;>LpfP_!|vFF_mxvVvBE!>Us>W&7!u^TglU1amUMV_OQT&?Ch+M zLZXwWiIAk-r3hoaXlt~(j2rqJW*`HM-RCk-si#28;K#_U0%SU38^?zIY^`Q^>|n$_ zT}qZ=+#@hE+M~P&kKM`b2yVWnL=27&@!6)2y~(SsQH8oZRE3?GsPLW56R!P=5f+rO zQFkc~VWbo0wV)6;8*wCzek2ru&13F?F{{YrE?8hud{RTlOYjt8X8soF9U2$-j)W$#4d`Y z$$6HYKHG;*5K}_CfXQm!+U&VbCFplNdC_vl^BwMUEA)y692Ees=DXULQ-HcU`!=X= zW3nVb^?gC_YuB8L&0V*am3Adc?c!zbzK;}n6hyYSaOjC3t-0<3UOMJ?O z)LD)Y^>Hg0MR;MVAj?p8ujTIY@quz$IaCh88GR6aXV?}xd~CFk+e1uJT0)ZI>atvzW-}i zJ%CI0_=U>id#K;WO(Z%h8WGrGi^+?g0Un1ns<&u53Or_*8fBhKPwXk@-)Qr47&q^N zWFMg3#*ZUrrW=B)lu7d@=nWZ@x^=9{_LQEH+p^4+-f%dT0=mwBD)Yun1oSIc4-Mb* zFz&Qjw@U7`2aZuOqRIYZcgd5!vj&+ll6893EL!dVT(+8!%&y~pFX6(y=o|FW!OLmU zClwNVo6V?VHVEM{K*3mAOzOKj@O#~I>8oe0gALC%i!BzB_^x)LdQWvClp7sV^MAj9wBzlSj9V#uV zK9uP^41L-uB|^?JlvNQ8tg&|5lz0kN4KwSQmathgI(blT>GbFZok0e*`UKrPX~m~* z@Zrcd5oQ;5nP^Ny^aFFOkH39IWUG7XBfUSREAykz1=Tyvh1e#)t)9UJRBe^-)~kgwfNc z`OISJQWy1}!l1j=iz)H=gQ-=rMzvi-?nqo^Bo0G%4LjYR0FPk)D!`xaj``~4W1^0x z7NX?2;&M`dnD46aJr&#(!%-uMUW>-y?yFHem!XE zzhz87`)yCHNkTpnY>yUR#v@faK6ZbB-UV6O5-KZ=@v z-uWxZZMT}ye56jX(xYm=B`(~Xv?3Mihc4+$)BCf_<=$jNxt&tI2IV^}+e3x+AWgk> z(N#f^<#fx6Sw@WTU2>LX)}V7KP_rn6Z&;6%6hhB7xb~66{G6U0_gjcl(+RZ64%X=~ zuf#1a_|LTdj>Ee?W({YSNo2LA%edgJw?hYnkI$!)@vD1)vpTI8#1yu?t>%|{TT;~! zW%W0r+}DN$u%%^fWW~Y1_ep>Kv?)YQD~m5(9||tYRT65XW`Z|)vOrmQVcFz7ZuNx{ z+6Z$Lp*tu$tkm-fI(?Gc$E0|J)|zX^=g#{0X7JNtaZAVJY{!6j1vP%Ex#d21_qr zZL2+0t=w+5&(Jd+9#EIAava8I=I*zD#wzWOuU5uCVv`u$>yly{#@~*`F~1nR|9g(t z5hpMcG|Lb42&rmodQ>UI+QX_NKVDZV;yu1T+Ur|Zq3IT@|Cj|4cid%^;elxEwSJnw z+8b?;RP8B#^kD5kT(0M(Dt`4lMgbqw-T9!$C0u7-;J+~4ahwXEwgDOm(RuF?m z3H3aS3!l)*CYy1_k{+8g%mO5n=(>`;KQHBSXaoh0ICVIe%2wXT%wWB@O7Pg+Sf9qd zCnd`}u+Hus%re(&a^AC*9X2~1qNYf7e(O|p1erAxCrWnJ9Vs>iyC|V= z(IXN#6SeA* zjSo>I*Hycy)b5Q+zPT$z>FdF88AX{G_ju9^I5(DmzK#`G8T9s2YT5@K*@FYy(*0X# zej_X29^*wu72M&y#COS$9ct_k{eLu!)(Rkv&=n>Jj5^^~zv`@J(M6ZK40h!e1e-Rv z=Tl5v8siK1UthVX8}7D@L5N5?i4yN}rRgAUF0oQA*Kg+UY6VEKz1Cka@yXB&6#U6h zYZ{a^;7!y^j@O0T^yUjsORCg_5Fenal&)bFm)(^N=(109U|+q%2|OFlzCrsvej*Ut z+3$_{3P7Y)M#)|&B13N$n5QJbf9(&HT>WMRq2(;vV{hxd4l@gF!Cycz@txM~&qOOJ}H<4KFxI6_a{zCYOV z+pUK4WqaM_YN@`L=UQJKEc#ub`@(tbTiTBGS>pB7t;pcARhiV83N|62+^MMGmQn$m zy>%eBt|dcHwZL4Nm|w$)oymy^mC+j23+lTHynpJ>OV`gd-63uC8DctU*EuR=+fA>N z`htaW{W)!2j55{*zdYM7b0hU|uNyY`rf(m#?S$NBy&IQGX#FY7L2v9nSi~EYPW&@n zqzW#B@`7Rw^|_i&fss#T#MtgnYq^Gl!ad(%;`Rdw%^s67Sl=jOU#picx{i(1>AokJ zruip?Yry;Z6})8*RPSU+xgYS>T11W?6%9367%e++Q|jY->pPdD$NGc3$zS2>?>Kyo zpJV|jA$hgF%BU`uXM1+iLFzFM5Pfr@-1O$$l}x>3}rc@s@@`PyG^ z_$Z2#@e?}OlHDQ-8K6*gtKbS8brFNFoLJO*x|)T1ibnAC5aOy8q5=<%QkWI$ngB1` z8RZUxr40X^dtO^MVx({lsCSx!UMEMoe-VIfA1@}P*LT*MsWlKib$0c2v1>iQ)2}ha zsIWl@8mGipvbUQgELEJ$w90|Cf^;`xi^k)v zu$|o(aizeQonUP;EbW zOL)ddDFL1;Vz2&*klU*=<3l-9M|NuqE@IK_GV1TQ=RwC8n=XS)CyOO5Ca%ZvJUQH~ zprj)pmYIdAAx=kIU`OaMAZYiQc};uwo0WQRFqs4X$S8dMqWjyL)w#xTh-ZD)sJPS9 z-S^!5NhqfEh5)z>+a)5KaPB$;nY6#;=Ak@m5J*$9h4&+#_ZjUlW@BY+&smAhJ{lKPIO`};Jb z1UZXGhF;|~P1V8=EPAttO=(`8g|HbGUzKZ`&Kf0;9+E{%9i3;d?-m8wqbSsF5Q>6| zyuq)+G{ zhI!JQq2RZJU?O9m$DvM(e+M^`^6&wl3hqf`#fHpbDprXpxn0_4qo_g(a~&#>b^7-t zk-AlBW^bcAUpw)QyvjM(Tq^)QS;g6;?Xj3VdB0+^(K?%XJGYTk*1wiAE^0X&r>^Tr zM2);tnfG(BMZV_^Q2f0N+L-qC(nd_>ET}vdY!p&^?27Fk)CsH7aOTV zJ}PMev;T-L37B$-qIEbqqGA3Rb6vu9-b(XA`@HV#G!7vQ&Q6 zwnuHt8vWf`3|%wqOsr0ub1F#T+4&l6b=HY)mcy<>l(6>W7Ajw7gaPUMuf})05aA-^ zYHHy@e>4;F^I^TRlrXR5Oc116#*U@S+dPgHH_~yTih~;|;Z#=6XYqQaD=$Ikvo_w# zP1t>SO*i5&BUeu$Rd+-p-lU|NMiSeYQ>wVLH?G}Mm8!4GgRO8d7F%Xkt4QdDZ1-=Q z$q^^wM8mB{5`u&0d;%hhPJ5$?6-KIuUEJUJU|c2_vEuAHsvcmajYl)`D+rGmgl*L` zPk0YU3eSnemRC<};*N}@u&=F@lI-KnOs%c15mQ9#t8UX$P6c0zv;jNcivcv9?q{g3 zhr$s~0)U7U+;bDqdvpZyhQb{oAZMBt;oi3?|C0ptZ`w}5C#yO@?r949KR#yIgf&2q z{o0XQedCqk9M^s;MXFyP&wwz_xgcZGN5I4^?k(zrJFjBNYUrtmY~L%r^tJn?l3*!6 z@Mp1#1JQb5v_2o(bXR-K z^lbd%%G1&PPZSiR_o17ev9;?D8t&@4F|*$EhgHg<`!?R48Je0@=1H)_$JD7nSB6Li9(EBh z$$mi;;(ZnWKyU75Ox8{0`U`1mZG&-q+&?1ICVCfJoVN2Yzz*NdaN3PO#r0sxN!O=R z1}%Gj&^j!Od$Z{zf8K^6UF5&`ILs?e&tFh4lS9Fg=$A;J?+SK-IJZ`MS-*W*Lm!dP zKjK<0AmICs+S{6*m{Q;c92`oT&3WV)lFKHpj0}8edgy-&n4CmV$?}-=nNh&cupR?|~(6R6Y znk$L1wO>q-@~|={Dkz>yGv<%NeJ9>MYyRo7AUR83XO~OtlkuYWH_$- zZ~iG-#3t8s@QVG7KN-_?CJb=WtLpsE+5vr|5ibp@xR3XvJZ*F}A1u3^cw-VeBh^gt zvzBVh)FyL;lG0?L(3A6IWDNZ`Xb9CO4>BemhhKf@5DIWs&@Y8k95(?sXxaUjbF7tZ z%!>!(8h8EKy!37xP@R*#rhgq+Cuqp1bXkR21vMiG5fe#vDBTw5iE7p#%PuMUKpA#f z77UEiTXChfY*cLeMUeII3&*(IhtJs$&h)q&-*Y(&2lo&6#2d3eM`LTVX5aJuq_3Xs;Mo) zu5zE&=3U4hW?HrZ(dKBLvt1S9FWg?bxZ?GcD!$6?x>TfVM+{E&E@j|ZYtcI=_%-CY z(pbA+cq0i_6LBbw^SZXr_vbmVWbbe{N@nBj@J(M7(3p_3xw14&-JeeK^Hko~T?k2E zz6$E#4kJFopAboJ)~~3g~A!3QN{#LoGoQ!fTVkC0%HRv4dwGZGoI`(AP$C>C9E+wWee@ z2nTw_1LBKZCM4^yiM+7*#Sa0GEMEUTzdC0~gogE7+cd#*F=GU)*OoD>`S5gsdc$}M zmYT;Zxwf`)rf&g30+6^KpyMl$xOdg0pHd*x&HPf4tp;SE{(_hJDUK|z*1yugjwGUX z-p%4;Z8Q~y>`UZLETiYyK*wPwASnHjiuU5vM7B5Zh%3Ytg(6R&L-FLF2vEh9)R|d+b2r(~7_u0LfVnkyWb?p3;QN&QZrmug~*I(RW^8z+o!;#)b& zvf^OVEB`|`=P&QBP0W+|`$~CQAHW*6;yiJK>GDfUz5V%1i##9vN|8t&v<2d0w%*W9~4{iye}}Ewu4%O@$(*KK8sgnP zg6Q6O_XdSA=UvfdD{0nVEvZ8x8XX&SAdsbnyXA;cF@B?h+?1%So7$V7DQxWu35K)( zG;4VCO9&#@M!}TlZ+{^~qtIMKMB~V4Aqju_JjyccIs_j;e=G05KZxnq*r#Q$)bS}B zyzO^+a)u6w>QGde*Hq>6PyzJQD0+V7nXBF|4KgkbR82JBE05w_a(0PIrCCw5(wzmD3F6rkq4;8b)cjO(Kf1Le9+gD(C!e^%BNSvkibhd)u> zN$~hessHg&ln`S_VkV<-|9EldqcBz}ukXoF-c%?11kjXb`8tF2m)=v^XO9regydSb zes`Xw*r;%$li6D~J&pY!?`ryqhZ?Y4_x`2|BhXN>F{B#*^A#O0l~SE&{!T< zjAKvhs=gFbfz#qms#q?A`U9uPoX59@s2p$UWnkE(1gYzxrE#}C@&Bt~u5$8R| zJtRFWV26H1(^FU>fIUn9lcyFr33jy4el-&GszIG1znVqnr?NqwE z8`EXCZs9PNN8Dg$x$4hwI)-+!SWMx~@J6|f_Uu8tvF$cgpeAdbG+{gyEX+2<>pK-Z zS2=|8Ymg@1uSw!k>#g^$-Cg>8B3>LDgDWgn6Siz}E4hQ*3XxgCS8oH^-}*XeMC7@m zQqxrCQYt5rtcM}?lDZp5<4XW}nqIkHI65sCRyRmSniW1-B<;zw*0^TpsH=n7K*8sJ zI86KD&Nov;n$ySR>O(DiH2z&C)dkolLJ-2vp}sAn%G{0yQ>s;BNBQuyb@ z)IO-8WtXMVuYbxc_OKUa1Dj*?a2Ju}00k=<&E7i#zr9uFUrPyh?sY+OJ3AF9PJIeN zJ!TuTxK)J0OpmB}yy2Emm(FK)dR(5TnTc}Aocpe{W;mmJ2M`y$sAGHQ>w(j+NQC%A zx5LN$r!n(3%^?Y!$s{`&nYHmp0{Sk2OMbk?ZTPzYUcs-SG)Z2Zl2h_OusH&W!05Nmh}6~`7i z`DO!-@(CLR0$WH2yyZ}`DFyQYNL^pa{eRNAuO~YFQ4$6n(8ep56 zO31sKUDAd4X=c_-AiiD$?>qCH$7^KZ#y36RvK@DihMQz6+D$7MdFp9#3-#I(pNGIB zbVsHIqn4C%zG}h)qPD#ZRm7%(+ut(2B4{+O$r<^1cfV7Kw_WPb`ofStu-@*!s|O$n z#p=9c&ByzwwhNNOZSD{U2^WECl$`=4FEZNdHkvo=p4249u`pO)Mt?F z!wYrCHkK`~r_2rhwr`{M?}!%1m1OK1oV*b*V2ekMG!Dhs;X$%)6(W}&`<-ytH=GC8VP^`R-3i$pd6 zgpX-P9}l(WxcP(=6+dNIN_rh#mp< zF;f5isltEoPp5wm4k~jD@+=zK{kS>kxFVe;Z?uFg$cHS|DC^#6fL-!`-jR$Oo9Db- z()_jd5a2u7t1b|dURpJxEITT{c-5=@A7tv7UuwXwfBBoKsn_^zeJpGk zVK+%TZHH3mrGc5fpzrrCIrpzV+S9Rz((6pH_mM@aHmZg`mPn~)y9*p1MHGMlV*2SF zYMx$+M?VY(i-f|}b-+NE3Ltf{UT6c;!ks*>9KNh-w5p4*4Zw3-j(BPUZ(euFc1B2r z=$=Od+u_+i=Ge4@=j-TH@1EA0*7mJcu!9ZM8I4jc{k+G@0?Y58SQ(gjO@4+$3&(j*E00EnWCj|)pe8WI?@$vk8wQ`~3U`JGEkAz+2HaJ;)%0FH3rxFsS zEwy~UiuzB+SOv5IPJ%~IJCEBI3pjxDDB2CKDb=A0^D?%oK~1F(j@XCuc+hScN^|A) z>(V8iy2~dXD*sIbPf*5)ZQGbMld<*6|C0x5i)5q9pV+mV_{vh%7sVG-oaVUvHx(=y z+R6^Qp}(HM#*FN&()EeA{$|F%s-^qn$Lp5As92Gw#Mufgr`fhonxqWITvANYP0Y@1 z5%b6+rMMzuX<-j0Qwo3bV}5JjqjohRynLkj43X_Jk&S1I=y>`V@A~mCjjI)gV*JK( zeH)fmv`vhO-;nj1%=31BndYZ1MbLjEXjr3=iTGQ7AbYEQf1n%%La8l9F3*@U5BDoziAnN0-EyQXAiK@@C(31|#wfaVqxkaHGp7j~2&-kFZK3hpXrirG%HbSSM^{DbDgo^}wP0-s0$ zkht06P+Odr!R-|IBrEU6$!EL+$80k=VzZ~RcDw9iJj~3ghyO3@DL9uSNQ?j=@r!1n zXWfnQusAQU`&V*+IiCR*YuK@(otic3u?KL+-M9CS31)pOfqdTQIxTy8H^YFeIW5m3 zuFIbsUF_7D6@Psz&nkJavJlcEJP5Q>jwzP-T`Z^R@acyQ5A+|~26qk-)t47Vs_uj2 zY{QSj(z{|jzL&=qE22r0I#4k!itahu0(~=5Uj@>;DGkWR%U(q7k%|VF-n&QNMxYd& z`dixF_2jsP014oD{@lyWiaa6;qJS`^yt*eWFRV;>jMlhfT+&V!Zdj15Eh?IRN8#EL zFUMcQw(E5e9vULnSpDw+^%l8n+#$#BUN3m^k`~R8_7Z8fA&Nle1WJ4`82=VT#&Hi| z`~W!0iQ7{GL9uP+tYQY5^T#w+o%6}@LF=D@W