[cairo] PATCH: cairo-www: add ellipses cookbook example
Bryce Harrington
bryce at osg.samsung.com
Fri Jan 15 13:29:35 PST 2016
On Wed, Dec 23, 2015 at 04:12:24PM +1300, Lawrence D'Oliveiro wrote:
> From ef369fe63ffaf504ca66496047e667e39e17bc2c Mon Sep 17 00:00:00 2001
> From: Lawrence D'Oliveiro <ldo at geek-central.gen.nz>
> Date: Wed, 23 Dec 2015 03:11:00 +0000
> Subject: [PATCH] add ellipses cookbook example
Thanks, pushed:
To git+ssh://cairographics.org/git/cairo-www
3a0314a..32153d8 master -> master
> ---
> src/cookbook.mdwn | 1 +
> src/cookbook/ellipses.mdwn | 114 ++++++++++++++++++++++++++++++++
> src/cookbook/ellipses/ellipse_right.png | Bin 0 -> 5649 bytes
> src/cookbook/ellipses/ellipse_wrong.png | Bin 0 -> 5685 bytes
> 4 files changed, 115 insertions(+)
> create mode 100644 src/cookbook/ellipses.mdwn
> create mode 100644 src/cookbook/ellipses/ellipse_right.png
> create mode 100644 src/cookbook/ellipses/ellipse_wrong.png
>
> diff --git a/src/cookbook.mdwn b/src/cookbook.mdwn
> index f164bca..9e5471b 100644
> --- a/src/cookbook.mdwn
> +++ b/src/cookbook.mdwn
> @@ -4,6 +4,7 @@
>
> + General Drawing
> * [[Rounded_rectangles|roundedrectangles]]
> + * [[Ellipses With Uniform Stroke Width|ellipses]]
> * [[A_description_of_compositing_operators_in_Cairo|operators]]
>
> + Matrix Transformations
> diff --git a/src/cookbook/ellipses.mdwn b/src/cookbook/ellipses.mdwn
> new file mode 100644
> index 0000000..8779e47
> --- /dev/null
> +++ b/src/cookbook/ellipses.mdwn
> @@ -0,0 +1,114 @@
> +[[!meta title="Ellipses With Uniform Stroke Width"]]
> +
> +Cairo has built-in calls for drawing arcs of circles. The following discusses how to use them
> +to draw ellipses.
> +
> +##Common Setup
> +
> +The following examples will be drawing an ellipse within an image area defined as follows:
> +
> + const int img_width = 256;
> + const int img_height = 256;
> + cairo_surface_t * const pix = cairo_image_surface_create
> + (
> + /*format =*/ CAIRO_FORMAT_RGB24,
> + /*width =*/ img_width,
> + /*height =*/ img_height
> + );
> + cairo_t * const cr = cairo_create(pix);
> +
> +The ellipse will be drawn as a circle centred within the drawing area. Before the circle
> +is drawn, the following scaling is applied:
> +
> + cairo_translate(cr, img_width / 2.0, img_height / 2.0);
> + cairo_scale(cr, 0.5, 1);
> + cairo_translate(cr, - img_width / 2.0, - img_height / 2.0);
> +
> +This shrinks subsequent drawing operations (including path
> +construction) horizontally by a factor of 0.5 [about the
> +image centre](../transform_about_point), to turn the circle into an
> +ellipse. The ellipse itself is then constructed very simply:
> +
> + cairo_arc
> + (
> + /*cr =*/ cr,
> + /*xc =*/ img_width / 2.0,
> + /*yc =*/ img_height / 2.0,
> + /*radius =*/ img_width / 3.0,
> + /*angle1 =*/ 0,
> + /*angle2 =*/ 2 * M_PI
> + );
> +
> +The following examples use a thick line width (20 units) to make the problem
> +(and its solution) clearer.
> +
> +##The Wrong Way
> +
> +The obvious way to turn a circle into an ellipse is to apply non-uniform scaling to it.
> +This works, but is prone to an interesting side-effect:
> +
> + cairo_set_source_rgb(cr, 1, 1, 1);
> + cairo_paint(cr);
> + cairo_set_source_rgb(cr, 0, 0, 0);
> + cairo_translate(cr, img_width / 2.0, img_height / 2.0);
> + cairo_scale(cr, 0.5, 1);
> + cairo_translate(cr, - img_width / 2.0, - img_height / 2.0);
> + cairo_new_path(cr);
> + cairo_arc
> + (
> + /*cr =*/ cr,
> + /*xc =*/ img_width / 2.0,
> + /*yc =*/ img_height / 2.0,
> + /*radius =*/ img_width / 3.0,
> + /*angle1 =*/ 0,
> + /*angle2 =*/ 2 * M_PI
> + );
> + cairo_set_line_width(cr, 20.0);
> + cairo_stroke(cr);
> +
> +Example output:
> +
> +[[!img "ellipse_wrong.png" link="no"]]
> +
> +The problem is that the CTM also affects the `cairo_stroke` call. Thus, where the
> +curve is narrow, the stroke gets narrow as well. This is probably not what you want.
> +
> +##The Right Way
> +
> +The answer is to apply the non-uniform scaling *only during the path construction*,
> +and remove it before calling `cairo_stroke`. Here the CTM is saved before path
> +construction, and restored after it:
> +
> + cairo_set_source_rgb(cr, 1, 1, 1);
> + cairo_paint(cr);
> + cairo_set_source_rgb(cr, 0, 0, 0);
> + {
> + cairo_matrix_t save_matrix;
> + cairo_get_matrix(cr, &save_matrix);
> + cairo_translate(cr, img_width / 2.0, img_height / 2.0);
> + cairo_scale(cr, 0.5, 1);
> + cairo_translate(cr, - img_width / 2.0, - img_height / 2.0);
> + cairo_new_path(cr);
> + cairo_arc
> + (
> + /*cr =*/ cr,
> + /*xc =*/ img_width / 2.0,
> + /*yc =*/ img_height / 2.0,
> + /*radius =*/ img_width / 3.0,
> + /*angle1 =*/ 0,
> + /*angle2 =*/ 2 * M_PI
> + );
> + cairo_set_matrix(cr, &save_matrix);
> + }
> + cairo_set_line_width(cr, 20.0);
> + cairo_stroke(cr);
> +
> +Example output:
> +
> +[[!img "ellipse_right.png" link="no"]]
> +
> +Much better, don’t you think?
> +
> +Alternatively you may call `cairo_save` to save the entire graphics state before
> +the path construction, and `cairo_restore` afterwards, before the `cairo_stroke`
> +call. Cairo’s saved graphics state includes the CTM, but not the current path itself.
> diff --git a/src/cookbook/ellipses/ellipse_right.png b/src/cookbook/ellipses/ellipse_right.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..e2041bfc7b0481d1a23732b7d03c14d61696b5ae
> GIT binary patch
> literal 5649
> zcmc&&^;?r`+<!J0j1EV4w=l2>VQ^@q6?I6X7zh$N;s_%IB&SFzAdM&>3L~T&q(MOi
> zM<eNQwA6ch&Ut@%|AF_~^;~<d``+&Sen0VjY++`=M9)hPK at gLXp{^AK!N4mFLc+n<
> z2&)zve9<_Y80bRBe?D3Dg^3Wv(P5;kebFy{EyLd;=`&yFKu^58y%J}$oIOm>LVCjD
> z0g(~W(v6mAb1!(F+$~~sr{Mj&wBmcW<vVYAHQSkdL?l^GM`uaT&_ulw*?C{oE&58H
> zG`|zsKOo`a|I&wCoBm_t?0|n`9eHnJ!{bL?`p`{rWQ#1P4lRaNL>tCh at c;3=V^@QG
> zxEX2U^hYKpCWeQ-cYfOGM1_Tg>15x#e_ue&_thiBk$4&hs)_&NrAtMhZxgY0mX=<7
> zl=;%qQn#bDj0`&r24i7i;p^+`?(UAk;M07Rk&zBjXo30p`4?wBNtJhB*u0sy)bw2(
> ztnv9#ke5eIOKUw4p#dSX63hzs4|gUnmtMPy#Tw@~zjNt4X<xVd`LYACq9Sitn1U43
> zVaYJt*%;8;|NZ;<jA7Bm*ONi}riCMPhYla<QFva1cz!xMI<($caC%cy)8YOO!(rn`
> zS`;2$Qc~hszm;56do<gddA_!&$Y}A{mU-$l^el{)rD1R31rrm~4N_ at B!oWA;9f!Yv
> z>8W^LzA<IzcElam;n}cvqa&7QfqWQF`0(Mw(nz7A-G@((N~yss?_mZ|=0w9obqNUx
> zDJg?RVb_J;G}}sduLln})uP0;VY`EagRDYA!AA%F*<l*ur%r7)g-~T?X6n#B5tPO>
> z7QKG`T=QXoscGDxb|xm at YJOqi_ud|zfUa{EbU6DlNe+!hho*1tL`OzOVoL;7z4HdO
> z^Qh?uSx)hq`ubMr=d!7F1<%aR`fM&*CK*fkvUcO)n at JrV9qa4&&^t%8j6#|RbKQv^
> z9v)yq8b7`Y^NCuVqN?iEgZh`Ol%2_7DJdx&4#yy%%bNw&yC`vk<@-?PjIzTvlUzFE
> z6|fbCi>P4;v6!LQu<Jb8 at KC34QRvQS@zwGhaf34AkUiC=j+vR6vvUsWWhM6NRj~e!
> z_I9xTPg&4;O9uz7fX&6^WX|lc^|rpglH%gto*t7$;TZ&C@$v5NE)^|vYR-HJ6)g=7
> z&4=3B6FMHGx~o^Oe*O0Cb~KZOxcKVV@=laO4|NDhCkeVUR+`^X^?hPOSy|cG#AGYr
> zaCUrnWh*~FKZZ;3!TtOB4MWAn^4Z(jyV|f!)4O*|VqzHD?HA|fHn+wcCTn~Of2>tj
> zRRwQ-z8oJPk2+goA-%k^(pNqyPD{Ve$Vk(=xilj4pgF}pps2F4k_ at ZBu2tL`k)}yS
> zyF at HKNXY|(Hot8=GJf;p>Xj?<4h<8IN}FfHnjNoHy7RPO4;_8$;2CNs;ctO2ymjkV
> z_Lg8sNy*yw+PH|*`||R&)zw$wmeQzmF_g(H$h_R|m$R&ZM-v_f!ZqYacVA!reA95g
> z$+W*K4gEUx>C>k#2D~UKx$EI^vgD$ws_N+I==#O&?QPz;2pd^{JY1u>&VOU-Fm|>&
> zj_>R+Q>DjuH9sXC!`ruIzdKsdBK&l3-I7U)=~rw#7)Jdf1s^~3JHx;bqvF<|Dw?UQ
> z4HHD)U%u$a@&fJBVa-x=)9d)?P{z8T=|o3c+kZdsp6g=so1{=E%1ar^wpAXMX?vL|
> zDQ+JK!*GYlpsuRPAO=s at t>w=Jeks$()ipJTlpe+P2g)ic({WwY*-R(|*U4*B=a{Rd
> zMuvxb6VFIUAh?ret0@%kjXVxjY5dU5Q~fWsgudk0)zv+J at uDxWGC#k4e4LMaH|{J+
> z$sGG649>l>ybRz2e<-7_KAxV2`#C|!=zizU_~4*pfA0+STUZy1)&Z2RBgn&(mY#k=
> z&fFpOeBd^SbP)yL`}YrbXA>$YhFqgkZ52eKOwz~kD$fm%klE_l&II%Hb5ERKH{3he
> z{S_63?3%WgMqx{mf4&)e8n(sexH4KoAekf6&IeZR1!{@74(Ay)IThyTU+;_;03)JC
> z4e;yh>oYUXq<L^F92^`+M at J~Jt&HX6<)$V~*PgAbtE;v)tljWw*b-aT>(}(d`*b28
> zAau5ZbfS#&jZIA-RajiP;<vSY3G1JS9D%!DzpnjJHQvPBypSV8h=+%Vu#*z2KU-k>
> zLVDo||0=zs689NT65}lq00c@(1RKGiSZ=harl#Pqj*U$+>hk#<L at k_O^Y7})O3q<;
> zNs$Uh^Y@~dVU2#S<(tpX-W#$!KtP$tv3zGwii(EXa3jGmCnPW6E1(IErxBJgHFb3y
> znZ$HUL`*EqhWngQ(5^_{!GPBB>hf|9hdx$GwrRRGl1!@ash#-z`7|2+#92_dyStnI
> zQ7FzoFfcGENV8poJ=7Am{qsA6jJc7~J0dZkgC;&B<9oWQkFWxSi}H2)rJXu-lV91@
> z at ZrPrWKOe}ngX1h`e^p_nVA`YQlxnji9{q4*KsWpv at v2BBO|)J9a;q9ammgJ9Z9ov
> zWQ~-qgG2Do3Ds!-Ja`Noirhyqa9Yso at JtocoZ)(M;}=T$)Tw7XXG<02<-s+y)yxDv
> ze0WF@`O8meu&k_Xq|kgMPCO`;4`j5$90M7I0GAtCD%>wHFhM{)8Ml|F;wJ1C!Tv}U
> z1_EAq-pI(P;%RDVcsMnQsGs|!*`TGD?%wJbw4rKVWEyO0gl?+;iKsM2%cAI_wzf8^
> z)j~>KylreO1*aP3L-mDy>i5<P;IC=Bla!5 at w7u!7iMX|VlN11KM(EgGClhFjm1W8H
> z29+NV2m`}^o4Qy%Jv~{jMKx>a>gj3Q__?hq;}u}S2Dp}Rx}1RHAB|<@<zW+y*Fm!g
> z3~OuK^YNo!ih;hq6{Cw)PEL;BSf*BRLrF=TGxw8L0^~N3`Kb3WY*SW+%InhGvA+aS
> z#>^4a)%T|1WUQQ=+*Glg4?7#1)Aj4^wfqQz6k(Q^lXGEiP8S_(<mKzjNJlqq$Gn$M
> z;Af<RR7*wEj>d8L6c{Qoir<EMaLE^hd|gjx9G?L?mIpt9l$DbkS=mChM)BBCzk2<8
> zd3ANpj#)LAmD+GBKA!nOa*T@})K%u;>8UvNJMw at V?MyxA#jTzKlg5w%?b~9pU=K9K
> z#l^xZ;$LeR9rf_9U(1q+E*-Jiscr6<{?L<lA9T@=Q=Rni%geV(#O&;BRAMSq6f{<9
> zmz%2FTPBJzHDw}WyX|0Fkn+83=zUI6QBi$;2Cinx1he7t>6K;O9WV<xG?@rCg$qb%
> z at 4Sz<H}9#NtnErST3cIP00`Ih at bFMu;O)83xO2CQFNDulXa5yRIcWf!qnf*-Q}BhJ
> zxy>Gh(JWJiv!b$Cltl3QxzlzrV)!~I9ehWJK8e^H51sXx$V%0%P!hrT_^6PvHw^H9
> zVDo|~HkEbiW$@9oo!qx1%zkKLp%nRBL4jnnk#5Yv<;VscIWsJbsu3GM3v at +sNy(DF
> zGT-;_-w8?bYHDi2Z=V^%_YxpN_C$NT-UmR~&Mq!gY2Do|!otBIJS=kt at Isw^eQ`Ji
> zdSO~&F(_{*iaM%Q{u*tM1H=#W8=FCb<{gZkot=y%8|ab7^H<}@f at CaDI$Zk*(N)!!
> zA9{dTTwb2B>)Agl^267$fyqtLkIy}6gb2AeU0nV`KNiMhQe{EjkTSdr19de*U+-IK
> zAHgv}9pb;V at tMtRS#B2i%qBLxGrO1QpH;CLK+#5Rj}H)ze^cX;criRb1}r59LW=s#
> zDME9XuhB>~$2!2b=;;SfNJH)7GrC7`r6Bg+U7sd<Fl}rC6stwM%7My~;ueBgK&nl<
> ziNYOZ_)at!@c at N<3k%Q()9XV#y~vPW+7 at eJRVa;3G)y&w5Da_2k_R?~@1=Xz{2ocT
> z^vktO67#mp0qSsjq|zX*|Ie!d)RCgM%(2IS7lX)HPHMvOOtpZ303oKPwDjZ>i3uQI
> zXtBrm*RL}BeA*Nt*y`Gv2plu|nVr9DFCj58aWzoONgINzGkgd-RBIQ%K|@L6;_MGb
> zior4Q5_2auLaFxpxfrVOe;PEOi7t7zYp-stuV-=T)+vcVbAdxo1!1q>yzw71{=I^K
> z7)b|9J;X|v3mN`Ym&Pa>22f*Q0YDugmg1p*ApC#hkW}MCOVLcjUuz5!pq#A8(;`gZ
> zQdyh&`j{y1+JFE8d2~irR at QG!78MNyl at +5H2t9mL&;VdsbH%8=fAe1-EL0u->LSQ7
> zLZ-N|G{ym>93U<dkzD{L{LUbbSMT3!BM?|gL?GDJGUA=NRkB8wK%)DnB=D$2ICG<0
> zqalLWx36FQ=Ra~pJN06&Uzcz_kL)5pssN+0iRphCAKy5cGI5o44&Kz<?6kW+{Vzb2
> zRa7w2)6dx1TUqG<_&E3Q_bKwXsVPSW1{*aRxnrr23<L)!r_}{#ns@>Aj at smm4WX82
> z5Med|h|=xt2hmO!jBRblfobqd$%QD?-q-G{*?D=P+m$5qU%fJXJGODs?FT2TlQDj9
> z(4wp8?jIgjl0<kPx!k(-7~XY)i;GMDB$aS!L_`FjJ!?iWZ*F!xD?1NQcWq^Lb#-}p
> zqBHl2p`jsI4Fbi%q4ys)4*~HeFDskF-Jy#@p)i6Wdb+w6jAB7w*g;CL>Hy+1k$b%K
> zrQD5$4AK|`?CkV38!Ky5?Ez4WfBrQ$H at 9BO#K`E2!xeJtACyTzAxv=IxPrR6bZ746
> z^z(r>xkKwG-PYiEAo&sAp-wdTUwCzcXeBAkwQKyHUUfZsK|E!ilbR$Ve`kAJ+hC6<
> zQ|bxFE`kWbprz0(<Mz#)S*ektfI@*3uIp)SX`x{eyns#+cQk`^46Ur#$=I;wvg<vZ
> z(N5Cu{WorOIqy7v{20}0h~PvR8XDrCd44Giv10w`K2gnP)n5QnjximLXx=#E{P(4$
> z at i+$HY=9HU=cem_d_qdn^m$wDwW5oopFUwq<HhM?#Gp>ECT(FkxfmO6EF>l&DXIKr
> zpY8>mb^Yq#Xo;=JTRw}z@^T*_p9q|Ib=?n2vKV*w;@n&@GG$?5;d?F4x|hlopgHho
> zbv+pw8M(Q+G7C>wW9c2;+;%?7y~SX=dVBLYX!>7YdLukvexuKM+Q)Gq+!BWTBdZ9M
> zr%&0t>P|$@&Ch43-KQUh- at 9zc`v4IY6Jsr#MBr at L|EZ335-z at 0!*2C+Wu<3I4s#r7
> z2a}hVx3abtQCJ<XGGBj`3*4OV`joaI0~m2tK9u75<#6C1)kX*m*3bR5Pi`zsjigOW
> zOQQ)3!Krq7ZTuK0Of~Q>+ZA5*k~Gi!`(W4W|H#3f6h&HE+R4V?mpBFxQMZZD?M0WG
> zH<6g8vEUu@<niW+`K?DwiYCeOA)7%h+w)|qD?+eu<Kw`>%}J_tdg<xuO;1mwthXMu
> zwCGH&>;rF&Eg5ZY4zUrJY59$u0;Xnr-19H25^vnn($bA10dQYnFxVN&&swrF324r?
> zE{(0NtutrNG=1Og6bepN*#KrFB;@YhyL^0neQ8(I%QQjsf=JQuBxyK`3H`mU4VWuQ
> zqkj0)r;3|HqK;yKNP$niNHOI5qv(^8lGbq|*4Ea2iQB|6dn*0;bEP>sEgHA<nCaIE
> zDGotAU)~@^zJC2$&~G#^Q3piTbG5>Y7?|MGloVR>6?=PoQ&ZCd2LFu(Qx+B$zy5=R
> zzegTD<CJa^15%fUY&%k5I<n+j5H<Gwy8ss#tvNRz-<@bbcEo>frpj6K_`t`yE$~MM
> zZt5$zzy8eg|MiECIRp!ky3fUrmpM^=cYJgCZ3L}YcwT<~5R>G63%t~;qM~;|KkcaS
> z at x1^Afe~Y(+koJmJ9qqKfq*TsF_BBsz`!yWW)rj`aHn;mKmh~zE{%bs!~I*PW54GT
> z&8PmcWv3Jr6o8GssFofV*H?LWT=<W%D~dG?C;Z3^EF}_?M(v+6NjIrnsqzp=(lkI$
> zpY!N`DiKiM(8vSKWi*GJwArPv)n2(W+ex4P7}UT2)+os|K&B~Q2d2PuvMOlp8}ZAR
> zE734^cJ>QZZ^fDD*WH1frD5hbe8&LPz)6ROy88NhU}A|x1>4HlpC->iRDi0*!dK6y
> zRES;k3-1nI=wut3n=8u5_%A!9nH8!7pBE7DK_@$_VaW8w89E|MJIl%m=Kx7GdPrA@
> z`kt2;kE-`v*bcA9M71Tb-J_#7fbEu$Fq-Kx(+PoZ>bkhhE)M0sc>X+`xg}9Mj0Ob3
> z^qqn8_zhS<OHa?8{q42n<YXP%=`bR3t3N~i-Odgp{UC#Nq1oYT`9Qc?bL6ErHbeDE
> z;wI~;S2%DAplqN^<n?%4w?hilI^0bBQ$e5~lmfd0ULZOq<`MI-6cDt`0&3JR7klA=
> zo@%^iJMxSY0bznZ24J?@+uOmm|0!lL4PMsJ(4cH=Jbd^N^qw%zS3Y}|D=>Ic8}>WI
> zsz}3kkx*4t1?nns2?^#wK}Tgyt>Mg~5*GNQ=^sA|ZQfjxO#+=Alaq~ES(xx<U1s`0
> z&x3=5=;-Lo;G;j)8c})q;<7T<;C<k^*PBO1tV?WS=32dhL)hEf`}y-HScSMWWS*Xp
> z0X$T_b2~lk<q54+cS1(S+T5J at MVg|pD(!6G&HScY9szg;<t3{kz~ASS9$8(XF at U7O
> zK`F?|*_JtmsGj|BZ at T6Ed*#(b6f4Ef-QR1b?J<Dc=fC~x*IO7sk!|t#l4cfkYG`E(
> z)IkJ*-;?>!@bcwk1QVa%1x5V;=q+q9cWec>_AMzb?JD5c{N`V?oo=qKz0Xg_%nztO
> zN1~d-uhsc^^&~5dSKh6Cu*RF<on(9(7;BJ{alEIa1J2CBr17fN0b94hSq<eH^z`&7
> zf-=X@(63&t@~SEpBofKY91o}?F7EVD5sGq78eaoo2V1fYaK6fOvccyEvq&2-hX4eC
> xjO^^BJ<4FtbI5{_BU5 at DEvKZR|DWfW$}!rumbft#1ZupHk)D}usg7gl{{T2sZOQ-u
>
> literal 0
> HcmV?d00001
>
> diff --git a/src/cookbook/ellipses/ellipse_wrong.png b/src/cookbook/ellipses/ellipse_wrong.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..720eaf860886cb5cf4503db733eb25e10fcff02d
> GIT binary patch
> literal 5685
> zcmc(ji93{G+s2<6GmIg|+8|8!m>4O_Iw52a3E8(qMJd^hosbw?*(+4CRrV!YmWWE$
> ztdWv!EHN_pZr}TTf5U4I$1Klt+}m?q=k+_USYt!&BWPYU1VKkG>S&rk5Da{TK`1zQ
> z8^EZ^f;W0cJ#9_s;P92#SVV>(u0Izw&zt#XEoWah=G5lv46wAor0pjE)QV-CF^*vn
> zXcsQ{5sG|@HRaT0DQ0&v?qMxl7fm($!}US9K$ffL0blHuc9bva66VZ{n6zUZ4}OH<
> zih3&X4(CUL)ZF}VTfMd_ZwLBU7nKPIj~Axy_Am9m(<vG_4&`x4mC`{_IthXX{~P}n
> z-uxsjGs(+0Z!XVvCI$oqu&J}Ku;k?A96x^i;lqd4+Rs=pB+T~8gp`DYgtWA at l$3|N
> zJ8y-S7}+34*>Ar0@!Hy2etv!g$JbbtYmBUvii!#Y%dxY*l<5RMh0T9$u^i%sg at vV7
> zmFPO;TR1!;Zfk4n_3PJ-0oy+J?(xu!tZi)64rm+T=DNDNCj>qUoZsG^o}S)kWqe_N
> z-u0E!+{()SY@!+qGqYEt3moAOahTfJWT&P1EDoI{AN-1mLDgETI<z9l2iKm2e$Nxr
> zC>n5ab?s<x&v^D%IO5f-SB_3j)t*x<zwjJz71DL%;=$r8Wvaonv!VAyMMP*@-#z>K
> z`Vd2+zC?)Q^T-HRP|)u3<qJ0wl9H0H_2;B^JGT!>m=PhT+JNm9+Rnz};v!?20)bFo
> zUhXwsb30;Kia>;(y?FKNiAq3~$;&zCWm{X at 4<9}_I5=dzw!xC1sEyV42Yp%R-WC)@
> zwlPnWl1LD}iJhGwAKz|aG_TH&)m1xlb9w(wx6*J65ih=P7&FPiA0Og&KL2A=KXT;A
> z#fumB_V%n9Ds+fYBM&dHRo&g|E-s?O=WV_I{uw;uG31rqDg=XV&M%g|R}I-$9zGEz
> zoZj>H&6^rS2fyYsq~I)Nzf&hp#O5j);JJVO`qkOl>CNAs48b<@YHQCaD>poQ7QTq{
> zY at e8DtgGXdjv1xXz^PDw#K};{!2*_-mve)*c!p2l88M`jcWP<<Y6o+QNV%PzooE*R
> zABvG5APt=P=`&{{qoeQp_&k|=KRPmkU|`tY-PJ2FiFjmHa?8!_MM+7}`dsYAeKqEY
> z5juFe<Cmuwii~pQ*K^z3+eO61`=6YVQdAu4=x`nRDsGfB-r)DPriMygo9$3DZglQW
> zCW{;K?ijrw#Z`OZ<Cm6hIBk`elq`$q2AbH|d<ssueEIUi!a`M5Rmbb?t|a04 at 8V%F
> zgneFFnG6osTrMWT9-DUZs`=Hc9wV>#czI1sO)m%~Ie4(5(O=z8i%syr5eR$xp0txu
> zmG7sgr{j*w at CxR=cmaaFtDO0J)lE57QaKFfC6TIo^ypDKD_dP%T_dB!myR#YUj6Jz
> z=fkuO4pufcPMFCe7*Ql)VPTCa`D-pNsgECDUl*||@c{#yoBK~yO_n=^cekM!G1CbW
> zoai7K4N>;)e2wVdqYGf4K0ZGGv|hb at DQhR9$AIt^77V85+Zuct8rtf8EH`hMnw~D6
> zq_c^xy7N=lyXcKIk(A^|nGUtUyH0i8xN+l-w|BR5Pj~khsZ0yJxdf;48_Q!9iT17=
> zQ%yl`ZZSc7r8f2K?Cibizg&`&lTXRXjSjOOIkG%nI}qrH=PNxjC#+lWb#gLiPZgZJ
> z+|DC#m`farXU{e-=dpzf*dw-<MmMHH4l3|Da at YFqPX%2YQWjp{=vRAxu)m9s1BwB}
> z!DC378?DTAI;*LvDK9Uts!Cq|1Ng|r#kI1sGH-ZB=;qCv9Af(RJMQbhzdT#~^Cv#A
> zLEV?gN;p<)-S-CM>DKc1&dZD1C_g{Hz4aa$eB4zltN6ed7c;z6=x6y?8#Y*aY|?Xb
> z`tDg|8y4y5={fP76%q<tEN`HTB9?hAk5!J0SjeY>DM2&@W>i0|uU8ThdYYdfYOn^R
> zWint@#asIg&K|XizEhj!@^gQ0_kR-%r2dkO*Qh5>l*mefCuj+iyGI(fQd3e=$Yc#1
> zdjL4M^^Falp7HVVCr_SCn^4bvrfa|{D5M)KR##Q+ at 9(ZM&V7k1xms;?Rjz+$^vjpq
> zf4-f7`{9w8X(T?H!DHyPLrA`U{O#F}Alh2z4M_*i%~J$~zm}<~DUk at x&a#@k+yrZ(
> z1x_`Tl$<<$+N{82rss7 at 2?$hbE#q9Mz%&myW~I#N5c!*9?cWP$fBvj=Xru3V)6#OD
> zdh4Ti9)qvejT=jq9>bI~K&}7&{TtONtQ7^e)!f{ilOqr~y16hQW7niF#@-()03DAQ
> z8yoxh at gufJb#K#DwK_QBQE{<Urc~(HuV06T%;A1iRul=N4jzJ43Ade-lhelF6}zNv
> zCuSZVp7`qUcUH at zZ?ARF&78wQ>Zpp^@SNmiN6Pjk9d;}>BP*-dqQjMZ9V&$x+u7wt
> zM>EWB^jF`Sc#~o|<~iBWO>GD_lMJF!E1Ep9Osv0QpCg%$Vy_;6^_?sL0pRH9Sg8Lv
> ztn5<pAW%=|bqWs#`Z+&;YUs69<wx3iea1{}O$W{hd(`uR1saV;Sxp)F{#`*qLFwE%
> zHa!<*8yg!{RaM>udehm}Riofw&!+PMtX`{=Djf>1*f}^(7K16Qt*z7WmSJVr-Q0{p
> znygc}$B_0L0hnC{LtkX(NV>F*(4&Zc62uIr?(BSeEElbh9XNG=#rm;+R2dBBc9c|s
> z1Zu at cxnQV@<BsFt;8;6DAx2yfurgf(L0wm;82AYYcdWB4Q~V4llD?;=RIV7Ggk~3}
> zMo0ZR;(44~Gr}$3y2{!%nNBhuUZ}7uw{KY_`&nYxW1S}({HVMbk}Wo|@j_xqPHPRL
> zsHmuOGKIrG1hu%leDBVkR%L{{lhXirf at C8#tiHB(banMM(5y@}D5z$Vso~*t-Db4V
> zNrAjquh0jm&F2@%_(rgA5WL`Y2}rAwt-frf_I1h;e`HP2u6z?tTKb_ryLVg7ageBB
> zDvUqUUilAq(7`Vktitm*Z<6)d1>o at bcnf@v;yuX<f~(8F%?0YzdLBa_ONsf_%a<ch
> z#5{O#$Hzx3t at CwFU0qakv=drVQu0OPQT3M)I#RvF+zE~FhEX_a^FS}7Sq0gd+N317
> zNVmT!-5fi8>S9;3FAs590)@an{{7qS at O#ZUDlDIrZ$^6Zgtym3T)b#{+TPItg<)qG
> zO4XG`Qu&4KCAfgTaKAl$>XeBHI~$V*Bqdc0C_o<;9F4+a>=93&K8+DQuI213;(7u_
> zWaCXJEGR&l67!*igalAZ+gm9NyvP^D#cfkt+|MCu!dLf7{52j9YzmrWDajr?8MJL<
> zV%Zh?o}T#bVVD~y6!JVMFc7hGqnu187Zr&YLWn#hEr|t<7UGIHO%15WK_{o9iSS+I
> zv<s0moPUV~u%*|;9hv9-k(n3i=IPmqFYrM<H<OGNonbwVCaHb>wgpi)!i at 6`p=`tG
> z+#{J|0$|Lr(o*SOadwP)LpE~Imy#(@AT*!tET`ldLNvcy-(Fk-;MCrV(UMI4 at k{e*
> zImhAeND at f13X!bo`S~bIG#n*Jll8fOUpy^>gA!%xD;%Q;lURjOqBK}>fpzuuvU+R6
> z2pCDBp}08Cf<1?r4N;3G*An9xp+HvRj1=q}BY{8wXOQ6uYh(n~uGa)Zq)sEtD=S40
> zN92o{Iu{n92&0Ifi`7)eGm1|uU=SG9&vf=_tr#6}BPNg)f-{GMJ31{WDiCvM)cI`a
> z at Ul9Xp9q2BAn11(Sd$>aG?;Ny5!Wn5g4&ZQh(CzDK#cy*Dyd8(8%o)RQVv+ChgXTL
> zL_DJr*yzVx`fv}DgRwZYFH-cyEk<+(@f#KegEzqUgJfZ(kY7yx&`h{mM_7o|v4bI*
> zO{kUOKsRN23f;-K^5>84{|)k<Nqt9K);1cf;6NJnGxvf&KbX0Jp_vI%AyHa#=T7q)
> zczViI5F#$UG@}YC<}qMYfs)G0%V)r8oUPnPf?2S!nm>O3*1<C$t}00<;(+$OEt)kp
> z@;GxaHv!$L7NZWs3?y+=tZ(C*7e7lt!O!(dAWmBdr-*DeN)fV$Q8wEA0|LnCR$&lX
> zYE0OsREyK-NcdZ`=C^c?5G+b~S^#=~{V=2w at 9OErS(S)!M`0%>CaAeP2xS#9dW`*9
> z#q3f*$`)8hGjsDFOzP_DT_Q7Fr_mTJ7N8CR2~rt^37rhd0>8DrEzTXK_F00Ioz1_m
> zg_-UC%HDEyd2vy1rU!~K1WT2OX%!&#N!cUd at j5Op1%^e!+)>bfbRq+eAxU>U<d3r)
> z8yFBS&&+2PP;Q<Y<CSw|t{^monZSgEh1ZZk;DyK$%<-9RH5w7<0(iWjnt+|x&yQRn
> znZ0(_T>@dVENqe~Xw0!=OLKD(Cu;64uvZWe&7KeA;+V3xiENed7|o}L>3bf`Z(nGz
> zy0p}82h-Nl`VoR<BY>RD&}!7s&?qP<Xm8C(?MavMsI<~QZ)V0>K?n at Dg<%sFXKO}H
> z?8h+}k`^|x&R&`htAJ4B<&+l+-TTp&GdXE1E-v0XLd0`}f^GFLzyu)e<m4n6(o+%>
> z_dzoCBS0T#$$g?HE09tQH+R$tEHAGl9xsyCsh_19#5({m7{L6us$k8x5GtQX&UKn;
> zeSN)4L{>096La*awiu%t07OnsPK(VH9w0Ek`m)=G2`dN(jY=q9{Qb(xt+*ymX-UaH
> z3kxm7Bxv);;$jb#(>XX;^)X?dBpV0-Szk<;BPth^1jjFob8~akGD3bmU^U%j at wGE4
> zx%+IW<`FnAAD at hM4N)xq`UyP##;sc&!^XkLcp at ZUM69(o#Km?yaPT4Wwxi2`f$DWe
> zUfvO{mB2eVKEAZHq>oQtyL<O;m-8uF)*~1U2H$5V=((-JFzRvKCtHth{{73Z<P)!t
> zHN8F8#ny50{ZScPeKF=-7|fzFoQ{DdLoMcngWNt0hG7oHsDm8>cNo9j1ByBiKfi%k
> za#Biqx>43yHap=|-BexCNDewyI)BL7!(+FFL6DH<;^M-Fa$>K#HSy7cLr{>lL@*RG
> za*)HG_1~1(U;L<?Us}4-9?KE$LfH31AL0koQEAS&57Z~XR!-F4Cj<OY@>#+jJJvoN
> z^Wg`T>U+x1m&KY+*=g+E_4rjHAXVi+>Z5*7)LkDRdIW+HJfSEpUHbfaguX})ol3JD
> zfL^QzNV at H%Q4L&t%hFh7+^6aZP`()>Do}?2<>67Bn=3dweO at wk@_mTl!A+Y|HxCa!
> zB_I6kGTy^uF)E5a_!is`+!_T6?s%;?PtP~^ztvO0dbmVb;KnC~_!7b6 at 9bOPZhQSO
> znC+vqw2s0<_@?$Rd9{KagzWvjBA<#^AhQGh3=0i~J=PzZob0oxb?#>G5Kmxy>owB~
> z(3+4|TVJmrFW)Ky0alwv0w&m5|9L~w+uOT8N5x}Bd8xa<|Jq?VN?j?97&<rwP_*^$
> z;&74v<JLkGG4karSL%T<D6tCz7-C~%OB7IXG_|(172x1-TG8P~Y(ixOzjbF?wMovv
> zw{PzNMtc8pXsf%oXi>G_)urRM*9P>5oRrk^X1zI-F3XNFOYz>H>6UPO+^8q7N;Ago
> zEN_CCgv5)=%2b02eX;tW-KwIZqFU1g9l+yv at 1C9wNHhY?fR`mDkxV3qL$+5^st08H
> z27k-l-KxS7Den1+m6`eZ^XKI^_E7ov7KhF+3c~m)yug06w1fit@$Ndu&LjVczI5FJ
> zet!Nrjdekcy>k<7U9YiExc>gC7>|scoN1XafKicIOAM~LOWBt~T7xa5S5#H?b$1^p
> zF9Qzy=W6;N4}@#xv#h;SV0+CnRx>$0{o0C|xM5a#Ma37X5pBUB=M}RwCKN at B6CK%f
> zC1Gf2Xm@*6!R|S*mqAzGYYM&me>c`#5xnQ$XvL?lBf`G78gek;URh}HbkIG7I>SI$
> z_~v`f?Pu4?C}s>4ZSwN&?b~0fKOK)qCX?&y>kYV`6&LrEU$FrEH9gNNfFZ$xR;!i8
> zaky#FN9bTUdw(UXg-msIap4gpjsWZgd5EN^=N;PD6uJa#Cg^fF6azm8ETo(-{S*M9
> z1TCkr#^cIF$d!d((b<9{@PVd~WuyN+&=1%>V{T>!P+3<f3Hx@^sq^7u&s-F}FLw+V
> zBO_x+e~N4{jS7?n;Cp9#d&6W613mr6o}Re4xC82J;)4fh;o;PbjIQ}bB7|ywFh4&}
> zp->(^WFgZOK>X+B;X*<}w6(Pl{d{RzSy^$hQ=n+BsDOaL;NTz-Q?VV-R(gcJ9`Ld5
> z?vleNEP#$ArKE6{np)7~NCJ49x|D-iv_Ml??=>Q%;!C66_Vx9>dX;bZ{3MDwcoR9v
> z at R`oYs6S|Tizm?T>o~}A at EF|o{9*9l+Un}9^Pe(n4P{ROGoGp7DFAvA%vkusr_Y~1
> zw?;C7zgm`cH1Mq8`TbIi{0W0&)s2jdtgXkFzgL4x at h?q_xVgAm_!8+MIJWDVb|UBp
> zSq3Mzzedp0r=_L>uXCHfT`1H8qFdY8kdl;4?sgvUploePOGuE0JPA0`Ohi=F{@-D{
> zWAaU3o at uA2q%`bpeYZwpAROsZL}X-YTG~T?r8L^B at USrO)H)LQw1WrL;Rr&StWyUt
> zlA2mt$<~K1A7sgt|KiDHDJ~HliSbdlbI8G-LPe*i`D=^YpkN9L3Z5$FkjIg(KhiA#
> zs65#eRByR at VQh31SoICcOq+jDHB&QGecqrKG|b3pY38=Jx7H7iadC;J_dI+0RDVDB
> zIz8x)ad30{fX)!molGzJ%ivgZga5s3XgFr|zB^Q)*&2xC%1DJ1P?U}at=W~8CZFXo
> zAR<aiN|~Vfb_~<p at M6%t);gFn-Lg1bw)i*Nv{3(|fq{XZUieItB at BkT1iY)UvDey<
> z58(Ry1sFOc<lrJ%?9-Do9{aQ%r;hmJS&s~f5DRFu0SEBXOf`FO;>(vWZEeCLA_&8+
> pIT#Fj6<SaH?{qs4JFGN8f!NPHuSdD>fj%&F at q(ddsk(jG{{W3YUf%!!
>
> literal 0
> HcmV?d00001
>
> --
> 2.6.0
>
> --
> cairo mailing list
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo
More information about the cairo
mailing list