Tegnap Sherynek segitettem a programozas hazifeladataban (lakberendezo programot kellett csinalni, delphiben - rovid ideje ismerem, de sztem hulladek egy nyelv, es nem magaval a pascallal van a baj), es oda jutottunk, hogy kellenenek butorok. En ezeket jobaratommal gvim-mel xml-szeru formatumban allitottam elo. Ugy, hogy igazabol nem lattam mit "rajzolok".
Ma reggel tesztgep installalas alatt unalmas perceimben osszedobtam egy megjelenitot hozza Linux ala is, az Evas es a libxml2 library-k felhasznalsaval. Elegge randa, de mukodik, csinaljon szebbet, aki akar. Aztan gondoltam ha mar enyem a tudas, kozre is adom, es csinalok valami howto szerut. Lassuk.
Hat lassuk magat a megjelenito programot. Az xml resszel nem foglalkoznek, mert ahhoz van jo tutorial.
Ha az Evas-t szertnenk megjelenitesre hasznalni, akkor tegyuk fel az EFL-t, de legalabbis az Ecore es az Evas reszet. A programunkban #include-olni kell az Ecore.h es Ecore_Evas.h header fileokat.
#include <Ecore.h>
#include <Ecore_Evas.h>
Rajzolni az Evas objektumra tudunk (E-canvas), es ahhoz, hogy kapjunk egy ilyet, eloszor egy Ecore_Evas ablakot kell csinalnunk, majd tole "elkernunk" a canvas reszet, amire rajzolni tudunk.
Ecore_Evas * ee;
Evas * evas;ecore_init();
ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 200, 200);
ecore_evas_title_set(ee, "Evas + XML");
ecore_evas_borderless_set(ee, 0);
ecore_evas_show(ee);evas = ecore_evas_get(ee);
Az ecore_evas_software_x11_new() fuggveny hozza letre magat az ablakot, ami esetunkben sima ablak, 200x200-as meretekkel. A fuggvenynevbol sejteni lehet, hogy ennek a fuggvenynek van openGl-es valtozata is, de azt egyelore meg nem ajanljak a sracok, es igazabol esetunkben rohadtul felesleges is. Ennek ezutan adhatunk cimet, ami a fejlecben latszik, megmondhatjuk, hogy legyen kerete, es sok mas egyeb, akit erdekel, az ra tud keresni ![]()
Vegul az ecore_evas_get() fuggveny adja nekunk oda a rajzvaszonunkat.
Erre aztan azt rajzolunk, amit akarunk, illetve amit egyelore az Evas tud. Azt azert ne felejtsuk el, hogy ez meg kozel sem a vegleges verzio.
Peldaul, hogy legyen valami az ablakunkban, rajzoljunk bele hatternek egy feher negyzetet. Ez igazabol azert kell, mert ha nem E17-et hasznalunk ablakkezelonek, akkor az ablak hattere nem atlatszo lesz, hanem valami/akarmi/barmi kerul oda (pl. gtk/qt tema alap "semmi" kitoltese).
Evas_Object * base_rect; // ez legelore megy, mert ugye c-ben vagyunk
base_rect = evas_object_rectangle_add(evas);
evas_object_resize(base_rect, (double)200, (double)200);
evas_object_color_set(base_rect, 255, 255, 255, 255);
evas_object_show(base_rect);
Ugye latszik, hogy az evas_object_rectangle_add() hozza letre magat a negyzetet a parameterkent megkapott evas objektumon. Am ez a negyzet alapesetben szintelen es 1x1 pixel meretu. Hat gyorsan (meg megjelenites elott) atmeretezzuk (evas_object_resize()), illetve adunk neki valami szint (evas_object_color_set()), aztan megjelenitjuk (evas_object_show()). A szin beallitasara kulon felhivnam a figyelmet, hogy a szokasos red, green es blue parameterek mellett megjelenik az alpha - azaz atlatszosag - parameter is. Ez egy evason belul szepen mukodik, sot, ha E17-et hasznalunk, akkor ott a hatter is lehet atlatszo.
Itt latszik, hogy kicsit objektum szeruen kozelit az EFL a dolgokhoz, nem letrehozunk egy akarmekkora akar milyen szinu negyzetet, hanem letrehozunk egy negyzetet, es azt kesobb manipulalgathatjuk.
Ha mindent megrajzoltunk, amit akartunk, akkor az ecore_main_loop_begin() fuggveny segitsegevel elinditjuk az Ecore fo reszet, ami a jelzeseket kezeli, meg egyebek. Tobbek kozott o figyel arra, hogy a kicsi [x] megnyomasa utan az ablak bezarodjon es a program lealljon. Mi is definialhatunk kulonbozo esemenyfigyeloket, de ezt majd talan maskor.
Ha le szeretned forditani, akkor az alabbi parancsot hasznald:
gcc -o progi progi.c `ecore-config --cflags --libs` `evas-config --cflags --libs`
Es vegul, itt az egesz amit irtam, ami az xml-eket beolvassa. Forditaskor persze kell meg a `xml2-congif --cflags --libs` is.
Es ha komolyan ki akarjatok probalni, kell hozza egy xml file, erre itt a pelda:
<Alakzat szin="175" Top="60" Left="60" Width="100" Height="100">
<Pont X="25" Y="25"/>
<Pont X="30" Y="25"/>
<Pont X="30" Y="30"/>
<Pont X="70" Y="30"/>
<Pont X="70" Y="25"/>
<Pont X="75" Y="25"/>
<Pont X="75" Y="75"/>
<Pont X="25" Y="75"/>
<Pont X="25" Y="20"/>
<Pont X="75" Y="20"/>
<Pont X="75" Y="25"/>
</Alakzat>
Ez egy szek ![]()
Május 23rd, 2005 at 14:43
[...] ry azt mondja jok lettek. Ma delelott aztan hirtelen irtam hozza egy megjelenitot, illetve megirtam, hogy hogyan csinaltam. Csak hogy hatha kesobb jo lesz valamire. Valamiert sehogyan sem sikerul haloz [...]