From 8094918997812e183d8b92363df4364d634fbeb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6khan=20Kurt?= Date: Wed, 3 Nov 2021 18:32:20 +0300 Subject: [PATCH] Fix closePath by using PDF command (#3304) --- src/modules/context2d.js | 56 +++++++++--------- test/reference/arc.pdf | Bin 4154 -> 5060 bytes .../bar_graph_with_text_and_lines.pdf | Bin 39696 -> 38078 bytes .../html-margin-page-break-image.pdf | Bin 5296 -> 5180 bytes test/reference/html-margin-page-break.pdf | Bin 5022 -> 4848 bytes test/reference/html-margin-x-y.pdf | Bin 3607 -> 3535 bytes test/reference/html-margin.pdf | Bin 3607 -> 3535 bytes test/reference/html-multiple.pdf | Bin 4619 -> 4403 bytes test/reference/html-x-y.pdf | Bin 3607 -> 3535 bytes test/reference/paths.pdf | Bin 3232 -> 3228 bytes test/reference/piechart.pdf | Bin 3923 -> 3814 bytes test/reference/sierpinski.pdf | Bin 72417 -> 49467 bytes test/reference/smiley.pdf | Bin 3700 -> 3644 bytes test/reference/w3s_arc.pdf | Bin 3199 -> 3195 bytes test/reference/w3s_closePath_v1.pdf | Bin 3196 -> 3144 bytes test/reference/w3s_closePath_v2.pdf | Bin 3355 -> 3251 bytes test/reference/warnsign.pdf | Bin 3436 -> 3358 bytes test/specs/context2d.spec.js | 32 ++++++++++ 18 files changed, 60 insertions(+), 28 deletions(-) diff --git a/src/modules/context2d.js b/src/modules/context2d.js index bb4d0e38c..277b5970c 100644 --- a/src/modules/context2d.js +++ b/src/modules/context2d.js @@ -823,21 +823,10 @@ import { typeof this.path[i + 1].x === "number" ) { pathBegin = new Point(this.path[i + 1].x, this.path[i + 1].y); - this.path.push({ - type: "lt", - x: pathBegin.x, - y: pathBegin.y - }); break; } } } - if ( - typeof this.path[i + 2] === "object" && - typeof this.path[i + 2].x === "number" - ) { - this.path.push(JSON.parse(JSON.stringify(this.path[i + 2]))); - } this.path.push({ type: "close" }); @@ -995,9 +984,6 @@ import { } counterclockwise = Boolean(counterclockwise); - var x_start = x + radius * Math.cos(startAngle); - var y_start = y + radius * Math.sin(startAngle); - if (!this.ctx.transform.isIdentity) { var xpt = this.ctx.transform.applyToPoint(new Point(x, y)); x = xpt.x; @@ -1014,7 +1000,6 @@ import { startAngle = 0; endAngle = 2 * Math.PI; } - this.lineTo(x_start, y_start); this.path.push({ type: "arc", @@ -2096,6 +2081,7 @@ import { style = null; } + var began = false; for (var k = 0; k < moves.length; k++) { if (moves[k].arc) { var arcs = moves[k].abs; @@ -2113,21 +2099,22 @@ import { arc.endAngle, arc.counterclockwise, undefined, - isClip + isClip, + !began ); } else { drawLine.call(this, arc.x, arc.y); } + began = true; } - putStyle.call(this, style); + } else if (moves[k].close === true) { this.pdf.internal.out("h"); - } - if (!moves[k].arc) { - if (moves[k].close !== true && moves[k].begin !== true) { - var x = moves[k].start.x; - var y = moves[k].start.y; - drawLines.call(this, moves[k].deltas, x, y); - } + began = false; + } else if (moves[k].begin !== true) { + var x = moves[k].start.x; + var y = moves[k].start.y; + drawLines.call(this, moves[k].deltas, x, y); + began = true; } } @@ -2205,15 +2192,28 @@ import { * @param style * @param isClip */ - var drawArc = function(x, y, r, a1, a2, counterclockwise, style, isClip) { + var drawArc = function( + x, + y, + r, + a1, + a2, + counterclockwise, + style, + isClip, + includeMove + ) { // http://hansmuller-flex.blogspot.com/2011/10/more-about-approximating-circular-arcs.html - var includeMove = true; var curves = createArc.call(this, r, a1, a2, counterclockwise); for (var i = 0; i < curves.length; i++) { var curve = curves[i]; - if (includeMove && i === 0) { - doMove.call(this, curve.x1 + x, curve.y1 + y); + if (i === 0) { + if (includeMove) { + doMove.call(this, curve.x1 + x, curve.y1 + y); + } else { + drawLine.call(this, curve.x1 + x, curve.y1 + y); + } } drawCurve.call( this, diff --git a/test/reference/arc.pdf b/test/reference/arc.pdf index 29bca59ee0c19233daa8dd1580fca5bb822e7518..950d79b90149ac34ec10979ba13f81ea5be48155 100644 GIT binary patch literal 5060 zcmdT|+iu)85Pj!Y@Fi%1B9eI1r7!}-cAOYZ;b3i`MU6bjvTQ5ZmC{{poAjId1^t=! zQ+kG%mArClr^ptqz1W>0hcjn}LvqMRZw`;1ib%0XzyI;upG@(DcNg#2-d=q6@qNwX zH|2HB@V%_to(uHOSUjs&-FjKoD=uBbclBjc?sp&fd4dL0m`LV4*CNV`w=6#B+8(1< zTwCd9&sg1Fk`dyaF&4kB+w1;@%fv_qiB-R>%LPj!$$w!9e+kNc;TNCfH4_nfQqWmZ zL{jhtON+>4U{#bBJd;tbd6tVvr##IfC3%(+AYQQ)zdTDNHEK7=6j5ThCUvPMH5F4T z$_3aw5}GUO$#j%?5_+wwQ-@;!qdXXsL|XAoV~FA^haVZ@0W3;JDXc560E!Fr$vn!9 zvm#C8jmSHUWB`(q0|h*`3@pJ@G{J$?#+;)mknkgqicJssk-8C5ghou;V?PlkAS zmh}1&mUNmbc5^EUX=N*MYcVM~EG7kDo5iHWt;M90&0p znQNf%XTdvRIhoROn=>iQrY~?B+R}RE~0Lke#k~FLU8wJn#D5QEE1u=?(qlYN?J{N_Q0vn=`Y9ED34E{CC z6QBJiv0x%cR(NjiIrxn8L!>Dk7sl=9cIrJ1r*VYf5D0yebof!04w)}3m*tevVN79D z+UavN^m$vp&tmeUM);~}7X45C@biIc!IuNRZlE$`QlzX{{B3i&;^$Pt%($&P)>N}l zIpGJI%|PbMnZv5$fH^2Py2(r&WaB?wkep;jS`_f^^KLZ4X zVP`;!dx0FF%5Cc9mydy=i2FB1Xa2Y^=S{T(|L@-z2mf~l;{Lty$MXHv zA@=`^vd3Aoy)8cI2oU#gey1N77v20H>L0JDH_NU%t$ThRn zhcZY=;x_GsA!?J4L?A1IH3*Af55hKRGdf7)A5Jdb)m6^{6zp)WqrM)t5;%UjuIeR! z{BA|AClUUi;28oh3VqYHhh<;$$A{mDBF}^riTnFHNxs78$w;f5?$QS(7D0DS47n~(_k?KY^J$VpA}xFu)wv@OMx#%0_bi zvTWuk3TUyMHow+1Z}F__dc0k^#6E7XI&M=EnSFf7&-tFU@;6`49wPFVa%R<+%id;; N);V779=$j@`U}Z~(>?$I delta 571 zcmah_Jxc>Y5G5aISQ~>NmfOS_gmY(RKSfT+-KDj#u~9fMApwaHudvHc&~U9_VK0K6 zjfMU&_aqR^7H;u&c>8ANz5VWf@W+QHfYgifwKgu}+SubuZRByIUg4zv=5e=C;a8(# z_M6w+Mns%6MAq>ecFx8nHZL~)?Q3{{ZY8ZAMlupTc9hJ9c`>=2rg<^s2k9{i1Q37- zsFXVtSZ=kS_J9z%s1BcU_FD)7a^+{+&Vh_ue*`6Dz-bCOqfMZ5VXwCp=n$0lz4Je= z5UpJwh!TUvK3$Lqbr=M#2vXcS!4LZxeG32p diff --git a/test/reference/bar_graph_with_text_and_lines.pdf b/test/reference/bar_graph_with_text_and_lines.pdf index 620816535b68ea4fa472e241d50df162d8d4cd25..a7800789103c918243afbfa132c140269f0c94e7 100644 GIT binary patch delta 1048 zcmaKoT}V@57{@u&);Q3I1ft!v3~^gA&d1JsHmHSBD@oEBn2Db)YdZ^Dn{#S&(=;_p zwEk2}>{`64Jk^z!1c6r((Tz~ubyF8zlok}(&N=f4p76kX`2C;f|9rgf#B*}dld)2ic-fNofB({bgZjz2>=jN-ASX7PImLzQ#h3IvQ1dE^f!ecmRc+ z4XWOjaG)X)!eXLX)vvl7_}e8R)veWc_c-vZCkXzkrkzO#q@;u|Nlkz5J%Ex_0FxE3-3*43%MKD2TFQWw#9W zjM#8?M8eWYGro^z@cxDk+egC~A8pC%1-!l)hVPcb85|k2AvqSp?=hus6(W|t+;Peu z#zU3@*5ejgj%BoOKf|ClGgTyTF2SmXtnF4>1zuzb2l|0KE$|GtF)6q>(GU{^V~lth zgU|h+T907x5k~Z6Ytz|v*0&-Y%WiB)c$Z-?afyZ-5n{Xu5qV=jH*u}c;I!u;9zxcG zxhLXT!`342A&5>MZdNUu{JhqKn`G6L*V;&Xy>zUjHQLb?ZM#78qQEe8Y3Z>l-#>dD BQ)mDH delta 2146 zcmah~OKenS6wWQBCDRIY>Z4GJLmScu`saT?60B`$fd*8l#DIiHseM_d^hKeyP>MX% z741=?#YCeEBkF3RK@eghaihkKi6jQyXk=sD5#4$Id*?FKsfjb0WbSvqbN=)A&VO%y zRCMw4qKoszT3b1H>0UJ@DXyF&!laHQ3}bnZ(A-`H@0C6bv^tgfIVdk$r=0S3qawO; zJnu1cciHWrR55Q$!`0=z$=*bNLens046iHM3x6#8D#J^!Z7SBBC|JF@DmapV6x``w zjmIvBoo#>RQ8LZ#Jwb`aOgV>-+t;E~%ib?DhqtZ?N}MK|ahTd#okeX&O;F0XAdWKF z)e*ywZ1*tc!W;v-J%;b?z!=O}A}y?ZI!3>HW=&ATsUpUtxKIv{z!q`lh-5N{gju}5 z69aQ02vrWQ?~Fstc6wM-BBX z6xShcc}?vM=a|*`o`PNY|D5 zu^Oa!0dGtXKjd8)HAISh%R>5K=yMt7h8p0~P!g^Uy%ceUB!+vgpg1#(QhT&3xi3c1%7F&rMdq zvB~amOoHRq;h4NoPn%Fx3D*P9@>*slhM>p>XL0Do5b0griNv;g@6X3)2nd zxI)|uI-JJI>8MtLIuMI2e@@3vzn^RzCC;~Q#i__iq7d{V%ZXF5)9_3K9GgkP z+cQzIC>XqYFbYSZ;ZCHX=yW`Qe@@pwz%Vl2DUt|3f=6f5VJ#Bnu-NkIY&_!WGY#d| zJ8|xJG7ayZi8Lfp7jlthAOU!03NtfVAV`|AKZ66RZbKH`2|uKX@>iXz60nl41DP^b#A$nwdBs8OA`mCXe| zl6n2LffW^;a>gir4RzFQq#TOp->K48ixl;r)KDrB{t;GN3RmatjCPzB8VyAa6gU`$ zS}Mc@PNxu)|KY3jQl7@?Q96U}xvY#uJrxFYIH>~6Qn$1szO)dFx9JjJiTim!9uNNs ztE|j{SI{LCilsl95K%NE z#a1+H7GcmR;fRUWqL=wkI4##f0K$Y6i7gNsF_6f9O@2g3TM@eOkn>nY!bGE$j1rsm O2d8#n?uX%gwfF$)yl+bY delta 657 zcmZ{gy=nqM5XU*cAQw`INZPYF&?d~+?%t-?HZKxHwc02!hz3XZ)0hv zcSl5TbYWrm4ZmUjQ%-+pA8%bD^ZC9TF+3#x@SkJ(ufl6&FY?KN!Zs=+DSkS4(YR94 z9o?o3W!GNmRC?O`>liB5y}0qo9Q~#Yo4(Y(>J*c~%k6#UvIMG^ER(n{Ku~O04IguF z+bwW_ZHDN*Vho~~7uRM4jua!{n&l@u5wn)X86_LN3^`I6DYKwle;zom&cR4336oJ* pV9wM)HrOON3BnfD((F*r^E6Xu6@d%PoA5pQx;Z3|({%o{*aQ1ThTZ@G diff --git a/test/reference/html-margin-page-break.pdf b/test/reference/html-margin-page-break.pdf index 1aee0ae63f2571fdaaa2e9cf1ca53251891e7b86..b33794de7ec37b731653f68574951c40694d62a5 100644 GIT binary patch delta 542 zcmbQI{y}v@50kOk#J*pQ8Ixx-h5*U=EXtErnKXc`1g4ElCZ?N(nfVyOvO1H0GK0kD zvv`ALO(&bM)-aixY~IAm4N`H5Ee>kW@Kn+ zfFWjNVh9$iM{<*qu{ow@Q$q|(jLeKN9BpK7hT%se3rh?~8ygs#AUmcW6dcBeW*9y; z2I@vu2v%o;84AXxrVyVXdBoVv6vNRb1_l`FObjd-%_lPoPvHbc5tpi}tG^onZ7Ors delta 702 zcmeyMI!}E<50jU_!gb6e~1c!_xi#HCLUY3naW(J!bSh*pl8kxdPg)k@ku*HG( zV#>Sp*e;+6C*Q5!^y!y PQ#g&yOu1B5UH#nv#src3 diff --git a/test/reference/html-margin-x-y.pdf b/test/reference/html-margin-x-y.pdf index 70b1e792b101ee2d518ea3b1185273b033e7e41e..c180b86852d504ee8dfdc1067a73884a9fbb4b90 100644 GIT binary patch delta 381 zcmbO(b6$EvKeMTk#l}enjEotRZ!=~9$rvU}#*EGDnEW`!42%^FKtLf+feXwqFfuhV zm@LF&S#NG;fG%fXVPT3cW@uoDDQ0M5fuYU_i(V50Om(Kl<{-WG$c{2JGqc1n(82)I zVoPI84;f&3#K_PB!#pEnBO@d`48g%+WMX83BnS~RH^Xo>&~qk}t9U1K8CjZIaH*=g H`nv%DKl4o_ delta 426 zcmZvYJr2S!429J)QRvD7LzZp`y*O!NZ!9pvEf53Z3Oxdd44eaT1U43~gj$xW#*_8= z=lS_Fzb~$rQ2-t{WNDq1Q;(HlXICudlwR3U!(}cCJ`eeBJd3qK8|G|^E&&~qk}t9U1K8CjZIaH*=g H`nv%DKl4o_ delta 426 zcmZvYJr2S!429J)QRvD7LzZp`y*O!NZ!9pvEf53Z3Oxdd44eaT1U43~gj$xW#*_8= z=lS_Fzb~$rQ2-t{WNDq1Q;(HlXICudlwR3U!(}cCJ`eeBJd3qK8|G|^E&*TRSNmX4_n}j}Cfs==E?vCD zKf|ee$I)UV6i?ak(ke~Hgdu8ep3>cU5I^fg`plDse#Ne%`OMyT| u8cIb6Yeo(NLk~eFNI&F;O=j@%JJ7i&@W&*Qtx*BkYHbtLAd@^loR42rQDFiA delta 614 zcmaKpF-`+95JlzP4I)+&A}FF1k*tV_Ze@GMUb~}#mNHjJ5k$WYeQqS~3=WIAYSqlfMc3!M$&sISkry^hS4ZSfF8Vu>Z zxaw>%XH%05a+?$f3er=Fvp*dX`B<9Ku_Lg_7His8uTzx}xlW3R-&RBVtZx2swLL#N zX8ho9yUVj)f6}-{$neBQ@c5BnB~pFicMkEir@Zy2nwCD-H0aC+zs#b~eO9Y5yGujq z#y|#ihik>mNqDL9g;c%>=qBR&~qk}t9U1K8CjZIaH*=g H`nv%DKl4o_ delta 426 zcmZvYJr2S!429J)QRvD7LzZp`y*O!NZ!9pvEf53Z3Oxdd44eaT1U43~gj$xW#*_8= z=lS_Fzb~$rQ2-t{WNDq1Q;(HlXICudlwR3U!(}cCJ`eeBJd3qK8|G|^E&n05tbUCjbBd delta 362 zcmbOuxj=G4FQetez8c1i&FqYooZ==11_}lsppd7)1!fo+85x>Sp3Y@mZ;mcwU}|B6 zA!crfDQ00}ilNRDQ?H?+0fst5BV!YY-g<2n_cV4>E>%@me>VWYbx3&t diff --git a/test/reference/piechart.pdf b/test/reference/piechart.pdf index 1a815b3aceee6255b856808987bd38e4345cf1f0..c671f4f482af9fb424967622997d3351364e7656 100644 GIT binary patch delta 498 zcmcaC_e^%eL}m*E(}`0aPi|*CIk|{w>SQTqTOb`gc`1_u2yYf*Dd!M0w6ricG%_@R z0Br+<$+LLoNEldJ7%6~-6!H|fAaX|LmX?$KcrEJgG3@k7#HZn5A^pG*8M~qC&FwHYFFhsHg5>`g$ z2F6H&;2<(KFu`!Ov7xc?o}cYlLaB(7NK7oOATf{$7)piM`U_NMvei8nVA0z!o4w&1`W0r}(M>mGtb39BXV zrDzX84l@5WbTj0v|Au5$z!*ZNl?im_53hBh&XHbuXKSTE+kPP7^0V5`o$`vpfjAt5 zv<>qtLMIQ~Xv&Z}uw@E$&{`3bKie8#u_|jYWtACQDs+5WRHe~1SyyqPGLy@b|0S0q W&&9*^dNO^Q+%!TdHexiY&g);<=Xt*X diff --git a/test/reference/sierpinski.pdf b/test/reference/sierpinski.pdf index 0dd3107e373016fa15672a97e575c5865254e8d9..1b5a39f9aa809b776fcf5fb45710c6a429469b63 100644 GIT binary patch delta 6310 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 S%<&Gj+wGBFwQ9W+)8@YxvC-fF literal 72417 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 diff --git a/test/reference/smiley.pdf b/test/reference/smiley.pdf index 8f694d4f887f577b10dcb58de421df0525f37810..d2613d721f07a4c2c27db21c3e7c3fe2675100be 100644 GIT binary patch delta 523 zcmew&vqxsa1SVtiiIetEE@Tv$oXN;Hxs}m%@;OF@$-f!U`y8bE-yfx+b6-1Ec?jTFEF3V8}#5E&yg zBg@J8JeKtqW|ru329}m4=wgP3Mwntorsf#xjIro7HN;eBW?}}?TW?^1aFn6Bxdn!S zmWCJ>8yT2jddLvdBSuD+80Hz77#kwl0SPH1Q)6Q!L2wWmS(szE+Q`z(c=B~#`#4A- o;wJ4BY;a3LWb71Tx$Nw?ic1oUN-By{)3}Tc%*?q|RbBnv00vuf8UO$Q delta 551 zcmah_y-LJD5GFYgS$`VA>WYXQcnEQJW;eSl5+RqwQo+JXAw}dYJRz6DE`={}x`>@V zgoTaZGx#n(fOjb*xPmjy%s1cseeeCR{%qzOx_|iSowBh#@wV-mw{E9i*5+^C)>0H| z6I|O*@3DnS{|9RPCvW_^(K}imVkklwvb|AN7WLK5BrWPP*h%*hkaL*3;*rE%Kzq0H zycy{L78Xnb)&_u)mR7Br#-RLN;~>GoxOOq( baPU9noW(Jl)HCo>^T1h=U8{~ diff --git a/test/reference/w3s_arc.pdf b/test/reference/w3s_arc.pdf index 5793d52dfbbb7dfcbadd10b5a3421ff778afa899..fa93aaf78527a841dc80719ead8d58e1b92b07cd 100644 GIT binary patch delta 360 zcmew_@mpfT1SSiMiIWa*j%4KF6g5^b00D(O1uihdz{t?TU~(0gb-e+)jDe|%DTbJt zIi{F}fdz&-OH93n24)!Q3=J*KA$sc(PBJt$vP3t~(8LVGVnb6)4DT448)10F(82`M rJWC5B6g%{R!C_=zVS*wE5;HNvaJ7-Cp~>V&+*3IWEx1%wUH#nvXtGG{ delta 362 zcmew@@n2%X1SU(PiIWa9W^4{(k&>eG&VLyH_*_;48vkWQ%el*7@8Ylc*M}c t6w^FQ3o{fu^nt-)WME-|A_x*QF~)GUk*T4@|Ljyw$b%ur}W+1(j*|~Y^jm$03%`r4F#IVoM)C9vHhGv-V vH#E1zG|$r55Zw+V17l;5m0*EBuW${B)&--`9A+2yGGEmNQBrRD0EZ>z_4woF!EMm_Awnt_l5quUv&y~DId!AGUV zQfo}2`b2v{QS|}By|*5RLQ&9kAbeDd5kwt?QXc{idY*7G+JWI6jyR0OpXQxP?E*q~ NU0jj~F~3o{dRb%q9*dJPSYFx45E8iVxKBRk5_*uoUUKvN?Oiw(_8 zFg#>vj_DCYO9Kq^j0}t|kn8}u7YK|DO$?9(Az~&L7_K%lH8+@C$1{b~%-n=aRn^ts F4FGKCOD+Ha delta 378 zcmZWlyA8rX4Am(OIbDYolvLNGw|zfn0BD&52>}~q02-pBV+5o$nS-5BQbn;Vf1cm- z^HhJD*SBy4!}u6}b#c{{@2bgGT~_7vRHi%xau(*WH>;Nf$a%=4?)t#6ok4;idhBGc zi@e1l%3UOqI2Y2q+pmv8&z&HQB!n>qVF+0oAppTg=xL>~Ti!wBvoiaN#hnzB&y{(X LDY0(b73%GMrH~IAfS+^zy)R)7#W)w zPfq8ytT(kVMwc@%H?Y7EvoOXKvotqES7&I5sn^iR7*n0GnE^;|J+h+=O)QNt3^X&s zu-MSt6vIP?7MLC}GBCt2&&bfk6v+-laBvtInV2I9Lc~lhF2bDphtw}HEAQ;?`PA4=-2?!(I8fcm;gfPkXVAXXxIQHP(-m5SN5Gh zcYbE??0OkHlIpfwFcsb~VZmaKDLP-6_^+zZW{9qrqx}&7dW;UqEPyl6ggKeCO@JI> zJ)cM!0`@tG926#~Fa#(4K14l>7IdGp+{~6;QRpM6g%R{&w#pESHbNk39}(Hk4Q$^* ZmV5{NVIe5h6uqy{(|f{R(mY>n*I$ { ctx.arc(50, y, 20, 0, Math.PI); ctx.closePath(); ctx.stroke(); + y += pad + 40; + + ctx.beginPath(); + ctx.arc(50, y, 20, -Math.PI / 3, Math.PI, true); + ctx.closePath(); + ctx.stroke(); + + ctx.lineWidth = 4; + ctx.strokeStyle = "red"; + y = 80; + ctx.beginPath(); + ctx.moveTo(150, y); + ctx.lineTo(150, y + 35); + ctx.arc(150, y, 65, 0, Math.PI * 0.8); + ctx.closePath(); + ctx.fill(); + ctx.stroke(); + + y = 160; + ctx.beginPath(); + ctx.moveTo(150, y); + ctx.arc(150, y, 65, 0, Math.PI * 0.8); + ctx.fill(); + ctx.stroke(); + + y = 280; + ctx.beginPath(); + ctx.moveTo(150, y); + ctx.arc(150, y, 30, 0, 2 * Math.PI); + ctx.fill(); + ctx.stroke(); + comparePdf(doc.output(), "arc.pdf", "context2d"); });