summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbeber <beber>2005-10-12 21:14:43 +0000
committerbeber <beber>2005-10-12 21:14:43 +0000
commit38312f3771a0660ae16f79aab95f94fb2e8ab47e (patch)
tree04ff578a45f139c7fe01b1d13db88ea320d7f932
parentMove test .. (diff)
downloadepresent-38312f3771a0660ae16f79aab95f94fb2e8ab47e.tar.gz
Add test here
-rw-r--r--test/e.pngbin0 -> 74944 bytes
-rw-r--r--test/pres.xml229
-rw-r--r--test/sky.edjbin0 -> 130975 bytes
-rw-r--r--test/sky/bg.pngbin0 -> 59412 bytes
-rw-r--r--test/sky/build.sh2
-rw-r--r--test/sky/c1.pngbin0 -> 172983 bytes
-rw-r--r--test/sky/c2.pngbin0 -> 85067 bytes
-rw-r--r--test/sky/c3.pngbin0 -> 97280 bytes
-rw-r--r--test/sky/c4.pngbin0 -> 141508 bytes
-rw-r--r--test/sky/icon.pngbin0 -> 16849 bytes
-rw-r--r--test/sky/main_edje_source.edc625
-rw-r--r--test/sky/s0.pngbin0 -> 48604 bytes
-rw-r--r--test/sky/s1.pngbin0 -> 31506 bytes
-rw-r--r--test/sky/s2.pngbin0 -> 47676 bytes
-rw-r--r--test/sky/sky.edjbin0 -> 130982 bytes
15 files changed, 856 insertions, 0 deletions
diff --git a/test/e.png b/test/e.png
new file mode 100644
index 0000000..47597a8
--- /dev/null
+++ b/test/e.png
Binary files differ
diff --git a/test/pres.xml b/test/pres.xml
new file mode 100644
index 0000000..42076dc
--- /dev/null
+++ b/test/pres.xml
@@ -0,0 +1,229 @@
+<presentation>
+ <slide>
+ </slide>
+ <slide>
+ <title>BLING BLING!</title>
+ <image size="25">e.png</image>
+ <title>
+ Desktop Developers Conference, Ottawa, 2005
+ </title>
+ <text>
+ The power of structural objects for building widget sets, applications
+ in a way that allows powerful theme manipulation, smart display pipeline
+ optimization that scales from hand-held device all the way to the
+ high-end desktop.
+ </text>
+ <text>
+ Carsten Haitzler (Rasterman) - raster@rasterman.com
+ </text>
+ </slide>
+ <slide>
+ <title>Enlightenment is just a Window Manager... Right?</title>
+ <text>
+ Once upon a time in a galaxy far far away... Enlightenment was mostly a
+ Window Manager for X. As part of development for 0.17 It has become much
+ more.
+ </text>
+ <text>
+ The work for E17 has created an imaging toolkit, canvas library,
+ shareable theme engine, virtual machine and much more, targeted not just
+ at the WM but all the way down to embedded devices.
+ </text>
+ <text>
+ It all began when trying to write a better file manager - EFM, where it
+ turned out an immediate display system was much harder to use to build
+ such a GUI, as the program ended up creating a structured GUI on top
+ anyway.
+ </text>
+ </slide>
+ <slide>
+ <title>The nature of GUI's</title>
+ <text>
+ Despite the API X and other display systems provide at its core, the
+ nature of display is invariably object based. You display a set of
+ objects (icons, buttons, labels etc.) and need to retain that structure
+ and manipulate it. Generally this task is left up to the application
+ itself, or a widget set. Often you don't want a widget set, but need
+ some half-way house where you can arrange lower-level primitives, but
+ not need to worry how to draw them all the time.
+ </text>
+ <text>
+ Here comes the canvas...
+ </text>
+ </slide>
+ <slide>
+ <title>Back to file managers</title>
+ <text>
+ In a modern world a GUI with bitmapped fonts, jagged icons with a few
+ minimal colors just doesn't cut it. People want smooth icons, colorful
+ displays and smooth anti-aliased text. All of this revolves around
+ alpha blending image data one way or another, and handling scaling of
+ image data in addition to the old stalwart rendering algorithms.
+ </text>
+ <text>
+ To do this on any reasonable sized display needs a very fast CPU, or
+ hardware acceleration, but let's be honest - the hardware acceleration
+ support under X is patchy for this level of rendering. There is need for
+ a way to do this without HAVING to rely on hardware acceleration. This
+ also makes way for scaling DOWN to small embedded systems that often only
+ have very dumb framebuffers AS WELL AS supporting cards with no driver
+ support and a stable development platform for drivers to be improved.
+ </text>
+ </slide>
+ <slide>
+ <title>Evas engines and fast software</title>
+ <text>
+ Evas is built on the premise that the rendering back-end may change
+ over time and that there may even be multiple rendering engines supported
+ at any one time, BUT there must always be a reliable software engine
+ that works fast enough for real use as the target may not have hardware
+ accelerated support, or such acceleration may place limits on the
+ rendering that the application cannot allow.
+ </text>
+ <text>
+ Currently Evas supports rendering to X via software rendering, Linux
+ framebuffer, Memory ARGB buffer, OpenGL/)X, DirectFB, Qtopia via software
+ and even Cairo (not that useful). It works on a tile update system that
+ limits redraws to only what changed, but even this currently has limits.
+ </text>
+ </slide>
+ <slide>
+ <title>Building more powerful layers on top</title>
+ <video size="33" pos="20+10" alpha="40">vid1.mpg</video>
+ <video size="60" pos="50+60" alpha="50">vid3.mpg</video>
+ <text>
+ Being not just a rendering engine and abstraction layer, but a structural
+ drawing system, Evas does require building layers on top to make it do
+ more. Evas provides a way to extend its objects with your own. One
+ example of this is Emotion, a video object library that glues modular
+ video decoders to canvas objects, letting them play video on their own
+ and be just another native part of the canvas.
+ </text>
+ </slide>
+ <slide>
+ <title>Edje</title>
+ <text>
+ Another layer like this is Edje. This is a hybrid layout engine with
+ event, scripting, and general look and feel rolled in. This information
+ is compiled into small, compact portable files that do not need to be
+ "installed" to be used. They can be used as-is as they are accessed on
+ a on-demand basis. They can react to events (signals) and transition
+ states and even execute scripts. The scripts are entirely sand-boxed and
+ cannot take over a program or cause any security problems. By
+ transitioning states you can also generate animation as transitions can
+ happen over time and Edje will insert or drop frames as needed to meet
+ a target framerate.
+ </text>
+ <text>
+ The Edje file is compiled from a text source (that looks not much
+ different from a C struct), and produces the compressed output that can
+ be directly used by an application. These files are even de-compilable
+ so you can extract the original source from the compiled output.
+ </text>
+ </slide>
+ <slide>
+ <title>Defining GUI layout with a structure and procedure</title>
+ <text>
+ Edje takes a layout system that looks more like layers found in GIMP
+ or Photoshop, but generally has many more layers that move, resize,
+ get recolored or have their contents changed. These layers are known as
+ Parts in Edje and have their geometry defined relative to the Edje object
+ as a whole or to other Edje parts, as well as allowing padding, offsets,
+ and many other limiting and augmenting parameters (aspect ratio, min/max
+ size, alignment etc.). This allows for a wide range of layout abilities,
+ but does fall short of a widget set's multi-item containering such as
+ h/vbox, tables, lists etc. Edje was intended to be something that could
+ be used to augment a widget set at a lower level, or be used as part of
+ building one, allowing your "button" or "scrollbar" to be much more
+ visually flexible than existing widget theme systems allow. It saves
+ having to interpret lots of script code as the layout engine is compiled
+ but it just accepts many parameters.
+ </text>
+ </slide>
+ <slide>
+ <title>Events</title>
+ <text>
+ Edje can allow for things to happen on events or signals. These events
+ either come from the user (the mouse fore example) or from the running
+ program that is using the Edje (it can emit signals) as well as from
+ well structured message queues. Edje has a set of "programs" that "run"
+ when a certain signal happens. They may simply change the state of a
+ part from normal to selected, or may emit more signals, transition parts
+ over periods of time for animation and even run an entire virtual
+ machine and scripting engine (known as embryo) to perform work to react
+ to the program or the user.
+ </text>
+ <text>
+ When simple signals are not enough the program and the Edje object can
+ communicate via structured message queues that allow a set of Edje
+ object-side callbacks in Embryo and application message handling
+ callbacks to talk. This allows a fairly sophisticated way of
+ communicating with a fairly opaque GUI object.
+ </text>
+ </slide>
+ <slide>
+ <title>Encapsulation for ease of use</title>
+ <image size="50" dimensions="640x480">sky.edj</image>
+ <text>
+ Compiling the source files into a single output file allows for easy
+ distribution and use. The above example is a single Edje object that
+ can animate and behave on its own, all encapsulated in a single file.
+ </text>
+ </slide>
+ <slide>
+ <title>Problems</title>
+ <list>
+ <item>Still fairly limited in abilities</item>
+ <item>No GUI editing tools yet</item>
+ <item>Complex to get a hold on</item>
+ <item>Limited primitive support</item>
+ <item>Limited API available to scripts</item>
+ <item>Not easily ported away from Evas</item>
+ <item>No multi-item layout primitives (h/vbox etc.)</item>
+ </list>
+ </slide>
+ <slide>
+ <title>Application in other areas</title>
+ <text>
+ Widget set theme engines should allow the theme to REACT to events such
+ as signals, mouse and focus events etc. and thus possibly animate to
+ help draw attention to something or simply be more flexible.
+ </text>
+ <text>
+ Custom interfaces where widgets sets are just too "standard" such as
+ set top boxes, mobile phone GUI's, kiosks and any other
+ "specific purpose"
+ </text>
+ <text>
+ Window Managers, anything with skinnable GUI's such as XMMS etc.
+ </text>
+ <text>
+ Anythng you feel needs to be funky and/or heavily user "re-skinnable"
+ </text>
+ </slide>
+ <slide>
+ <title>The problems facing us</title>
+ <text>
+ One of the problems facing Edje is object explosion. Since each Edje
+ object in turn is composed of multiple sub-objects it is very easy to
+ get a massive object count very quickly. The real problem is Evas'
+ flat object heirachy. I hope to fix this in the future with better
+ recursive canvas support.
+ </text>
+ <text>
+ Another big problem is hardware accelerated rendering support and
+ decent software fallbacks for it when needed within such a layer.
+ Currently decent software rendering support is an all or nothing deal
+ with the client side doing it all or hoping that the server-side doesn't
+ ever hit a software fallback, as when it does the whole thing falls
+ apart. OpenGL is an option but is still unstable, not supported
+ everywhere and is not the most appropriate API for 2D rendering.
+ </text>
+ </slide>
+ <slide>
+ <title>Hardware acceleration</title>
+ <text>
+ /* FIXME: This needs fixing. */
+ </text>
+ </slide>
+</presentation>
diff --git a/test/sky.edj b/test/sky.edj
new file mode 100644
index 0000000..142b15d
--- /dev/null
+++ b/test/sky.edj
Binary files differ
diff --git a/test/sky/bg.png b/test/sky/bg.png
new file mode 100644
index 0000000..39a2f9b
--- /dev/null
+++ b/test/sky/bg.png
Binary files differ
diff --git a/test/sky/build.sh b/test/sky/build.sh
new file mode 100644
index 0000000..16f318b
--- /dev/null
+++ b/test/sky/build.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+edje_cc $@ --image_dir . --font_dir . main_edje_source.edc -o sky.edj
diff --git a/test/sky/c1.png b/test/sky/c1.png
new file mode 100644
index 0000000..6d66a56
--- /dev/null
+++ b/test/sky/c1.png
Binary files differ
diff --git a/test/sky/c2.png b/test/sky/c2.png
new file mode 100644
index 0000000..e4374b8
--- /dev/null
+++ b/test/sky/c2.png
Binary files differ
diff --git a/test/sky/c3.png b/test/sky/c3.png
new file mode 100644
index 0000000..488e756
--- /dev/null
+++ b/test/sky/c3.png
Binary files differ
diff --git a/test/sky/c4.png b/test/sky/c4.png
new file mode 100644
index 0000000..1f6de86
--- /dev/null
+++ b/test/sky/c4.png
Binary files differ
diff --git a/test/sky/icon.png b/test/sky/icon.png
new file mode 100644
index 0000000..d68aad1
--- /dev/null
+++ b/test/sky/icon.png
Binary files differ
diff --git a/test/sky/main_edje_source.edc b/test/sky/main_edje_source.edc
new file mode 100644
index 0000000..2aaaa9b
--- /dev/null
+++ b/test/sky/main_edje_source.edc
@@ -0,0 +1,625 @@
+images {
+ // image "filename.png" STORAGE_MEOTHD [option to storage method];
+ // STORAGE_METHOD can be:
+ // COMP = compressed, no loss
+ // RAW = uncompressed, no loss
+ // LOSSY = compressed with quality loss, next param is quality level (0-100)
+ image, "bg.png" LOSSY 80;
+ image, "icon.png" LOSSY 60;
+ image, "c1.png" LOSSY 60;
+ image, "c2.png" LOSSY 60;
+ image, "c3.png" LOSSY 60;
+ image, "c4.png" LOSSY 60;
+ image, "s0.png" LOSSY 60;
+ image, "s1.png" LOSSY 60;
+ image, "s2.png" LOSSY 60;
+}
+
+collections {
+ group {
+ name, "desktop/background";
+// min, 720, 480;
+// min, 180, 120;
+ parts {
+ /* BACKGROUND */
+ part {
+ name, "background";
+ mouse_events, 1;
+ description {
+ state, "default" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ image {
+ normal, "bg.png";
+ }
+ fill {
+ smooth, 0;
+ }
+ }
+ }
+/*
+ part {
+ name, "icon";
+ mouse_events, 0;
+ description {
+ min, 253 176;
+ state, "default" 0.0;
+ align, 1.0 0.0;
+ rel1 {
+ relative, 0.0 1.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 0.0 1.0;
+ offset, 0 0;
+ }
+ image {
+ normal, "icon.png";
+ }
+ color, 255 255 255 50;
+ }
+ }
+ part {
+ name, "text";
+ type, TEXT;
+ effect, SOFT_SHADOW;
+ description {
+ state, "default" 0.0;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 48 36;
+ }
+ rel2 {
+ relative, 1.0, 1.0;
+ offset, -49, -37;
+ }
+ color, 255 255 255 255;
+ // color2, 0 0 255 255;
+ color3, 0 0 0 50;
+ text {
+ text, "Photos";
+ font, "Vera";
+ size, 48;
+ //fit, 0 1;
+ //min, 1 1;
+ align, 1.0 0.0;
+ }
+ }
+ }
+ */
+ /* LAND LAYER 0 */
+ part {
+ name, "land_0";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 3.55556 1.0;
+ offset, 0 0;
+ }
+ }
+ color, 150 130 110 200;
+ image {
+ normal, "s0.png";
+ }
+ }
+ description {
+ state, "drift" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 3.55556 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 3.55556 1.0;
+ offset, 0 0;
+ }
+ }
+ color, 150 130 110 200;
+ image {
+ normal, "s0.png";
+ }
+ }
+ }
+ /* CLOUD LAYER 1 */
+ part {
+ name, "cloud_1";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 3.55556 1.0;
+ offset, 0 0;
+ }
+ }
+ image {
+ normal, "c1.png";
+ }
+ }
+ description {
+ state, "drift" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 3.55556 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 3.55556 1.0;
+ offset, 0 0;
+ }
+ }
+ image {
+ normal, "c1.png";
+ }
+ }
+ }
+ /* LAND LAYER 1 */
+ part {
+ name, "land_1";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 3.55556 1.0;
+ offset, 0 0;
+ }
+ }
+ color, 100 80 60 220;
+ image {
+ normal, "s1.png";
+ }
+ }
+ description {
+ state, "drift" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 3.55556 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 3.55556 1.0;
+ offset, 0 0;
+ }
+ }
+ color, 100 80 60 220;
+ image {
+ normal, "s1.png";
+ }
+ }
+ }
+ /* CLOUD LAYER 2 */
+ part {
+ name, "cloud_2";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 1.47083 1.0;
+ offset, 0 0;
+ }
+ }
+ image {
+ normal, "c2.png";
+ }
+ }
+ description {
+ state, "drift" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 1.47083 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 1.47083 1.0;
+ offset, 0 0;
+ }
+ }
+ image {
+ normal, "c2.png";
+ }
+ }
+ }
+ /* LAND LAYER 2 */
+ part {
+ name, "land_2";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 1.77778 1.0;
+ offset, 0 0;
+ }
+ }
+ color, 90 70 50 230;
+ image {
+ normal, "s2.png";
+ }
+ }
+ description {
+ state, "drift" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 1.77778 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 1.77778 1.0;
+ offset, 0 0;
+ }
+ }
+ color, 90 70 50 230;
+ image {
+ normal, "s2.png";
+ }
+ }
+ }
+ /* CLOUD LAYER 3 */
+ part {
+ name, "cloud_3";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 1.86667 1.0;
+ offset, 0 0;
+ }
+ }
+ image {
+ normal, "c3.png";
+ }
+ }
+ description {
+ state, "drift" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 1.86667 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 1.86667 1.0;
+ offset, 0 0;
+ }
+ }
+ image {
+ normal, "c3.png";
+ }
+ }
+ }
+ /* CLOUD LAYER 4 */
+ part {
+ name, "cloud_4";
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 1.84722 1.0;
+ offset, 0 0;
+ }
+ }
+ image {
+ normal, "c4.png";
+ }
+ }
+ description {
+ state, "drift" 0.0;
+// aspect, 1.5 1.5;
+ rel1 {
+ relative, 0.0 0.0;
+ offset, 0 0;
+ }
+ rel2 {
+ relative, 1.0 1.0;
+ offset, -1 -1;
+ }
+ fill {
+ smooth, 0;
+ origin {
+ relative, 1.84722 0.0;
+ offset, 0 0;
+ }
+ size {
+ relative, 1.84722 1.0;
+ offset, 0 0;
+ }
+ }
+ image {
+ normal, "c4.png";
+ }
+ }
+ }
+ }
+ programs {
+ program {
+ name, "anim_1_land_0";
+ signal, "show";
+ source, "";
+ action, STATE_SET "drift" 0.0;
+ transition, LINEAR 855.0;
+ target, "land_0";
+ after, "anim_2_land_0";
+ }
+ program {
+ name, "anim_2_land_0";
+ signal, "NONE";
+ source, "NONE";
+ action, STATE_SET "default" 0.0;
+ target, "land_0";
+ after, "anim_1_land_0";
+ }
+ program {
+ name, "anim_1_cloud_1";
+ signal, "show";
+ source, "";
+ action, STATE_SET "drift" 0.0;
+ transition, LINEAR 485.0;
+ target, "cloud_1";
+ after, "anim_2_cloud_1";
+ }
+ program {
+ name, "anim_2_cloud_1";
+ signal, "NONE";
+ source, "NONE";
+ action, STATE_SET "default" 0.0;
+ target, "cloud_1";
+ after, "anim_1_cloud_1";
+ }
+ program {
+ name, "anim_1_land_1";
+ signal, "show";
+ source, "";
+ action, STATE_SET "drift" 0.0;
+ transition, LINEAR 425.0;
+ target, "land_1";
+ after, "anim_2_land_1";
+ }
+ program {
+ name, "anim_2_land_1";
+ signal, "NONE";
+ source, "NONE";
+ action, STATE_SET "default" 0.0;
+ target, "land_1";
+ after, "anim_1_land_1";
+ }
+ program {
+ name, "anim_1_cloud_2";
+ signal, "show";
+ source, "";
+ action, STATE_SET "drift" 0.0;
+ transition, LINEAR 65.0;
+ target, "cloud_2";
+ after, "anim_2_cloud_2";
+ }
+ program {
+ name, "anim_2_cloud_2";
+ signal, "NONE";
+ source, "NONE";
+ action, STATE_SET "default" 0.0;
+ target, "cloud_2";
+ after, "anim_1_cloud_2";
+ }
+ program {
+ name, "anim_1_land_2";
+ signal, "show";
+ source, "";
+ action, STATE_SET "drift" 0.0;
+ transition, LINEAR 70.0;
+ target, "land_2";
+ after, "anim_2_land_2";
+ }
+ program {
+ name, "anim_2_land_2";
+ signal, "NONE";
+ source, "NONE";
+ action, STATE_SET "default" 0.0;
+ target, "land_2";
+ after, "anim_1_land_2";
+ }
+ program {
+ name, "anim_1_cloud_3";
+ signal, "show";
+ source, "";
+ action, STATE_SET "drift" 0.0;
+ transition, LINEAR 55.0;
+ target, "cloud_3";
+ after, "anim_2_cloud_3";
+ }
+ program {
+ name, "anim_2_cloud_3";
+ signal, "";
+ source, "";
+ action, STATE_SET "default" 0.0;
+ target, "cloud_3";
+ after, "anim_1_cloud_3";
+ }
+ program {
+ name, "anim_1_cloud_4";
+ signal, "show";
+ source, "";
+ action, STATE_SET "drift" 0.0;
+ transition, LINEAR 25.0;
+ target, "cloud_4";
+ after, "anim_2_cloud_4";
+ }
+ program {
+ name, "anim_2_cloud_4";
+ signal, "";
+ source, "";
+ action, STATE_SET "default" 0.0;
+ target, "cloud_4";
+ after, "anim_1_cloud_4";
+ }
+ }
+ }
+}
diff --git a/test/sky/s0.png b/test/sky/s0.png
new file mode 100644
index 0000000..0f15972
--- /dev/null
+++ b/test/sky/s0.png
Binary files differ
diff --git a/test/sky/s1.png b/test/sky/s1.png
new file mode 100644
index 0000000..e1f1bc7
--- /dev/null
+++ b/test/sky/s1.png
Binary files differ
diff --git a/test/sky/s2.png b/test/sky/s2.png
new file mode 100644
index 0000000..af81024
--- /dev/null
+++ b/test/sky/s2.png
Binary files differ
diff --git a/test/sky/sky.edj b/test/sky/sky.edj
new file mode 100644
index 0000000..0fb8636
--- /dev/null
+++ b/test/sky/sky.edj
Binary files differ