XׯdM6ddlZddlmZmZmZmZmZGddeZGddeZ GddeZ Gd d eZ d Z d Z dd ZdZddZdZdZGddZGddeZGddeZGddeZdS)N)ceilfloorfabsatanpic eZdZdZdZdZdS)Surfacec8tj|jdSN)cairocairo_surface_destroysselfs $..\workbench\graphics\cairo_utils.py__del__zSurface.__del__ #DF+++++c4tj|jSr )r cairo_surface_statusrrs rstatuszSurface.statuss)$&111rc:tj|j|dSr )r cairo_surface_write_to_pngr)rfiles r write_to_pngzSurface.write_to_png!s (66666rN)__name__ __module__ __qualname__rrrrrr r sA,,,22277777rr cJeZdZejdddfdZdZdZedZ dS) ImageSurfaceNct||r ||_dStj||||_dSr )r __init__rr cairo_image_surface_create)rformatwidthheightsurfobjs rr#zImageSurface.__init__&sD  MDFFF5feVLLDFFFrc4tj|jSr )r cairo_image_surface_get_widthrrs r get_widthzImageSurface.get_width-s246:::rc4tj|jSr )r cairo_image_surface_get_heightrrs r get_heightzImageSurface.get_height0s3DF;;;rcFttj|S)N)r()r!r #cairo_image_surface_create_from_png)rpngs rfrom_pngzImageSurface.from_png4se&OPS&T&TUUUUr) rrrr CAIRO_FORMAT_ARGB32r#r+r. classmethodr2rrrr!r!%sw#7tDZ^MMMM;;;<<<VV[VVVrr!ceZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZd)dZdZdZdZdZdZdZdZ d Z!d!Z"d"Z#d*d$Z$d*d%Z%d&Z&d'Z'd(Z(d#S)+Contextct|tr'tj|j|_d|_dS||_d|_dS)NTF) isinstancer r cairo_creatercr_owned)rargs rr#zContext.__init__:sE c7 # # (//DGDKKKDGDKKKrcJ|jrtj|jdSdSr )r;r cairo_destroyr:rs rrzContext.__del__Bs/ ; )   ( ( ( ( ( ) )rc8tj|jdSr )r cairo_new_pathr:rs rnew_pathzContext.new_pathFs TW%%%%%rc8tj|jdSr )r cairo_new_sub_pathr:rs r new_sub_pathzContext.new_sub_pathIs  )))))rc8tj|jdSr )r cairo_close_pathr:rs r close_pathzContext.close_pathLs tw'''''rc:tj|j|dSr )r cairo_set_fill_ruler:)rrules r set_fill_rulezContext.set_fill_ruleO !$'400000rc<tj|j||dSr )r cairo_move_tor:rxys rmove_tozContext.move_toR DGQ*****rc<tj|j||dSr )r cairo_rel_move_tor:rOs r rel_move_tozContext.rel_move_toUs A.....rc<tj|j||dSr )r cairo_line_tor:rOs rline_tozContext.line_toXrSrc Dtj|j||||||dSr )r cairo_curve_tor:)rx1y1x2y2x3y3s rcurve_tozContext.curve_to[s' TWb"b"b"=====rcBtj|j|||||dSr )r cairo_arcr:rxcycra1a2s rarcz Context.arc^s$ RB33333rcBtj|j|||||dSr )r cairo_arc_negativer:res r arc_negativezContext.arc_negativeas%  "b!R<<<<tj|j|||dSr )r cairo_set_source_rgbr:)rrhgbs rset_source_rgbzContext.set_source_rgbs! "47Aq!44444rc@tj|j||||dSr )r cairo_set_source_rgbar:rrhrras rset_source_rgbazContext.set_source_rgbas# #DGQ1a88888rcDtj|j|jdSr )r cairo_maskr:r)rpatterns rmaskz Context.masks '),,,,,rcHtj|j|j||dSr )r cairo_mask_surfacer:r)rsurfacerPrQs r mask_surfacezContext.mask_surfaces#  ')Q:::::rc:tj|j|dSr )r cairo_show_textr:rtexts r show_textzContext.show_texts dgt,,,,,rc H|||z||||z|z ||||z|||z|||z||z|||z||z|z |||z||z||z||z||z|z ||z|||z||z||||z|||z|||z|z ||||z|||||||z|dSr )rRrYrb)rrPrQrrrhs r rounded_rectzContext.rounded_rects@ QqS! QqSUA ac1ac1ac1Q3/// QqS!A#a%    ac1Q3!QqS!A#a%1555 QqS!A# a1a1a1Q/// Q! aAq!A#q)))))rNc |id}|dD]Q}||}t|t|j|j|jz|jzz}R|dD]j}||}|||t||j|jzz z|||||zz }kdSNr ) split text_extentsmaxintr' y_advance y_bearingrRrrrPrQrspacing line_heightlineextentss rshow_text_lines_atzContext.show_text_lines_ats  K 4((  ++D11!+s7>W^V]VgEgjqj{E{3|/}/}~~ JJt$$ ' 'D''--G LLAK7>GDU3U$V W WW X X X NN4 w& &AA  ' 'rc |id}|dD]Q}||}t|t|j|j|jz|jzz}R|dD]r}||}|||jz |t||j|jzz z| ||||zz }sdSr) rrrrr'rrrRr&rrs rshow_rtext_lines_atzContext.show_rtext_lines_ats  K 4((  ++D11!+s7>W^V]VgEgjqj{E{3|/}/}~~ JJt$$ ' 'D''--G LLW]*AK7>T[TeCe4f0g0g,g h h h NN4 w& &AA  ' 'rc8tj|jdSr )r cairo_stroker:rs rstrokezContext.strokes 47#####rc8tj|jdSr )r cairo_stroke_preserver:rs rstroke_preservezContext.stroke_preserves #DG,,,,,rc6tj|j|Sr )r cairo_text_extentsr:rs rrzContext.text_extentss'666r)FFr ))rrrr#rrArDrGrKrRrVrYrbrkrnrqrtrxr{rrrrrrrrrrrrrrrrrrrrrrrrrr6r69sa   )))&&&***(((111+++///+++>>>444===)))---'''"""+++###333"""%%%666LLLL111//////===555999---;;;--- * * * ' ' ' ' ' ' ' '$$$---77777rr6c eZdZdZdZdZdS)PatterncBtj|j|_dSr )r cairo_pattern_create_for_surfacerr)rrs rr#zPattern.__init__s7 BBrc8tj|jdSr )r cairo_pattern_destroyrrs rrzPattern.__del__rrc:tj|j|dSr )r cairo_pattern_set_extendr)rmodes r set_extendzPattern.set_extends &tvt44444rN)rrrr#rrrrrrrsDCCC,,,55555rrc||}||j|||dz |jdz z |dz |j|jzdz|j|j|jzzdz|| | ||jdz z ||jz|j|jzz| |dS)N) rrrrr& x_bearingr'rr{rrRr)crPrQrbgexts r"show_centered_text_with_backgroundrs ..  CFFHHHAbKK!CIaK1ci#-&?!&CSZSVS]`c`mSmEnopEpqqqFFHHHIIKKKIIa ! mQsz\SZ#--GHIIIKKrcL||dddd||dz |||||dz||||||dz |||||dz||||||||dS)N)rrrRrr)rrPrQrs rshow_text_with_borderrsFFHHHaAq!!!IIac1KKIIac1KKIIa1KKIIa1KKIIKKKIIaOOOKKrc |id}|dD]Q}||}t|t|j|j|jz|jzz}R|dD]J}||}t||dz||z|j|jzz dz||||zz }KdS)Nrr?)rrrrr'rrr)rrPrQrrrrrs rshow_text_lines_with_borderrs JJt$$ { {DnnT**Gk3w~RYRcAcfmfwAw/x+y+yzzKK 4  ##..&&aS!k/W^gN_=_*`cf*fhlmmm [7 ""##rc||krd}n|d|dkr|d|dkrdSdS|d|dkr?dt|d|dz |d|dz z dztz z}nVdt|d|dz |d|dz z dztz z}|t|dz dzz }|S)NrrgV@gf@gp@ih)rrr)p1p2angles r angle_of_liners Rxx a5BqE>>!ur!u}}sq URU]]4Ar!ur!uRU{ ;<|t||}|t|ddzt|ddz|| t zdz |dd|||||dd||| || dS)Nrrrr) rrrtrrxrrRrYrr)rrpslrrs rdraw_arrow_headrsFFHHHaAKKAaD # s1Q4yy}---HHaRU3YIIaOOOIIaOOOHHJJJIIaOOOIIa!HHJJJIIKKKKKrct|d|dzdz t|d|dzdz fS)Nrrr)r)rrs r line_centerr!s= 1be Q  beBqEk1_!5!5 55rcR|\}}|\}}|\}} |\} } ||z } ||z } | | z }| |z }| |z|| zz }t|dkrdS||z||zz }|| z| | zz }t| |z||zz |z dz}t||z| |zz |z dz}tt|||kr|tt ||krtt|||kr|tt ||krtt| ||krg|tt | |krFtt| | |kr%|tt | | kr||fSdS)Ng-q=r)rrminrr)p1sp1ep2sp2ee1xe1ys1xs1ye2xe2ys2xs2yrib1rjb2rwc1c2rPrQs rintersect_linesr%sHCHCHCHC c B c B c B c B 22 A Aww.  t Ws3w  Ws3w  2b52b5=A%+ , , 2b52b5=A%+ , , S#  1 $ $d3sC==.A.A)A)A S#  1 $ $d3sC==.A.A)A)A S#  1 $ $d3sC==.A.A)A)A S#  1 $ $d3sC==.A.A)A)Aa4K 4rcleZdZdZdZdZdZdZdZddZ dd Z d Z d Z d Z d ZdZdZdZdS)NodecZd|_d|_d|_d|_d|_d|_dS)Nrr)rrrr)rrrrr)rrr)posrcolor fill_color line_widthpaddingrs rr#z Node.__init__Ds0 ! &# rc|j\}}|j\}}t||dz zdzt||dz zdzfS)Nrr)rrrrs rcenterz Node.centerLsIx1y11qs7||CQ1Wc!111rc@|j\}}|j\}}||f||z|ffSr rrrs r top_vertexzNode.top_vertexQs/x1y11v!QxrcL|j\}}|j\}}|||zf||z||zffSr r&rs r bottom_vertexzNode.bottom_vertexVs7x1y11Q3x!A#qs##rcL|j\}}|j\}}||z|f||z||zffSr r&rs r right_vertexzNode.right_vertex[s7x1y1!Qx!A#qs##rc@|j\}}|j\}}||f|||zffSr r&rs r left_vertexzNode.left_vertex`s/x1y11v1Q3xr?c||||f|_dSr )rrs r set_colorzNode.set_colorfsAq\ rc||||f|_dSr )r rs rset_fill_colorzNode.set_fill_colorisaA,rcX|j|j||jdSr )rrrr!rrs rapply_attributeszNode.apply_attributesls04:&& )))))rc||||||dSr )calcr5 do_render)rctxs rrenderz Node.renderps= # c""" srcp|\}}|dddd||ddz|ddz||ddz|ddz||dddd||ddz|ddz||ddz|ddz||\}}|dddd||ddz |ddz||ddz |ddz||\}}|dddd||ddz|ddz||ddz|ddz|dS)Nrg?rrg?g?g@)r)rrRrYrr-r+)rrrrs r render_shadowzNode.render_shadowus##%%B !Q3''' "Q%)RU3Y''' "Q%)RU3Y'''   !Q4((( "Q%)RU3Y''' "Q%)RU3Y'''  !!##B !Q3''' "Q%)RU3Y''' "Q%)RU3Y'''  ""$$B !Q3''' "Q%)RU3Y''' "Q%)RU3Y'''  rc^|r|||S|||Sr )stroke_line_to_parent_vstroke_line_to_parent_h)rrparentverticals rstroke_line_to_parentzNode.stroke_line_to_parents6  ;//6:: ://6:: :rc|r|d|dddd|}|}t |}t |}|rw|ru||ddz|ddz||ddz|ddz|t|||||fSdSNr333333?rr) rrr)r'rrRrYrrrrr@v1v2rrs rr>zNode.stroke_line_to_parent_vs    Q     c3Q / / /%%''B""Bb!Bb!B +b + "Q%(BqE"H--- "Q%(BqE"H--- 2r***8O  rc|r|d|dddd|}|}t |}t |}|rw|ru||ddz|ddz||ddz|ddz|t|||||fSdSrD) rrr+r-rrRrYrrrFs rr?zNode.stroke_line_to_parent_hs    Q     c3Q / / /$$&&B!!##Bb!Bb!B +b + "Q%(BqE"H--- "Q%(BqE"H--- 2r***8O  rc|r|d|dddd|\}}|\}}t||z t||z krX||kr)|}|}n|}|}nW||kr)|}|}n(|}|}t|} t|} | rw| ru| | ddz| ddz| | ddz| ddz| t|| | | | fSdS)NrrErrr) rrr$absr)r'r-r+rrRrYrr) rrnodesxsynxnyrGrHrrs rstroke_line_from_nodezNode.stroke_line_from_nodes    Q     c3Q / / /[[]]FB[[]]FB2b5zzC2JJ&&77++--B**BB**B++--BB77))++B**,,BB**,,B))++Bb!Bb!B +b + "Q%(BqE"H--- "Q%(BqE"H--- 2r***8O7  rNr.)rrrr#r$r'r)r+r-r0r2r5r:r<rBr>r?rQrrrrrCs$$$222    $$$ $$$    """"''''*** 0;;;   rrc eZdZdZdZdZdS)TextNodect|||_d|_d|_d|_d|_dS)Nrr F)rr#r line_spacingr font_sizerrs rr#zTextNode.__init__s= d  rc |||j|jr|dd|jd|jvr|jd}d\}}d}|D]{}||}t|t|j |j z}t|t|j |j |j z|jzz}|||_|t!|z|jt!|dz zz}|j\}} } } || z| z||z| zf|_n||j}||_|j\}} } } t|j |j |j z|jzz|_t|j |j z| z| z|j|z| zf|_|dS)N HelveticaFrrrr)rrrXrrrrrrrr x_advancer'rrrlenrWr"r_extentsr) rr9linesrrlhrrtrhrrs rr7z TextNode.calcs   $.))) 9 8 LLeTY 7 7 7 49  IOOD))EDAqB ] ]&&t,,3s}s}<==>>SszCM/ICM/Y!Z[[\\!D SZZ$"3s5zz!|"DDAJAq!QQq!a%'*DII""49--CDMJAq!Q"3:cm1Kcm1[#\]]D S]S]:;;a?A4CSVWCWXYCYZDI rc|||j|jr|dd|j|j\}}}}|j\}}|j\}} |t||zdzt||zdz|j |j |j | |dS)NrZFr)rrrXrrr"rrrrrrWrrr) rr9r`rhrrrPrQrrs rr8zTextNode.do_renders   $.))) 9 8 LLeTY 7 7 7\ 1ax1y1 s1Q3xx|S1XXc\49dFWY]Yijjj  rN)rrrr#r7r8rrrrTrTsA4     rrTc.eZdZdZddZdZdZdZdS) TextRectanglectt||d|_d|_d|_d|_dS)Nr)______?rererTTTT)rTr#icon icon_alpha border_color draw_verticesrs rr#zTextRectangle.__init__s<$%%% @5rr.c||||f|_dSr )rirs rset_border_colorzTextRectangle.set_border_color s1aLrct|}|tjkr ||_dSd|_dSr )r!r2rr CAIRO_STATUS_SUCCESSrg)rpathimages rset_iconzTextRectangle.set_iconsA%%d++ <<>>U7 7 7DIIIDIIIrct|||j\}}|jr||jdzz }t d||f|_dS)Nr2)rTr7rrgr+r)rr9rrs rr7zTextRectangle.calcs_ dC   y1 9 + $$&&* *AAJJM rc J|j\}}|j\}}|jri|||dz|dz|||j|j|||jr||j \}}}} | || z|t||j z dz z| |jddt|jdkr|n||j|||jr0| |jdzdt$||||jr|jr|j|j|jdkr4||dz|dz|||dS|j\}} }}|rO||dz|dz||dz|z|dz||rU||dz|dz|z||dz|z|dz|z|| rO||dz|dz||dz|dz|z||r[||dz|z|dz||dz|z|dz|z|dSdSdSdS)Nrrrrrrf)rrr rrrr{rrgr"rtrr.rrhrpaint_with_alphar+rTr8rirjrrRrY) rr9rPrQrrr`rhrrs rr8zTextRectangle.do_rendersx1y1 ?  HHJJJ MM!C%31 - - - C  1 1 HHJJJ KKMMM 9  HHJJJJAq!Q MM!a%S!di.B.B.D.D*Da)G%H%H!H I I I  " "49a 3 3 34?##q(( $$T_555 KKMMM  9 8 MM$)--//!3Q 7 7 74%%%   !!3 ! C !2 3 3!%=== aeQsUAq111 !/ 1a!KK#qu---KK#a3///JJLLL!KK#quQw///KK#a3q111JJLLL!KK#qu---KK#quQw///JJLLL!KK#a3///KK#a3q111JJLLLLL- ! ! ! !&!!rNrR)rrrr#rlrqr7r8rrrrcrcsd666))))"""1!1!1!1!1!rrccBeZdZdZd dZd dZdZdZdZdZ d Z d S) VBoxNodecHt|g|_dSr )rr#itemsrs rr#zVBoxNode.__init__Rs d rr.cJ|jD]}|||||dSr )ryr0rrhrrritems rr0zVBoxNode.set_colorWs8J ' 'D NN1aA & & & & ' 'rcJ|jD]}|||||dSr )ryr2r{s rr2zVBoxNode.set_fill_color[s:J , ,D   1a + + + + , ,rc|j\}}d}|jD]/}d|f|_||jdf|_||jdz }0dSNrr)rryr)rrrrQr|s rlayout_internalzVBoxNode.layout_internal_s[y1 J  D!tDH49Q<DI 1 AA  rcd}d}|jD]6}|||j\}}t||}||z }7||f|_d}|jD]/}d|f|_||jdf|_||jdz }0dSr)ryr7rrr)rrrrr|wwhhrQs rr7z VBoxNode.calcgs  J  D IIaLLLYFBB A GAAqD J  D1vDHDIaL)DI 1 AA  rcdSr rr4s rr8zVBoxNode.do_rendervs rc.|d|ddd|jd}|j}|d|jdz|d|jdzf|_||||\}}||_||fS)Nrr)rrryrrB)rrrLrAchrrrs rrBzVBoxNode.stroke_line_to_parentys  Aq!!! Z]fQ$(1+%s1v ';;))!T8<<B2v rc@|||||jd|jd|jD],}||||-|dSr)r8rrtrryr5r)rrr|s rr:zVBoxNode.renders q  DHQK!---J  D  ! !! $ $ $ NN1     rNrR) rrrr#r0r2rr7r8rBr:rrrrwrwQs '''',,,,      rrwr )rr)r mathrrrrrobjectr r!r6rrrrrrrrrrTrcrwrrrrs), ,,,,,,,,,,,,,,77777f777VVVVV7VVV(T7T7T7T7T7fT7T7T7p55555f555    # # # #    666