color_classes { color_class { name: "test_colour"; color: 255 255 255 255; } } fonts { font: "Vera.ttf" "default"; } images { image: "bubble.png" COMP; image: "test.png" COMP; } collections { group { name: "main"; lua_script_only: 1; lua_script { --// stick object private/local vars here local D; local count = 0; local fndata = 99; local text_geom; --// Functions to print tables. local print_table, print_table_start; function print_table_start(table, space, name) print(space .. name .. ": "); print(space .. "{"); print_table(table, space .. " "); print(space .. "}"); end function print_table(table, space) for k, v in pairs(table) do if type(v) == "table" then print_table_start(v, space, k); elseif type(v) == "string" then print(space .. k .. ': "' .. v .. '";') else print(space .. k .. ": " .. v .. ";") end end end local function mycb3 (v) print("lua::callback transition " .. D.val .. " v: " .. v); d = {}; d = edje.size(d); print("lua::objsize= " .. d.w .. " , " .. 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 = D.rect:move(d); print("lua::pos= " .. d.x .. " , " .. d.y); r = D.rect:above(); if (r ~= nil) then print("lua::rcol"); r:color(20, v * 255, 60, 255); else print("lua::r none!!!!!!!!!!!!!!1"); end d = edje.size(); D.clip:geom(10, 10, d.w - 20, d.h - 20); c = D.clip:clipees(); for i=1,table.getn(c),1 do d = c[i]:geom(); print("lua::" .. i .. " geom = " .. d.x .. "," .. d.y .. " " .. d.w .. "x" .. d.h); end return true; --// repeat the timer end local function mycb2 () print("lua::callback animator " .. count .. " seconds: " .. edje.seconds() .. " looptime: " .. edje.looptime()); edje.color_class("test_colour", 255, (count * 10) % 255, 255, 255); edje.text_class("test_text_class", "Sans:style=Bold", ((count * 3) % 100) + 8); if (5 > (count % 10)) then D.text:font("default", 32); else D.text:font("Sans:style=Bold", 32); end edje_geom = edje.geom(); text_geom = D.text:geom(); D.text:move((edje_geom.w - text_geom.w) / 2, (edje_geom.h - text_geom.h) / 8); return true; --// repeat the timer end local function mycb () print("lua::callback timer " .. count .. " fndata = " .. fndata); count = count + 1; --// keep count of calls - object data fndata = fndata + 3; --// play with object vars to see if they persist D.tim = edje.timer(0.25, mycb); --// inside cb add new timer return false; --// cease repeating the timer end --// init object here D = {}; --// data is empty table to start D.val = math.random(); --// start with some random value so fndata = fndata + D.val; --// func data start point print("lua::init ... " .. D.val); edje.echo("lua::echo('hello world')"); --// How to check the edje version. version = edje.version(); print("The edje version number is " .. version.major .. "." .. version.minor); --// actually add the timer to call mycb in 1.23 sec D.tim = edje.timer(1.23, mycb); D.tra = edje.transition(5.0, mycb3); D.ani = edje.animator(mycb2); edje_geom = edje.geom(); if (edje.spanky) then edje.spanky(); end local date = edje.date(); print("lua:: date: " .. date.year .. "|" .. date.month .. "|" .. date.day .. "|" .. date.yearday .. "|" .. date.weekday .. "|" .. date.hour .. "|" .. date.min .. "|" .. date.sec ); --// send some random edje message edje.messagesend(7, "none" ); edje.messagesend(7, "sig", "signal", "source"); edje.messagesend(7, "str", "hello world"); edje.messagesend(7, "int", 987); edje.messagesend(7, "float", 987.321); edje.messagesend(7, "strset", {"hello", "there", "world"}); edje.messagesend(7, "intset", {1, 2, 3}); edje.messagesend(7, "floatset", {1.1, 2.2, 3.3}); edje.messagesend(7, "strint", "hello world", 7); edje.messagesend(7, "strfloat", "hello world", 7.654); edje.messagesend(7, "strintset","hello world", {1, 2, 3}); D.edje = edje.edje(); D.edje:file("plain/edje/group"); D.edje:show(); 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); D.text = edje.text(); D.text:geom (50, 5, 150, 50); D.text:color (255, 0, 0, 255); D.text:font("Sans:style=Bold", 32); D.text:text("Lua rocks!"); text_geom = D.text:geom(); print(D.text:text()); D.text:show(); --// Put a few bogus API calls here to test the bogus API protection, --// If the bogus API protection works, these should get ignored, but everything else runs smoothly. --// Otherwise, the map is not done, the bubbles are not done, but the timers keep runinng. bogus.failme(1, "two", D.rect); temp = bogus.failme2(); D.text.bogus(); edje.bogus2(); --// Fun with maps! D.map = edje.map(4); --// 4 is the only supported map size at the moment. --// These all do the same thing. --// Note, lua likes to start at 1, C (and thus evas) at 0. I choose to agree with C. D.map:coord(0, 50, 50, 0); D.map:coord(1, 100, 50, 0); D.map:coord(2, 100, 100, 0); D.map:coord(3, 50, 100, 0); D.map:populate(50, 50, 50, 50, 0); D.map:populate(D.rect2, 0); D.map:populate(D.rect2); --// print the results D.coord = D.map:coord(0); print("lua::map coords for point 0 x=" .. D.coord.x .. " y=" .. D.coord.y .. " z=" .. D.coord.z); D.coord = D.map:coord(1); print("lua::map coords for point 1 x=" .. D.coord.x .. " y=" .. D.coord.y .. " z=" .. D.coord.z); D.coord = D.map:coord(2); print("lua::map coords for point 2 x=" .. D.coord.x .. " y=" .. D.coord.y .. " z=" .. D.coord.z); D.coord = D.map:coord(3); print("lua::map coords for point 3 x=" .. D.coord.x .. " y=" .. D.coord.y .. " z=" .. D.coord.z); D.map:smooth(false); D.map:alpha(true); if (D.map:alpha()) then print("lua::map is alpha"); end if (D.map:smooth()) then print("lua::map is smooooth"); end if (D.map:clockwise()) then print("lua::map is clockwise"); end D.map:color(255, 255, 255, 255); // set all points to this colour. D.map:color(1, 255, 0, 255, 255); // set just one point to this colour. D.map:lighting(75, 75, 10, 255, 255, 255, 0, 255, 0); // Ambient light and a 3D light source. --// Toss it around. D.map:rotate(45.0, 75, 75); D.map:zoom(1.5, 1.5, 75, 75); D.map:rotate3d(10.0, 20.0, 30.0, 75, 75, 0); D.map:perspective(200, 200, 0, 20); --// For image UV mapping. D.map:uv(0, 0.0, 0.0); D.map:uv(1, 50.0, 0.0); D.map:uv(2, 50.0, 50.0); D.map:uv(3, 0.0, 50.0); --// Actually apply the resulting transformations. D.rect2:map(D.map); D.rect2:map_enable(true); if (D.rect2:map_enable()) then print("lua::map enabled"); end D.rect2:map_source(D.rect); --// Don't think this is actually implemented in evas. --// D.map:dup(); --// D.map:size(); --// perhaps overide the # operator? For now it's only gonna return 4 anyway. --// example of deleting something --// D.tim:del(); --// test the color_class stuff colour = edje.color_class("test_colour"); print("lua::color_class= " .. colour.r .. "," .. colour.g .. "," .. colour.b .. "," .. colour.a); colour = edje.color_class("test_colour", 32, 64, 255, 128); print("lua::color_class= " .. colour.r .. "," .. colour.g .. "," .. colour.b .. "," .. colour.a); colour = edje.color_class("test_colour", { r=255, g=0, b=255, a=255 }); print("lua::color_class= " .. colour.r .. "," .. colour.g .. "," .. colour.b .. "," .. colour.a); text = edje.text_class("test_text_class", "Sans:style=Bold", 8); print("lua::text_class= " .. text.font .. " size " .. text.size); --// Do something bad, just to see what happens. --// edje.color_class(nil); --// shutdown func - generally empty or not there. everything garbage collected for you 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 x=" .. x .. " x=" .. y); D.edje:move(0, 0); end function resize (w, h) print("lua::resize w=" .. w .. " h=" .. h); D.text:move((w - text_geom.w) / 2, (h - text_geom.h) / 8); D.edje:resize(w, h); end function message (id, type, ...) print("lua::message id=" .. id .. " type=" .. type); --// handle your message type here. check id + type then use the --// vararg appropriately. they are the same as the params passed --// to edje:messagesend() (if any are passed at all). Any array --// arguments are passed as a single table. if ("none" == type) then print("lua::message no args"); elseif ("strset" == type) then strs = ... ; print_table_start(strs, "", "lua::message strings"); elseif ("intset" == type) then ints = ... ; print_table_start(ints, "", "lua::message ints"); elseif ("floatset" == type) then floats = ... ; print_table_start(floats, "", "lua::message floats"); elseif ("strintset" == type) then str, ints = ... ; print("lua::message " .. str); print_table_start(ints, "", "lua::message ints"); elseif ("strfloatset" == type) then str, floats = ... ; print("lua::message " .. str); print_table_start(floats, "", "lua::message floats"); else print("lua::message " .. ... ); end end function signal (sig, src) print("lua::signal sig= " .. sig .. " src= " .. src); end } } // The group name NEEDS a / in it, // or the part below that tries to swallow it won't work. // Leaving just the lua part visible. group { name: "bubbles/lua"; lua_script_only: 1; lua_script { local bubbles = { }; local bubbleCols = 8; local bubbleRows = 6; for i = 1, bubbleRows do row = { }; for j = 1, bubbleCols do image = edje.image(); image:image("bubble.png"); image:show(); table.insert(row, image); end table.insert(bubbles, row); end function resize (w, h) for i = 1, bubbleRows do for j = 1, bubbleCols do w1 = w / bubbleCols; h1 = h / bubbleRows; bubbles[i][j]:geom((j - 1) * w1, (i - 1) * h1, w1, h1); if ((1 == i) or (1 == j) or (bubbleRows == i) or (bubbleCols == j)) then bubbles[i][j]:color(0, 255, 0, 200); else bubbles[i][j]:color(math.random(200) + 55, 0, math.random(255) + 55, 200); end end end end } } group { name: "plain/edje/group"; parts { part { name: "background"; type: RECT; mouse_events: 0; description { state: "default" 0.0; color: 0 0 0 255; } } // A lua group embedded in an edje group. part { name: "bubbles_lua"; type: GROUP; source: "bubbles/lua"; mouse_events: 0; description { state: "default" 0.0; } } part { name: "background_image"; type: IMAGE; mouse_events: 0; description { state: "default" 0.0; aspect_preference: HORIZONTAL; color_class: "test_colour"; image { normal: "test.png"; } } } part { name: "some_text"; type: TEXT; mouse_events: 0; description { state: "default" 0; text { text: "This is test text."; text_class: "test_text_class"; } } } } } }