Mercurial > MadButterfly
changeset 280:c8b6ca46950b mbtext
Add merged result
author | wycc |
---|---|
date | Sat, 31 Jan 2009 12:29:50 +0800 |
parents | 86a5ae82ccf2 (current diff) 892d86c1a409 (diff) |
children | 790f61272936 |
files | configure.ac examples/calculator/main.c examples/dynamic/Makefile.am examples/svg2code_ex/Makefile.am examples/svg2code_ex/svg2code_ex.svg examples/tank/Makefile.am include/mb_shapes.h src/Makefile.am src/shape_text.c tools/mb_c_header.m4 tools/mb_c_source.m4 tools/svg2code.py |
diffstat | 36 files changed, 4521 insertions(+), 128 deletions(-) [+] |
line wrap: on
line diff
--- a/Doxyfile Sat Jan 31 11:51:19 2009 +0800 +++ b/Doxyfile Sat Jan 31 12:29:50 2009 +0800 @@ -534,7 +534,7 @@ # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = src include dox +INPUT = src tools include dox README.h COPYING.h # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
--- a/Doxyfile-sf Sat Jan 31 11:51:19 2009 +0800 +++ b/Doxyfile-sf Sat Jan 31 12:29:50 2009 +0800 @@ -534,7 +534,7 @@ # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = src include dox +INPUT = src tools include dox README.h COPYING.h # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
--- a/Makefile.am Sat Jan 31 11:51:19 2009 +0800 +++ b/Makefile.am Sat Jan 31 12:29:50 2009 +0800 @@ -1,4 +1,4 @@ -SUBDIRS = src include tools examples +SUBDIRS = src include tools examples inkscape pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libmbfly.pc -EXTRA_DIST = libmbfly.pc.in mb Doxyfile README.h +EXTRA_DIST = libmbfly.pc.in Doxyfile README.h
--- a/configure.ac Sat Jan 31 11:51:19 2009 +0800 +++ b/configure.ac Sat Jan 31 12:29:50 2009 +0800 @@ -45,5 +45,6 @@ examples/dynamic/Makefile src/Makefile include/Makefile + inkscape/Makefile tools/Makefile]) AC_OUTPUT
--- a/examples/calculator/main.c Sat Jan 31 11:51:19 2009 +0800 +++ b/examples/calculator/main.c Sat Jan 31 12:29:50 2009 +0800 @@ -144,7 +144,7 @@ switch(evt->type) { case EVT_MOUSE_BUT_PRESS: - compute(calc_data, (coord_t *)evt->cur_tgt); + compute(calc_data, (coord_t *)evt->cur_tgt->obj); break; } }
--- a/examples/svg2code_ex/Makefile.am Sat Jan 31 11:51:19 2009 +0800 +++ b/examples/svg2code_ex/Makefile.am Sat Jan 31 12:29:50 2009 +0800 @@ -1,7 +1,7 @@ include $(top_srcdir)/config.mk noinst_PROGRAMS = ex1 -EXTRA_DIST = svg2code_ex.svg +EXTRA_DIST = svg2code_ex.svg dsc_3241.png ex1_SOURCES = main.c nodist_ex1_SOURCES = svg2code_ex.c svg2code_ex.h
--- a/examples/svg2code_ex/svg2code_ex.svg Sat Jan 31 11:51:19 2009 +0800 +++ b/examples/svg2code_ex/svg2code_ex.svg Sat Jan 31 12:29:50 2009 +0800 @@ -459,7 +459,15 @@ d="M 723.62808,516.79651 A 98.944588,37.994728 0 1 1 549.36227,542.22385" sodipodi:start="5.5779634" sodipodi:end="9.4037459" - sodipodi:open="true" - transform="translate(0,-17.414248)" /> + sodipodi:open="true"/> + <image + y="87.316605" + x="605.409" + id="image2497" + height="130.90765" + width="100" + sodipodi:absref="/usr/home/thinker/progm/MadButterfly/examples/svg2code_ex/dsc_3241.png" + xlink:href="dsc_3241.png" /> + transform="translate(0,-17.414248)" /> </g> </svg>
--- a/examples/tank/Makefile.am Sat Jan 31 11:51:19 2009 +0800 +++ b/examples/tank/Makefile.am Sat Jan 31 12:29:50 2009 +0800 @@ -1,7 +1,7 @@ include $(top_srcdir)/config.mk noinst_PROGRAMS = tank -EXTRA_DIST = calculator_scr.svg +#EXTRA_DIST = svg_sources = brick.c bullet.c bush.c mud.c rock.c \ tank1.c tank2.c tank_en.c bang.c tank_SOURCES = tank_main.c @@ -23,7 +23,7 @@ $(svg_sources:.c=.mb): %.mb: $(srcdir)/%.svg $(top_srcdir)/tools/svg2code.py $? $@ - + svgs.h: $(svg_sources:.c=.h) echo "#ifndef __SVGS_H_" > $@ echo "#define __SVGS_H_" >> $@
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/img/image_n_ldr.eps Sat Jan 31 12:29:50 2009 +0800 @@ -0,0 +1,3162 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: /usr/home/thinker/progm/MadButterfly/img/image_n_ldr.dia +%%Creator: Dia v0.96.1 +%%CreationDate: Sat Jan 24 15:22:20 2009 +%%For: thinker +%%Orientation: Portrait +%%Magnification: 1.0000 +%%BoundingBox: 0 0 887 248 +%%BeginSetup +%%EndSetup +%%EndComments +%%BeginProlog +[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one +/two /three /four /five /six /seven /eight /nine /colon /semicolon +/less /equal /greater /question /at /A /B /C /D /E +/F /G /H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W /X /Y +/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c +/d /e /f /g /h /i /j /k /l /m +/n /o /p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright +/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior +/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf +/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde +/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex +/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring +/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def +/cp {closepath} bind def +/c {curveto} bind def +/f {fill} bind def +/a {arc} bind def +/ef {eofill} bind def +/ex {exch} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth pop} bind def +/tr {translate} bind def + +/ellipsedict 8 dict def +ellipsedict /mtrx matrix put +/ellipse +{ ellipsedict begin + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def /savematrix mtrx currentmatrix def + x y tr xrad yrad sc + 0 0 1 startangle endangle arc + savematrix setmatrix + end +} def + +/mergeprocs { +dup length +3 -1 roll +dup +length +dup +5 1 roll +3 -1 roll +add +array cvx +dup +3 -1 roll +0 exch +putinterval +dup +4 2 roll +putinterval +} bind def +/dpi_x 300 def +/dpi_y 300 def +/conicto { + /to_y exch def + /to_x exch def + /conic_cntrl_y exch def + /conic_cntrl_x exch def + currentpoint + /p0_y exch def + /p0_x exch def + /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def + /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def + /p2_x p1_x to_x p0_x sub 1 3 div mul add def + /p2_y p1_y to_y p0_y sub 1 3 div mul add def + p1_x p1_y p2_x p2_y to_x to_y curveto +} bind def +/start_ol { gsave 1.1 dpi_x div dup scale} bind def +/end_ol { closepath fill grestore } bind def +28.346000 -28.346000 scale +2.030000 -14.767128 translate +%%EndProlog + + +0.100000 slw +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 14.300000 6.100000 m 14.300000 7.500000 l 22.500000 7.500000 l 22.500000 6.100000 l f +0.000000 0.000000 0.000000 srgb +n 14.300000 6.100000 m 14.300000 7.500000 l 22.500000 7.500000 l 22.500000 6.100000 l cp s +gsave 15.703750 7.100000 translate 0.035278 -0.035278 scale +start_ol +3219 2489 moveto +3400 2774 3649 2923 conicto +3898 3072 4196 3072 conicto +4710 3072 4979 2744 conicto +5248 2417 5248 1792 conicto +5248 0 lineto +4288 0 lineto +4288 1534 lineto +4291 1568 4292 1605 conicto +4293 1642 4293 1710 conicto +4293 2023 4200 2163 conicto +4107 2304 3900 2304 conicto +3628 2304 3480 2083 conicto +3333 1863 3328 1445 conicto +3328 0 lineto +2368 0 lineto +2368 1534 lineto +2368 2023 2283 2163 conicto +2198 2304 1980 2304 conicto +1706 2304 1557 2082 conicto +1408 1860 1408 1448 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2560 lineto +1584 2815 1811 2943 conicto +2039 3072 2314 3072 conicto +2622 3072 2859 2918 conicto +3096 2765 3219 2489 conicto +end_ol grestore +gsave 16.463038 7.100000 translate 0.035278 -0.035278 scale +start_ol +2019 640 moveto +2314 640 2469 861 conicto +2624 1083 2624 1504 conicto +2624 1925 2469 2146 conicto +2314 2368 2019 2368 conicto +1724 2368 1566 2145 conicto +1408 1923 1408 1504 conicto +1408 1085 1566 862 conicto +1724 640 2019 640 conicto +1408 2560 moveto +1604 2823 1843 2947 conicto +2082 3072 2393 3072 conicto +2942 3072 3295 2633 conicto +3648 2195 3648 1504 conicto +3648 813 3295 374 conicto +2942 -64 2393 -64 conicto +2082 -64 1843 60 conicto +1604 185 1408 448 conicto +1408 0 lineto +448 0 lineto +448 4160 lineto +1408 4160 lineto +1408 2560 lineto +end_ol grestore +gsave 16.985044 7.100000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 17.349698 7.100000 translate 0.035278 -0.035278 scale +start_ol +448 3008 moveto +1408 3008 lineto +1408 0 lineto +448 0 lineto +448 3008 lineto +448 4160 moveto +1408 4160 lineto +1408 3392 lineto +448 3392 lineto +448 4160 lineto +end_ol grestore +gsave 17.599465 7.100000 translate 0.035278 -0.035278 scale +start_ol +3219 2489 moveto +3400 2774 3649 2923 conicto +3898 3072 4196 3072 conicto +4710 3072 4979 2744 conicto +5248 2417 5248 1792 conicto +5248 0 lineto +4288 0 lineto +4288 1534 lineto +4291 1568 4292 1605 conicto +4293 1642 4293 1710 conicto +4293 2023 4200 2163 conicto +4107 2304 3900 2304 conicto +3628 2304 3480 2083 conicto +3333 1863 3328 1445 conicto +3328 0 lineto +2368 0 lineto +2368 1534 lineto +2368 2023 2283 2163 conicto +2198 2304 1980 2304 conicto +1706 2304 1557 2082 conicto +1408 1860 1408 1448 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2560 lineto +1584 2815 1811 2943 conicto +2039 3072 2314 3072 conicto +2622 3072 2859 2918 conicto +3096 2765 3219 2489 conicto +end_ol grestore +gsave 18.358753 7.100000 translate 0.035278 -0.035278 scale +start_ol +2496 512 moveto +2299 248 2062 124 conicto +1826 0 1514 0 conicto +969 0 612 433 conicto +256 867 256 1537 conicto +256 2211 612 2641 conicto +969 3072 1514 3072 conicto +1826 3072 2062 2948 conicto +2299 2825 2496 2560 conicto +2496 3008 lineto +3456 3008 lineto +3456 305 lineto +3456 -435 3005 -825 conicto +2554 -1216 1698 -1216 conicto +1420 -1216 1161 -1168 conicto +902 -1121 640 -1024 conicto +640 -256 lineto +887 -417 1124 -496 conicto +1361 -576 1601 -576 conicto +2064 -576 2280 -362 conicto +2496 -149 2496 305 conicto +2496 512 lineto +1887 2368 moveto +1600 2368 1440 2150 conicto +1280 1933 1280 1535 conicto +1280 1126 1435 915 conicto +1590 704 1887 704 conicto +2176 704 2336 921 conicto +2496 1139 2496 1535 conicto +2496 1933 2336 2150 conicto +2176 2368 1887 2368 conicto +end_ol grestore +gsave 18.880759 7.100000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 19.245413 7.100000 translate 0.035278 -0.035278 scale +start_ol +448 4160 moveto +1408 4160 lineto +1408 0 lineto +448 0 lineto +448 4160 lineto +end_ol grestore +gsave 19.495180 7.100000 translate 0.035278 -0.035278 scale +start_ol +2496 2560 moveto +2496 4160 lineto +3456 4160 lineto +3456 0 lineto +2496 0 lineto +2496 448 lineto +2299 183 2062 59 conicto +1826 -64 1514 -64 conicto +964 -64 610 374 conicto +256 813 256 1504 conicto +256 2195 610 2633 conicto +964 3072 1514 3072 conicto +1823 3072 2061 2947 conicto +2299 2823 2496 2560 conicto +1887 640 moveto +2184 640 2340 861 conicto +2496 1083 2496 1504 conicto +2496 1925 2340 2146 conicto +2184 2368 1887 2368 conicto +1592 2368 1436 2146 conicto +1280 1925 1280 1504 conicto +1280 1083 1436 861 conicto +1592 640 1887 640 conicto +end_ol grestore +gsave 20.017186 7.100000 translate 0.035278 -0.035278 scale +start_ol +2688 2176 moveto +2561 2241 2435 2272 conicto +2310 2304 2183 2304 conicto +1810 2304 1609 2064 conicto +1408 1825 1408 1378 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2496 lineto +1594 2796 1836 2934 conicto +2078 3072 2415 3072 conicto +2464 3072 2520 3068 conicto +2577 3065 2685 3053 conicto +2688 2176 lineto +end_ol grestore +gsave 20.376846 7.100000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 20.741499 7.100000 translate 0.035278 -0.035278 scale +start_ol +1536 3840 moveto +1536 3008 lineto +2560 3008 lineto +2560 2304 lineto +1536 2304 lineto +1536 1054 lineto +1536 849 1618 776 conicto +1700 704 1944 704 conicto +2432 704 lineto +2432 0 lineto +1618 0 lineto +1050 0 813 240 conicto +576 480 576 1054 conicto +576 2304 lineto +128 2304 lineto +128 3008 lineto +576 3008 lineto +576 3840 lineto +1536 3840 lineto +end_ol grestore +1.000000 1.000000 1.000000 srgb +n 14.300000 7.500000 m 14.300000 8.500000 l 22.500000 8.500000 l 22.500000 7.500000 l f +0.000000 0.000000 0.000000 srgb +n 14.300000 7.500000 m 14.300000 8.500000 l 22.500000 8.500000 l 22.500000 7.500000 l cp s +gsave 14.450000 8.142500 translate 0.035278 -0.035278 scale +start_ol +1536 2560 moveto +1536 1600 lineto +2496 1600 lineto +2496 1216 lineto +1536 1216 lineto +1536 256 lineto +1152 256 lineto +1152 1216 lineto +192 1216 lineto +192 1600 lineto +1152 1600 lineto +1152 2560 lineto +1536 2560 lineto +end_ol grestore +gsave 14.799672 8.142500 translate 0.035278 -0.035278 scale +start_ol +1344 850 moveto +1344 587 1440 453 conicto +1536 320 1723 320 conicto +2176 320 lineto +2176 0 lineto +1685 0 lineto +1339 0 1149 222 conicto +960 444 960 850 conicto +960 3008 lineto +192 3008 lineto +192 3328 lineto +1344 3328 lineto +1344 850 lineto +end_ol grestore +gsave 15.149343 8.142500 translate 0.035278 -0.035278 scale +start_ol +1343 2176 moveto +1060 2176 914 1934 conicto +768 1692 768 1216 conicto +768 743 914 499 conicto +1060 256 1343 256 conicto +1628 256 1774 499 conicto +1920 743 1920 1216 conicto +1920 1692 1774 1934 conicto +1628 2176 1343 2176 conicto +1343 2496 moveto +1841 2496 2104 2167 conicto +2368 1839 2368 1216 conicto +2368 591 2105 263 conicto +1843 -64 1343 -64 conicto +845 -64 582 263 conicto +320 591 320 1216 conicto +320 1839 582 2167 conicto +845 2496 1343 2496 conicto +end_ol grestore +gsave 15.499015 8.142500 translate 0.035278 -0.035278 scale +start_ol +1544 1216 moveto +1411 1216 lineto +1060 1216 882 1092 conicto +704 968 704 723 conicto +704 501 837 378 conicto +970 256 1206 256 conicto +1538 256 1728 487 conicto +1918 718 1920 1126 conicto +1920 1216 lineto +1544 1216 lineto +2304 1385 moveto +2304 0 lineto +1920 0 lineto +1920 346 lineto +1793 136 1599 36 conicto +1406 -64 1130 -64 conicto +760 -64 540 146 conicto +320 356 320 708 conicto +320 1114 589 1325 conicto +859 1536 1381 1536 conicto +1920 1536 lineto +1920 1599 lineto +1918 1902 1775 2039 conicto +1632 2176 1317 2176 conicto +1117 2176 911 2111 conicto +706 2046 512 1920 conicto +512 2304 lineto +729 2400 927 2448 conicto +1126 2496 1312 2496 conicto +1608 2496 1817 2406 conicto +2026 2317 2155 2137 conicto +2236 2028 2270 1867 conicto +2304 1706 2304 1385 conicto +end_ol grestore +gsave 15.848687 8.142500 translate 0.035278 -0.035278 scale +start_ol +1920 2145 moveto +1920 3328 lineto +2304 3328 lineto +2304 0 lineto +1920 0 lineto +1920 287 lineto +1816 116 1642 26 conicto +1469 -64 1243 -64 conicto +783 -64 519 279 conicto +256 622 256 1225 conicto +256 1819 521 2157 conicto +786 2496 1243 2496 conicto +1472 2496 1646 2406 conicto +1820 2316 1920 2145 conicto +704 1216 moveto +704 740 857 498 conicto +1010 256 1309 256 conicto +1608 256 1764 500 conicto +1920 745 1920 1216 conicto +1920 1689 1764 1932 conicto +1608 2176 1309 2176 conicto +1010 2176 857 1934 conicto +704 1692 704 1216 conicto +end_ol grestore +gsave 16.198358 8.142500 translate 0.035278 -0.035278 scale +start_ol +1856 3328 moveto +1598 2832 1471 2339 conicto +1344 1847 1344 1346 conicto +1344 848 1471 354 conicto +1598 -140 1856 -640 conicto +1546 -640 lineto +1218 -122 1057 368 conicto +896 859 896 1346 conicto +896 1831 1057 2323 conicto +1218 2815 1546 3328 conicto +1856 3328 lineto +end_ol grestore +gsave 16.548030 8.142500 translate 0.035278 -0.035278 scale +start_ol +832 3328 moveto +1142 3328 lineto +1470 2815 1631 2323 conicto +1792 1831 1792 1346 conicto +1792 857 1631 365 conicto +1470 -127 1142 -640 conicto +832 -640 lineto +1090 -135 1217 358 conicto +1344 852 1344 1346 conicto +1344 1842 1217 2336 conicto +1090 2830 832 3328 conicto +end_ol grestore +gsave 16.897702 8.142500 translate 0.035278 -0.035278 scale +start_ol +1024 2304 moveto +1536 2304 lineto +1536 1664 lineto +1024 1664 lineto +1024 2304 lineto +1024 640 moveto +1536 640 lineto +1536 0 lineto +1024 0 lineto +1024 640 lineto +end_ol grestore +gsave 17.247373 8.142500 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 17.597045 8.142500 translate 0.035278 -0.035278 scale +start_ol +1470 2202 moveto +1541 2352 1651 2424 conicto +1761 2496 1916 2496 conicto +2199 2496 2315 2270 conicto +2432 2045 2432 1422 conicto +2432 0 lineto +2048 0 lineto +2048 1405 lineto +2048 1924 1996 2050 conicto +1944 2176 1808 2176 conicto +1651 2176 1593 2041 conicto +1536 1907 1536 1405 conicto +1536 0 lineto +1152 0 lineto +1152 1405 lineto +1152 1931 1096 2053 conicto +1040 2176 895 2176 conicto +752 2176 696 2041 conicto +640 1907 640 1405 conicto +640 0 lineto +256 0 lineto +256 2432 lineto +640 2432 lineto +640 2238 lineto +708 2364 811 2430 conicto +914 2496 1045 2496 conicto +1202 2496 1307 2423 conicto +1412 2350 1470 2202 conicto +end_ol grestore +gsave 17.946717 8.142500 translate 0.035278 -0.035278 scale +start_ol +2048 1216 moveto +2048 1692 1895 1934 conicto +1742 2176 1443 2176 conicto +1142 2176 987 1932 conicto +832 1689 832 1216 conicto +832 745 987 500 conicto +1142 256 1443 256 conicto +1742 256 1895 498 conicto +2048 740 2048 1216 conicto +832 2145 moveto +932 2314 1107 2405 conicto +1283 2496 1513 2496 conicto +1971 2496 2233 2157 conicto +2496 1819 2496 1225 conicto +2496 622 2232 279 conicto +1969 -64 1509 -64 conicto +1283 -64 1109 26 conicto +936 116 832 287 conicto +832 0 lineto +448 0 lineto +448 3328 lineto +832 3328 lineto +832 2145 lineto +end_ol grestore +gsave 18.296388 8.142500 translate 0.035278 -0.035278 scale +start_ol +2240 -704 moveto +2240 -1024 lineto +0 -1024 lineto +0 -704 lineto +2240 -704 lineto +end_ol grestore +gsave 18.646060 8.142500 translate 0.035278 -0.035278 scale +start_ol +512 2432 moveto +1536 2432 lineto +1536 320 lineto +2304 320 lineto +2304 0 lineto +384 0 lineto +384 320 lineto +1152 320 lineto +1152 2112 lineto +512 2112 lineto +512 2432 lineto +1152 3328 moveto +1536 3328 lineto +1536 2816 lineto +1152 2816 lineto +1152 3328 lineto +end_ol grestore +gsave 18.995732 8.142500 translate 0.035278 -0.035278 scale +start_ol +1470 2202 moveto +1541 2352 1651 2424 conicto +1761 2496 1916 2496 conicto +2199 2496 2315 2270 conicto +2432 2045 2432 1422 conicto +2432 0 lineto +2048 0 lineto +2048 1405 lineto +2048 1924 1996 2050 conicto +1944 2176 1808 2176 conicto +1651 2176 1593 2041 conicto +1536 1907 1536 1405 conicto +1536 0 lineto +1152 0 lineto +1152 1405 lineto +1152 1931 1096 2053 conicto +1040 2176 895 2176 conicto +752 2176 696 2041 conicto +640 1907 640 1405 conicto +640 0 lineto +256 0 lineto +256 2432 lineto +640 2432 lineto +640 2238 lineto +708 2364 811 2430 conicto +914 2496 1045 2496 conicto +1202 2496 1307 2423 conicto +1412 2350 1470 2202 conicto +end_ol grestore +gsave 19.345404 8.142500 translate 0.035278 -0.035278 scale +start_ol +1920 1250 moveto +1920 1704 1768 1940 conicto +1617 2176 1327 2176 conicto +1023 2176 863 1940 conicto +704 1704 704 1250 conicto +704 796 864 558 conicto +1025 320 1331 320 conicto +1617 320 1768 559 conicto +1920 798 1920 1250 conicto +2304 167 moveto +2304 -356 2035 -626 conicto +1767 -896 1246 -896 conicto +1074 -896 886 -863 conicto +699 -831 512 -768 conicto +512 -384 lineto +738 -482 923 -529 conicto +1108 -576 1262 -576 conicto +1606 -576 1763 -411 conicto +1920 -247 1920 111 conicto +1920 128 lineto +1920 392 lineto +1820 194 1648 97 conicto +1476 0 1229 0 conicto +786 0 521 339 conicto +256 679 256 1247 conicto +256 1817 521 2156 conicto +786 2496 1229 2496 conicto +1474 2496 1644 2407 conicto +1814 2318 1920 2132 conicto +1920 2432 lineto +2304 2432 lineto +2304 167 lineto +end_ol grestore +gsave 19.695075 8.142500 translate 0.035278 -0.035278 scale +start_ol +2240 -704 moveto +2240 -1024 lineto +0 -1024 lineto +0 -704 lineto +2240 -704 lineto +end_ol grestore +gsave 20.044747 8.142500 translate 0.035278 -0.035278 scale +start_ol +1920 2145 moveto +1920 3328 lineto +2304 3328 lineto +2304 0 lineto +1920 0 lineto +1920 287 lineto +1816 116 1642 26 conicto +1469 -64 1243 -64 conicto +783 -64 519 279 conicto +256 622 256 1225 conicto +256 1819 521 2157 conicto +786 2496 1243 2496 conicto +1472 2496 1646 2406 conicto +1820 2316 1920 2145 conicto +704 1216 moveto +704 740 857 498 conicto +1010 256 1309 256 conicto +1608 256 1764 500 conicto +1920 745 1920 1216 conicto +1920 1689 1764 1932 conicto +1608 2176 1309 2176 conicto +1010 2176 857 1934 conicto +704 1692 704 1216 conicto +end_ol grestore +gsave 20.394419 8.142500 translate 0.035278 -0.035278 scale +start_ol +1544 1216 moveto +1411 1216 lineto +1060 1216 882 1092 conicto +704 968 704 723 conicto +704 501 837 378 conicto +970 256 1206 256 conicto +1538 256 1728 487 conicto +1918 718 1920 1126 conicto +1920 1216 lineto +1544 1216 lineto +2304 1385 moveto +2304 0 lineto +1920 0 lineto +1920 346 lineto +1793 136 1599 36 conicto +1406 -64 1130 -64 conicto +760 -64 540 146 conicto +320 356 320 708 conicto +320 1114 589 1325 conicto +859 1536 1381 1536 conicto +1920 1536 lineto +1920 1599 lineto +1918 1902 1775 2039 conicto +1632 2176 1317 2176 conicto +1117 2176 911 2111 conicto +706 2046 512 1920 conicto +512 2304 lineto +729 2400 927 2448 conicto +1126 2496 1312 2496 conicto +1608 2496 1817 2406 conicto +2026 2317 2155 2137 conicto +2236 2028 2270 1867 conicto +2304 1706 2304 1385 conicto +end_ol grestore +gsave 20.744090 8.142500 translate 0.035278 -0.035278 scale +start_ol +1280 3136 moveto +1280 2432 lineto +2176 2432 lineto +2176 2112 lineto +1280 2112 lineto +1280 799 lineto +1280 531 1380 425 conicto +1481 320 1732 320 conicto +2176 320 lineto +2176 0 lineto +1694 0 lineto +1256 0 1076 179 conicto +896 359 896 799 conicto +896 2112 lineto +256 2112 lineto +256 2432 lineto +896 2432 lineto +896 3136 lineto +1280 3136 lineto +end_ol grestore +gsave 21.093762 8.142500 translate 0.035278 -0.035278 scale +start_ol +1544 1216 moveto +1411 1216 lineto +1060 1216 882 1092 conicto +704 968 704 723 conicto +704 501 837 378 conicto +970 256 1206 256 conicto +1538 256 1728 487 conicto +1918 718 1920 1126 conicto +1920 1216 lineto +1544 1216 lineto +2304 1385 moveto +2304 0 lineto +1920 0 lineto +1920 346 lineto +1793 136 1599 36 conicto +1406 -64 1130 -64 conicto +760 -64 540 146 conicto +320 356 320 708 conicto +320 1114 589 1325 conicto +859 1536 1381 1536 conicto +1920 1536 lineto +1920 1599 lineto +1918 1902 1775 2039 conicto +1632 2176 1317 2176 conicto +1117 2176 911 2111 conicto +706 2046 512 1920 conicto +512 2304 lineto +729 2400 927 2448 conicto +1126 2496 1312 2496 conicto +1608 2496 1817 2406 conicto +2026 2317 2155 2137 conicto +2236 2028 2270 1867 conicto +2304 1706 2304 1385 conicto +end_ol grestore +gsave 21.443434 8.142500 translate 0.035278 -0.035278 scale +start_ol +2240 -704 moveto +2240 -1024 lineto +0 -1024 lineto +0 -704 lineto +2240 -704 lineto +end_ol grestore +gsave 21.793105 8.142500 translate 0.035278 -0.035278 scale +start_ol +1280 3136 moveto +1280 2432 lineto +2176 2432 lineto +2176 2112 lineto +1280 2112 lineto +1280 799 lineto +1280 531 1380 425 conicto +1481 320 1732 320 conicto +2176 320 lineto +2176 0 lineto +1694 0 lineto +1256 0 1076 179 conicto +896 359 896 799 conicto +896 2112 lineto +256 2112 lineto +256 2432 lineto +896 2432 lineto +896 3136 lineto +1280 3136 lineto +end_ol grestore +0.100000 slw +[] 0 sd +1.000000 1.000000 1.000000 srgb +n -1.980000 7.220000 m -1.980000 8.620000 l 9.020000 8.620000 l 9.020000 7.220000 l f +0.000000 0.000000 0.000000 srgb +n -1.980000 7.220000 m -1.980000 8.620000 l 9.020000 8.620000 l 9.020000 7.220000 l cp s +gsave 0.641250 8.220000 translate 0.035278 -0.035278 scale +start_ol +2688 2176 moveto +2561 2241 2435 2272 conicto +2310 2304 2183 2304 conicto +1810 2304 1609 2064 conicto +1408 1825 1408 1378 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2496 lineto +1594 2796 1836 2934 conicto +2078 3072 2415 3072 conicto +2464 3072 2520 3068 conicto +2577 3065 2685 3053 conicto +2688 2176 lineto +end_ol grestore +gsave 1.000910 8.220000 translate 0.035278 -0.035278 scale +start_ol +3456 1482 moveto +3456 1216 lineto +1216 1216 lineto +1251 896 1461 736 conicto +1671 576 2048 576 conicto +2353 576 2672 671 conicto +2991 767 3328 960 conicto +3328 192 lineto +2988 65 2648 0 conicto +2309 -64 1970 -64 conicto +1157 -64 706 348 conicto +256 760 256 1504 conicto +256 2235 696 2653 conicto +1137 3072 1909 3072 conicto +2612 3072 3034 2639 conicto +3456 2206 3456 1482 conicto +2496 1792 moveto +2496 2080 2333 2256 conicto +2171 2432 1909 2432 conicto +1625 2432 1448 2267 conicto +1271 2102 1227 1792 conicto +2496 1792 lineto +end_ol grestore +gsave 1.495441 8.220000 translate 0.035278 -0.035278 scale +start_ol +2496 2560 moveto +2496 4160 lineto +3456 4160 lineto +3456 0 lineto +2496 0 lineto +2496 448 lineto +2299 183 2062 59 conicto +1826 -64 1514 -64 conicto +964 -64 610 374 conicto +256 813 256 1504 conicto +256 2195 610 2633 conicto +964 3072 1514 3072 conicto +1823 3072 2061 2947 conicto +2299 2823 2496 2560 conicto +1887 640 moveto +2184 640 2340 861 conicto +2496 1083 2496 1504 conicto +2496 1925 2340 2146 conicto +2184 2368 1887 2368 conicto +1592 2368 1436 2146 conicto +1280 1925 1280 1504 conicto +1280 1083 1436 861 conicto +1592 640 1887 640 conicto +end_ol grestore +gsave 2.017447 8.220000 translate 0.035278 -0.035278 scale +start_ol +2688 2176 moveto +2561 2241 2435 2272 conicto +2310 2304 2183 2304 conicto +1810 2304 1609 2064 conicto +1408 1825 1408 1378 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2496 lineto +1594 2796 1836 2934 conicto +2078 3072 2415 3072 conicto +2464 3072 2520 3068 conicto +2577 3065 2685 3053 conicto +2688 2176 lineto +end_ol grestore +gsave 2.377107 8.220000 translate 0.035278 -0.035278 scale +start_ol +1847 1344 moveto +1533 1344 1374 1245 conicto +1216 1146 1216 953 conicto +1216 776 1343 676 conicto +1471 576 1698 576 conicto +1981 576 2174 764 conicto +2368 953 2368 1237 conicto +2368 1344 lineto +1847 1344 lineto +3328 1709 moveto +3328 0 lineto +2368 0 lineto +2368 448 lineto +2171 180 1925 58 conicto +1679 -64 1326 -64 conicto +850 -64 553 206 conicto +256 476 256 907 conicto +256 1431 623 1675 conicto +991 1920 1777 1920 conicto +2368 1920 lineto +2368 1992 lineto +2368 2220 2183 2326 conicto +1999 2432 1608 2432 conicto +1291 2432 1018 2368 conicto +746 2304 512 2176 conicto +512 2880 lineto +826 2974 1143 3023 conicto +1460 3072 1777 3072 conicto +2599 3072 2963 2751 conicto +3328 2431 3328 1709 conicto +end_ol grestore +gsave 2.869141 8.220000 translate 0.035278 -0.035278 scale +start_ol +192 3008 moveto +1122 3008 lineto +1624 935 lineto +2129 3008 lineto +2927 3008 lineto +3430 956 lineto +3934 3008 lineto +4864 3008 lineto +4076 0 lineto +3032 0 lineto +2527 2068 lineto +2024 0 lineto +980 0 lineto +192 3008 lineto +end_ol grestore +gsave 3.543506 8.220000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 3.908160 8.220000 translate 0.035278 -0.035278 scale +start_ol +3219 2489 moveto +3400 2774 3649 2923 conicto +3898 3072 4196 3072 conicto +4710 3072 4979 2744 conicto +5248 2417 5248 1792 conicto +5248 0 lineto +4288 0 lineto +4288 1534 lineto +4291 1568 4292 1605 conicto +4293 1642 4293 1710 conicto +4293 2023 4200 2163 conicto +4107 2304 3900 2304 conicto +3628 2304 3480 2083 conicto +3333 1863 3328 1445 conicto +3328 0 lineto +2368 0 lineto +2368 1534 lineto +2368 2023 2283 2163 conicto +2198 2304 1980 2304 conicto +1706 2304 1557 2082 conicto +1408 1860 1408 1448 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2560 lineto +1584 2815 1811 2943 conicto +2039 3072 2314 3072 conicto +2622 3072 2859 2918 conicto +3096 2765 3219 2489 conicto +end_ol grestore +gsave 4.667448 8.220000 translate 0.035278 -0.035278 scale +start_ol +1847 1344 moveto +1533 1344 1374 1245 conicto +1216 1146 1216 953 conicto +1216 776 1343 676 conicto +1471 576 1698 576 conicto +1981 576 2174 764 conicto +2368 953 2368 1237 conicto +2368 1344 lineto +1847 1344 lineto +3328 1709 moveto +3328 0 lineto +2368 0 lineto +2368 448 lineto +2171 180 1925 58 conicto +1679 -64 1326 -64 conicto +850 -64 553 206 conicto +256 476 256 907 conicto +256 1431 623 1675 conicto +991 1920 1777 1920 conicto +2368 1920 lineto +2368 1992 lineto +2368 2220 2183 2326 conicto +1999 2432 1608 2432 conicto +1291 2432 1018 2368 conicto +746 2304 512 2176 conicto +512 2880 lineto +826 2974 1143 3023 conicto +1460 3072 1777 3072 conicto +2599 3072 2963 2751 conicto +3328 2431 3328 1709 conicto +end_ol grestore +gsave 5.159482 8.220000 translate 0.035278 -0.035278 scale +start_ol +3456 1792 moveto +3456 0 lineto +2496 0 lineto +2496 292 lineto +2496 1371 lineto +2496 1752 2478 1896 conicto +2461 2041 2419 2110 conicto +2363 2202 2267 2253 conicto +2171 2304 2048 2304 conicto +1749 2304 1578 2077 conicto +1408 1850 1408 1448 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2560 lineto +1624 2823 1866 2947 conicto +2109 3072 2403 3072 conicto +2920 3072 3188 2744 conicto +3456 2417 3456 1792 conicto +end_ol grestore +gsave 5.678991 8.220000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 6.043645 8.220000 translate 0.035278 -0.035278 scale +start_ol +1536 3840 moveto +1536 3008 lineto +2560 3008 lineto +2560 2304 lineto +1536 2304 lineto +1536 1054 lineto +1536 849 1618 776 conicto +1700 704 1944 704 conicto +2432 704 lineto +2432 0 lineto +1618 0 lineto +1050 0 813 240 conicto +576 480 576 1054 conicto +576 2304 lineto +128 2304 lineto +128 3008 lineto +576 3008 lineto +576 3840 lineto +1536 3840 lineto +end_ol grestore +1.000000 1.000000 1.000000 srgb +n -1.980000 8.620000 m -1.980000 9.620000 l 9.020000 9.620000 l 9.020000 8.620000 l f +0.000000 0.000000 0.000000 srgb +n -1.980000 8.620000 m -1.980000 9.620000 l 9.020000 9.620000 l 9.020000 8.620000 l cp s +gsave -1.830000 9.262500 translate 0.035278 -0.035278 scale +start_ol +1536 2560 moveto +1536 1600 lineto +2496 1600 lineto +2496 1216 lineto +1536 1216 lineto +1536 256 lineto +1152 256 lineto +1152 1216 lineto +192 1216 lineto +192 1600 lineto +1152 1600 lineto +1152 2560 lineto +1536 2560 lineto +end_ol grestore +gsave -1.480328 9.262500 translate 0.035278 -0.035278 scale +start_ol +2496 1984 moveto +2366 2051 2231 2081 conicto +2096 2112 1935 2112 conicto +1554 2112 1353 1888 conicto +1152 1665 1152 1243 conicto +1152 0 lineto +768 0 lineto +768 2432 lineto +1152 2432 lineto +1152 2001 lineto +1254 2240 1465 2368 conicto +1676 2496 1965 2496 conicto +2116 2496 2246 2465 conicto +2377 2434 2496 2368 conicto +2496 1984 lineto +end_ol grestore +gsave -1.130657 9.262500 translate 0.035278 -0.035278 scale +start_ol +1920 2145 moveto +1920 3328 lineto +2304 3328 lineto +2304 0 lineto +1920 0 lineto +1920 287 lineto +1816 116 1642 26 conicto +1469 -64 1243 -64 conicto +783 -64 519 279 conicto +256 622 256 1225 conicto +256 1819 521 2157 conicto +786 2496 1243 2496 conicto +1472 2496 1646 2406 conicto +1820 2316 1920 2145 conicto +704 1216 moveto +704 740 857 498 conicto +1010 256 1309 256 conicto +1608 256 1764 500 conicto +1920 745 1920 1216 conicto +1920 1689 1764 1932 conicto +1608 2176 1309 2176 conicto +1010 2176 857 1934 conicto +704 1692 704 1216 conicto +end_ol grestore +gsave -0.780985 9.262500 translate 0.035278 -0.035278 scale +start_ol +1470 2202 moveto +1541 2352 1651 2424 conicto +1761 2496 1916 2496 conicto +2199 2496 2315 2270 conicto +2432 2045 2432 1422 conicto +2432 0 lineto +2048 0 lineto +2048 1405 lineto +2048 1924 1996 2050 conicto +1944 2176 1808 2176 conicto +1651 2176 1593 2041 conicto +1536 1907 1536 1405 conicto +1536 0 lineto +1152 0 lineto +1152 1405 lineto +1152 1931 1096 2053 conicto +1040 2176 895 2176 conicto +752 2176 696 2041 conicto +640 1907 640 1405 conicto +640 0 lineto +256 0 lineto +256 2432 lineto +640 2432 lineto +640 2238 lineto +708 2364 811 2430 conicto +914 2496 1045 2496 conicto +1202 2496 1307 2423 conicto +1412 2350 1470 2202 conicto +end_ol grestore +gsave -0.431313 9.262500 translate 0.035278 -0.035278 scale +start_ol +1544 1216 moveto +1411 1216 lineto +1060 1216 882 1092 conicto +704 968 704 723 conicto +704 501 837 378 conicto +970 256 1206 256 conicto +1538 256 1728 487 conicto +1918 718 1920 1126 conicto +1920 1216 lineto +1544 1216 lineto +2304 1385 moveto +2304 0 lineto +1920 0 lineto +1920 346 lineto +1793 136 1599 36 conicto +1406 -64 1130 -64 conicto +760 -64 540 146 conicto +320 356 320 708 conicto +320 1114 589 1325 conicto +859 1536 1381 1536 conicto +1920 1536 lineto +1920 1599 lineto +1918 1902 1775 2039 conicto +1632 2176 1317 2176 conicto +1117 2176 911 2111 conicto +706 2046 512 1920 conicto +512 2304 lineto +729 2400 927 2448 conicto +1126 2496 1312 2496 conicto +1608 2496 1817 2406 conicto +2026 2317 2155 2137 conicto +2236 2028 2270 1867 conicto +2304 1706 2304 1385 conicto +end_ol grestore +gsave -0.081642 9.262500 translate 0.035278 -0.035278 scale +start_ol +2304 1530 moveto +2304 0 lineto +1920 0 lineto +1920 1530 lineto +1920 1863 1801 2019 conicto +1683 2176 1431 2176 conicto +1143 2176 987 1974 conicto +832 1773 832 1396 conicto +832 0 lineto +448 0 lineto +448 2432 lineto +832 2432 lineto +832 2099 lineto +939 2294 1123 2395 conicto +1307 2496 1559 2496 conicto +1934 2496 2119 2256 conicto +2304 2016 2304 1530 conicto +end_ol grestore +gsave 0.268030 9.262500 translate 0.035278 -0.035278 scale +start_ol +2240 -704 moveto +2240 -1024 lineto +0 -1024 lineto +0 -704 lineto +2240 -704 lineto +end_ol grestore +gsave 0.617702 9.262500 translate 0.035278 -0.035278 scale +start_ol +512 2432 moveto +1536 2432 lineto +1536 320 lineto +2304 320 lineto +2304 0 lineto +384 0 lineto +384 320 lineto +1152 320 lineto +1152 2112 lineto +512 2112 lineto +512 2432 lineto +1152 3328 moveto +1536 3328 lineto +1536 2816 lineto +1152 2816 lineto +1152 3328 lineto +end_ol grestore +gsave 0.967373 9.262500 translate 0.035278 -0.035278 scale +start_ol +1470 2202 moveto +1541 2352 1651 2424 conicto +1761 2496 1916 2496 conicto +2199 2496 2315 2270 conicto +2432 2045 2432 1422 conicto +2432 0 lineto +2048 0 lineto +2048 1405 lineto +2048 1924 1996 2050 conicto +1944 2176 1808 2176 conicto +1651 2176 1593 2041 conicto +1536 1907 1536 1405 conicto +1536 0 lineto +1152 0 lineto +1152 1405 lineto +1152 1931 1096 2053 conicto +1040 2176 895 2176 conicto +752 2176 696 2041 conicto +640 1907 640 1405 conicto +640 0 lineto +256 0 lineto +256 2432 lineto +640 2432 lineto +640 2238 lineto +708 2364 811 2430 conicto +914 2496 1045 2496 conicto +1202 2496 1307 2423 conicto +1412 2350 1470 2202 conicto +end_ol grestore +gsave 1.317045 9.262500 translate 0.035278 -0.035278 scale +start_ol +1920 1250 moveto +1920 1704 1768 1940 conicto +1617 2176 1327 2176 conicto +1023 2176 863 1940 conicto +704 1704 704 1250 conicto +704 796 864 558 conicto +1025 320 1331 320 conicto +1617 320 1768 559 conicto +1920 798 1920 1250 conicto +2304 167 moveto +2304 -356 2035 -626 conicto +1767 -896 1246 -896 conicto +1074 -896 886 -863 conicto +699 -831 512 -768 conicto +512 -384 lineto +738 -482 923 -529 conicto +1108 -576 1262 -576 conicto +1606 -576 1763 -411 conicto +1920 -247 1920 111 conicto +1920 128 lineto +1920 392 lineto +1820 194 1648 97 conicto +1476 0 1229 0 conicto +786 0 521 339 conicto +256 679 256 1247 conicto +256 1817 521 2156 conicto +786 2496 1229 2496 conicto +1474 2496 1644 2407 conicto +1814 2318 1920 2132 conicto +1920 2432 lineto +2304 2432 lineto +2304 167 lineto +end_ol grestore +gsave 1.666717 9.262500 translate 0.035278 -0.035278 scale +start_ol +2240 -704 moveto +2240 -1024 lineto +0 -1024 lineto +0 -704 lineto +2240 -704 lineto +end_ol grestore +gsave 2.016388 9.262500 translate 0.035278 -0.035278 scale +start_ol +1344 850 moveto +1344 587 1440 453 conicto +1536 320 1723 320 conicto +2176 320 lineto +2176 0 lineto +1685 0 lineto +1339 0 1149 222 conicto +960 444 960 850 conicto +960 3008 lineto +192 3008 lineto +192 3328 lineto +1344 3328 lineto +1344 850 lineto +end_ol grestore +gsave 2.366060 9.262500 translate 0.035278 -0.035278 scale +start_ol +1920 2145 moveto +1920 3328 lineto +2304 3328 lineto +2304 0 lineto +1920 0 lineto +1920 287 lineto +1816 116 1642 26 conicto +1469 -64 1243 -64 conicto +783 -64 519 279 conicto +256 622 256 1225 conicto +256 1819 521 2157 conicto +786 2496 1243 2496 conicto +1472 2496 1646 2406 conicto +1820 2316 1920 2145 conicto +704 1216 moveto +704 740 857 498 conicto +1010 256 1309 256 conicto +1608 256 1764 500 conicto +1920 745 1920 1216 conicto +1920 1689 1764 1932 conicto +1608 2176 1309 2176 conicto +1010 2176 857 1934 conicto +704 1692 704 1216 conicto +end_ol grestore +gsave 2.715732 9.262500 translate 0.035278 -0.035278 scale +start_ol +2496 1984 moveto +2366 2051 2231 2081 conicto +2096 2112 1935 2112 conicto +1554 2112 1353 1888 conicto +1152 1665 1152 1243 conicto +1152 0 lineto +768 0 lineto +768 2432 lineto +1152 2432 lineto +1152 2001 lineto +1254 2240 1465 2368 conicto +1676 2496 1965 2496 conicto +2116 2496 2246 2465 conicto +2377 2434 2496 2368 conicto +2496 1984 lineto +end_ol grestore +gsave 3.065404 9.262500 translate 0.035278 -0.035278 scale +start_ol +1856 3328 moveto +1598 2832 1471 2339 conicto +1344 1847 1344 1346 conicto +1344 848 1471 354 conicto +1598 -140 1856 -640 conicto +1546 -640 lineto +1218 -122 1057 368 conicto +896 859 896 1346 conicto +896 1831 1057 2323 conicto +1218 2815 1546 3328 conicto +1856 3328 lineto +end_ol grestore +gsave 3.415075 9.262500 translate 0.035278 -0.035278 scale +start_ol +832 3328 moveto +1142 3328 lineto +1470 2815 1631 2323 conicto +1792 1831 1792 1346 conicto +1792 857 1631 365 conicto +1470 -127 1142 -640 conicto +832 -640 lineto +1090 -135 1217 358 conicto +1344 852 1344 1346 conicto +1344 1842 1217 2336 conicto +1090 2830 832 3328 conicto +end_ol grestore +gsave 3.764747 9.262500 translate 0.035278 -0.035278 scale +start_ol +1024 2304 moveto +1536 2304 lineto +1536 1664 lineto +1024 1664 lineto +1024 2304 lineto +1024 640 moveto +1536 640 lineto +1536 0 lineto +1024 0 lineto +1024 640 lineto +end_ol grestore +gsave 4.114419 9.262500 translate 0.035278 -0.035278 scale +start_ol +end_ol grestore +gsave 4.464090 9.262500 translate 0.035278 -0.035278 scale +start_ol +1470 2202 moveto +1541 2352 1651 2424 conicto +1761 2496 1916 2496 conicto +2199 2496 2315 2270 conicto +2432 2045 2432 1422 conicto +2432 0 lineto +2048 0 lineto +2048 1405 lineto +2048 1924 1996 2050 conicto +1944 2176 1808 2176 conicto +1651 2176 1593 2041 conicto +1536 1907 1536 1405 conicto +1536 0 lineto +1152 0 lineto +1152 1405 lineto +1152 1931 1096 2053 conicto +1040 2176 895 2176 conicto +752 2176 696 2041 conicto +640 1907 640 1405 conicto +640 0 lineto +256 0 lineto +256 2432 lineto +640 2432 lineto +640 2238 lineto +708 2364 811 2430 conicto +914 2496 1045 2496 conicto +1202 2496 1307 2423 conicto +1412 2350 1470 2202 conicto +end_ol grestore +gsave 4.813762 9.262500 translate 0.035278 -0.035278 scale +start_ol +2048 1216 moveto +2048 1692 1895 1934 conicto +1742 2176 1443 2176 conicto +1142 2176 987 1932 conicto +832 1689 832 1216 conicto +832 745 987 500 conicto +1142 256 1443 256 conicto +1742 256 1895 498 conicto +2048 740 2048 1216 conicto +832 2145 moveto +932 2314 1107 2405 conicto +1283 2496 1513 2496 conicto +1971 2496 2233 2157 conicto +2496 1819 2496 1225 conicto +2496 622 2232 279 conicto +1969 -64 1509 -64 conicto +1283 -64 1109 26 conicto +936 116 832 287 conicto +832 0 lineto +448 0 lineto +448 3328 lineto +832 3328 lineto +832 2145 lineto +end_ol grestore +gsave 5.163434 9.262500 translate 0.035278 -0.035278 scale +start_ol +2240 -704 moveto +2240 -1024 lineto +0 -1024 lineto +0 -704 lineto +2240 -704 lineto +end_ol grestore +gsave 5.513105 9.262500 translate 0.035278 -0.035278 scale +start_ol +512 2432 moveto +1536 2432 lineto +1536 320 lineto +2304 320 lineto +2304 0 lineto +384 0 lineto +384 320 lineto +1152 320 lineto +1152 2112 lineto +512 2112 lineto +512 2432 lineto +1152 3328 moveto +1536 3328 lineto +1536 2816 lineto +1152 2816 lineto +1152 3328 lineto +end_ol grestore +gsave 5.862777 9.262500 translate 0.035278 -0.035278 scale +start_ol +1470 2202 moveto +1541 2352 1651 2424 conicto +1761 2496 1916 2496 conicto +2199 2496 2315 2270 conicto +2432 2045 2432 1422 conicto +2432 0 lineto +2048 0 lineto +2048 1405 lineto +2048 1924 1996 2050 conicto +1944 2176 1808 2176 conicto +1651 2176 1593 2041 conicto +1536 1907 1536 1405 conicto +1536 0 lineto +1152 0 lineto +1152 1405 lineto +1152 1931 1096 2053 conicto +1040 2176 895 2176 conicto +752 2176 696 2041 conicto +640 1907 640 1405 conicto +640 0 lineto +256 0 lineto +256 2432 lineto +640 2432 lineto +640 2238 lineto +708 2364 811 2430 conicto +914 2496 1045 2496 conicto +1202 2496 1307 2423 conicto +1412 2350 1470 2202 conicto +end_ol grestore +gsave 6.212449 9.262500 translate 0.035278 -0.035278 scale +start_ol +1920 1250 moveto +1920 1704 1768 1940 conicto +1617 2176 1327 2176 conicto +1023 2176 863 1940 conicto +704 1704 704 1250 conicto +704 796 864 558 conicto +1025 320 1331 320 conicto +1617 320 1768 559 conicto +1920 798 1920 1250 conicto +2304 167 moveto +2304 -356 2035 -626 conicto +1767 -896 1246 -896 conicto +1074 -896 886 -863 conicto +699 -831 512 -768 conicto +512 -384 lineto +738 -482 923 -529 conicto +1108 -576 1262 -576 conicto +1606 -576 1763 -411 conicto +1920 -247 1920 111 conicto +1920 128 lineto +1920 392 lineto +1820 194 1648 97 conicto +1476 0 1229 0 conicto +786 0 521 339 conicto +256 679 256 1247 conicto +256 1817 521 2156 conicto +786 2496 1229 2496 conicto +1474 2496 1644 2407 conicto +1814 2318 1920 2132 conicto +1920 2432 lineto +2304 2432 lineto +2304 167 lineto +end_ol grestore +gsave 6.562120 9.262500 translate 0.035278 -0.035278 scale +start_ol +2240 -704 moveto +2240 -1024 lineto +0 -1024 lineto +0 -704 lineto +2240 -704 lineto +end_ol grestore +gsave 6.911792 9.262500 translate 0.035278 -0.035278 scale +start_ol +1344 850 moveto +1344 587 1440 453 conicto +1536 320 1723 320 conicto +2176 320 lineto +2176 0 lineto +1685 0 lineto +1339 0 1149 222 conicto +960 444 960 850 conicto +960 3008 lineto +192 3008 lineto +192 3328 lineto +1344 3328 lineto +1344 850 lineto +end_ol grestore +gsave 7.261464 9.262500 translate 0.035278 -0.035278 scale +start_ol +1920 2145 moveto +1920 3328 lineto +2304 3328 lineto +2304 0 lineto +1920 0 lineto +1920 287 lineto +1816 116 1642 26 conicto +1469 -64 1243 -64 conicto +783 -64 519 279 conicto +256 622 256 1225 conicto +256 1819 521 2157 conicto +786 2496 1243 2496 conicto +1472 2496 1646 2406 conicto +1820 2316 1920 2145 conicto +704 1216 moveto +704 740 857 498 conicto +1010 256 1309 256 conicto +1608 256 1764 500 conicto +1920 745 1920 1216 conicto +1920 1689 1764 1932 conicto +1608 2176 1309 2176 conicto +1010 2176 857 1934 conicto +704 1692 704 1216 conicto +end_ol grestore +gsave 7.611135 9.262500 translate 0.035278 -0.035278 scale +start_ol +2496 1984 moveto +2366 2051 2231 2081 conicto +2096 2112 1935 2112 conicto +1554 2112 1353 1888 conicto +1152 1665 1152 1243 conicto +1152 0 lineto +768 0 lineto +768 2432 lineto +1152 2432 lineto +1152 2001 lineto +1254 2240 1465 2368 conicto +1676 2496 1965 2496 conicto +2116 2496 2246 2465 conicto +2377 2434 2496 2368 conicto +2496 1984 lineto +end_ol grestore +gsave 7.960807 9.262500 translate 0.035278 -0.035278 scale +start_ol +2240 -704 moveto +2240 -1024 lineto +0 -1024 lineto +0 -704 lineto +2240 -704 lineto +end_ol grestore +gsave 8.310479 9.262500 translate 0.035278 -0.035278 scale +start_ol +1280 3136 moveto +1280 2432 lineto +2176 2432 lineto +2176 2112 lineto +1280 2112 lineto +1280 799 lineto +1280 531 1380 425 conicto +1481 320 1732 320 conicto +2176 320 lineto +2176 0 lineto +1694 0 lineto +1256 0 1076 179 conicto +896 359 896 799 conicto +896 2112 lineto +256 2112 lineto +256 2432 lineto +896 2432 lineto +896 3136 lineto +1280 3136 lineto +end_ol grestore +0.100000 slw +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 22.590000 9.440000 m 22.590000 10.840000 l 29.207500 10.840000 l 29.207500 9.440000 l f +0.000000 0.000000 0.000000 srgb +n 22.590000 9.440000 m 22.590000 10.840000 l 29.207500 10.840000 l 29.207500 9.440000 l cp s +gsave 22.840000 10.440000 translate 0.035278 -0.035278 scale +start_ol +3219 2489 moveto +3400 2774 3649 2923 conicto +3898 3072 4196 3072 conicto +4710 3072 4979 2744 conicto +5248 2417 5248 1792 conicto +5248 0 lineto +4288 0 lineto +4288 1534 lineto +4291 1568 4292 1605 conicto +4293 1642 4293 1710 conicto +4293 2023 4200 2163 conicto +4107 2304 3900 2304 conicto +3628 2304 3480 2083 conicto +3333 1863 3328 1445 conicto +3328 0 lineto +2368 0 lineto +2368 1534 lineto +2368 2023 2283 2163 conicto +2198 2304 1980 2304 conicto +1706 2304 1557 2082 conicto +1408 1860 1408 1448 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2560 lineto +1584 2815 1811 2943 conicto +2039 3072 2314 3072 conicto +2622 3072 2859 2918 conicto +3096 2765 3219 2489 conicto +end_ol grestore +gsave 23.599288 10.440000 translate 0.035278 -0.035278 scale +start_ol +2019 640 moveto +2314 640 2469 861 conicto +2624 1083 2624 1504 conicto +2624 1925 2469 2146 conicto +2314 2368 2019 2368 conicto +1724 2368 1566 2145 conicto +1408 1923 1408 1504 conicto +1408 1085 1566 862 conicto +1724 640 2019 640 conicto +1408 2560 moveto +1604 2823 1843 2947 conicto +2082 3072 2393 3072 conicto +2942 3072 3295 2633 conicto +3648 2195 3648 1504 conicto +3648 813 3295 374 conicto +2942 -64 2393 -64 conicto +2082 -64 1843 60 conicto +1604 185 1408 448 conicto +1408 0 lineto +448 0 lineto +448 4160 lineto +1408 4160 lineto +1408 2560 lineto +end_ol grestore +gsave 24.121294 10.440000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 24.485948 10.440000 translate 0.035278 -0.035278 scale +start_ol +448 3008 moveto +1408 3008 lineto +1408 0 lineto +448 0 lineto +448 3008 lineto +448 4160 moveto +1408 4160 lineto +1408 3392 lineto +448 3392 lineto +448 4160 lineto +end_ol grestore +gsave 24.735715 10.440000 translate 0.035278 -0.035278 scale +start_ol +3219 2489 moveto +3400 2774 3649 2923 conicto +3898 3072 4196 3072 conicto +4710 3072 4979 2744 conicto +5248 2417 5248 1792 conicto +5248 0 lineto +4288 0 lineto +4288 1534 lineto +4291 1568 4292 1605 conicto +4293 1642 4293 1710 conicto +4293 2023 4200 2163 conicto +4107 2304 3900 2304 conicto +3628 2304 3480 2083 conicto +3333 1863 3328 1445 conicto +3328 0 lineto +2368 0 lineto +2368 1534 lineto +2368 2023 2283 2163 conicto +2198 2304 1980 2304 conicto +1706 2304 1557 2082 conicto +1408 1860 1408 1448 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2560 lineto +1584 2815 1811 2943 conicto +2039 3072 2314 3072 conicto +2622 3072 2859 2918 conicto +3096 2765 3219 2489 conicto +end_ol grestore +gsave 25.495003 10.440000 translate 0.035278 -0.035278 scale +start_ol +2496 512 moveto +2299 248 2062 124 conicto +1826 0 1514 0 conicto +969 0 612 433 conicto +256 867 256 1537 conicto +256 2211 612 2641 conicto +969 3072 1514 3072 conicto +1826 3072 2062 2948 conicto +2299 2825 2496 2560 conicto +2496 3008 lineto +3456 3008 lineto +3456 305 lineto +3456 -435 3005 -825 conicto +2554 -1216 1698 -1216 conicto +1420 -1216 1161 -1168 conicto +902 -1121 640 -1024 conicto +640 -256 lineto +887 -417 1124 -496 conicto +1361 -576 1601 -576 conicto +2064 -576 2280 -362 conicto +2496 -149 2496 305 conicto +2496 512 lineto +1887 2368 moveto +1600 2368 1440 2150 conicto +1280 1933 1280 1535 conicto +1280 1126 1435 915 conicto +1590 704 1887 704 conicto +2176 704 2336 921 conicto +2496 1139 2496 1535 conicto +2496 1933 2336 2150 conicto +2176 2368 1887 2368 conicto +end_ol grestore +gsave 26.017009 10.440000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 26.381663 10.440000 translate 0.035278 -0.035278 scale +start_ol +2496 2560 moveto +2496 4160 lineto +3456 4160 lineto +3456 0 lineto +2496 0 lineto +2496 448 lineto +2299 183 2062 59 conicto +1826 -64 1514 -64 conicto +964 -64 610 374 conicto +256 813 256 1504 conicto +256 2195 610 2633 conicto +964 3072 1514 3072 conicto +1823 3072 2061 2947 conicto +2299 2823 2496 2560 conicto +1887 640 moveto +2184 640 2340 861 conicto +2496 1083 2496 1504 conicto +2496 1925 2340 2146 conicto +2184 2368 1887 2368 conicto +1592 2368 1436 2146 conicto +1280 1925 1280 1504 conicto +1280 1083 1436 861 conicto +1592 640 1887 640 conicto +end_ol grestore +gsave 26.903669 10.440000 translate 0.035278 -0.035278 scale +start_ol +1847 1344 moveto +1533 1344 1374 1245 conicto +1216 1146 1216 953 conicto +1216 776 1343 676 conicto +1471 576 1698 576 conicto +1981 576 2174 764 conicto +2368 953 2368 1237 conicto +2368 1344 lineto +1847 1344 lineto +3328 1709 moveto +3328 0 lineto +2368 0 lineto +2368 448 lineto +2171 180 1925 58 conicto +1679 -64 1326 -64 conicto +850 -64 553 206 conicto +256 476 256 907 conicto +256 1431 623 1675 conicto +991 1920 1777 1920 conicto +2368 1920 lineto +2368 1992 lineto +2368 2220 2183 2326 conicto +1999 2432 1608 2432 conicto +1291 2432 1018 2368 conicto +746 2304 512 2176 conicto +512 2880 lineto +826 2974 1143 3023 conicto +1460 3072 1777 3072 conicto +2599 3072 2963 2751 conicto +3328 2431 3328 1709 conicto +end_ol grestore +gsave 27.395703 10.440000 translate 0.035278 -0.035278 scale +start_ol +1536 3840 moveto +1536 3008 lineto +2560 3008 lineto +2560 2304 lineto +1536 2304 lineto +1536 1054 lineto +1536 849 1618 776 conicto +1700 704 1944 704 conicto +2432 704 lineto +2432 0 lineto +1618 0 lineto +1050 0 813 240 conicto +576 480 576 1054 conicto +576 2304 lineto +128 2304 lineto +128 3008 lineto +576 3008 lineto +576 3840 lineto +1536 3840 lineto +end_ol grestore +gsave 27.745375 10.440000 translate 0.035278 -0.035278 scale +start_ol +1847 1344 moveto +1533 1344 1374 1245 conicto +1216 1146 1216 953 conicto +1216 776 1343 676 conicto +1471 576 1698 576 conicto +1981 576 2174 764 conicto +2368 953 2368 1237 conicto +2368 1344 lineto +1847 1344 lineto +3328 1709 moveto +3328 0 lineto +2368 0 lineto +2368 448 lineto +2171 180 1925 58 conicto +1679 -64 1326 -64 conicto +850 -64 553 206 conicto +256 476 256 907 conicto +256 1431 623 1675 conicto +991 1920 1777 1920 conicto +2368 1920 lineto +2368 1992 lineto +2368 2220 2183 2326 conicto +1999 2432 1608 2432 conicto +1291 2432 1018 2368 conicto +746 2304 512 2176 conicto +512 2880 lineto +826 2974 1143 3023 conicto +1460 3072 1777 3072 conicto +2599 3072 2963 2751 conicto +3328 2431 3328 1709 conicto +end_ol grestore +gsave 28.237409 10.440000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 28.602063 10.440000 translate 0.035278 -0.035278 scale +start_ol +1536 3840 moveto +1536 3008 lineto +2560 3008 lineto +2560 2304 lineto +1536 2304 lineto +1536 1054 lineto +1536 849 1618 776 conicto +1700 704 1944 704 conicto +2432 704 lineto +2432 0 lineto +1618 0 lineto +1050 0 813 240 conicto +576 480 576 1054 conicto +576 2304 lineto +128 2304 lineto +128 3008 lineto +576 3008 lineto +576 3840 lineto +1536 3840 lineto +end_ol grestore +0.100000 slw +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 22.720000 12.970000 m 22.720000 14.370000 l 27.775000 14.370000 l 27.775000 12.970000 l f +0.000000 0.000000 0.000000 srgb +n 22.720000 12.970000 m 22.720000 14.370000 l 27.775000 14.370000 l 27.775000 12.970000 l cp s +gsave 22.970000 13.970000 translate 0.035278 -0.035278 scale +start_ol +2816 2880 moveto +2816 2176 lineto +2510 2304 2225 2368 conicto +1940 2432 1687 2432 conicto +1416 2432 1284 2363 conicto +1152 2295 1152 2154 conicto +1152 2039 1252 1977 conicto +1352 1915 1611 1886 conicto +1779 1862 lineto +2506 1769 2757 1556 conicto +3008 1344 3008 890 conicto +3008 414 2653 175 conicto +2298 -64 1593 -64 conicto +1294 -64 975 -16 conicto +656 32 320 128 conicto +320 832 lineto +611 704 917 640 conicto +1223 576 1538 576 conicto +1824 576 1968 651 conicto +2112 726 2112 873 conicto +2112 997 2014 1057 conicto +1917 1118 1627 1152 conicto +1459 1173 lineto +792 1254 524 1471 conicto +256 1689 256 2132 conicto +256 2610 588 2841 conicto +920 3072 1605 3072 conicto +1875 3072 2171 3025 conicto +2468 2979 2816 2880 conicto +end_ol grestore +gsave 23.404586 13.970000 translate 0.035278 -0.035278 scale +start_ol +3456 1792 moveto +3456 0 lineto +2496 0 lineto +2496 292 lineto +2496 1366 lineto +2496 1752 2478 1896 conicto +2461 2041 2419 2110 conicto +2363 2202 2267 2253 conicto +2171 2304 2048 2304 conicto +1749 2304 1578 2077 conicto +1408 1850 1408 1448 conicto +1408 0 lineto +448 0 lineto +448 4160 lineto +1408 4160 lineto +1408 2560 lineto +1624 2823 1866 2947 conicto +2109 3072 2403 3072 conicto +2920 3072 3188 2744 conicto +3456 2417 3456 1792 conicto +end_ol grestore +gsave 23.924096 13.970000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 24.288749 13.970000 translate 0.035278 -0.035278 scale +start_ol +448 3008 moveto +1408 3008 lineto +1408 0 lineto +448 0 lineto +448 3008 lineto +448 4160 moveto +1408 4160 lineto +1408 3392 lineto +448 3392 lineto +448 4160 lineto +end_ol grestore +gsave 24.538516 13.970000 translate 0.035278 -0.035278 scale +start_ol +3219 2489 moveto +3400 2774 3649 2923 conicto +3898 3072 4196 3072 conicto +4710 3072 4979 2744 conicto +5248 2417 5248 1792 conicto +5248 0 lineto +4288 0 lineto +4288 1534 lineto +4291 1568 4292 1605 conicto +4293 1642 4293 1710 conicto +4293 2023 4200 2163 conicto +4107 2304 3900 2304 conicto +3628 2304 3480 2083 conicto +3333 1863 3328 1445 conicto +3328 0 lineto +2368 0 lineto +2368 1534 lineto +2368 2023 2283 2163 conicto +2198 2304 1980 2304 conicto +1706 2304 1557 2082 conicto +1408 1860 1408 1448 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2560 lineto +1584 2815 1811 2943 conicto +2039 3072 2314 3072 conicto +2622 3072 2859 2918 conicto +3096 2765 3219 2489 conicto +end_ol grestore +gsave 25.297804 13.970000 translate 0.035278 -0.035278 scale +start_ol +1847 1344 moveto +1533 1344 1374 1245 conicto +1216 1146 1216 953 conicto +1216 776 1343 676 conicto +1471 576 1698 576 conicto +1981 576 2174 764 conicto +2368 953 2368 1237 conicto +2368 1344 lineto +1847 1344 lineto +3328 1709 moveto +3328 0 lineto +2368 0 lineto +2368 448 lineto +2171 180 1925 58 conicto +1679 -64 1326 -64 conicto +850 -64 553 206 conicto +256 476 256 907 conicto +256 1431 623 1675 conicto +991 1920 1777 1920 conicto +2368 1920 lineto +2368 1992 lineto +2368 2220 2183 2326 conicto +1999 2432 1608 2432 conicto +1291 2432 1018 2368 conicto +746 2304 512 2176 conicto +512 2880 lineto +826 2974 1143 3023 conicto +1460 3072 1777 3072 conicto +2599 3072 2963 2751 conicto +3328 2431 3328 1709 conicto +end_ol grestore +gsave 25.789838 13.970000 translate 0.035278 -0.035278 scale +start_ol +2496 512 moveto +2299 248 2062 124 conicto +1826 0 1514 0 conicto +969 0 612 433 conicto +256 867 256 1537 conicto +256 2211 612 2641 conicto +969 3072 1514 3072 conicto +1826 3072 2062 2948 conicto +2299 2825 2496 2560 conicto +2496 3008 lineto +3456 3008 lineto +3456 305 lineto +3456 -435 3005 -825 conicto +2554 -1216 1698 -1216 conicto +1420 -1216 1161 -1168 conicto +902 -1121 640 -1024 conicto +640 -256 lineto +887 -417 1124 -496 conicto +1361 -576 1601 -576 conicto +2064 -576 2280 -362 conicto +2496 -149 2496 305 conicto +2496 512 lineto +1887 2368 moveto +1600 2368 1440 2150 conicto +1280 1933 1280 1535 conicto +1280 1126 1435 915 conicto +1590 704 1887 704 conicto +2176 704 2336 921 conicto +2496 1139 2496 1535 conicto +2496 1933 2336 2150 conicto +2176 2368 1887 2368 conicto +end_ol grestore +gsave 26.311845 13.970000 translate 0.035278 -0.035278 scale +start_ol +3456 1482 moveto +3456 1216 lineto +1216 1216 lineto +1251 896 1461 736 conicto +1671 576 2048 576 conicto +2353 576 2672 671 conicto +2991 767 3328 960 conicto +3328 192 lineto +2988 65 2648 0 conicto +2309 -64 1970 -64 conicto +1157 -64 706 348 conicto +256 760 256 1504 conicto +256 2235 696 2653 conicto +1137 3072 1909 3072 conicto +2612 3072 3034 2639 conicto +3456 2206 3456 1482 conicto +2496 1792 moveto +2496 2080 2333 2256 conicto +2171 2432 1909 2432 conicto +1625 2432 1448 2267 conicto +1271 2102 1227 1792 conicto +2496 1792 lineto +end_ol grestore +gsave 26.806376 13.970000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 27.171029 13.970000 translate 0.035278 -0.035278 scale +start_ol +1536 3840 moveto +1536 3008 lineto +2560 3008 lineto +2560 2304 lineto +1536 2304 lineto +1536 1054 lineto +1536 849 1618 776 conicto +1700 704 1944 704 conicto +2432 704 lineto +2432 0 lineto +1618 0 lineto +1050 0 813 240 conicto +576 480 576 1054 conicto +576 2304 lineto +128 2304 lineto +128 3008 lineto +576 3008 lineto +576 3840 lineto +1536 3840 lineto +end_ol grestore +0.100000 slw +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 8.290000 12.890000 m 8.290000 14.290000 l 14.485000 14.290000 l 14.485000 12.890000 l f +0.000000 0.000000 0.000000 srgb +n 8.290000 12.890000 m 8.290000 14.290000 l 14.485000 14.290000 l 14.485000 12.890000 l cp s +gsave 8.540000 13.890000 translate 0.035278 -0.035278 scale +start_ol +448 1213 moveto +448 3008 lineto +1408 3008 lineto +1408 2714 lineto +1408 2475 1405 2114 conicto +1403 1754 1403 1633 conicto +1403 1279 1421 1122 conicto +1440 966 1486 896 conicto +1544 804 1639 754 conicto +1734 704 1856 704 conicto +2155 704 2325 929 conicto +2496 1155 2496 1557 conicto +2496 3008 lineto +3456 3008 lineto +3456 0 lineto +2496 0 lineto +2496 448 lineto +2280 185 2038 60 conicto +1797 -64 1507 -64 conicto +989 -64 718 263 conicto +448 590 448 1213 conicto +end_ol grestore +gsave 9.059509 13.890000 translate 0.035278 -0.035278 scale +start_ol +2816 2880 moveto +2816 2176 lineto +2510 2304 2225 2368 conicto +1940 2432 1687 2432 conicto +1416 2432 1284 2363 conicto +1152 2295 1152 2154 conicto +1152 2039 1252 1977 conicto +1352 1915 1611 1886 conicto +1779 1862 lineto +2506 1769 2757 1556 conicto +3008 1344 3008 890 conicto +3008 414 2653 175 conicto +2298 -64 1593 -64 conicto +1294 -64 975 -16 conicto +656 32 320 128 conicto +320 832 lineto +611 704 917 640 conicto +1223 576 1538 576 conicto +1824 576 1968 651 conicto +2112 726 2112 873 conicto +2112 997 2014 1057 conicto +1917 1118 1627 1152 conicto +1459 1173 lineto +792 1254 524 1471 conicto +256 1689 256 2132 conicto +256 2610 588 2841 conicto +920 3072 1605 3072 conicto +1875 3072 2171 3025 conicto +2468 2979 2816 2880 conicto +end_ol grestore +gsave 9.494096 13.890000 translate 0.035278 -0.035278 scale +start_ol +3456 1482 moveto +3456 1216 lineto +1216 1216 lineto +1251 896 1461 736 conicto +1671 576 2048 576 conicto +2353 576 2672 671 conicto +2991 767 3328 960 conicto +3328 192 lineto +2988 65 2648 0 conicto +2309 -64 1970 -64 conicto +1157 -64 706 348 conicto +256 760 256 1504 conicto +256 2235 696 2653 conicto +1137 3072 1909 3072 conicto +2612 3072 3034 2639 conicto +3456 2206 3456 1482 conicto +2496 1792 moveto +2496 2080 2333 2256 conicto +2171 2432 1909 2432 conicto +1625 2432 1448 2267 conicto +1271 2102 1227 1792 conicto +2496 1792 lineto +end_ol grestore +gsave 9.988627 13.890000 translate 0.035278 -0.035278 scale +start_ol +2688 2176 moveto +2561 2241 2435 2272 conicto +2310 2304 2183 2304 conicto +1810 2304 1609 2064 conicto +1408 1825 1408 1378 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2496 lineto +1594 2796 1836 2934 conicto +2078 3072 2415 3072 conicto +2464 3072 2520 3068 conicto +2577 3065 2685 3053 conicto +2688 2176 lineto +end_ol grestore +gsave 10.348287 13.890000 translate 0.035278 -0.035278 scale +start_ol +2752 -768 moveto +2752 -1280 lineto +0 -1280 lineto +0 -768 lineto +2752 -768 lineto +end_ol grestore +gsave 10.712940 13.890000 translate 0.035278 -0.035278 scale +start_ol +1408 448 moveto +1408 -1152 lineto +448 -1152 lineto +448 3008 lineto +1408 3008 lineto +1408 2560 lineto +1604 2823 1843 2947 conicto +2082 3072 2393 3072 conicto +2942 3072 3295 2633 conicto +3648 2195 3648 1504 conicto +3648 813 3295 374 conicto +2942 -64 2393 -64 conicto +2082 -64 1843 60 conicto +1604 185 1408 448 conicto +2019 2368 moveto +1724 2368 1566 2145 conicto +1408 1923 1408 1504 conicto +1408 1085 1566 862 conicto +1724 640 2019 640 conicto +2314 640 2469 861 conicto +2624 1083 2624 1504 conicto +2624 1925 2469 2146 conicto +2314 2368 2019 2368 conicto +end_ol grestore +gsave 11.234947 13.890000 translate 0.035278 -0.035278 scale +start_ol +2688 2176 moveto +2561 2241 2435 2272 conicto +2310 2304 2183 2304 conicto +1810 2304 1609 2064 conicto +1408 1825 1408 1378 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2496 lineto +1594 2796 1836 2934 conicto +2078 3072 2415 3072 conicto +2464 3072 2520 3068 conicto +2577 3065 2685 3053 conicto +2688 2176 lineto +end_ol grestore +gsave 11.594606 13.890000 translate 0.035278 -0.035278 scale +start_ol +1924 2368 moveto +1610 2368 1445 2145 conicto +1280 1923 1280 1504 conicto +1280 1085 1445 862 conicto +1610 640 1924 640 conicto +2233 640 2396 862 conicto +2560 1085 2560 1504 conicto +2560 1923 2396 2145 conicto +2233 2368 1924 2368 conicto +1924 3072 moveto +2705 3072 3144 2656 conicto +3584 2240 3584 1504 conicto +3584 768 3144 352 conicto +2705 -64 1924 -64 conicto +1140 -64 698 352 conicto +256 768 256 1504 conicto +256 2240 698 2656 conicto +1140 3072 1924 3072 conicto +end_ol grestore +gsave 12.096637 13.890000 translate 0.035278 -0.035278 scale +start_ol +2496 512 moveto +2299 248 2062 124 conicto +1826 0 1514 0 conicto +969 0 612 433 conicto +256 867 256 1537 conicto +256 2211 612 2641 conicto +969 3072 1514 3072 conicto +1826 3072 2062 2948 conicto +2299 2825 2496 2560 conicto +2496 3008 lineto +3456 3008 lineto +3456 305 lineto +3456 -435 3005 -825 conicto +2554 -1216 1698 -1216 conicto +1420 -1216 1161 -1168 conicto +902 -1121 640 -1024 conicto +640 -256 lineto +887 -417 1124 -496 conicto +1361 -576 1601 -576 conicto +2064 -576 2280 -362 conicto +2496 -149 2496 305 conicto +2496 512 lineto +1887 2368 moveto +1600 2368 1440 2150 conicto +1280 1933 1280 1535 conicto +1280 1126 1435 915 conicto +1590 704 1887 704 conicto +2176 704 2336 921 conicto +2496 1139 2496 1535 conicto +2496 1933 2336 2150 conicto +2176 2368 1887 2368 conicto +end_ol grestore +gsave 12.618643 13.890000 translate 0.035278 -0.035278 scale +start_ol +2688 2176 moveto +2561 2241 2435 2272 conicto +2310 2304 2183 2304 conicto +1810 2304 1609 2064 conicto +1408 1825 1408 1378 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2496 lineto +1594 2796 1836 2934 conicto +2078 3072 2415 3072 conicto +2464 3072 2520 3068 conicto +2577 3065 2685 3053 conicto +2688 2176 lineto +end_ol grestore +gsave 12.978303 13.890000 translate 0.035278 -0.035278 scale +start_ol +1847 1344 moveto +1533 1344 1374 1245 conicto +1216 1146 1216 953 conicto +1216 776 1343 676 conicto +1471 576 1698 576 conicto +1981 576 2174 764 conicto +2368 953 2368 1237 conicto +2368 1344 lineto +1847 1344 lineto +3328 1709 moveto +3328 0 lineto +2368 0 lineto +2368 448 lineto +2171 180 1925 58 conicto +1679 -64 1326 -64 conicto +850 -64 553 206 conicto +256 476 256 907 conicto +256 1431 623 1675 conicto +991 1920 1777 1920 conicto +2368 1920 lineto +2368 1992 lineto +2368 2220 2183 2326 conicto +1999 2432 1608 2432 conicto +1291 2432 1018 2368 conicto +746 2304 512 2176 conicto +512 2880 lineto +826 2974 1143 3023 conicto +1460 3072 1777 3072 conicto +2599 3072 2963 2751 conicto +3328 2431 3328 1709 conicto +end_ol grestore +gsave 13.470337 13.890000 translate 0.035278 -0.035278 scale +start_ol +3219 2489 moveto +3400 2774 3649 2923 conicto +3898 3072 4196 3072 conicto +4710 3072 4979 2744 conicto +5248 2417 5248 1792 conicto +5248 0 lineto +4288 0 lineto +4288 1534 lineto +4291 1568 4292 1605 conicto +4293 1642 4293 1710 conicto +4293 2023 4200 2163 conicto +4107 2304 3900 2304 conicto +3628 2304 3480 2083 conicto +3333 1863 3328 1445 conicto +3328 0 lineto +2368 0 lineto +2368 1534 lineto +2368 2023 2283 2163 conicto +2198 2304 1980 2304 conicto +1706 2304 1557 2082 conicto +1408 1860 1408 1448 conicto +1408 0 lineto +448 0 lineto +448 3008 lineto +1408 3008 lineto +1408 2560 lineto +1584 2815 1811 2943 conicto +2039 3072 2314 3072 conicto +2622 3072 2859 2918 conicto +3096 2765 3219 2489 conicto +end_ol grestore +0.100000 slw +0 slc +[] 0 sd +[0.400000] 0 sd +n 10.596618 12.096762 m 9.020000 9.120000 l s +0 slj +n 10.375692 12.213774 m 10.971056 12.803725 l 10.817544 11.979750 l ef +0.100000 slw +[0.080000] 0 sd +[0.200000] 0 sd +0 slc +n 14.300000 8.500000 m 10.170000 11.000000 l s +0.100000 slw +0 slc +[0.080000] 0 sd +[0.400000] 0 sd +n 13.106038 12.342605 m 18.400000 8.500000 l s +0 slj +n 12.959184 12.140284 m 12.458610 12.812538 l 13.252892 12.544926 l ef +0.100000 slw +0 slc +[] 0 sd +n 21.822451 13.650231 m 14.534847 13.608167 l s +0 slj +n 21.821008 13.900226 m 22.622437 13.654848 l 21.823894 13.400235 l ef +gsave 16.687562 14.367128 translate 0.035278 -0.035278 scale +start_ol +3200 2167 moveto +985 1374 lineto +3200 585 lineto +3200 192 lineto +448 1197 lineto +448 1555 lineto +3200 2560 lineto +3200 2167 lineto +end_ol grestore +gsave 17.174602 14.367128 translate 0.035278 -0.035278 scale +start_ol +3200 2167 moveto +985 1374 lineto +3200 585 lineto +3200 192 lineto +448 1197 lineto +448 1555 lineto +3200 2560 lineto +3200 2167 lineto +end_ol grestore +gsave 17.661642 14.367128 translate 0.035278 -0.035278 scale +start_ol +2176 2368 moveto +2176 1984 lineto +2010 2080 1843 2128 conicto +1676 2176 1506 2176 conicto +1125 2176 914 1924 conicto +704 1672 704 1216 conicto +704 760 914 508 conicto +1125 256 1506 256 conicto +1676 256 1843 304 conicto +2010 352 2176 448 conicto +2176 64 lineto +2009 0 1830 -32 conicto +1652 -64 1450 -64 conicto +902 -64 579 282 conicto +256 628 256 1216 conicto +256 1812 582 2154 conicto +908 2496 1476 2496 conicto +1660 2496 1835 2464 conicto +2011 2432 2176 2368 conicto +end_ol grestore +gsave 17.981342 14.367128 translate 0.035278 -0.035278 scale +start_ol +1792 2112 moveto +1725 2145 1645 2160 conicto +1566 2176 1470 2176 conicto +1131 2176 949 1944 conicto +768 1712 768 1277 conicto +768 0 lineto +384 0 lineto +384 2432 lineto +768 2432 lineto +768 2048 lineto +894 2275 1096 2385 conicto +1298 2496 1588 2496 conicto +1629 2496 1679 2496 conicto +1729 2496 1790 2496 conicto +1792 2112 lineto +end_ol grestore +gsave 18.208627 14.367128 translate 0.035278 -0.035278 scale +start_ol +2496 1352 moveto +2496 1152 lineto +704 1152 lineto +730 714 950 485 conicto +1171 256 1565 256 conicto +1793 256 2007 320 conicto +2221 384 2432 512 conicto +2432 128 lineto +2215 34 1988 -15 conicto +1761 -64 1527 -64 conicto +941 -64 598 275 conicto +256 615 256 1194 conicto +256 1793 576 2144 conicto +897 2496 1441 2496 conicto +1928 2496 2212 2188 conicto +2496 1881 2496 1352 conicto +2112 1472 moveto +2108 1793 1932 1984 conicto +1757 2176 1468 2176 conicto +1140 2176 943 1991 conicto +747 1806 717 1470 conicto +2112 1472 lineto +end_ol grestore +gsave 18.565790 14.367128 translate 0.035278 -0.035278 scale +start_ol +1515 1216 moveto +1021 1216 830 1104 conicto +640 992 640 723 conicto +640 508 783 382 conicto +926 256 1171 256 conicto +1510 256 1715 494 conicto +1920 733 1920 1129 conicto +1920 1216 lineto +1515 1216 lineto +2304 1385 moveto +2304 0 lineto +1920 0 lineto +1920 384 lineto +1782 154 1577 45 conicto +1372 -64 1075 -64 conicto +699 -64 477 146 conicto +256 356 256 708 conicto +256 1119 530 1327 conicto +805 1536 1349 1536 conicto +1920 1536 lineto +1920 1578 lineto +1920 1864 1739 2020 conicto +1558 2176 1232 2176 conicto +1024 2176 827 2128 conicto +630 2080 448 1984 conicto +448 2368 lineto +665 2432 869 2464 conicto +1073 2496 1266 2496 conicto +1788 2496 2046 2220 conicto +2304 1945 2304 1385 conicto +end_ol grestore +gsave 18.922952 14.367128 translate 0.035278 -0.035278 scale +start_ol +768 3136 moveto +768 2432 lineto +1600 2432 lineto +1600 2112 lineto +768 2112 lineto +768 788 lineto +768 490 850 405 conicto +933 320 1185 320 conicto +1600 320 lineto +1600 0 lineto +1185 0 lineto +730 0 557 170 conicto +384 340 384 788 conicto +384 2112 lineto +64 2112 lineto +64 2432 lineto +384 2432 lineto +384 3136 lineto +768 3136 lineto +end_ol grestore +gsave 19.150238 14.367128 translate 0.035278 -0.035278 scale +start_ol +2496 1352 moveto +2496 1152 lineto +704 1152 lineto +730 714 950 485 conicto +1171 256 1565 256 conicto +1793 256 2007 320 conicto +2221 384 2432 512 conicto +2432 128 lineto +2215 34 1988 -15 conicto +1761 -64 1527 -64 conicto +941 -64 598 275 conicto +256 615 256 1194 conicto +256 1793 576 2144 conicto +897 2496 1441 2496 conicto +1928 2496 2212 2188 conicto +2496 1881 2496 1352 conicto +2112 1472 moveto +2108 1793 1932 1984 conicto +1757 2176 1468 2176 conicto +1140 2176 943 1991 conicto +747 1806 717 1470 conicto +2112 1472 lineto +end_ol grestore +gsave 19.507400 14.367128 translate 0.035278 -0.035278 scale +start_ol +448 2167 moveto +448 2560 lineto +3200 1555 lineto +3200 1197 lineto +448 192 lineto +448 585 lineto +2659 1374 lineto +448 2167 lineto +end_ol grestore +gsave 19.994441 14.367128 translate 0.035278 -0.035278 scale +start_ol +448 2167 moveto +448 2560 lineto +3200 1555 lineto +3200 1197 lineto +448 192 lineto +448 585 lineto +2659 1374 lineto +448 2167 lineto +end_ol grestore +0.100000 slw +[0.080000] 0 sd +[0.200000] 0 sd +0 slc +n 24.373446 10.890326 m 19.170000 13.450000 l s +0.100000 slw +[0.200000] 0 sd +[0.200000] 0 sd +0 slc +n 22.540211 10.143699 m 16.820000 10.150000 l s +gsave 18.520000 12.050000 translate 0.035278 -0.035278 scale +start_ol +3584 2444 moveto +1111 1566 lineto +3584 692 lineto +3584 256 lineto +512 1369 lineto +512 1767 lineto +3584 2880 lineto +3584 2444 lineto +end_ol grestore +gsave 19.069482 12.050000 translate 0.035278 -0.035278 scale +start_ol +3584 2444 moveto +1111 1566 lineto +3584 692 lineto +3584 256 lineto +512 1369 lineto +512 1767 lineto +3584 2880 lineto +3584 2444 lineto +end_ol grestore +gsave 19.618963 12.050000 translate 0.035278 -0.035278 scale +start_ol +1666 1408 moveto +1123 1408 913 1281 conicto +704 1155 704 849 conicto +704 606 861 463 conicto +1018 320 1289 320 conicto +1661 320 1886 588 conicto +2112 856 2112 1301 conicto +2112 1408 lineto +1666 1408 lineto +2560 1577 moveto +2560 0 lineto +2112 0 lineto +2112 384 lineto +1959 154 1730 45 conicto +1501 -64 1169 -64 conicto +750 -64 503 171 conicto +256 406 256 800 conicto +256 1261 564 1494 conicto +872 1728 1484 1728 conicto +2112 1728 lineto +2112 1770 lineto +2112 2056 1907 2212 conicto +1703 2368 1334 2368 conicto +1099 2368 876 2320 conicto +654 2272 448 2176 conicto +448 2560 lineto +695 2656 927 2704 conicto +1159 2752 1379 2752 conicto +1973 2752 2266 2460 conicto +2560 2169 2560 1577 conicto +end_ol grestore +gsave 20.021080 12.050000 translate 0.035278 -0.035278 scale +start_ol +2048 2304 moveto +1972 2337 1883 2352 conicto +1794 2368 1686 2368 conicto +1304 2368 1100 2117 conicto +896 1866 896 1397 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2240 lineto +1038 2500 1265 2626 conicto +1493 2752 1818 2752 conicto +1865 2752 1921 2752 conicto +1977 2752 2046 2752 conicto +2048 2304 lineto +end_ol grestore +gsave 20.278338 12.050000 translate 0.035278 -0.035278 scale +start_ol +2240 1375 moveto +2240 1848 2038 2108 conicto +1836 2368 1471 2368 conicto +1108 2368 906 2108 conicto +704 1848 704 1375 conicto +704 904 906 644 conicto +1108 384 1471 384 conicto +1836 384 2038 644 conicto +2240 904 2240 1375 conicto +2688 347 moveto +2688 -347 2378 -685 conicto +2069 -1024 1430 -1024 conicto +1193 -1024 983 -992 conicto +774 -961 576 -896 conicto +576 -448 lineto +774 -546 966 -593 conicto +1159 -640 1359 -640 conicto +1801 -640 2020 -415 conicto +2240 -190 2240 264 conicto +2240 448 lineto +2102 223 1885 111 conicto +1669 0 1368 0 conicto +868 0 562 376 conicto +256 753 256 1375 conicto +256 1999 562 2375 conicto +868 2752 1368 2752 conicto +1669 2752 1885 2640 conicto +2102 2529 2240 2304 conicto +2240 2688 lineto +2688 2688 lineto +2688 347 lineto +end_ol grestore +gsave 20.695446 12.050000 translate 0.035278 -0.035278 scale +start_ol +512 2444 moveto +512 2880 lineto +3584 1767 lineto +3584 1369 lineto +512 256 lineto +512 692 lineto +2980 1566 lineto +512 2444 lineto +end_ol grestore +gsave 21.244927 12.050000 translate 0.035278 -0.035278 scale +start_ol +512 2444 moveto +512 2880 lineto +3584 1767 lineto +3584 1369 lineto +512 256 lineto +512 692 lineto +2980 1566 lineto +512 2444 lineto +end_ol grestore +gsave 10.640000 8.780000 translate 0.035278 -0.035278 scale +start_ol +3584 2444 moveto +1111 1566 lineto +3584 692 lineto +3584 256 lineto +512 1369 lineto +512 1767 lineto +3584 2880 lineto +3584 2444 lineto +end_ol grestore +gsave 11.189482 8.780000 translate 0.035278 -0.035278 scale +start_ol +3584 2444 moveto +1111 1566 lineto +3584 692 lineto +3584 256 lineto +512 1369 lineto +512 1767 lineto +3584 2880 lineto +3584 2444 lineto +end_ol grestore +gsave 11.738963 8.780000 translate 0.035278 -0.035278 scale +start_ol +1666 1408 moveto +1123 1408 913 1281 conicto +704 1155 704 849 conicto +704 606 861 463 conicto +1018 320 1289 320 conicto +1661 320 1886 588 conicto +2112 856 2112 1301 conicto +2112 1408 lineto +1666 1408 lineto +2560 1577 moveto +2560 0 lineto +2112 0 lineto +2112 384 lineto +1959 154 1730 45 conicto +1501 -64 1169 -64 conicto +750 -64 503 171 conicto +256 406 256 800 conicto +256 1261 564 1494 conicto +872 1728 1484 1728 conicto +2112 1728 lineto +2112 1770 lineto +2112 2056 1907 2212 conicto +1703 2368 1334 2368 conicto +1099 2368 876 2320 conicto +654 2272 448 2176 conicto +448 2560 lineto +695 2656 927 2704 conicto +1159 2752 1379 2752 conicto +1973 2752 2266 2460 conicto +2560 2169 2560 1577 conicto +end_ol grestore +gsave 12.141080 8.780000 translate 0.035278 -0.035278 scale +start_ol +2048 2304 moveto +1972 2337 1883 2352 conicto +1794 2368 1686 2368 conicto +1304 2368 1100 2117 conicto +896 1866 896 1397 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2240 lineto +1038 2500 1265 2626 conicto +1493 2752 1818 2752 conicto +1865 2752 1921 2752 conicto +1977 2752 2046 2752 conicto +2048 2304 lineto +end_ol grestore +gsave 12.398338 8.780000 translate 0.035278 -0.035278 scale +start_ol +2240 1375 moveto +2240 1848 2038 2108 conicto +1836 2368 1471 2368 conicto +1108 2368 906 2108 conicto +704 1848 704 1375 conicto +704 904 906 644 conicto +1108 384 1471 384 conicto +1836 384 2038 644 conicto +2240 904 2240 1375 conicto +2688 347 moveto +2688 -347 2378 -685 conicto +2069 -1024 1430 -1024 conicto +1193 -1024 983 -992 conicto +774 -961 576 -896 conicto +576 -448 lineto +774 -546 966 -593 conicto +1159 -640 1359 -640 conicto +1801 -640 2020 -415 conicto +2240 -190 2240 264 conicto +2240 448 lineto +2102 223 1885 111 conicto +1669 0 1368 0 conicto +868 0 562 376 conicto +256 753 256 1375 conicto +256 1999 562 2375 conicto +868 2752 1368 2752 conicto +1669 2752 1885 2640 conicto +2102 2529 2240 2304 conicto +2240 2688 lineto +2688 2688 lineto +2688 347 lineto +end_ol grestore +gsave 12.815446 8.780000 translate 0.035278 -0.035278 scale +start_ol +512 2444 moveto +512 2880 lineto +3584 1767 lineto +3584 1369 lineto +512 256 lineto +512 692 lineto +2980 1566 lineto +512 2444 lineto +end_ol grestore +gsave 13.364927 8.780000 translate 0.035278 -0.035278 scale +start_ol +512 2444 moveto +512 2880 lineto +3584 1767 lineto +3584 1369 lineto +512 256 lineto +512 692 lineto +2980 1566 lineto +512 2444 lineto +end_ol grestore +gsave 18.260000 9.800000 translate 0.035278 -0.035278 scale +start_ol +3584 2444 moveto +1111 1566 lineto +3584 692 lineto +3584 256 lineto +512 1369 lineto +512 1767 lineto +3584 2880 lineto +3584 2444 lineto +end_ol grestore +gsave 18.809482 9.800000 translate 0.035278 -0.035278 scale +start_ol +3584 2444 moveto +1111 1566 lineto +3584 692 lineto +3584 256 lineto +512 1369 lineto +512 1767 lineto +3584 2880 lineto +3584 2444 lineto +end_ol grestore +gsave 19.358963 9.800000 translate 0.035278 -0.035278 scale +start_ol +1666 1408 moveto +1123 1408 913 1281 conicto +704 1155 704 849 conicto +704 606 861 463 conicto +1018 320 1289 320 conicto +1661 320 1886 588 conicto +2112 856 2112 1301 conicto +2112 1408 lineto +1666 1408 lineto +2560 1577 moveto +2560 0 lineto +2112 0 lineto +2112 384 lineto +1959 154 1730 45 conicto +1501 -64 1169 -64 conicto +750 -64 503 171 conicto +256 406 256 800 conicto +256 1261 564 1494 conicto +872 1728 1484 1728 conicto +2112 1728 lineto +2112 1770 lineto +2112 2056 1907 2212 conicto +1703 2368 1334 2368 conicto +1099 2368 876 2320 conicto +654 2272 448 2176 conicto +448 2560 lineto +695 2656 927 2704 conicto +1159 2752 1379 2752 conicto +1973 2752 2266 2460 conicto +2560 2169 2560 1577 conicto +end_ol grestore +gsave 19.761080 9.800000 translate 0.035278 -0.035278 scale +start_ol +2048 2304 moveto +1972 2337 1883 2352 conicto +1794 2368 1686 2368 conicto +1304 2368 1100 2117 conicto +896 1866 896 1397 conicto +896 0 lineto +448 0 lineto +448 2688 lineto +896 2688 lineto +896 2240 lineto +1038 2500 1265 2626 conicto +1493 2752 1818 2752 conicto +1865 2752 1921 2752 conicto +1977 2752 2046 2752 conicto +2048 2304 lineto +end_ol grestore +gsave 20.018338 9.800000 translate 0.035278 -0.035278 scale +start_ol +2240 1375 moveto +2240 1848 2038 2108 conicto +1836 2368 1471 2368 conicto +1108 2368 906 2108 conicto +704 1848 704 1375 conicto +704 904 906 644 conicto +1108 384 1471 384 conicto +1836 384 2038 644 conicto +2240 904 2240 1375 conicto +2688 347 moveto +2688 -347 2378 -685 conicto +2069 -1024 1430 -1024 conicto +1193 -1024 983 -992 conicto +774 -961 576 -896 conicto +576 -448 lineto +774 -546 966 -593 conicto +1159 -640 1359 -640 conicto +1801 -640 2020 -415 conicto +2240 -190 2240 264 conicto +2240 448 lineto +2102 223 1885 111 conicto +1669 0 1368 0 conicto +868 0 562 376 conicto +256 753 256 1375 conicto +256 1999 562 2375 conicto +868 2752 1368 2752 conicto +1669 2752 1885 2640 conicto +2102 2529 2240 2304 conicto +2240 2688 lineto +2688 2688 lineto +2688 347 lineto +end_ol grestore +gsave 20.435446 9.800000 translate 0.035278 -0.035278 scale +start_ol +512 2444 moveto +512 2880 lineto +3584 1767 lineto +3584 1369 lineto +512 256 lineto +512 692 lineto +2980 1566 lineto +512 2444 lineto +end_ol grestore +gsave 20.984927 9.800000 translate 0.035278 -0.035278 scale +start_ol +512 2444 moveto +512 2880 lineto +3584 1767 lineto +3584 1369 lineto +512 256 lineto +512 692 lineto +2980 1566 lineto +512 2444 lineto +end_ol grestore +showpage
--- a/include/Makefile.am Sat Jan 31 11:51:19 2009 +0800 +++ b/include/Makefile.am Sat Jan 31 12:29:50 2009 +0800 @@ -9,4 +9,5 @@ mb_shapes.h \ mb_tools.h \ mb_prop.h \ - mb_X_supp.h + mb_X_supp.h \ + mb_so.h
--- a/include/mb_X_supp.h Sat Jan 31 11:51:19 2009 +0800 +++ b/include/mb_X_supp.h Sat Jan 31 12:29:50 2009 +0800 @@ -5,6 +5,7 @@ #include "mb_types.h" #include "mb_timer.h" #include "mb_redraw_man.h" +#include "mb_img_ldr.h" /*! \ingroup xkb * @{ @@ -30,5 +31,6 @@ extern redraw_man_t *X_MB_rdman(X_MB_runtime_t *xmb_rt); extern mb_tman_t *X_MB_tman(X_MB_runtime_t *xmb_rt); extern ob_factory_t *X_MB_ob_factory(X_MB_runtime_t *xmb_rt); +extern mb_img_ldr_t *X_MB_img_ldr(X_MB_runtime_t *xmb_rt); #endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/mb_img_ldr.h Sat Jan 31 12:29:50 2009 +0800 @@ -0,0 +1,58 @@ +#ifndef __MB_IMG_LDR_H_ +#define __MB_IMG_LDR_H_ + +typedef struct _mb_img_data mb_img_data_t; +typedef struct _mb_img_ldr mb_img_ldr_t; + +typedef enum _mb_img_fmt { + MB_IFMT_DUMMY, + MB_IFMT_ARGB32, + MB_IFMT_RGB24, + MB_IFMT_A8, + MB_IFMT_A1, + MB_IFMT_RGB16_565 +} mb_img_fmt_t; + +/*! \brief Encapsulate image. + * + * The format and content of an image is encapsulated by imag_data_t. + * We hope someday, we can create an abstract backend layer that + * can deal with image data. + */ +struct _mb_img_data { + /*! \brief Content of the image. */ + void *content; + int w, h; + int stride; /*!< \brief Number of bytes a row */ + mb_img_fmt_t fmt; + /*! \brief Release the image that was loaded by the loader. */ + void (*free)(mb_img_data_t *img); +}; +#define MB_IMG_DATA_FREE(img) (img)->free(img) + +/*! \brief Image loader. + * + * An image loader take a ID and find out the corresponding + * image from filesystem or somewhere. Image ID is a hierachical + * structured path. It is relative to the root of image database. + * Users of a loader do not need to know where the database is. + * The location can be configured when a loader been instantiated. + * But, it is invisible when loading images by an image loader. + */ +struct _mb_img_ldr { + /*! \brief Load a image with specified ID. */ + mb_img_data_t *(*load)(mb_img_ldr_t *ldr, const char *img_id); + /*! \brief Free the loader. */ + void (*free)(mb_img_ldr_t *ldr); +}; +#define MB_IMG_LDR_FREE(ldr) (ldr)->free(ldr) +#define MB_IMG_LDR_LOAD(ldr, img_id) (ldr)->load(ldr, img_id) + +/*! \brief Create a simple image loader. + * + * \param img_repository is a repository where images are loaded from. + * \return NULL for error. + */ +extern mb_img_ldr_t *simple_mb_img_ldr_new(const char *img_repository); + +#endif /* __MB_IMG_LDR_H_ */
--- a/include/mb_paint.h Sat Jan 31 11:51:19 2009 +0800 +++ b/include/mb_paint.h Sat Jan 31 12:29:50 2009 +0800 @@ -24,7 +24,8 @@ (_paint)->free = _free; \ STAILQ_INIT((_paint)->members); \ (_paint)->pnt_next = NULL; \ - } while(0) \ + } while(0) +#define paint_destroy(_paint) typedef struct _grad_stop { @@ -53,5 +54,12 @@ (stop)->a = _a; \ } while(0) +/*! \brief A paint that fill or stroke shape with an image. + */ +extern paint_t *rdman_paint_image_new(redraw_man_t *rdman, + mb_img_data_t *img); +/*! \brief Set a matrix to transform image. + */ +extern void paint_image_set_matrix(paint_t *paint, co_aix matrix[6]); #endif /* __PAINT_H_ */
--- a/include/mb_prop.h Sat Jan 31 11:51:19 2009 +0800 +++ b/include/mb_prop.h Sat Jan 31 12:29:50 2009 +0800 @@ -11,6 +11,10 @@ * to keep property values. Every property is identified by a ID; an * integer. Programmer can use a ID to set/get value to/from a property * store. The ID should be unique in a property store. + * + * \todo Add a free function pointer on entries to release resources when + * the store is destroy. (See: \ref mouse.c) + * * @{ */
--- a/include/mb_redraw_man.h Sat Jan 31 11:51:19 2009 +0800 +++ b/include/mb_redraw_man.h Sat Jan 31 12:29:50 2009 +0800 @@ -5,6 +5,7 @@ #include "mb_tools.h" #include "mb_types.h" #include "mb_observer.h" +#include "mb_img_ldr.h" typedef struct _redraw_man redraw_man_t; @@ -78,6 +79,13 @@ * graphic backend. * \see rdman_attach_backend() */ + mb_prop_store_t props; + mb_img_ldr_t *img_ldr; /*!< \brief Image Loader. + * This is initialized by backend. + */ + co_aix w, h; /*!< \brief Size of viewport + * This is initialized by backend. + */ }; extern int redraw_man_init(redraw_man_t *rdman, cairo_t *cr, @@ -173,8 +181,8 @@ co_aix x, co_aix y, int *in_stroke); extern int mb_obj_pos_is_in(redraw_man_t *rdman, mb_obj_t *obj, co_aix x, co_aix y, int *in_stroke); -extern int mb_objs_is_overlay(redraw_man_t *rdman, - mb_obj_t *obj1, mb_obj_t *obj2); +extern int mb_objs_are_overlay(redraw_man_t *rdman, + mb_obj_t *obj1, mb_obj_t *obj2); #define rdman_get_ob_factory(rdman) (&(rdman)->ob_factory) #define rdman_get_redraw_subject(rdman) ((rdman)->redraw) #define rdman_get_root(rdman) ((rdman)->root_coord) @@ -189,6 +197,10 @@ rdman_get_gen_geos(rdman)->num #define rdman_clear_shape_gl(rdman) \ DARRAY_CLEAN(rdman_get_gen_geos(rdman)) +#define rdman_prop_store(rdman) ((rdman)->props) +#define rdman_img_ldr(rdman) ((rdman)->img_ldr) +#define rdman_set_img_ldr(rdman, ldr) \ + do { (rdman)->img_ldr = ldr; } while(0) /*! \brief Attach backend to the redraw manager so that we can hide the backend from the users. * @@ -196,9 +208,10 @@ #define rdman_attach_backend(rdman,backend) (((rdman)->rt)=(backend)) /*! \brief Load sprite dymanicly from the shared object module. * - * The search path can be changed by sprite_set_search_path. The name can have a relative path in the front of it. - * This function will search the object in the current working directory and then search the system search path. - * + * The search path can be changed by sprite_set_search_path. The name + * can have a relative path in the front of it. + * This function will search the object in the current working directory + * and then search the system search path. */ mb_sprite_t *sprite_load(const char *name, redraw_man_t *rdman, coord_t *root);
--- a/include/mb_shapes.h Sat Jan 31 11:51:19 2009 +0800 +++ b/include/mb_shapes.h Sat Jan 31 12:29:50 2009 +0800 @@ -10,6 +10,7 @@ #include <cairo.h> #include "mb_types.h" #include "mb_redraw_man.h" +#include "mb_img_ldr.h" #include <pango/pangocairo.h> /*! \page define_shape How to Define Shapes @@ -24,12 +25,22 @@ * - assigned to \ref shape_t::free. * - *_transform() * - *_draw() + * - *_draw() is responsive to define shape. How the shape is filled + * or stroked is defined by paint. * - first member variable of a shape type must be a shape_t. * * Must modify * - event.c::draw_shape_path() * - redraw_man.c::clean_shape() * - redraw_man.c::draw_shape() + * + * \section shape_transform Shape Transform + * + * All shape types must have a shape transform function. It is invoked by + * redraw_man.c::clean_shape(). It's task is to update \ref geo_t of the + * shape object. In most situtation, it call geo_from_positions() to + * update geo_t. + * */ /*! \defgroup shapes Shapes @@ -154,6 +165,19 @@ extern void sh_rect_set(shape_t *shape, co_aix x, co_aix y, co_aix w, co_aix h, co_aix rx, co_aix ry); /* @} */ + +/*! \defgroup shape_image Shape of Image + * @{ + */ +extern shape_t *rdman_shape_image_new(redraw_man_t *rdman, + mb_img_data_t *img_data, + co_aix x, co_aix y, + co_aix w, co_aix h); +extern void sh_image_transform(shape_t *shape); +extern void sh_image_draw(shape_t *shape, cairo_t *cr); +extern void sh_image_set_geometry(shape_t *shape, co_aix x, co_aix y, + co_aix w, co_aix h); +/* @} */ /* @} */ #endif /* __SHAPES_H_ */
--- a/include/mb_tools.h Sat Jan 31 11:51:19 2009 +0800 +++ b/include/mb_tools.h Sat Jan 31 12:29:50 2009 +0800 @@ -61,6 +61,10 @@ } \ } \ } while(0) +#define STAILQ_FOR_EACH(q, type, field, elm) \ + for((elm) = (q).head; \ + (elm) != NULL; \ + (elm) = (elm)->field) /*! \defgroup darray Dynamic Array * @@ -134,4 +138,7 @@ #define MEM2OBJ(var, type, mem) ((type *)((void *)var - OFFSET(type, mem))) #define OFF2TYPE(obj, off, type) (*(type *)((void *)(obj) + (off))) +#define MAX(a, b) ((a) > (b)? (a): (b)) +#define MIN(a, b) ((a) < (b)? (a): (b)) + #endif /* __TOOLS_H_ */
--- a/include/mb_types.h Sat Jan 31 11:51:19 2009 +0800 +++ b/include/mb_types.h Sat Jan 31 12:29:50 2009 +0800 @@ -40,7 +40,8 @@ MBO_SHAPES=0x1000, /*! \note Don't touch this. */ MBO_PATH, MBO_TEXT, - MBO_RECT + MBO_RECT, + MBO_IMAGE }; #define MBO_CLASS_MASK 0xf000 #define MBO_CLASS(x) (((mb_obj_t *)(x))->obj_type & MBO_CLASS_MASK) @@ -63,6 +64,9 @@ * Paints should be freed by users by calling rdman_paint_free() of * the paint. * + * To define a foo paint, it should define a rdman_paint_foo_new() + * function. It return a paint object. + * * \todo move member functions to a seperate structure and setup a * singleton for each paint type. */ @@ -108,6 +112,10 @@ extern int areas_are_overlay(area_t *r1, area_t *r2); extern void area_init(area_t *area, int n_pos, co_aix pos[][2]); +#define _in_range(a, s, w) ((a) >= (s) && (a) < ((s) + (w))) +#define area_pos_is_in(area, _x, _y) \ + (_in_range(_x, (area)->x, (area)->w) && \ + _in_range(_y, (area)->y, (area)->h)) extern void geo_init(geo_t *g); extern void geo_from_positions(geo_t *g, int n_pos, co_aix pos[][2]); extern void geo_mark_overlay(geo_t *g, int n_others, geo_t **others, @@ -115,10 +123,7 @@ #define geo_get_shape(g) ((g)->shape) #define geo_get_shape_safe(g) ((g)? (g)->shape: NULL) #define geo_set_shape(g, sh) do {(g)->shape = sh;} while(0) -#define _geo_is_in(a, s, w) ((a) >= (s) && (a) < ((s) + (w))) -#define geo_pos_is_in(g, _x, _y) \ - (_geo_is_in(_x, (g)->cur_area->x, (g)->cur_area->w) && \ - _geo_is_in(_y, (g)->cur_area->y, (g)->cur_area->h)) +#define geo_pos_is_in(g, _x, _y) area_pos_is_in((g)->cur_area, _x, _y) #define geo_get_area(g) ((g)->cur_area) #define geo_get_flags(g, mask) ((g)->flags & (mask)) #define geo_set_flags(g, mask) do {(g)->flags |= mask;} while(0) @@ -196,6 +201,7 @@ } while(0) #define coord_show(co) do { co->flags &= ~COF_HIDDEN; } while(0) #define coord_get_mouse_event(coord) ((coord)->mouse_event) +#define coord_get_aggr_matrix(coord) ((coord)->aggr_matrix) #define FOR_COORDS_POSTORDER(coord, cur) \ for((cur) = postorder_coord_subtree((coord), NULL); \ (cur) != NULL; \ @@ -269,6 +275,9 @@ #define sh_clear_flags(sh, mask) geo_clear_flags(sh_get_geo(sh), mask) #define sh_pos_is_in(sh, x, y) geo_pos_is_in(sh_get_geo(sh), x, y) #define sh_get_area(sh) geo_get_area(sh_get_geo(sh)) +#define sh_get_coord(sh) ((sh)->coord) +#define sh_get_fill(sh) ((sh)->fill) +#define sh_get_stroke(sh) ((sh)->stroke) /*! \brief A sprite is a set of graphics that being an object in animation.
--- a/src/Makefile.am Sat Jan 31 11:51:19 2009 +0800 +++ b/src/Makefile.am Sat Jan 31 12:29:50 2009 +0800 @@ -8,7 +8,8 @@ observer.c paint.c redraw_man.c rotate.c shape_path.c \ shape_rect.c shape_text.c shift.c subtree_free.c timer.c \ timertool.c tools.c visibility.c X_supp.c prop.c sprite.c \ - mouse.c + mouse.c shape_image.c img_ldr.c + libmbfly_la_CPPFLAGS = @cairo_CFLAGS@ `pkg-config --cflags pangocairo` libmbfly_la_LDFLAGS = @cairo_LIBS@ `pkg-config --libs pangocairo`
--- a/src/Makefile.pmake Sat Jan 31 11:51:19 2009 +0800 +++ b/src/Makefile.pmake Sat Jan 31 12:29:50 2009 +0800 @@ -1,7 +1,8 @@ SRCS = coord.c geo.c shape_path.c shape_text.c shape_rect.c \ + shape_image.c \ redraw_man.c timer.c animate.c paint.c event.c observer.c \ X_supp.c timertool.c tools.c shift.c chgcolor.c \ - visibility.c rotate.c prop.c mouse.c + visibility.c rotate.c prop.c mouse.c img_ldr.c OBJS = ${SRCS:C/(.*)\.c/\1.o/g} TESTCASE_SRCS = ${SRCS:C/X_supp\.c//} TESTCASE_OBJS = ${TESTCASE_SRCS:C/(.*)\.c/testcase-\1.o/g}
--- a/src/X_supp.c Sat Jan 31 11:51:19 2009 +0800 +++ b/src/X_supp.c Sat Jan 31 12:29:50 2009 +0800 @@ -35,6 +35,7 @@ cairo_t *cr, *backend_cr; redraw_man_t *rdman; mb_tman_t *tman; + mb_img_ldr_t *img_ldr; int w, h; X_kb_info_t kbinfo; @@ -419,6 +420,8 @@ */ static int X_MB_init(const char *display_name, int w, int h, X_MB_runtime_t *xmb_rt) { + mb_img_ldr_t *img_ldr; + memset(xmb_rt, 0, sizeof(X_MB_runtime_t)); xmb_rt->w = w; @@ -446,9 +449,15 @@ // to get the xmb_rt->tman for the animation. We should relocate the tman // to the redraw_man_t instead. xmb_rt->rdman->rt = xmb_rt; + xmb_rt->rdman->w = w; + xmb_rt->rdman->h = h; xmb_rt->tman = mb_tman_new(); + img_ldr = simple_mb_img_ldr_new("./"); + xmb_rt->img_ldr = img_ldr; + rdman_set_img_ldr(xmb_rt->rdman, img_ldr); + #ifndef ONLY_MOUSE_MOVE_RAW xmb_rt->last = NULL; #endif @@ -467,6 +476,9 @@ if(xmb_rt->tman) mb_tman_free(xmb_rt->tman); + if(xmb_rt->img_ldr) + MB_IMG_LDR_FREE(xmb_rt->img_ldr); + if(xmb_rt->cr) cairo_destroy(xmb_rt->cr); if(xmb_rt->backend_cr) @@ -521,3 +533,11 @@ factory = rdman_get_ob_factory(xmb_rt->rdman); return factory; } + +mb_img_ldr_t *X_MB_img_ldr(X_MB_runtime_t *xmb_rt) { + X_MB_runtime_t *img_ldr; + + img_ldr = xmb_rt->img_ldr; + + return img_ldr; +}
--- a/src/event.c Sat Jan 31 11:51:19 2009 +0800 +++ b/src/event.c Sat Jan 31 12:29:50 2009 +0800 @@ -21,52 +21,116 @@ #ifdef UNITTEST /* ============================================================ */ +#include <string.h> +#include "mb_tools.h" + +typedef float co_aix; typedef struct shape shape_t; +typedef struct cairo_surface cairo_surface_t; +typedef struct coord coord_t; typedef struct cairo cairo_t; struct cairo { - shape_t *drawed; + STAILQ(shape_t) drawed; + STAILQ(shape_t) clip_pathes; + cairo_surface_t *tgt; }; -#define cairo_in_fill(cr, x, y) 0 -#define cairo_in_stroke(cr, x, y) 0 -#define cairo_new_path(cr) -#define cairo_get_target(cr) NULL -#define cairo_create(target) NULL -#define cairo_destroy(cr) -#define cairo_clip(cr) -#define cairo_fill(cr) -#define cairo_image_surface_get_data(cr) NULL -#define cairo_image_surface_get_stride(cr) 1 struct cairo_surface { + cairo_t *cr; + int w, h; + unsigned char *data; }; -typedef struct cairo_surface cairo_surface_t; -#define cairo_image_surface_get_width(surface) 0 -#define cairo_image_surface_get_height(surface) 0 -#define cairo_image_surface_create(surface, w, h) NULL -#define cairo_surface_destroy(surface) + +#define cairo_new_path(cr) do { STAILQ_CLEAN((cr)->drawed); } while(0) +#define cairo_get_target(cr) (cr)->tgt +static +cairo_t *cairo_create(cairo_surface_t *target) { + cairo_t *cr; + + cr = (cairo_t *)malloc(sizeof(cairo_t)); + STAILQ_INIT(cr->drawed); + STAILQ_INIT(cr->clip_pathes); + cr->tgt = target; + target->cr = cr; + return cr; +} +#define cairo_destroy(cr) do { free(cr); } while(0) +#define cairo_clip(cr) \ + do { \ + memcpy(&(cr)->clip_pathes, \ + &(cr)->drawed, \ + sizeof((cr)->drawed)); \ + STAILQ_CLEAN((cr)->drawed); \ + } while(0) +#define cairo_fill(cr) -typedef float co_aix; +#define cairo_image_surface_get_width(surface) (surface)->w +#define cairo_image_surface_get_height(surface) (surface)->h +static +cairo_surface_t *cairo_image_surface_create(int format, int w, int h) { + cairo_surface_t *surf; + + surf = (cairo_surface_t *)malloc(sizeof(cairo_surface_t)); + surf->w = w; + surf->h = h; + surf->data = (unsigned char *)malloc(h); + memset(surf->data, 0, h); + + return surf; +} +#define cairo_surface_destroy(surface) \ + do { free((surface)->data); free(surface); } while(0) +#define cairo_image_surface_get_stride(surface) 1 +#define CAIRO_FORMAT_A1 1 + typedef struct _area area_t; struct _area { co_aix x, y; co_aix w, h; }; -#define range_overlay(as, aw, bs, bw) \ - (((bs) - (as)) <= (aw) || ((as) - (bs)) <= (bw)) +#define area_set(area, _x, _y, _w, _h) \ + do { \ + (area)->x = (_x); \ + (area)->y = (_y); \ + (area)->w = (_w); \ + (area)->h = (_h); \ + } while(0) +#define _in_range(a, s, w) ((a) >= (s) && (a) < ((s) + (w))) +#define _range_overlay(as, aw, bs, bw) \ + (_in_range(as, bs, bw) || _in_range(bs, as, aw)) #define areas_are_overlay(a1, a2) \ - (range_overlay((a1)->x, (a1)->w, \ - (a2)->x, (a2)->w) && \ - range_overlay((a1)->y, (a1)->h, \ - (a2)->y, (a2)->h)) + (_range_overlay((a1)->x, (a1)->w, \ + (a2)->x, (a2)->w) && \ + _range_overlay((a1)->y, (a1)->h, \ + (a2)->y, (a2)->h)) +#define area_pos_is_in(area, _x, _y) \ + (_in_range(_x, (area)->x, (area)->w) && \ + _in_range(_y, (area)->y, (area)->h)) +#define _range_extent(a, s, w) \ + do { \ + if((a) < (s)) { \ + (w) += (s) - (a); \ + (s) = (a); \ + } else { \ + (w) = MAX(w, (a) - (s) + 1); \ + } \ + } while(0) + +static +void area_extent(area_t *area, co_aix x, co_aix y) { + _range_extent(x, area->x, area->w); + _range_extent(y, area->y, area->h); +} struct mb_obj { int obj_type; }; typedef struct mb_obj mb_obj_t; +#define MB_OBJ_INIT(obj, type) do { (obj)->obj_type = type; } while(0) #define GEF_OV_DRAW 0x1 #define GEF_HIDDEN 0x2 @@ -74,7 +138,10 @@ struct shape { mb_obj_t obj; + coord_t *coord; area_t area; + shape_t *all_next; + shape_t *drawed_next; void *fill, *stroke; struct shape *sibling; @@ -106,75 +173,165 @@ #define sh_clear_flags(shape, mask) do { (shape)->flags &= ~(mask); } while(0) #define sh_get_area(shape) (&(shape)->area) -typedef struct coord coord_t; struct coord { mb_obj_t obj; area_t area; int flags; coord_t *parent; - coord_t *children; + STAILQ(coord_t) children; coord_t *sibling; - shape_t *shapes; + STAILQ(shape_t) shapes; }; #define COF_SKIP 0x1 #define coord_get_area(coord) (&(coord)->area) #define FOR_COORD_SHAPES(coord, shape) \ - for(shape = (coord)->shapes; \ - shape != NULL; \ - shape = (shape)->sibling) + for((shape) = STAILQ_HEAD((coord)->shapes); \ + (shape) != NULL; \ + (shape) = STAILQ_NEXT(shape_t, sibling, shape)) #define FOR_COORDS_PREORDER(root, last) \ - for(last = root; \ - last != NULL; \ - last = preorder_coord_subtree(root, last)) + for((last) = (root); \ + (last) != NULL; \ + (last) = preorder_coord_subtree(root, last)) +#define FOR_COORD_CHILDREN(parent, child) \ + for((child) = STAILQ_HEAD((parent)->children); \ + (child) != NULL; \ + (child) = STAILQ_NEXT(coord_t, sibling, child)) + +static +void _areas_merge(area_t *area1, area_t *area2) { + co_aix lu_x, lu_y; + co_aix rb_x, rb_y; + + lu_x = area2->x; + lu_y = area2->y; + rb_x = lu_x + area2->w - 1; + rb_y = lu_y + area2->h - 1; + area_extent(area1, lu_x, lu_y); + area_extent(area1, rb_x, rb_y); +} + +static +void coord_update_area(coord_t *coord) { + area_t *area; + shape_t *shape; + coord_t *child; + area_t *cur_area; + + area = coord_get_area(coord); + + shape = STAILQ_HEAD(coord->shapes); + if(shape != NULL) { + cur_area = sh_get_area(shape); + } else { + child = STAILQ_HEAD(coord->children); + if(child == NULL) + return; + cur_area = coord_get_area(child); + } + memcpy(area, cur_area, sizeof(area_t)); + + FOR_COORD_SHAPES(coord, shape) { + cur_area = sh_get_area(shape); + _areas_merge(area, cur_area); + } + + FOR_COORD_CHILDREN(coord, child) { + cur_area = coord_get_area(child); + _areas_merge(area, cur_area); + } +} + +static +void coord_update_area_ancestors(coord_t *coord) { + coord_t *cur; + + for(cur = coord; cur != NULL; cur = cur->parent) { + coord_update_area(cur); + } +} static coord_t *preorder_coord_subtree(coord_t *root, coord_t *last) { - if(last->children) - return last->children; - while(last->sibling == NULL) + if(STAILQ_HEAD(last->children) && !(last->flags & COF_SKIP)) + return STAILQ_HEAD(last->children); + if(last == root) + return NULL; + while(STAILQ_NEXT(coord_t, sibling, last) == NULL) { + if(last == root) + return NULL; last = last->parent; - return last->sibling; + } + return STAILQ_NEXT(coord_t, sibling, last); +} + +static +void preorder_coord_skip_subtree(coord_t *coord) { + coord->flags &= ~COF_SKIP; } static coord_t *postorder_coord_subtree(coord_t *root, coord_t *last) { coord_t *cur; - + if(last != NULL) { - if(last->sibling == NULL) { + if(STAILQ_NEXT(coord_t, sibling, last) == NULL) { + if(cur == root) + return NULL; cur = last->parent; return cur; } - cur = last->sibling; + cur = STAILQ_NEXT(coord_t, sibling, last); } - cur = last; - while(cur->children) { - cur = cur->children; + cur = root; + while(STAILQ_HEAD(cur->children)) { + cur = STAILQ_HEAD(cur->children); } return cur; } -#define sh_path_draw(path, cr) -#define sh_text_draw(path, cr) -#define sh_rect_draw(path, cr) +static +void shape_draw(shape_t *sh, cairo_t *cr) { + STAILQ_INS_TAIL(cr->drawed, shape_t, drawed_next, sh); +} + +#define sh_path_draw(path, cr) shape_draw((shape_t *)path, cr) +#define sh_text_draw(text, cr) shape_draw((shape_t *)text, cr) +#define sh_rect_draw(rect, cr) shape_draw((shape_t *)rect, cr) +static +void sh_update_area(shape_t *sh) { + int i; + co_aix x, y; + area_t *area = &sh->area; + + if(sh->num_points == 0) { + area_set(area, 0, 0, 0, 0); + return; + } + + area_set(area, sh->points[0][0], sh->points[0][1], 1, 1); + for(i = 1; i < sh->num_points; i++) { + x = sh->points[i][0]; + y = sh->points[i][1]; + area_extent(area, x, y); + } +} struct redraw_man { cairo_t *cr; + coord_t *root_coord; int shape_gl_sz; shape_t *shape_gl[32]; + STAILQ(shape_t) all_shapes; }; typedef struct redraw_man redraw_man_t; #define rdman_get_cr(rdman) ((rdman)->cr) -#define rdman_get_gen_geos(rdman) (&(rdman)->gen_geos) #define rdman_force_clean(rdman) OK -#define rdman_geos(rdman, geo) NULL -#define rdman_clear_shape_gl(rdman) \ - do {(rdman)->shape_gl_sz = 0; } while(0) +#define rdman_clear_shape_gl(rdman) do {(rdman)->shape_gl_sz = 0; } while(0) static int rdman_add_shape_gl(redraw_man_t *rdman, shape_t *shape) { (rdman)->shape_gl[(rdman)->shape_gl_sz++] = shape; return OK; @@ -182,9 +339,162 @@ #define rdman_get_shape_gl(rdman, idx) \ (rdman)->shape_gl[idx] #define rdman_shape_gl_len(rdman) (rdman)->shape_gl_sz -static shape_t *rdman_shapes(redraw_man_t *rdman, shape_t *last_shape); +static shape_t *rdman_shapes(redraw_man_t *rdman, shape_t *last_shape) { + if(last_shape == NULL) + return STAILQ_HEAD(rdman->all_shapes); + + return STAILQ_NEXT(shape_t, all_next, last_shape); +} +#define redraw_man_init(rdman, cr, backend) \ + do { \ + memset(rdman, 0, sizeof(redraw_man_t)); \ + (rdman)->cr = cr; \ + (rdman)->root_coord = rdman_coord_new_noparent(rdman); \ + } while(0) +#define redraw_man_destroy(rdman) \ + do { \ + free(rdman); \ + } while(0) +#define rdman_get_root(rdman) ((rdman)->root_coord) + +static coord_t *rdman_coord_new_noparent(redraw_man_t *rdman); + +static +redraw_man_t *redraw_man_new(cairo_t *cr, cairo_t *backend) { + redraw_man_t *rdman; + + rdman = O_ALLOC(redraw_man_t); + redraw_man_init(rdman, cr, backend); + return rdman; +} +#define redraw_man_free(rdman) \ + do { \ + redraw_man_destroy(rdman); \ + free(rdman); \ + } while(0) + +static +int cairo_in_fill(cairo_t *cr, int x, int y) { + shape_t *shape; + int i; + + for(shape = STAILQ_HEAD(cr->drawed); + shape != NULL; + shape = STAILQ_NEXT(shape_t, drawed_next, shape)) { + for(i = 0; i < shape->num_points; i++) + if(shape->points[i][0] == x && + shape->points[i][1] == y) + return 1; + } + return 0; +} + +#define cairo_in_stroke cairo_in_fill + +static +void rdman_coord_init_noparent(redraw_man_t *rdman, coord_t *co) { + memset(co, 0, sizeof(coord_t)); + MB_OBJ_INIT(&co->obj, MBO_COORD); + STAILQ_INIT(co->children); + STAILQ_INIT(co->shapes); +} + +static +void rdman_coord_init(redraw_man_t *rdman, coord_t *co, coord_t *parent) { + rdman_coord_init_noparent(rdman, co); + STAILQ_INS_TAIL(parent->children, coord_t, sibling, co); + co->parent = parent; +} + +static +coord_t *rdman_coord_new(redraw_man_t *rdman, coord_t *parent) { + coord_t *coord; + + coord = O_ALLOC(coord_t); + rdman_coord_init(rdman, coord, parent); + + return coord; +} +coord_t *rdman_coord_new_noparent(redraw_man_t *rdman) { + coord_t *coord; + coord = O_ALLOC(coord_t); + rdman_coord_init_noparent(rdman, coord); + + return coord; +} + +static +void rdman_coord_free(redraw_man_t *rdman, coord_t *coord) { + free(coord); +} + +static +shape_t *rdman_shape_new(redraw_man_t *rdman) { + shape_t *shape; + + shape = O_ALLOC(shape_t); + memset(shape, 0, sizeof(shape_t)); + MB_OBJ_INIT(&shape->obj, MBO_PATH); + STAILQ_INS(rdman->all_shapes, shape_t, all_next, shape); + + return shape; +} + +static +void rdman_shape_free(redraw_man_t *rdman, shape_t *shape) { + STAILQ_REMOVE(rdman->all_shapes, shape_t, all_next, shape); + free(shape); +} + +#define shape_add_point(shape, x, y) \ + do { \ + (shape)->points[(shape)->num_points][0] = x; \ + (shape)->points[(shape)->num_points][1] = y; \ + (shape)->num_points++; \ + sh_update_area(shape); \ + if((shape)->coord) \ + coord_update_area_ancestors((shape)->coord); \ + } while(0) + +static +int rdman_add_shape(redraw_man_t *rdman, shape_t *shape, + coord_t *parent) { + STAILQ_INS_TAIL(parent->shapes, shape_t, sibling, shape); + shape->coord = parent; + + return OK; +} + +static +void *cairo_image_surface_get_data(cairo_surface_t *surf) { + cairo_t *cr; + shape_t *shape1, *shape2; + co_aix x1, y1, x2, y2; + int i, j; + + cr = surf->cr; + + STAILQ_FOR_EACH(cr->drawed, shape_t, sibling, shape1) { + for(i = 0; i < shape1->num_points; i++) { + x1 = shape1->points[i][0]; + y1 = shape1->points[i][1]; + STAILQ_FOR_EACH(cr->clip_pathes, shape_t, sibling, shape2) { + for(j = 0; j < shape2->num_points; j++) { + x2 = shape2->points[j][0]; + y2 = shape2->points[j][1]; + if(x1 == x2 && y1 == y2) { + surf->data[0] = 1; + return surf->data; + } + } + } + } + } + surf->data[0] = 0; + return surf->data; +} /* ============================================================ */ #endif /* UNITTEST */ @@ -224,6 +534,9 @@ case MBO_RECT: sh_rect_draw(shape, cr); break; + case MBO_IMAGE: + sh_image_draw(shape, cr); + break; } } @@ -303,6 +616,7 @@ co_aix x, co_aix y, int *in_stroke) { coord_t *cur_coord, *root; shape_t *shape; + area_t *area; int r; if(IS_MBO_SHAPES(obj)) { @@ -311,9 +625,12 @@ return r; } root = (coord_t *)obj; - for(cur_coord = postorder_coord_subtree(root, NULL); - cur_coord != NULL; - cur_coord = postorder_coord_subtree(root, cur_coord)) { + FOR_COORDS_PREORDER(root, cur_coord) { + area = coord_get_area(cur_coord); + if(!area_pos_is_in(area, x, y)) { + preorder_coord_skip_subtree(cur_coord); + continue; + } FOR_COORD_SHAPES(cur_coord, shape) { r = _shape_pos_is_in(shape, x, y, in_stroke, rdman_get_cr(rdman)); if(r) @@ -410,6 +727,7 @@ } else { coord = (coord_t *)obj; area = coord_get_area(coord); + shape = NULL; } if(IS_MBO_SHAPES(others_root)) { @@ -529,39 +847,266 @@ static redraw_man_t *_fake_rdman(void) { redraw_man_t *rdman; - cairo_surface_t *surface; + cairo_t *cr, *backend; + cairo_surface_t *surf; - rdman = (redraw_man_t *)malloc(sizeof(redraw_man_t)); - surface = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); - rdman->cr = cairo_create(surface); - DARRAY_INIT(&rdman->gen_geos); + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + backend = cairo_create(surf); + rdman = redraw_man_new(cr, backend); + return rdman; } static void _free_fake_rdman(redraw_man_t *rdman) { + cairo_surface_destroy(rdman->cr->tgt); cairo_destroy(rdman->cr); - DARRAY_DESTROY(&rdman->gen_geos); free(rdman); } static void test_mb_obj_pos_is_in(void) { redraw_man_t *rdman; - mb_obj_t *obj; + shape_t *shape; + coord_t *root, *child_coord; + int in_stroke = 0; + int r; rdman = _fake_rdman(); CU_ASSERT(rdman != NULL); + root = rdman_get_root(rdman); + + child_coord = rdman_coord_new(rdman, root); + CU_ASSERT(child_coord != NULL); + + shape = rdman_shape_new(rdman); + CU_ASSERT(shape != NULL); + + rdman_add_shape(rdman, shape, child_coord); + + shape_add_point(shape, 3, 12); + + shape->fill = shape; + shape->stroke = shape; + + r = mb_obj_pos_is_in(rdman, (mb_obj_t *)shape, 3, 12, &in_stroke); + CU_ASSERT(r == TRUE); + + r = mb_obj_pos_is_in(rdman, (mb_obj_t *)shape, 3, 13, &in_stroke); + CU_ASSERT(r == FALSE); + + r = mb_obj_pos_is_in(rdman, (mb_obj_t *)root, 3, 12, &in_stroke); + CU_ASSERT(r == TRUE); + + r = mb_obj_pos_is_in(rdman, (mb_obj_t *)root, 4, 12, &in_stroke); + CU_ASSERT(r == FALSE); + + rdman_shape_free(rdman, shape); _free_fake_rdman(rdman); } static void test_is_obj_objs_overlay(void) { + redraw_man_t *rdman; + coord_t *root, *coord1, *coord2; + shape_t *shape1, *shape2, *shape3; + cairo_t *cr; + cairo_surface_t *surf; + int r; + + rdman = _fake_rdman(); + CU_ASSERT(rdman != NULL); + + root = rdman_get_root(rdman); + + coord1 = rdman_coord_new(rdman, root); + shape1 = rdman_shape_new(rdman); + rdman_add_shape(rdman, shape1, coord1); + + coord2 = rdman_coord_new(rdman, root); + shape2 = rdman_shape_new(rdman); + rdman_add_shape(rdman, shape2, coord2); + + shape3 = rdman_shape_new(rdman); + rdman_add_shape(rdman, shape3, coord2); + + shape_add_point(shape1, 3, 2); + shape_add_point(shape2, 5, 5); + shape_add_point(shape3, 4, 3); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)coord1, (mb_obj_t *)coord2, cr); + CU_ASSERT(!r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(coord2, GEF_OV_DRAW); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)shape1, (mb_obj_t *)coord2, cr); + CU_ASSERT(!r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(coord2, GEF_OV_DRAW); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)coord1, (mb_obj_t *)shape2, cr); + CU_ASSERT(!r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(shape2, GEF_OV_DRAW); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)shape1, (mb_obj_t *)shape2, cr); + CU_ASSERT(!r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(shape2, GEF_OV_DRAW); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)shape1, (mb_obj_t *)shape3, cr); + CU_ASSERT(!r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(shape3, GEF_OV_DRAW); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)coord1, (mb_obj_t *)shape3, cr); + CU_ASSERT(!r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(shape3, GEF_OV_DRAW); + + shape_add_point(shape1, 5, 5); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)coord1, (mb_obj_t *)coord2, cr); + CU_ASSERT(r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(coord2, GEF_OV_DRAW); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)shape1, (mb_obj_t *)coord2, cr); + CU_ASSERT(r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(coord2, GEF_OV_DRAW); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)coord1, (mb_obj_t *)shape2, cr); + CU_ASSERT(r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(shape2, GEF_OV_DRAW); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)shape1, (mb_obj_t *)shape2, cr); + CU_ASSERT(r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(shape2, GEF_OV_DRAW); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)shape1, (mb_obj_t *)shape3, cr); + CU_ASSERT(!r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(shape3, GEF_OV_DRAW); + + surf = cairo_image_surface_create(CAIRO_FORMAT_A1, 100, 100); + cr = cairo_create(surf); + r = _is_obj_objs_overlay((mb_obj_t *)coord1, (mb_obj_t *)shape3, cr); + CU_ASSERT(r); + cairo_destroy(cr); + cairo_surface_destroy(surf); + sh_clear_flags(shape3, GEF_OV_DRAW); + + rdman_shape_free(rdman, shape1); + rdman_shape_free(rdman, shape2); + rdman_shape_free(rdman, shape3); + rdman_coord_free(rdman, coord1); + rdman_coord_free(rdman, coord2); + _free_fake_rdman(rdman); } static void test_mb_objs_are_overlay(void) { + redraw_man_t *rdman; + coord_t *root, *coord1, *coord2; + shape_t *shape1, *shape2, *shape3; + int r; + + rdman = _fake_rdman(); + + root = rdman_get_root(rdman); + + coord1 = rdman_coord_new(rdman, root); + shape1 = rdman_shape_new(rdman); + rdman_add_shape(rdman, shape1, coord1); + + coord2 = rdman_coord_new(rdman, root); + shape2 = rdman_shape_new(rdman); + rdman_add_shape(rdman, shape2, coord2); + + shape3 = rdman_shape_new(rdman); + rdman_add_shape(rdman, shape3, coord2); + + shape_add_point(shape1, 3, 2); + shape_add_point(shape2, 5, 5); + shape_add_point(shape3, 4, 3); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)coord1, (mb_obj_t *)coord2); + CU_ASSERT(!r); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)shape1, (mb_obj_t *)coord2); + CU_ASSERT(!r); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)shape1, (mb_obj_t *)shape2); + CU_ASSERT(!r); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)coord1, (mb_obj_t *)shape2); + CU_ASSERT(!r); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)shape1, (mb_obj_t *)shape3); + CU_ASSERT(!r); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)coord1, (mb_obj_t *)shape3); + CU_ASSERT(!r); + + shape_add_point(shape1, 5, 5); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)coord1, (mb_obj_t *)coord2); + CU_ASSERT(r); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)shape1, (mb_obj_t *)coord2); + CU_ASSERT(r); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)shape1, (mb_obj_t *)shape2); + CU_ASSERT(r); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)coord1, (mb_obj_t *)shape2); + CU_ASSERT(r); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)shape1, (mb_obj_t *)shape3); + CU_ASSERT(!r); + + r = mb_objs_are_overlay(rdman, (mb_obj_t *)coord1, (mb_obj_t *)shape3); + CU_ASSERT(!r); + + _free_fake_rdman(rdman); } CU_pSuite get_event_suite(void) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/img_ldr.c Sat Jan 31 12:29:50 2009 +0800 @@ -0,0 +1,125 @@ +#include <stdio.h> +#include <string.h> +#include <cairo.h> +#include "mb_tools.h" +#include "mb_img_ldr.h" + +/*! \brief Simple image loader. + * + */ +struct _simple_mb_img_ldr { + mb_img_ldr_t ldr; + const char *repo; /*!< \brief The directory of repository. */ +}; +typedef struct _simple_mb_img_ldr simple_mb_img_ldr_t; + +struct _simple_mb_img_data { + mb_img_data_t img; + cairo_surface_t *surf; +}; +typedef struct _simple_mb_img_data simple_mb_img_data_t; + +static void simple_mb_img_ldr_img_free(mb_img_data_t *img); + +static +mb_img_data_t *simple_mb_img_ldr_load(mb_img_ldr_t *ldr, const char *img_id) { + simple_mb_img_ldr_t *sldr = (simple_mb_img_ldr_t *)ldr; + simple_mb_img_data_t *img; + cairo_surface_t *surf; + char *fname; + cairo_format_t fmt; + int sz; + + sz = strlen(sldr->repo); + sz += strlen(img_id); + fname = (char *)malloc(sz + 2); + strcpy(fname, sldr->repo); + strcat(fname, img_id); + + surf = cairo_image_surface_create_from_png(fname); + if(surf == NULL) + return NULL; + + img = O_ALLOC(simple_mb_img_data_t); + if(img == NULL) { + cairo_surface_destroy(surf); + return NULL; + } + img->img.content = cairo_image_surface_get_data(surf); + img->img.w = cairo_image_surface_get_width(surf); + img->img.h = cairo_image_surface_get_height(surf); + img->img.stride = cairo_image_surface_get_stride(surf); + fmt = cairo_image_surface_get_format(surf); + switch(fmt) { + case CAIRO_FORMAT_ARGB32: + img->img.fmt = MB_IFMT_ARGB32; + break; + + case CAIRO_FORMAT_RGB24: + img->img.fmt = MB_IFMT_RGB24; + break; + + case CAIRO_FORMAT_A8: + img->img.fmt = MB_IFMT_A8; + break; + + case CAIRO_FORMAT_A1: + img->img.fmt = MB_IFMT_A1; + break; + + default: + cairo_surface_destroy(surf); + free(img); + return NULL; + } + img->img.free = simple_mb_img_ldr_img_free; + img->surf = surf; + + return (mb_img_data_t *)img; +} + +static +void simple_mb_img_ldr_img_free(mb_img_data_t *img) { + simple_mb_img_data_t *simg = (simple_mb_img_data_t *)img; + cairo_surface_destroy((cairo_surface_t *)simg->surf); + free(img); +} + +static +void simple_mb_img_ldr_free(mb_img_ldr_t *ldr) { + simple_mb_img_ldr_t *defldr = (simple_mb_img_ldr_t *)ldr; + + free((void *)defldr->repo); +} + +mb_img_ldr_t *simple_mb_img_ldr_new(const char *img_repository) { + simple_mb_img_ldr_t *ldr; + int sz; + + if(img_repository == NULL) + return NULL; + + ldr = O_ALLOC(simple_mb_img_ldr_t); + if(ldr == NULL) + return NULL; + + /* + * Copy and formalize path of image repository. + */ + sz = strlen(img_repository); + ldr->repo = (const char *)malloc(sz + 2); + if(ldr->repo == NULL) { + free(ldr); + return NULL; + } + strcpy((char *)ldr->repo, img_repository); + if(img_repository[sz - 1] != '/') { + ((char *)ldr->repo)[sz] = '/'; + ((char *)ldr->repo)[sz + 1] = 0; + } + + ldr->ldr.load = simple_mb_img_ldr_load; + ldr->ldr.free = simple_mb_img_ldr_free; + + return (mb_img_ldr_t *)ldr; +}
--- a/src/paint.c Sat Jan 31 11:51:19 2009 +0800 +++ b/src/paint.c Sat Jan 31 12:29:50 2009 +0800 @@ -23,6 +23,7 @@ static void paint_color_free(redraw_man_t *rdman, paint_t *paint) { shnode_list_free(rdman, paint->members); + paint_destroy(paint); elmpool_elm_free(rdman->paint_color_pool, paint); } @@ -108,6 +109,7 @@ if(linear->ptn) cairo_pattern_destroy(linear->ptn); + paint_destroy(paint); free(paint); } @@ -198,6 +200,7 @@ if(radial->ptn) cairo_pattern_destroy(radial->ptn); + paint_destroy(paint); free(paint); } @@ -241,3 +244,108 @@ return old_stops; } + +/*! \brief Using an image as a paint. + * + * This type of paints fill/stroke shapes with an image. + */ +typedef struct _paint_image { + paint_t paint; + mb_img_data_t *img; + cairo_surface_t *surf; + cairo_pattern_t *ptn; +} paint_image_t; + +static +void paint_image_prepare(paint_t *paint, cairo_t *cr) { + paint_image_t *paint_img = (paint_image_t *)paint; + mb_img_data_t *img_data; + + img_data = paint_img->img; + cairo_set_source(cr, paint_img->ptn); +} + +static +void paint_image_free(redraw_man_t *rdman, paint_t *paint) { + paint_image_t *paint_img = (paint_image_t *)paint; + mb_img_data_t *img_data; + + cairo_surface_destroy(paint_img->surf); + img_data = paint_img->img; + MB_IMG_DATA_FREE(img_data); + paint_destroy(&paint_img->paint); + free(paint); +} + +/*! \brief Create an image painter. + * + * Create a painter that fill/stroke shapes with an image. + */ +paint_t *rdman_paint_image_new(redraw_man_t *rdman, + mb_img_data_t *img) { + paint_image_t *paint; + int fmt; + + switch(img->fmt) { + case MB_IFMT_ARGB32: + fmt = CAIRO_FORMAT_ARGB32; + break; + case MB_IFMT_RGB24: + fmt = CAIRO_FORMAT_RGB24; + break; + case MB_IFMT_A8: + fmt = CAIRO_FORMAT_A8; + break; + case MB_IFMT_A1: + fmt = CAIRO_FORMAT_A1; + break; + default: + return NULL; + } + + paint = O_ALLOC(paint_image_t); + if(paint == NULL) + return NULL; + + paint_init(&paint->paint, paint_image_prepare, paint_image_free); + paint->img = img; + paint->surf = cairo_image_surface_create_for_data(img->content, + fmt, + img->w, + img->h, + img->stride); + if(paint->surf == NULL) { + paint_destroy(&paint->paint); + free(paint); + return NULL; + } + + paint->ptn = cairo_pattern_create_for_surface(paint->surf); + if(paint->ptn == NULL) { + paint_destroy(&paint->paint); + cairo_surface_destroy(paint->surf); + free(paint); + return NULL; + } + + return (paint_t *)paint; +} + +/*! \brief Setting transformation from user space to image space. + * + * This transformation matrix maps points drawed in user space to + * corresponding points in image space. It is used to resample + * the image to generate pixels of result image. + */ +void paint_image_set_matrix(paint_t *paint, co_aix matrix[6]) { + paint_image_t *img_paint = (paint_image_t *)paint; + cairo_matrix_t cmatrix; + + cmatrix.xx = matrix[0]; + cmatrix.xy = matrix[1]; + cmatrix.x0 = matrix[2]; + cmatrix.yx = matrix[3]; + cmatrix.yy = matrix[4]; + cmatrix.y0 = matrix[5]; + cairo_pattern_set_matrix(img_paint->ptn, &cmatrix); +}
--- a/src/prop.c Sat Jan 31 11:51:19 2009 +0800 +++ b/src/prop.c Sat Jan 31 12:29:50 2009 +0800 @@ -24,7 +24,7 @@ if(last == NULL) return; - for(entry = STAILQ_NEXT(mb_prop_entry_t, next, entry); + for(entry = STAILQ_NEXT(mb_prop_entry_t, next, last); entry != NULL; entry = STAILQ_NEXT(mb_prop_entry_t, next, entry)) { STAILQ_REMOVE(prop_store->entries, mb_prop_entry_t, next, last);
--- a/src/redraw_man.c Sat Jan 31 11:51:19 2009 +0800 +++ b/src/redraw_man.c Sat Jan 31 12:29:50 2009 +0800 @@ -316,6 +316,7 @@ subject_add_observer(rdman->root_coord->mouse_event, mouse_event_root_dummy, NULL); + mb_prop_store_init(&rdman->props, rdman->pent_pool); return OK; err: @@ -341,6 +342,8 @@ shape_t *shape, *saved_shape; geo_t *member; + mb_prop_store_destroy(&rdman->props); + free_free_objs(rdman); free_objs_destroy(rdman); @@ -474,6 +477,7 @@ elmpool_elm_free(rdman->geo_pool, geo); } STAILQ_REMOVE(rdman->shapes, shape_t, sh_next, shape); + mb_prop_store_destroy(&shape->obj.props); shape->free(shape); if(rdman->last_mouse_over == (mb_obj_t *)shape) @@ -638,6 +642,7 @@ RM_CHILD(parent, coord); subject_free(coord->mouse_event); + mb_prop_store_destroy(&coord->obj.props); elmpool_elm_free(rdman->coord_pool, coord); rdman->n_coords--; @@ -791,6 +796,9 @@ case MBO_RECT: sh_rect_transform(shape); break; + case MBO_IMAGE: + sh_image_transform(shape); + break; #ifdef UNITTEST default: sh_dummy_transform(shape); @@ -991,6 +999,9 @@ case MBO_RECT: sh_rect_draw(shape, cr); break; + case MBO_IMAGE: + sh_image_draw(shape, cr); + break; #ifdef UNITTEST default: sh_dummy_fill(shape, cr); @@ -1017,13 +1028,22 @@ } #ifndef UNITTEST -static void clean_canvas(cairo_t *cr) { +static void clean_canvas(cairo_t *cr, co_aix w, co_aix h) { /*! \todo clean to background color. */ cairo_set_source_rgb(cr, 1, 1, 1); +#if 1 + /* For some unknown reasons, cairo_paint() can not erease + * painted graphic cleanly. So, cairo_fill() are used to + * replace it. + */ + cairo_rectangle(cr, 0, 0, w, h); + cairo_fill(cr); +#else cairo_paint(cr); +#endif } -static void clean_canvas_black(cairo_t *cr) { +static void clean_canvas_black(cairo_t *cr, co_aix w, co_aix h) { /*! \todo clean to background color. */ cairo_set_source_rgba(cr, 0, 0, 0, 0); cairo_paint(cr); @@ -1053,10 +1073,10 @@ cairo_paint(rdman->backend); } #else /* UNITTEST */ -static void clean_canvas(cairo_t *cr) { +static void clean_canvas(cairo_t *cr, co_aix w, co_aix h) { } -static void clean_canvas_black(cairo_t *cr) { +static void clean_canvas_black(cairo_t *cr, co_aix w, co_aix h) { } static void reset_clip(redraw_man_t *rdman) { @@ -1131,7 +1151,7 @@ if(dirty && coord->flags & COF_OWN_CANVAS) { update_canvas_2_parent(rdman, coord); - clean_canvas_black(coord->canvas); + clean_canvas_black(coord->canvas, rdman->w, rdman->h); } return dirty; @@ -1193,7 +1213,7 @@ /*! \brief Draw shapes in preorder of coord tree and support opacity * rules. */ - clean_canvas(rdman->cr); + clean_canvas(rdman->cr, rdman->w, rdman->h); draw_shapes_in_areas(rdman, n_dirty_areas, dirty_areas); copy_cr_2_backend(rdman, rdman->dirty_areas.num, rdman->dirty_areas.ds);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/shape_image.c Sat Jan 31 12:29:50 2009 +0800 @@ -0,0 +1,185 @@ +#include <stdio.h> +#include <string.h> +#include <cairo.h> +#include "mb_types.h" +#include "mb_shapes.h" +#include "mb_img_ldr.h" +#include "mb_tools.h" + +/*! \page sh_image_n_image_ldr Image and Image Loader + * + * Image (\ref sh_image_t) is a shape to show an image on the output + * device. Programmers manipulate object of an image shape to show it + * at specified position with specified size. To create a new instance + * of sh_iamge_t, an image should be specified. Programmers must have + * a way to load image from files. The solution proposed by MadButterfly + * is image loader (\ref mb_img_ldr_t). + * + * Image loader is a repository of image files, programmers give him an + * ID and get an image returned the loader. Image loader decodes image + * files specified IDs and return them in an internal representation. + * The internal representation of an array of pixels. Pixels are in + * order of columns (X-axis) and then row by row (Y-axis). An pixel + * can be 32bits, for ARGB, 24bits, for RGB, 8bits, for 8bits Alpha or + * 256-grey-levels, and 1bits, for bitmap. + * + * Every row is padded to round to byte boundary, a rounded row is a stride. + * Bytes a stride occupied is stride size. The internal rpresentation + * is a series of strides. The data returned by image loader is + * \ref mb_img_data_t type. mb_img_data_t::content is data in internal + * representation. + * + * \ref simple_mb_img_ldr_t is a simple implementation of image loader. + * It is a repository of image files in a directory and sub-directories. + * ID of an image is mapped to a file in the directory and sub-directories. + * ID it-self is a relative path relate to root directory of the repository. + * \ref simple_mb_img_ldr_t handle PNG files only, now. + * + * \section get_img_ldr Get an Image Loader for Program + * redraw_man_t::img_ldr is an image loader assigned by backend. + * X backend, now, create an instance of simple_mb_img_ldr_t and assigns + * the instance to redraw_man_t::img_ldr. Programmers should get + * image loader assigned for a rdman by calling rdman_img_ldr(). + * + * \image html image_n_ldr.png + * \image latex image_n_ldr.eps "Relationship of image and loader" width=10cm + */ + +#define ASSERT(x) +#define OK 0 +#define ERR -1 + +/*! \brief Image shape. + */ +typedef struct _sh_image { + shape_t shape; + + co_aix x, y; + co_aix w, h; + co_aix poses[4][2]; + + mb_img_data_t *img_data; + paint_t *paint; + redraw_man_t *rdman; +} sh_image_t; + +static void sh_image_free(shape_t *shape); + +/*! \brief Creae a new image shape. + * + * \param img_data is image data whose owner-ship is transfered. + */ +shape_t *rdman_shape_image_new(redraw_man_t *rdman, mb_img_data_t *img_data, + co_aix x, co_aix y, co_aix w, co_aix h) { + sh_image_t *img; + cairo_format_t fmt; + paint_t *paint; + + img = O_ALLOC(sh_image_t); + if(img == NULL) + return NULL; + + memset(img, 0, sizeof(sh_image_t)); + + img->shape.free = sh_image_free; + mb_obj_init((mb_obj_t *)img, MBO_IMAGE); + img->x = x; + img->y = y; + img->w = w; + img->h = h; + img->img_data = img_data; + + paint = rdman_paint_image_new(rdman, img_data); + rdman_paint_fill(rdman, paint, (shape_t *)img); + img->paint = paint; + img->rdman = rdman; + + return (shape_t *)img; +} + +void sh_image_free(shape_t *shape) { + sh_image_t *img = (sh_image_t *)shape; + + rdman_paint_free(img->rdman, img->paint); + mb_obj_destroy(shape); + MB_IMG_DATA_FREE(img->img_data); + free(img); +} + +void sh_image_transform(shape_t *shape) { + sh_image_t *img = (sh_image_t *)shape; + mb_img_data_t *img_data; + co_aix (*poses)[2]; + co_aix img_matrix[6]; + co_aix x_factor, y_factor; + cairo_matrix_t cmatrix; + int i; + + img_data = img->img_data; + + poses = img->poses; + poses[0][0] = img->x; + poses[0][1] = img->y; + poses[1][0] = img->x + img->w; + poses[1][1] = img->y; + poses[2][0] = img->x + img->w; + poses[2][1] = img->y + img->h; + poses[3][0] = img->x; + poses[3][1] = img->y + img->h; + for(i = 0; i < 4; i++) + coord_trans_pos(img->shape.coord, &poses[i][0], &poses[i][1]); + + /* Transformation from user space to image space */ + img_matrix[0] = (poses[1][0] - poses[0][0]) / img->w; + img_matrix[1] = (poses[1][1] - poses[0][1]) / img->w; + img_matrix[2] = -poses[0][0]; + img_matrix[3] = (poses[3][0] - poses[0][0]) / img->h; + img_matrix[4] = (poses[3][1] - poses[0][1]) / img->h; + img_matrix[5] = -poses[0][1]; + if(img->w != img_data->w || + img->h != img_data->h) { + /* Resize image */ + x_factor = img_data->w / img->w; + img_matrix[0] *= x_factor; + img_matrix[1] *= x_factor; + img_matrix[2] *= x_factor; + y_factor = img_data->h / img->h; + img_matrix[3] *= y_factor; + img_matrix[4] *= y_factor; + img_matrix[5] *= y_factor; + } + paint_image_set_matrix(sh_get_fill(shape), img_matrix); + + geo_from_positions(sh_get_geo(shape), 4, poses); +} + +/*! \brief Draw image for an image shape. + * + * \note Image is not rescaled for size of the shape. + */ +void sh_image_draw(shape_t *shape, cairo_t *cr) { + sh_image_t *img = (sh_image_t *)shape; + cairo_pattern_t *saved_source; + cairo_matrix_t matrix, saved_matrix; + co_aix *aggr; + + cairo_move_to(cr, img->poses[0][0], img->poses[0][1]); + cairo_line_to(cr, img->poses[1][0], img->poses[1][1]); + cairo_line_to(cr, img->poses[2][0], img->poses[2][1]); + cairo_line_to(cr, img->poses[3][0], img->poses[3][1]); + cairo_close_path(cr); +} + +/*! \brief Change geometry of an image. + * + * Set position and size of an image. + */ +void sh_image_set_geometry(shape_t *shape, co_aix x, co_aix y, + co_aix w, co_aix h) { + sh_image_t *img = (sh_image_t *)shape; + + img->x = x; + img->y = y; + img->w = w; + img->h = h; +}
--- a/src/shape_path.c Sat Jan 31 11:51:19 2009 +0800 +++ b/src/shape_path.c Sat Jan 31 12:29:50 2009 +0800 @@ -53,11 +53,16 @@ #include <math.h> /*! \brief Calculate center of the ellipse of an arc. * + * Origin of our coordination is left-top corner, and y-axis are grown + * to down-side. + * + * Space of the arc is transformed to space that correspondent + * ellipse containing the arc is mapped into an unit circle. * - ux0 = x0 / rx * - uy0 = y0 / ry * - ux = x / rx - * - uy = y / rx - * ux0, uy0, ux, yu are got by transforming (x0, y0) and (x, y) into points + * - uy = y / ry + * ux0, uy0, ux, uy are got by transforming (x0, y0) and (x, y) into points * on the unit circle. The center of unit circle are (ucx, ucy): * - umx = (ux0 + ux) / 2 * - umy = (uy0 + uy) / 2 @@ -68,7 +73,9 @@ * * - udx * udcx + udy * udcy = 0 * - * - udl2 = udx ** 2 + udy ** 2; + * - udl2 = udx ** 2 + udy ** 2 + * + * For drawing small arc in clockwise * - udx * udcy - udy * udcx = sqrt((1 - udl2) * udl2) * * - udcy = -udcx * udx / udy @@ -118,9 +125,11 @@ udl2 = udx2 + udy2; if(udy != 0) { + /* center is at left-side of arc */ udcx = -sqrtf((1 - udl2) * udl2) / (udy + udx2 / udy); udcy = -udcx * udx / udy; } else { + /* center is at down-side of arc */ udcx = 0; udcy = sqrtf((1 - udl2) * udl2) / udx; } @@ -779,10 +788,10 @@ poses = (co_aix (*)[2])(path->dev_data + path->cmd_len); geo_from_positions(path->shape.geo, arg_len / 2, poses); area = shape->geo->cur_area; - area->x -= shape->stroke_width/2 + 1; - area->y -= shape->stroke_width/2 + 1; - area->w += shape->stroke_width + 2; - area->h += shape->stroke_width + 2; + area->x -= shape->stroke_width / 2 + 0.5; + area->y -= shape->stroke_width / 2 + 0.5; + area->w += shape->stroke_width + 1; + area->h += shape->stroke_width + 1; } }
--- a/src/shape_rect.c Sat Jan 31 11:51:19 2009 +0800 +++ b/src/shape_rect.c Sat Jan 31 12:29:50 2009 +0800 @@ -122,10 +122,10 @@ if(shape->stroke) { area = shape->geo->cur_area; width = shape->stroke_width; - area->x -= width / 2 + 1; - area->y -= width / 2 + 1; - area->w += width + 2; - area->h += width + 2; + area->x -= width / 2 + 0.5; + area->y -= width / 2 + 0.5; + area->w += width + 1; + area->h += width + 1; } }
--- a/src/shape_text.c Sat Jan 31 11:51:19 2009 +0800 +++ b/src/shape_text.c Sat Jan 31 12:29:50 2009 +0800 @@ -107,7 +107,7 @@ coord_trans_pos(shape->coord, &x, &y); r = get_extents(text, &extents); - printf("x=%f y=%f text=%s ascent=%d,descent=%d,width=%d height=%d\n", x,y,text->data,PANGO_ASCENT(extents), PANGO_DESCENT(extents), extents.width, extents.height); + //printf("x=%f y=%f text=%s ascent=%d,descent=%d,width=%d height=%d\n", x,y,text->data,PANGO_ASCENT(extents), PANGO_DESCENT(extents), extents.width, extents.height); ASSERT(r == OK); text->d_x = x;
--- a/tools/mb_c_header.m4 Sat Jan 31 11:51:19 2009 +0800 +++ b/tools/mb_c_header.m4 Sat Jan 31 12:29:50 2009 +0800 @@ -20,6 +20,10 @@ define([ADD_TEXT],[ [ shape_t *$1; ]]) +define([ADD_IMAGE],[[ + mb_img_data_t *$1_img_data; + shape_t *$1; +]]) define([PANGO_BEGIN_TEXT],[ [ shape_t *$1; ]])
--- a/tools/mb_c_source.m4 Sat Jan 31 11:51:19 2009 +0800 +++ b/tools/mb_c_source.m4 Sat Jan 31 12:29:50 2009 +0800 @@ -20,6 +20,7 @@ define([ADD_RECT]) define([ADD_COORD]) define([ADD_TEXT],) +define([ADD_IMAGE],) define([PANGO_BEGIN_TEXT],) define([PANGO_END_TEXT],) define([PANGO_SIZE],) @@ -124,6 +125,13 @@ cairo_get_font_face(rdman->cr)); rdman_add_shape(rdman, obj->$1, obj->$6); ]]) + +define([S_ADD_IMAGE],[[ + obj->$1_img_data = MB_IMG_LDR_LOAD(img_ldr, "$2"); + obj->$1 = rdman_shape_image_new(rdman, obj->$1_img_data, + $3, $4, $5, $6); + rdman_add_shape(rdman, obj->$1, obj->$7); +]]) define([S_PANGO_BEGIN_TEXT],[[ { PangoAttribute *attr; @@ -245,6 +253,7 @@ SIMPORT([ADD_RECT]) SIMPORT([ADD_COORD]) SIMPORT([ADD_TEXT]) +SIMPORT([ADD_IMAGE]) SIMPORT([PANGO_BEGIN_TEXT]) SIMPORT([PANGO_END_TEXT]) SIMPORT([PANGO_SIZE]) @@ -288,6 +297,11 @@ define([F_ADD_TEXT],[[ rdman_shape_free(rdman, obj->$1); ]]) + +define([F_ADD_IMAGE],[[ + rdman_shape_free(rdman, obj->$1); + MB_IMAGE_DATA_FREE(obj->$1_img_data); +]]) define([F_PANGO_BEGIN_TEXT],[[ rdman_shape_free(rdman, obj->$1); ]])
--- a/tools/svg2code.py Sat Jan 31 11:51:19 2009 +0800 +++ b/tools/svg2code.py Sat Jan 31 12:29:50 2009 +0800 @@ -213,6 +213,63 @@ pass return coord_id +## \brief Calculate geometry of ellipse where the arc is on. +# +# This function calculate the ellipse with information from SVG path data. +# +# \see calc_center_and_x_aix() +def _calc_ellipse_of_arc(x0, y0, rx, ry, x_rotate, large, sweep, x, y): + import math + + _sin = math.sin(x_rotate) + _cos = math.cos(x_rotate) + + nrx = x * _cos + y * _sin + nry = x * -_sin + y * _cos + nrx0 = x0 * _cos + y0 * _sin + nry0 = x0 * -_sin + y0 * _cos + + udx = (nrx - nrx0) / 2 / rx # ux - umx + udy = (nry - nry0) / 2 / ry # uy - umy + umx = (nrx + nrx0) / 2 / rx + umy = (nry + nry0) / 2 / ry + + udx2 = udx * udx + udy2 = udy * udy + udl2 = udx2 + udy2 + + if udy != 0: + # center is at left-side of arc + udcx = -math.sqrt((1 - udl2) * udl2) / (udy + udx2 / udy) + udcy = -udcx * udx / udy + else: + # center is at down-side of arc + udcx = 0 + udcy = math.sqrt((1 - udl2) * udl2) / udx + pass + + reflect = 0 + if large: + reflect ^= 1 + pass + if sweep != 1: + reflect ^= 1 + pass + if reflect: + udcx = -udcx + udcy = -udcy + pass + + nrcx = rx * (udcx + umx) + nrcy = ry * (udcy + umy) + + cx = nrcx * _cos - nrcy * _sin + cy = nrcx * _sin + nrcy * _cos + + xx = rx * _cos + cx + xy = rx * _sin + cy + return cx, cy, xx, xy + # M x y : Move to (x,y) # Z : close path # L x y : lineto (x,y) @@ -236,8 +293,8 @@ 'C': 6, 'c':6, 'S': 4, 's':4, 'Q': 4, 'q':4, - 'T': 2, 't':2} - + 'T': 2, 't':2, + 'A': 7, 'a':7} def translate_path_data(data,codefo): temp = data.split() @@ -247,33 +304,40 @@ if s != '': fields.append(s) cmd = '' + cmd_args=0 commands='' args=[] fix_args=[] for f in fields: - if cmd == 'A' or cmd == 'a': - try: - d = int(f) - fix_args.append(d) - if (narg % 7) == 0: - commands = commands + cmd - narg = narg + 1 - except: - pass - else: - try: - d = float(f) - args.append(d) - if (narg % command_length[cmd]) == 0: - commands = commands + cmd - narg = narg + 1 - continue - except: - pass - cmd = f - narg=0 - pass - return [commands,args,fix_args] + if f in command_length: + if cmd_args != 0 and (narg % cmd_args) != 0: + raise ValueError, 'invalid path data %s' % (repr(fields)) + cmd = f + cmd_args = command_length[f] + narg = 0 + continue + + if (narg % cmd_args) == 0: + commands = commands + cmd + pass + arg = float(f) + args.append(arg) + narg = narg + 1 + + if (narg % cmd_args) == 0 and (cmd in 'Aa'): + x0, y0, rx, ry, x_rotate, large, sweep, x, y = \ + tuple(args[-9:]) + x_rotate = int(x_rotate) + large = int(large) + sweep = int(sweep) + cx, cy, xx, xy = _calc_ellipse_of_arc(x0, y0, rx, ry, + x_rotate, large, + sweep, x, y) + args[-7:] = [cx, cy, xx, xy, x, y] + fix_args.append(sweep) + pass + pass + return commands, args, fix_args _id_sn = 0