<html> <head> <title>Edje: Edje Lua scripting</title> <meta http-equiv="content-type" content="text/html;charset=UTF-8"> <meta name="author" content="Andres Blanc" > <link rel="icon" href="img/favicon.png" type="image/x-icon"> <link rel="shortcut icon" href="img/favicon.png" type="image/x-icon"> <link rel="icon" href="img/favicon.png" type="image/ico"> <link rel="shortcut icon" href="img/favicon.png" type="image/ico"> <link rel="stylesheet" type="text/css" href="e.css"> <link rel="stylesheet" type="text/css" href="edoxy.css"> </head> <body> <div id="container"> <div id="header"> <div class="layout"> <h1><span>Enlightenment</span></h1> <h2><span>Beauty at your fingertips</span></h2> <table cellspacing="0" cellpadding="0" width="100%"><tr> <td id="header_logo"> <a href="http://www.enlightenment.org"></a> </td> <td id="header_menu"> <table cellspacing="0" cellpadding="0" align="right"><tr> <td class="nav_passive"><a class="nav_passive" href="http://www.enlightenment.org/p.php?p=home">Home</a></td> <td class="nav_passive"><a class="nav_passive" href="http://www.enlightenment.org/p.php?p=news">News</a></td> <td class="nav_passive"><a class="nav_passive" href="http://www.enlightenment.org/p.php?p=about">About</a></td> <td class="nav_passive"><a class="nav_passive" href="http://www.enlightenment.org/p.php?p=download">Download</a></td> <td class="nav_passive"><a class="nav_passive" href="http://www.enlightenment.org/p.php?p=support">Support</a></td> <td class="nav_passive"><a class="nav_passive" href="http://www.enlightenment.org/p.php?p=contribute">Contribute</a></td> <td class="nav_passive"><a class="nav_passive" href="http://www.enlightenment.org/p.php?p=contact">Contact</a></td> <td class="nav_passive"><a class="nav_passive" href="http://trac.enlightenment.org/e">Tracker</a></td> <td class="nav_passive"><a class="nav_passive" href="http://www.enlightenment.org/p.php?p=docs">Docs</a></td> </tr></table> </td> <td id="header_last"></td> </tr></table> <div class="doxytitle"> Edje Documentation <small>at Tue Feb 8 2011</small> </div> <div class="menu-container"> <div class="submenu"> <ul class="current"> <li><a href="files.html">Files</a></li> <li><a href="Edje__Edit_8h.html">Edje Edit API</a></li> <li><a href="examples.html">Examples</a></li> <li><a href="luaref.html">LUA scripting</a></li> <li><a href="Edje_8h.html">Edje API</a></li> <li><a href="edcref.html">EDC Reference</a></li> <li class="current"><a href="index.html">Main Page</a></li> </ul> </div> </div> <div class="clear"></div> </div> </div> <div id="content"> <div class="layout"> <!-- Generated by Doxygen 1.7.3 --> </div> <div class="header"> <div class="headertitle"> <h1>Edje Lua scripting </h1> </div> </div> <div class="contents"> <div class="textblock"><h2><a class="anchor" id="intro"></a> Introduction</h2> <p>Lua is intended for script-only objects at this point (with embryo left for augmenting standard programs). Since script-only objects effectively define objects entirely via Lua script (resize handling, event handling etc. etc.) this places many more demands on them, and thus a more powerful language is in order. Lua is that language.</p> <p>To get you started, here's an example: </p> <div class="fragment"><pre class="fragment">collections { group { <a class="code" href="edje__data_8c.html#a8f8f80d37794cde9472343e4487ba3eb">name</a>: <span class="stringliteral">"example"</span>; lua_script_only: 1; lua_script { --<span class="comment">// stick object private/local vars here</span> local D; local count = 0; local fndata = 99; local function mycb3 (v) print("lua::callback transition " .. D.val .. " v: " .. v); d = {}; edje.size(d); print(<span class="stringliteral">"lua::objsize= "</span> .. d.w .. <span class="stringliteral">" , "</span> .. d.h); sz = {w=v * 80, h=v * 40}; D.rect:geom(((d.w / 2) * math.sin(v * 2 * math.pi)) + ((d.w - sz.w) / 2), ((d.h / 2) * math.cos(v * 2 * math.pi)) + ((d.h - sz.h) / 2), sz.w, sz.h); D.rect:color(255, 128, v * 255, 255); D.rect:move(d); print(<span class="stringliteral">"lua::pos= "</span> .. d.x .. <span class="stringliteral">" , "</span> .. d.y); r = D.rect:above(); <span class="keywordflow">if</span> (r ~= nil) then print(<span class="stringliteral">"lua::rcol"</span>); r:color(20, v * 255, 60, 255); <span class="keywordflow">else</span> print(<span class="stringliteral">"lua::r none!!!!!!!!!!!!!!1"</span>); end d = edje.size(); D.clip:geom(10, 10, d.w - 20, d.h - 20); c = D.clip:clipees(); <span class="keywordflow">for</span> i=1,table.getn(c),1 <span class="keywordflow">do</span> d = c[i]:geom(); print(<span class="stringliteral">"lua::"</span> .. i .. <span class="stringliteral">" geom = "</span> .. d.x .. <span class="stringliteral">","</span> .. d.y .. <span class="stringliteral">" "</span> .. d.w .. <span class="stringliteral">"x"</span> .. d.h); end <span class="keywordflow">return</span> <span class="keyword">true</span>; --<span class="comment">// repeat the timer</span> end local function mycb2 () print("lua::callback animator " .. count); print("lua:: seconds: " .. edje.seconds()); print("lua:: looptime: " .. edje.looptime()); local date = edje.date(); print("lua:: date: " .. date.year .. "|" .. date.month .. "|" .. date.day .. "|" .. date.yearday .. "|" .. date.weekday .. "|" .. date.hour .. "|" .. date.min .. "|" .. date.sec ); return true; --<span class="comment">// repeat the timer</span> end local function mycb () print("lua::callback " .. count .. " fndata = " .. fndata); count = count + 1; --<span class="comment">// keep count of calls - object data</span> fndata = fndata + 3; --<span class="comment">// play with object vars to see if they persist</span> D.tim = edje.timer(0.25, mycb); --<span class="comment">// inside cb add new timer</span> D.ani = edje.animator(mycb2); return false; --<span class="comment">// cease repeating the timer</span> end --<span class="comment">// init object here</span> D = {}; --<span class="comment">// data is empty table to start</span> D.val = math.random(); --<span class="comment">// start with some random value so</span> fndata = fndata + D.val; --<span class="comment">// func data start point</span> print(<span class="stringliteral">"lua::init ... "</span> .. D.val); edje.echo(<span class="stringliteral">"lua::echo('hello world')"</span>); --<span class="comment">// actually add the timer to call mycb in 1.23 sec</span> D.tim = edje.timer(1.23, mycb); D.tra = edje.transition(5.0, mycb3); <span class="keywordflow">if</span> (edje.spanky) then edje.spanky(); end --<span class="comment">// send some random edje message</span> edje.messagesend(7, <span class="stringliteral">"none"</span> ); edje.messagesend(7, <span class="stringliteral">"sig"</span>, <span class="stringliteral">"signal"</span>, <span class="stringliteral">"source"</span>); edje.messagesend(7, <span class="stringliteral">"str"</span>, <span class="stringliteral">"hello world"</span>); edje.messagesend(7, <span class="stringliteral">"int"</span>, 987); edje.messagesend(7, <span class="stringliteral">"float"</span>, 987.321); edje.messagesend(7, <span class="stringliteral">"strset"</span>, {<span class="stringliteral">"hello"</span>, <span class="stringliteral">"there"</span>, <span class="stringliteral">"world"</span>}); edje.messagesend(7, <span class="stringliteral">"intset"</span>, {1, 2, 3}); edje.messagesend(7, <span class="stringliteral">"floatset"</span>, {1.1, 2.2, 3.3}); edje.messagesend(7, <span class="stringliteral">"strint"</span>, <span class="stringliteral">"hello world"</span>, 7); edje.messagesend(7, <span class="stringliteral">"strfloat"</span>, <span class="stringliteral">"hello world"</span>, 7.654); edje.messagesend(7, <span class="stringliteral">"strintset"</span>,<span class="stringliteral">"hello world"</span>, {1, 2, 3}); D.rect = edje.rect(); D.rect:geom (5, 10, 50, 30); D.rect:color (255, 128, 60, 255); D.rect:show (); D.rect2 = edje.rect(); D.rect2:geom (50, 50, 50, 50); D.rect2:color (20, 30, 60, 120); D.rect2:show (); D.clip = edje.rect(); D.clip:geom (10, 10, 150, 150); D.clip:color (200, 200, 50, 200); D.clip:show (); D.rect2:clip(D.clip); D.rect:clip(D.clip); --<span class="comment">// example of deleting something</span> --<span class="comment">// D.tim:del();</span> --<span class="comment">// shutdown func - generally empty or not there. everything gcd for you</span> function shutdown () print("lua::shutdown ... " .. D.val); end function show () print("lua::show ... " .. D.val); end function hide () print("lua::hide ... " .. D.val); end function move (x, y) print("lua::move ... " .. D.val); print(" x=" .. x .. " x=" .. y); end function resize (w, h) print("lua::resize ... " .. D.val); print(" w=" .. w .. " h=" .. h); end function message (<span class="keywordtype">id</span>, <a class="code" href="edje__data_8c.html#a0dae2edc8bfd2bedabfa38415c35f3ec">type</a>, v1, v2) print("lua::message ... " .. D.val); print(" <span class="keywordtype">id</span>=" .. <span class="keywordtype">id</span> .. " type=" .. type); --<span class="comment">// handle youre message type here. chekc id + type then use v1</span> --<span class="comment">// and/or v2 (or neither) appropriately. they are the same as</span> --<span class="comment">// the 2nd and 3rd param passed to edje.messagesend() (if any</span> --<span class="comment">// are passed at all)</span> end function signal (sig, src) print("lua::signal ... " .. D.val); print(" sig=" .. sig .. " src=" .. src); end } } } </pre></div> </div></div> <div id="push"></div> </div> <!-- #content --> </div> <!-- .layout --> </div> <!-- #container --> <div id="footer"> <table><tr> <td class="copyright">Copyright ©2011 Enlightenment</td> <td class="generated">Docs generated Tue Feb 8 2011 17:28:43</td> </tr></table> </div> </body> </html>