add the forgotten files

This commit is contained in:
Marcel Hollerbach 2020-02-29 18:05:03 +01:00
parent 2155c8c065
commit 797473635a
7430 changed files with 400684 additions and 0 deletions

1
public_html/VERSION Normal file
View File

@ -0,0 +1 @@
2018-04-22b "Greebo"

103
public_html/bin/plugin.php Executable file
View File

@ -0,0 +1,103 @@
#!/usr/bin/php
<?php
use splitbrain\phpcli\CLI;
use splitbrain\phpcli\Colors;
use splitbrain\phpcli\Options;
if(!defined('DOKU_INC')) define('DOKU_INC', realpath(dirname(__FILE__) . '/../') . '/');
define('NOSESSION', 1);
require_once(DOKU_INC . 'inc/init.php');
class PluginCLI extends CLI {
/**
* Register options and arguments on the given $options object
*
* @param Options $options
* @return void
*/
protected function setup(Options $options) {
$options->setHelp('Excecutes Plugin command line tools');
$options->registerArgument('plugin', 'The plugin CLI you want to run. Leave off to see list', false);
}
/**
* Your main program
*
* Arguments and options have been parsed when this is run
*
* @param Options $options
* @return void
*/
protected function main(Options $options) {
global $argv;
$argv = $options->getArgs();
if($argv) {
$plugin = $this->loadPlugin($argv[0]);
if($plugin !== null) {
$plugin->run();
} else {
$this->fatal('Command {cmd} not found.', ['cmd' => $argv[0]]);
}
} else {
echo $options->help();
$this->listPlugins();
}
}
/**
* List available plugins
*/
protected function listPlugins() {
/** @var Doku_Plugin_Controller $plugin_controller */
global $plugin_controller;
echo "\n";
echo "\n";
echo $this->colors->wrap('AVAILABLE PLUGINS:', Colors::C_BROWN);
echo "\n";
$list = $plugin_controller->getList('cli');
sort($list);
if(!count($list)) {
echo $this->colors->wrap(" No plugins providing CLI components available\n", Colors::C_RED);
} else {
$tf = new \splitbrain\phpcli\TableFormatter($this->colors);
foreach($list as $name) {
$plugin = $this->loadPlugin($name);
if($plugin === null) continue;
$info = $plugin->getInfo();
echo $tf->format(
[2, '30%', '*'],
['', $name, $info['desc']],
['', Colors::C_CYAN, '']
);
}
}
}
/**
* Instantiate a CLI plugin
*
* @param string $name
* @return DokuWiki_CLI_Plugin|null
*/
protected
function loadPlugin($name) {
// execute the plugin CLI
$class = "cli_plugin_$name";
if(class_exists($class)) {
return new $class();
}
return null;
}
}
// Main
$cli = new PluginCLI();
$cli->run();

View File

@ -0,0 +1,3 @@
{
"display": "standalone"
}

1
public_html/data/README Normal file
View File

@ -0,0 +1 @@
This is the www content for enlightenment.org

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

View File

@ -0,0 +1,142 @@
#include <Elementary.h>
//Click Callback: print Clicked
static void
_button_click_cb(void *data, Evas_Object *button, void *event_info)
{
elm_object_text_set(button, "Clicked!");
}
//Press callback: print Pressed
static void
_button_press_cb(void * data, Evas_Object *button, void *event_info)
{
elm_object_text_set(button, "Pressed!");
}
//Unpress callback: print Unpressed
static void
_button_unpress_cb(void *data, Evas_Object *button, void *event_info)
{
elm_object_text_set(button, "Unpressed!");
}
//Repeat callback: print number of times callback is called
static void
_button_repeat_cb(void *data, Evas_Object *button, void *event_info)
{
static int count = 0;
char buffer[16];
snprintf(buffer, sizeof(buffer), "Repeat %d", count++);
//print the number of time callback was called
elm_object_text_set(button, buffer);
}
//Unpress callback: print Focused
static void
_button_focused_cb(void * data, Evas_Object *button, void *event_info)
{
elm_object_text_set(button, "Focused");
}
//Unpress callback: print Unfocused
static void
_button_unfocused_cb(void * data, Evas_Object *button, void *event_info)
{
elm_object_text_set(button, "Unfocused");
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win;
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
win = elm_win_util_standard_add("Main", "Hello, World!");
elm_win_autodel_set(win, EINA_TRUE);
//win 400x400
evas_object_resize(win, 400, 400);
/*basic tutorial code*/
//basic text button
Evas_Object *button_text;
button_text = elm_button_add(win);
elm_object_text_set(button_text,"Clik me");
//how a container object should resize a given child within its area
evas_object_size_hint_weight_set(button_text, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
//how to align an object
evas_object_size_hint_align_set(button_text, EVAS_HINT_FILL, 0.5);
evas_object_resize(button_text, 100, 30);
evas_object_show(button_text);
//Basic icon button
Evas_Object *button_icon, *icon;
button_icon = elm_button_add(win);
icon = elm_icon_add(win);
//set the image file and the button as an icon
elm_image_file_set(icon, "icon.png", NULL);
elm_object_part_content_set(button_icon, "icon", icon);
evas_object_size_hint_weight_set(button_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(button_icon, EVAS_HINT_FILL, 0.5);
evas_object_resize(button_icon, 100, 30);
evas_object_move(button_icon, 110, 0);
evas_object_show(button_icon);
//Icon and text button
Evas_Object *button_icon_text, *icon2;
button_icon_text = elm_button_add(win);
icon2 = elm_icon_add(win);
elm_image_file_set(icon2, "icon.png", NULL);
elm_object_part_content_set(button_icon_text, "icon", icon2);
elm_object_text_set(button_icon_text, "Press me");
evas_object_size_hint_weight_set(button_icon_text, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(button_icon_text, EVAS_HINT_FILL, 0.5);
evas_object_resize(button_icon_text, 100, 30);
evas_object_move(button_icon_text, 220, 0);
evas_object_show(button_icon_text);
//Clik event
evas_object_smart_callback_add(button_text, "clicked", _button_click_cb, NULL);
//Press event
evas_object_smart_callback_add(button_icon, "pressed", _button_press_cb, NULL);
//Unpress event
evas_object_smart_callback_add(button_icon, "unpressed", _button_unpress_cb, NULL);
//Get whether the autorepeat feature is enabled.
elm_button_autorepeat_set(button_icon_text, EINA_TRUE);
//Set the initial timeout before the autorepeat event is generated.
elm_button_autorepeat_initial_timeout_set(button_icon_text, 1.0);
//gap between two callbacks
elm_button_autorepeat_gap_timeout_set(button_icon_text, 0.5);
//"repeated": the user pressed the button without releasing it.
evas_object_smart_callback_add(button_icon_text, "repeated", _button_repeat_cb, NULL);
//Focused/unfocused event
Evas_Object *button;
button = elm_button_add(win);
elm_object_text_set(button, "button");
evas_object_resize(button, 100, 30);
evas_object_move(button, 0, 40);
evas_object_show(button);
evas_object_smart_callback_add(button, "focused", _button_focused_cb, NULL);
evas_object_smart_callback_add(button, "unfocused", _button_unfocused_cb, NULL);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,47 @@
#include <Elementary.h>
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win;
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
win = elm_win_util_standard_add("Main", "Hello, World!");
elm_win_autodel_set(win, EINA_TRUE);
//win 400x400
evas_object_resize(win, 400, 400);
/*basic tutorial code*/
//text_label
Evas_Object *label_text;
label_text = elm_label_add(win);
elm_object_text_set(label_text,"My label");
evas_object_color_set(label_text, 0, 0, 255, 255);
evas_object_resize(label_text, 90, 30);
evas_object_show(label_text);
//sliding text
Evas_Object *label_slide;
label_slide = elm_label_add(win);
elm_object_text_set(label_slide, "<b>Some long bold text for our label_slide, that is long but</b>"
"<b>not too long.</b>");
elm_object_style_set(label_slide,"slide_bounce");
elm_label_slide_duration_set(label_slide, 3);
elm_label_slide_mode_set(label_slide, ELM_LABEL_SLIDE_MODE_ALWAYS);
elm_label_slide_go(label_slide);
evas_object_resize(label_slide, 200, 15);
evas_object_move(label_slide,0,40);
evas_object_show(label_slide);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,66 @@
#include <Elementary.h>
static void
_prepend_itembutton_cb(void *data, Evas_Object *obj, void *event_info)
{
Elm_Object_Item *list_it;
Evas_Object *li = obj;
Elm_Object_Item *selected=elm_list_selected_item_get(li);
if(selected == (Elm_Object_Item*)data)
{
static int counter=0;
char label[32];
snprintf(label, sizeof(label), "Item %i", counter++);
list_it = elm_list_item_prepend(li, label, NULL, NULL, NULL, NULL);
elm_list_go(li);
if (!list_it) printf("Error adding item\n");
}
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win, *label, *label2;
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
win = elm_win_util_standard_add("Main", "Hello, World!");
elm_win_autodel_set(win, EINA_TRUE);
evas_object_resize(win, 400, 400);
Evas_Object *list, *icon, *button;
list = elm_list_add(win);
/*elm_list_horizontal_set(list, EINA_TRUE);*/ //uncoment to get horizontal
//size giving scrollbar
evas_object_resize(list, 320, 300);
elm_list_mode_set(list, ELM_LIST_LIMIT);
// elm_scroller_bounce_set(list, EINA_TRUE, EINA_TRUE);
//first item: text
elm_list_item_append(list, "Text item", NULL, NULL, NULL, NULL);
//second item: icon
icon = elm_icon_add(list);
elm_icon_standard_set(icon, "chat");
elm_list_item_append(list, "Icon item", icon, NULL, NULL, NULL);
//third item: button
button = elm_button_add(list);
elm_object_text_set(button, "Button");
Elm_Object_Item *itembutton=elm_list_item_append(list, "Button item", NULL, button, NULL, NULL);
elm_list_go(list);
evas_object_show(list);
evas_object_smart_callback_add(list, "selected", _prepend_itembutton_cb, itembutton);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,177 @@
#include <Elementary.h>
static Eina_Bool
_do_rotate(void *data, double pos)
{
// Get the animation target
Evas_Object *obj = data;
// Declaration of an `Evas_Map`
Evas_Map *m;
// Variables to store the target size and position
int x, y, w, h;
// Getting the size and position of the target
evas_object_geometry_get(obj, &x, &y, &w, &h);
// Creation of an `Evas_Map` of 4 points
m = evas_map_new(4);
// Populate source and destination map points to match exactly object.
evas_map_util_points_populate_from_object(m, obj);
// Create a rotation of 360° with x+(w/2) "x" center and y +(h/2) "y" center.
evas_map_util_rotate(m, 360.0 * pos, x + (w / 2), y + (h / 2));
// Setting the object to "animate" in the `Evas_Map`
evas_object_map_set(obj, m);
// Starting the Animation
evas_object_map_enable_set(obj, EINA_TRUE);
// Free used memory
evas_map_free(m);
return EINA_TRUE;
}
static void
_btn_rotate_cb(void *data, Evas_Object *btn, void *ev)
{
Evas_Object *target = data;
ecore_animator_timeline_add(1, _do_rotate, target);
}
static Eina_Bool
_do_zoom(void *data, double pos)
{
Evas_Object *obj = data;
Evas_Map *m;
int x, y, w, h;
evas_object_geometry_get(obj, &x, &y, &w, &h);
m = evas_map_new(4);
evas_map_util_points_populate_from_object(m, obj);
evas_map_util_zoom(m, 2 * pos, 2 * pos, x , y);
evas_object_map_set(obj, m);
evas_object_map_enable_set(obj, EINA_TRUE);
evas_map_free(m);
return EINA_TRUE;
}
static void _btn_zoom_cb(void *data, Evas_Object *btn, void *ev)
{
Evas_Object *target = data;
ecore_animator_timeline_add(1, _do_zoom, target);
}
static Eina_Bool
_do_3d(void *data, double pos)
{
Evas_Object *obj = data;
Evas_Map *m;
int x, y, w, h;
evas_object_geometry_get(obj, &x, &y, &w, &h);
m = evas_map_new(4);
evas_map_util_points_populate_from_object(m, obj);
evas_map_util_3d_rotate(m, pos * 360, pos * 360, pos * 360, x + (w / 3), y + 60, 0);
evas_object_map_set(obj, m);
evas_object_map_enable_set(obj, EINA_TRUE);
evas_map_free(m);
return EINA_TRUE;
}
static void
_btn_3d_cb(void *data, Evas_Object *btn, void *ev)
{
Evas_Object *target = data;
ecore_animator_timeline_add(1, _do_3d, target);
}
static Eina_Bool
_do_drop(void *data, double pos)
{
Evas_Object *obj = data;
int x, y, w, h;
double frame = pos;
frame = ecore_animator_pos_map(pos, ECORE_POS_MAP_BOUNCE, 2, 4);
evas_object_geometry_get(obj, &x, &y, &w, &h);
evas_object_move(obj, x, 600 * frame);
return EINA_TRUE;
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win, *label, *bt1, *bt2, *bt3, *target;
win = elm_win_util_standard_add("Ecore Animator", "Ecore Animator Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
if (elm_win_wm_rotation_supported_get(win))
{
int rots[4] = { 0, 90, 180, 270 };
elm_win_wm_rotation_available_rotations_set(win, (const int *)(&rots), 4);
}
// Application title
label = elm_label_add(win);
elm_object_text_set(label, "Ecore Animator Tutorial");
evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, label);
evas_object_show(label);
// Animation target
// Setting the image path
char buf[PATH_MAX];
snprintf(buf, sizeof(buf), "icon.png");
// Adding the image
target = elm_image_add(win);
// Setting the image path
if (!elm_image_file_set(target, buf, NULL))
printf("error: could not load image \"%s\"\n", buf);
evas_object_size_hint_weight_set(target, EVAS_HINT_FILL, EVAS_HINT_FILL);
//Moving the image
evas_object_move(target, 130, 100);
//Resizing the image
evas_object_resize(target, 200, 100);
//Showing the image
evas_object_show(target);
// Button 1 : Rotation effect
bt1 = elm_button_add(win);
elm_object_text_set(bt1, "Rotate");
evas_object_size_hint_weight_set(bt1, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_move(bt1, 25, 0);
evas_object_resize(bt1, 90, 70);
evas_object_smart_callback_add(bt1, "clicked", _btn_rotate_cb, target);
evas_object_show(bt1);
// Button 2 : Zoom Effect
bt2 = elm_button_add(win);
elm_object_text_set(bt2, "Zoom");
evas_object_size_hint_weight_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_move(bt2, 315, 0);
evas_object_resize(bt2, 90, 70);
evas_object_smart_callback_add(bt2, "clicked", _btn_zoom_cb, target);
evas_object_show(bt2);
// Button 3 : 3D Rotation Effect
bt3 = elm_button_add(win);
elm_object_text_set(bt3, "3D");
evas_object_size_hint_weight_set(bt3, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_move(bt3, 170, 0);
evas_object_resize(bt3, 90, 70);
evas_object_smart_callback_add(bt3, "clicked", _btn_3d_cb, target);
evas_object_show(bt3);
//drop and bounce effects
ecore_animator_timeline_add(2, _do_drop, bt1);
ecore_animator_timeline_add(2.3, _do_drop, bt2);
ecore_animator_timeline_add(2.5, _do_drop, bt3);
evas_object_resize(win, 480, 800);
evas_object_show(win);
elm_run();
elm_shutdown();
return EXIT_SUCCESS;
}
ELM_MAIN()

View File

@ -0,0 +1,37 @@
#include <Elementary.h>
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win, *layout, *button, *btn_up;
win = elm_win_util_standard_add("Edje Animation", "Edje Animation Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
layout = elm_layout_add(win);
elm_layout_file_set(layout, "edje_animation.edj", "my_layout");
// Creation button in the app window
button = elm_button_add(win);
elm_object_text_set(button, "Rotate");
// Add the button to the edje layout container called "btn/rotate"
elm_object_part_content_set(layout, "btn/rotate", button);
evas_object_show(button);
// Creation a up button in the app window
btn_up = elm_button_add(win);
// Add the button to the edje layout container called "btn/grow"
elm_object_text_set(btn_up, "Grow");
elm_object_part_content_set(layout, "btn/grow", btn_up);
evas_object_show(btn_up);
evas_object_resize(layout, 400, 400);
evas_object_show(layout);
evas_object_resize(win, 400, 400);
evas_object_show(win);
elm_run();
elm_shutdown();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,238 @@
collections {
images
{
image: "image1.png" COMP;
image: "image2.png" COMP;
}
group {
name: "my_layout";
parts {
// An image using image1
part
{
name: "image";
type: IMAGE;
description
{
state: "default" 0.0;
max: 63 63;
min: 63 63;
image { normal: "icon.png"; }
rel1.relative: 0.2 0.0;
rel2.relative: 0.0 0.0;
}
description
{
state: "down-state" 1.0;
inherit: "default" 0.0;
rel1.relative: 0.2 0.92;
rel2.relative: 0.05 0.9;
}
}
part
{
name: "txt_title";
type: TEXT;
mouse_events: 0;
// The default State
description
{
state: "default" 0.0;
align: 0.0 0.0;
rel1 { relative: 0.5 0.0; }
rel2 { relative: 1.0 0.5; }
text
{
font: "Sans";
size: 22;
text: "edje animation";
}
color: 0 0 0 255;
}
// The "Bigger" state
description
{
state: "Bigger" 0.0;
align: 0.0 0.0;
rel1 { relative: 0.0 0.0; }
rel2 { relative: 1.0 0.2; }
text
{
size: 26;
text: "animation terminated";
}
color: 0 0 0 255;
}
}
// Container for the rotate button
part
{
type: SWALLOW;
name: "btn/rotate";
description
{
state: "default" 0.0;
rel1.relative: 0.30 0.9;
rel2.relative: 0.50 0.99;
}
}
// Container for the grow button
part
{
type: SWALLOW;
name: "btn/grow";
description
{
state: "default" 0.0;
rel1.relative: 1.02 0;
rel1.to: "btn/rotate";
rel2.relative: 2.02 1;
rel2.to: "btn/rotate";
}
}
// The animation target
part
{
name: "atarget";
type: IMAGE;
// Default state
description
{
state: "default" 0.0;
image { normal: "c1.svg"; }
color: 255 0 0 255; /* red */
rel1 { relative: 0.3 0.3; }
rel2 { relative: 0.7 0.7; }
}
// The rotate state
description
{
state: "rotate" 0.0;
inherit: "default" 0.0;
map
{
//Enable Map on the part
on: 1;
//Enable smooth rendering
smooth: 1;
//Enable perspective
perspective_on: 1;
//Apply rotations on the part
rotation.x: 0;
rotation.y: 0;
rotation.z: 0;
}
color: 0 255 0 255; /* green */
}
description
{
state: "rotate" 1.0;
inherit: "rotate" 0.0;
map.rotation.z: 360;
}
// The grow state
description {
state: "grow" 0.0;
inherit: "default" 0.0;
color: 0 0 255 255; /* blue */
rel1
{
relative: 0.2 0.2;
offset: 0.3 0.3;
}
rel2
{
relative: 0.7 0.4;
offset: 0.3 0.3;
}
}
}
}
programs {
// Icon drop animation
program
{
name: "animation,state1";
source: "";
signal: "load";
action: STATE_SET "down-state" 1.0;
target: "image";
transition: BOUNCE 2.5 0.0 5.0;
}
// Make the title bigger
program
{
name: "animation,bigtitle";
source: "";
signal: "load";
action: STATE_SET "Bigger" 1.0;
target: "txt_title";
transition: LINEAR 5.0;
}
// Make the title go back to normal
program
{
name: "animation,normaltitle";
source: "image";
signal: "mouse,clicked,*";
action: STATE_SET "default" 1.0;
target: "txt_title";
transition: LINEAR 0.5;
}
// Change the color of target to green
program
{
name: "rotate,target";
source: "btn/rotate";
signal: "mouse,clicked,*";
action: STATE_SET "rotate" 0.0;
target: "atarget";
transition: SIN 0.2;
after: "rotate,target,2";
}
// Rotate 360°
program
{
name: "rotate,target,2";
action: STATE_SET "rotate" 1.0;
target: "atarget";
transition: SIN 0.7;
after: "rotate,end";
}
// Go back to the normal.
program
{
name: "rotate,end";
action: STATE_SET "rotate" 0.0;
target: "atarget";
transition: LINEAR 0.2;
}
// Grow the target and go back to normal state
program
{
name: "grow,target";
source: "btn/grow";
signal: "mouse,clicked,*";
action: STATE_SET "grow" 1.0;
after: "go,default";
target: "atarget";
transition: SINUSOIDAL 1.0;
}
// Go back to normal (default) state
program
{
name: "go,default";
action: STATE_SET "default" 1.0;
target: "atarget";
transition: SIN 1.0;
}
}
}
}

View File

@ -0,0 +1,376 @@
#include <Elementary.h>
typedef struct _Animations
{
Evas_Object *button;
Evas_Object *buttonbck;
float *rt_angle;
float *zto;
float *zfrom;
} Animations;
/**************
* Resize
*************/
static void
_resize_effect(Evas_Object *obj)
{
// Elementary Transition declaration and creation
Elm_Transit *trans = elm_transit_add();
// Adding the transition target object
elm_transit_object_add(trans, obj);
// Setting the resize effect
elm_transit_effect_resizing_add(trans, 100, 50, 300, 150);
// Setting the transition duration
elm_transit_duration_set(trans, 3.0);
// Starting the transition
elm_transit_go(trans);
}
static void
_btn_resize_cb(void *data, Evas_Object *btn, void *ev)
{
Animations *anim = (Animations *)data;
// Starting the rotation effect 360 degrees
//evas_object_resize(button, 100, 50);
elm_object_text_set(anim->button, "Resize");
_resize_effect(anim->button);
}
/*************
* Rotation
*************/
static void
_rotation_effect(Evas_Object *obj, float angle)
{
Elm_Transit *trans = elm_transit_add();
elm_transit_object_add(trans, obj);
// rotates the object from its original angle to given degrees to the right
elm_transit_effect_rotation_add(trans, 0.0, angle);
elm_transit_duration_set(trans, 2.0);
elm_transit_go(trans);
}
static void
_btn_rotate_cb(void *data, Evas_Object *btn, void *ev)
{
Animations *anim = (Animations *)data;
// Setting the button text
elm_object_text_set(anim->button, "Rotate");
_rotation_effect(anim->button, *(anim->rt_angle));
}
/**************
* Zoom
*************/
static void
_zoom_effect(Evas_Object *obj, float from, float to)
{
Elm_Transit *trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_effect_zoom_add(trans, from, to);
elm_transit_duration_set(trans, 2.0);
elm_transit_go(trans);
}
static void
_btn_zoom_cb(void *data, Evas_Object *btn, void *ev)
{
Animations *anim = (Animations *)data;
// Starting the rotation effect 360 degrees
//evas_object_resize(anim->button, 100, 50);
elm_object_text_set(anim->button, "Zoom");
_zoom_effect(anim->button, *(anim->zfrom), *(anim->zto));
}
/**************
* Flip
*************/
static void
_flip_effect(Evas_Object *obj, Evas_Object *obj2)
{
Elm_Transit *trans;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_object_add(trans, obj2);
elm_transit_effect_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_X, EINA_TRUE);
elm_transit_duration_set(trans, 3.0);
elm_transit_go(trans);
}
static void
_btn_flip_cb(void *data, Evas_Object *btn, void *ev)
{
Animations *anim = (Animations *)data;
// Setting the button text
elm_object_text_set(anim->button, "Flip");
_flip_effect(anim->button, anim->buttonbck);
}
/**************
* Blend
*************/
static void
_blend_effect(Evas_Object *obj, Evas_Object *obj2)
{
Elm_Transit *trans;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_object_add(trans, obj2);
elm_transit_effect_blend_add(trans);
elm_transit_duration_set(trans, 3.0);
elm_transit_go(trans);
}
static void
_btn_blend_cb(void *data, Evas_Object *btn, void *ev)
{
Animations *anim = (Animations *)data;
// Setting the button text
elm_object_text_set(anim->button, "Blend");
_blend_effect(anim->button, anim->buttonbck);
}
/**************
* Fade
*************/
static void
_fade_effect(Evas_Object *obj, Evas_Object *obj2)
{
Elm_Transit *trans;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_object_add(trans, obj2);
elm_transit_effect_fade_add(trans);
elm_transit_duration_set(trans, 3.0);
elm_transit_go(trans);
}
static void
_btn_fade_cb(void *data, Evas_Object *btn, void *ev)
{
Animations *anim = (Animations *)data;
// Setting the button text
elm_object_text_set(anim->button, "Fade");
_fade_effect(anim->button, anim->buttonbck);
}
/**************
* FlipY
*************/
static void
_flip_y_effect(Evas_Object *obj, Evas_Object *obj2)
{
Elm_Transit *trans;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_object_add(trans, obj2);
elm_transit_effect_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE);
elm_transit_duration_set(trans, 3.0);
elm_transit_go(trans);
}
static void
_btn_flip_y_cb(void *data, Evas_Object *btn, void *ev)
{
Animations *anim = (Animations *)data;
// Setting the button text
elm_object_text_set(anim->button, "Flip 2");
_flip_y_effect(anim->button, anim->buttonbck);
}
/**************
* Wipe
*************/
static void
_wipe_effect(Evas_Object *obj)
{
Elm_Transit *trans;
trans = elm_transit_add();
elm_transit_object_add(trans, obj);
elm_transit_effect_wipe_add(trans, ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE, ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT);
elm_transit_duration_set(trans, 3.0);
elm_transit_go(trans);
}
static void
_btn_wipe_cb(void *data, Evas_Object *btn, void *ev)
{
Animations *anim = (Animations *)data;
// Starting the rotation effect 360 degrees
//evas_object_resize(anim->button, 100, 50);
// Setting the button text
elm_object_text_set(anim->button, "Wipe");
_wipe_effect(anim->button);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win, *label, *hbox, *left_vbox, *center_vbox, *right_vbox;
Evas_Object *button, *buttonbck;
float rt_angle, zto, zfrom;
win = elm_win_util_standard_add("Elementary Animations", "Elementary Animations Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
if (elm_win_wm_rotation_supported_get(win))
{
int rots[4] = { 0, 90, 180, 270 };
elm_win_wm_rotation_available_rotations_set(win, (const int *)(&rots), 4);
}
//set the values for animations
rt_angle = 360.0;
zfrom = 1.0;
zto = 2.0;
/* Label*/
label = elm_label_add(win);
elm_object_text_set(label, "Effects Tutorial");
evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_move(label, 100, 0);
evas_object_resize(label, 200, 50);
evas_object_show(label);
/* Creation a button in the app window*/
button = elm_button_add(win);
evas_object_move(button, 100, 100); // Moving the button to x=50 y=100
evas_object_resize(button, 200, 50); // Resizing the button 100x50
evas_object_show(button); // Showing the button
/* Creation a back button in the app window*/
buttonbck = elm_button_add(win);
elm_object_text_set(buttonbck, "Button back");
evas_object_move(buttonbck, 100, 100);
evas_object_resize(buttonbck, 200, 50);
/*set the structure of pointeurs*/
Animations anim = { button, buttonbck, &rt_angle, &zto, &zfrom };
/***********************************************************************************************************************
*Boxes*
***********************************************************************************************************************/
// Creation of the main container box
hbox = elm_box_add(win);
elm_box_horizontal_set(hbox, EINA_TRUE);
elm_box_homogeneous_set(hbox, EINA_TRUE);
evas_object_move(hbox, 130, 200);
evas_object_show(hbox);
// Creation of the first column
left_vbox = elm_box_add(hbox);
elm_box_horizontal_set(left_vbox, EINA_FALSE);
elm_box_homogeneous_set(left_vbox, EINA_TRUE);
evas_object_show(left_vbox);
elm_box_pack_start(hbox, left_vbox);
// Creation of the second column
center_vbox = elm_box_add(hbox);
elm_box_horizontal_set(center_vbox, EINA_FALSE);
elm_box_homogeneous_set(center_vbox, EINA_TRUE);
evas_object_show(center_vbox);
elm_box_pack_end(hbox, center_vbox);
// Creation of the last column
right_vbox = elm_box_add(hbox);
elm_box_horizontal_set(right_vbox, EINA_FALSE);
elm_box_homogeneous_set(right_vbox, EINA_TRUE);
evas_object_show(right_vbox);
elm_box_pack_end(hbox, right_vbox);
/***********************************************************************************************************************
*Buttons*
***********************************************************************************************************************/
// The resize button
Evas_Object *btn_resize = elm_button_add(win);
elm_object_text_set(btn_resize, "Resize"); // Setting the button text
evas_object_size_hint_weight_set(btn_resize, EVAS_HINT_FILL, EVAS_HINT_FILL); // Setting the hint weight policy
evas_object_show(btn_resize); // Showing the button
evas_object_smart_callback_add(btn_resize, "clicked", _btn_resize_cb, &anim); // Setting the "clicked" callback
elm_box_pack_end(left_vbox, btn_resize); // Adding the button to the first column
// The rotation button
Evas_Object *btn_rotate = elm_button_add(win);
elm_object_text_set(btn_rotate, "Rotate");
evas_object_size_hint_weight_set(btn_rotate, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(btn_rotate);
evas_object_smart_callback_add(btn_rotate, "clicked", _btn_rotate_cb, &anim);
elm_box_pack_end(center_vbox, btn_rotate);
// The zoom button
Evas_Object *btn_zoom = elm_button_add(win);
elm_object_text_set(btn_zoom, "Zoom");
evas_object_size_hint_weight_set(btn_zoom, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(btn_zoom);
evas_object_smart_callback_add(btn_zoom, "clicked", _btn_zoom_cb, &anim);
elm_box_pack_end(right_vbox, btn_zoom);
// The flip button
Evas_Object *btn_flip = elm_button_add(win);
elm_object_text_set(btn_flip, "Flip x");
evas_object_size_hint_weight_set(btn_flip, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(btn_flip);
evas_object_smart_callback_add(btn_flip, "clicked", _btn_flip_cb, &anim);
elm_box_pack_end(left_vbox, btn_flip);
// The blend button
Evas_Object *btn_blend = elm_button_add(win);
elm_object_text_set(btn_blend, "Blend");
evas_object_size_hint_weight_set(btn_blend, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(btn_blend);
evas_object_smart_callback_add(btn_blend, "clicked", _btn_blend_cb, &anim);
elm_box_pack_end(center_vbox, btn_blend);
// The fade button
Evas_Object *btn_fade = elm_button_add(win);
elm_object_text_set(btn_fade, "Fade");
evas_object_size_hint_weight_set(btn_fade, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(btn_fade);
evas_object_smart_callback_add(btn_fade, "clicked", _btn_fade_cb, &anim);
elm_box_pack_end(right_vbox, btn_fade);
// The flip y button
Evas_Object *btn_flip_y = elm_button_add(win);
elm_object_text_set(btn_flip_y, "Flip y");
evas_object_size_hint_weight_set(btn_flip_y, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(btn_flip_y);
evas_object_smart_callback_add(btn_flip_y, "clicked", _btn_flip_y_cb, &anim);
elm_box_pack_end(left_vbox, btn_flip_y);
// The wipe button
Evas_Object *btn_wipe = elm_button_add(win);
elm_object_text_set(btn_wipe, "Wipe");
evas_object_size_hint_weight_set(btn_wipe, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(btn_wipe);
evas_object_smart_callback_add(btn_wipe, "clicked", _btn_wipe_cb, &anim);
elm_box_pack_end(right_vbox, btn_wipe);
evas_object_resize(win, 400, 400);
evas_object_show(win);
elm_run();
elm_shutdown();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,248 @@
#include <Elementary.h>
/* store naviframe pointeurs */
typedef struct _Navi
{
Evas_Object *navi;
Evas_Object *navi2;
} Navi;
static void
rotation_cb(void *data, Evas_Object *obj, void *event_info)
{
Navi *navis = data;
Evas_Object *navi=navis->navi;
Elm_Transit *transit = elm_transit_add();
// 360 degree rotation effect in the clock-wise direction
elm_transit_object_add(transit, navi);
elm_transit_effect_rotation_add(transit, 0, 360);
elm_transit_duration_set(transit, 1);
elm_transit_go(transit);
}
static void
zoom_cb(void *data, Evas_Object *obj, void *event_info)
{
Navi *navis = data;
Evas_Object *navi=navis->navi;
// Zoom out to scale 0.6
Elm_Transit *transit = elm_transit_add();
elm_transit_smooth_set(transit, EINA_FALSE);
elm_transit_object_add(transit, navi);
elm_transit_effect_zoom_add(transit, 1.0, 0.4);
elm_transit_duration_set(transit, 0.5);
// Zoom in to the original size
Elm_Transit *transit2 = elm_transit_add();
elm_transit_smooth_set(transit2, EINA_FALSE);
elm_transit_object_add(transit2, navi);
elm_transit_effect_zoom_add(transit2, 0.4, 1.0);
elm_transit_duration_set(transit2, 0.5);
elm_transit_chain_transit_add(transit, transit2);
elm_transit_go(transit);
}
static void
blend_cb(void *data, Evas_Object *obj, void *event_info)
{
Navi *navis = data;
Evas_Object *navi=navis->navi;
Evas_Object *navi2=navis->navi2;
Elm_Transit *transit = elm_transit_add();
elm_transit_object_add(transit, navi);
elm_transit_object_add(transit, navi2);
elm_transit_effect_blend_add(transit);
elm_transit_duration_set(transit, 3.0);
elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
elm_transit_go(transit);
}
static void
fade_cb(void *data, Evas_Object *obj, void *event_info)
{
Navi *navis = data;
Evas_Object *navi=navis->navi;
Evas_Object *navi2=navis->navi2;
Elm_Transit *transit = elm_transit_add();
elm_transit_object_add(transit, navi);
elm_transit_object_add(transit, navi2);
elm_transit_effect_fade_add(transit);
elm_transit_duration_set(transit, 3.0);
elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
elm_transit_go(transit);
}
static void
flip_cb(void *data, Evas_Object *obj, void *event_info)
{
Navi *navis = data;
Evas_Object *navi=navis->navi;
Evas_Object *navi2=navis->navi2;
Elm_Transit *transit = elm_transit_add();
elm_transit_object_add(transit, navi);
elm_transit_object_add(transit, navi2);
elm_transit_effect_flip_add(transit, ELM_TRANSIT_EFFECT_FLIP_AXIS_X, EINA_TRUE);
elm_transit_duration_set(transit, 3.0);
elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
elm_transit_go(transit);
}
static void
resizable_flip_cb(void *data, Evas_Object *obj, void *event_info)
{
Navi *navis = data;
Evas_Object *navi=navis->navi;
Evas_Object *navi2=navis->navi2;
Elm_Transit *transit = elm_transit_add();
elm_transit_object_add(transit, navi);
elm_transit_object_add(transit, navi2);
elm_transit_effect_resizable_flip_add(transit, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE);
elm_transit_duration_set(transit, 3.0);
elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
elm_transit_go(transit);
}
static void
wipe_cb(void *data, Evas_Object *obj, void *event_info)
{
Navi *navis = data;
Evas_Object *navi=navis->navi;
Elm_Transit *transit = elm_transit_add();
elm_transit_object_add(transit, navi);
elm_transit_effect_wipe_add(transit, ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE, ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT);
elm_transit_duration_set(transit, 3.0);
elm_transit_go(transit);
}
static void
translation_cb(void *data, Evas_Object *obj, void *event_info)
{
Navi *navis = data;
Evas_Object *navi=navis->navi;
Elm_Transit *transit = elm_transit_add();
elm_transit_object_add(transit, navi);
elm_transit_effect_translation_add(transit, 0, 0, 50, 100);
elm_transit_duration_set(transit, 3.0);
elm_transit_go(transit);
}
static void
color_cb(void *data, Evas_Object *obj, void *event_info)
{
Navi *navis = data;
Evas_Object *navi=navis->navi;
Elm_Transit *transit = elm_transit_add();
elm_transit_object_add(transit, navi);
elm_transit_effect_color_add(transit,0,0,0,0,255,255,0,255);
elm_transit_duration_set(transit, 3.0);
elm_transit_go(transit);
}
static void
custom_cb(void *data, Evas_Object *obj, void *event_info)
{
Navi *navis = data;
Evas_Object *navi=navis->navi;
Evas_Object *navi2=navis->navi2;
Elm_Transit *transit = elm_transit_add();
elm_transit_object_add(transit, navi);
elm_transit_object_add(transit, navi2);
elm_transit_effect_color_add(transit,0,0,0,0,255,255,0,255);
elm_transit_effect_flip_add(transit, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE);
elm_transit_duration_set(transit, 3.0);
Elm_Transit *transit2 = elm_transit_add();
elm_transit_object_add(transit2, navi2);
elm_transit_object_add(transit2, navi);
elm_transit_effect_color_add(transit2,0,0,0,0,180,255,0,255);
elm_transit_effect_zoom_add(transit2, 1.0, 0.1);
elm_transit_duration_set(transit2, 3.0);
elm_transit_chain_transit_add(transit, transit2);
elm_transit_go(transit);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win, *navi, *navi2, *list, *list2;
win = elm_win_util_standard_add("Transition", "Transition Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
if (elm_win_wm_rotation_supported_get(win))
{
int rots[4] = { 0, 90, 180, 270 };
elm_win_wm_rotation_available_rotations_set(win, (const int *)(&rots), 4);
}
Elm_Object_Item *nf_it, *nf_it2;
/* add two naviframes and two lists to switch
* from one to another in some transitions */
navi2 = elm_naviframe_add(win);
navi = elm_naviframe_add(win);
list = elm_list_add(navi);
list2 = elm_list_add(navi2);
elm_list_mode_set(list, ELM_LIST_COMPRESS);
elm_list_mode_set(list2, ELM_LIST_COMPRESS);
/* store naviframe pointeurs to pass them
* in data pointeur parameter */
Navi navis = {navi, navi2};
Navi navis2 = {navi2, navi};
/* first list items */
elm_list_item_append(list, "Blend", NULL, NULL, blend_cb, &navis);
elm_list_item_append(list, "Color", NULL, NULL, color_cb, &navis);
elm_list_item_append(list, "Fade", NULL, NULL, fade_cb, &navis);
elm_list_item_append(list, "Flip", NULL, NULL, flip_cb, &navis);
elm_list_item_append(list, "Rotation", NULL, NULL, rotation_cb, &navis);
elm_list_item_append(list, "ResizableFlip", NULL, NULL, resizable_flip_cb, &navis);
elm_list_item_append(list, "Translation", NULL, NULL, translation_cb, &navis);
elm_list_item_append(list, "Wipe", NULL, NULL, wipe_cb, &navis);
elm_list_item_append(list, "Zoom", NULL, NULL, zoom_cb, &navis);
elm_list_item_append(list, "Custom", NULL, NULL, custom_cb, &navis);
elm_list_go(list);
/* second list items*/
elm_list_item_append(list2, "Blend2", NULL, NULL, blend_cb, &navis2);
elm_list_item_append(list2, "Color2", NULL, NULL, color_cb, &navis2);
elm_list_item_append(list2, "Fade2", NULL, NULL, fade_cb, &navis2);
elm_list_item_append(list2, "Flip2", NULL, NULL, flip_cb, &navis2);
elm_list_item_append(list2, "Rotation2", NULL, NULL, rotation_cb, &navis2);
elm_list_item_append(list2, "ResizableFlip2", NULL, NULL, resizable_flip_cb, &navis2);
elm_list_item_append(list2, "Translation2", NULL, NULL, translation_cb, &navis2);
elm_list_item_append(list2, "Wipe2", NULL, NULL, wipe_cb, &navis2);
elm_list_item_append(list2, "Zoom2", NULL, NULL, zoom_cb, &navis2);
elm_list_item_append(list2, "Custom2", NULL, NULL, custom_cb, &navis2);
elm_list_go(list2);
nf_it = elm_naviframe_item_push(navi, "Transit", NULL, NULL, list, NULL);
nf_it2 = elm_naviframe_item_push(navi2, "Transit2", NULL, NULL, list2, NULL);
evas_object_show(navi);
evas_object_show(navi2);
evas_object_show(list);
evas_object_show(list2);
evas_object_resize(navi2, 400, 400);
evas_object_resize(navi, 400, 400);
evas_object_resize(win, 400, 400);
evas_object_show(win);
elm_run();
elm_shutdown();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,203 @@
#include <Elementary.h>
#define ICON_PATH "<your_path_to_contact_icons_directory>"
typedef struct _Contact Contact;
struct _Contact
{
const char *name;
const char *mobile;
const char *address;
const char *email;
const char *icon;
};
static Contact contacts[] =
{
{"Alexander Holmes", "+1234567896", "", "alexander_holmes@tizen.org", "c1.svg"},
{"Lara Alvaréz", "+9876543216", "", "lara_alvares@tizen.org", "c2.svg"},
{"Aksel Møller", "+1679432846", "", "aksel_moller@tizen.org", "c3.svg"},
{"Anir Amghar", "+1679432846", "", "anir_amghar@tizen.org", "c4.svg"},
{"Noémie Cordier", "+1679432846", "", "noemie_cordier@tizen.org", "c5.svg"},
{"Henry Thompson", "+1679432846", "", "henry_thompson@tizen.org", "c6.svg"},
{"Mai Phan", "+1679432846", "", "mai_phan@tizen.org", "c7.svg"},
};
static const char *form_items[] =
{
"name :", "mobile :", "address :", "email :"
};
static Evas_Object *nav;
static Elm_Genlist_Item_Class *itc = NULL;
//contact form called in item callback
static Evas_Object *
_create_contact_form(Evas_Object *parent, Contact *contact)
{
//Create the vbox
Evas_Object *vbox, *ic;
int i;
vbox = elm_box_add(parent);
elm_box_align_set(vbox, 0, 0);
evas_object_show(vbox);
//add the icon to the vbox
ic = elm_icon_add(vbox);
char filename[PATH_MAX];
snprintf(filename, sizeof(filename), "%s%s", ICON_PATH, contact->icon);
elm_image_file_set(ic, filename, NULL);
evas_object_size_hint_min_set(ic, 96, 96);
evas_object_show(ic);
elm_box_pack_end(vbox, ic);
//create the entries for contact information
for (i = 0; i < EINA_C_ARRAY_LENGTH(form_items); i++)
{
Evas_Object *hbox, *label, *edit;
const char *str;
//hbox
hbox = elm_box_add(vbox);
elm_box_horizontal_set(hbox, EINA_TRUE);
elm_box_padding_set(hbox, 32, 32);
evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, 0);
evas_object_show(hbox);
//label
label = elm_label_add(hbox);
elm_object_text_set(label, form_items[i]);
evas_object_size_hint_weight_set(label, 0, 0);
evas_object_size_hint_align_set(label, 0, 0);
evas_object_show(label);
//edit
edit = elm_entry_add(hbox);
if(!strcmp(form_items[i], "name :")) str = contact->name;
else if(!strcmp(form_items[i], "mobile :")) str = contact->mobile;
else if(!strcmp(form_items[i], "address :")) str = contact->address;
else if(!strcmp(form_items[i], "email :")) str = contact->email;
else str = NULL;
elm_object_text_set(edit, str);
evas_object_size_hint_weight_set(edit, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(edit, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(edit);
elm_box_pack_end(hbox, label);
elm_box_pack_end(hbox, edit);
elm_box_pack_end(vbox, hbox);
}
return vbox;
}
//item callback
static void
_contact_selected_cb(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *form;
Contact *contact = data;
//Create a new contact form
form = _create_contact_form(nav, contact);
//Push the form on top of naviframe
elm_naviframe_item_push(nav, NULL, NULL, NULL, form, NULL);
}
//set item text
static char *
_genlist_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part)
{
Contact *contact = data;
//Return a new allocated string for the contact name
return strdup(contact->name);
}
//set item content
static Evas_Object *
_genlist_content_get(void *data, Evas_Object *obj, const char *part)
{
Contact *contact = data;
//Test which part is being created
if (!strcmp(part, "elm.swallow.icon"))
{
char filename[PATH_MAX];
// Create a new icon
Evas_Object *ic = elm_icon_add(obj);
// Set the filename of the file which is to be loaded
snprintf(filename, sizeof(filename), "%s%s", ICON_PATH, contact->icon);
elm_image_file_set(ic, filename, NULL);
// Keep the ratio squared
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
// Return the icon
return ic;
}
return NULL;
}
static Evas_Object *
_create_contact_list(Evas_Object *parent)
{
Evas_Object *list;
int i;
//Create a new genlist
list = elm_genlist_add(parent);
evas_object_show(list);
// Create a new item class for the genlist
itc = elm_genlist_item_class_new();
itc->item_style = "default";
// Set the callback which will be used when the genlist text will be created
itc->func.text_get = _genlist_text_get;
// Set the callback wich will be used when the content of the item will be created
itc->func.content_get = _genlist_content_get;
itc->func.state_get = NULL;
itc->func.del = NULL;
// Create a genlist item for each item in the contacts array
for (i = 0; i < EINA_C_ARRAY_LENGTH(contacts); i++)
{
// Append the item, add a callback when the item is selected, and use the
// current contact item as data pointer for the callbacks.
elm_genlist_item_append(
list, itc,
&contacts[i], // Item data
NULL, // Parent item for trees, NULL if none
ELM_GENLIST_ITEM_NONE, // Item type; this is the common one
_contact_selected_cb, // Callback on selection of the item
&contacts[i] // Data for that callback function
);
}
return list;
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win;
win = elm_win_util_standard_add("Form", "Form Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
//win 400x400 px
evas_object_resize(win, 400, 400);
//Create the naviframe
nav = elm_naviframe_add(win);
evas_object_size_hint_weight_set(nav, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, nav);
evas_object_show(nav);
// Create the list of contacts
Evas_Object *list = _create_contact_list(win);
// Push the list on top of the naviframe
elm_naviframe_item_push(nav, NULL, NULL, NULL, list, NULL);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,139 @@
#include <Elementary.h>
static char *
_genlist_text_get_size(void *data, Evas_Object *obj , const char *part)
{
char buf[20];
snprintf(buf, sizeof(buf), "Entry %d", (int)(uintptr_t)data);
return strdup(buf);
}
static char *
_genlist_text_get_nosize(void *data, Evas_Object *obj , const char *part)
{
char buf[20];
snprintf(buf, sizeof(buf), "OHOHO %d", (int)(uintptr_t)data);
return strdup(buf);
}
static Evas_Object *
_genlist_content_get_bg(void *data, Evas_Object *obj, const char *part)
{
int i = (int) (uintptr_t) data;
Evas_Object *bg = elm_bg_add(obj);
elm_bg_color_set(bg, 255 * cos(i / (double) 10), 0, i % 255);
return bg;
}
static void
_tree_item_expand_request(void *data, Evas_Object *o, void *event_info)
{
Elm_Object_Item *it = (Elm_Object_Item*) event_info;
elm_genlist_item_item_class_update(it, data);
elm_genlist_item_expanded_set(it, EINA_TRUE);
}
static void
_tree_item_contract_request(void *data, Evas_Object *o, void *event_info)
{
Elm_Object_Item *it = (Elm_Object_Item*) event_info;
elm_genlist_item_item_class_update(it, data);
elm_genlist_item_expanded_set(it, EINA_FALSE);
}
static void
_tree_item_expanded(void *data, Evas_Object *o, void *event_info)
{
Elm_Object_Item *it_parent = (Elm_Object_Item*) event_info;
int i_parent = (int)(uintptr_t)elm_object_item_data_get(it_parent);
Elm_Object_Item *list = o;
Elm_Genlist_Item_Class *itc = data;
int i;
for (i = 0; i < 10; i++)
{
elm_genlist_item_append(list, itc,
(void *)(uintptr_t) (i + i_parent),
it_parent,
ELM_GENLIST_ITEM_NONE,
NULL,
NULL
);
}
}
static void
_tree_item_contracted(void *data, Evas_Object *o, void *event_info)
{
Elm_Object_Item *it_parent = (Elm_Object_Item*) event_info;
elm_genlist_item_subitems_clear(it_parent);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win;
win = elm_win_util_standard_add("Genlist", "Genlist Basic Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
//win 400x400 px
evas_object_resize(win, 400, 400);
Evas_Object *list;
list = elm_genlist_add(win);
evas_object_resize(list, 400, 400);
Elm_Genlist_Item_Class *_itc_child = elm_genlist_item_class_new();
_itc_child->item_style = "default_style";
_itc_child->func.text_get = _genlist_text_get_size;
_itc_child->func.content_get = _genlist_content_get_bg;
_itc_child->func.state_get = NULL;
_itc_child->func.del = NULL;
Elm_Genlist_Item_Class *_itc_parent = elm_genlist_item_class_new();
_itc_parent->item_style = "default_style";
_itc_parent->func.text_get = _genlist_text_get_nosize;
_itc_parent->func.content_get = _genlist_content_get_bg;
_itc_parent->func.state_get = NULL;
_itc_parent->func.del = NULL;
int i,j;
Elm_Object_Item *it = NULL;
for (i = 0; i < 100; i++)
{
it = elm_genlist_item_append(list, _itc_parent,
(void *)(uintptr_t) (10 * i),
NULL,
ELM_GENLIST_ITEM_TREE,
NULL,
NULL
);
}
evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_smart_callback_add(list, "expand,request",
_tree_item_expand_request, _itc_parent);
evas_object_smart_callback_add(list, "expanded", _tree_item_expanded,
_itc_child);
evas_object_smart_callback_add(list, "contract,request",
_tree_item_contract_request, _itc_child);
evas_object_smart_callback_add(list, "contracted", _tree_item_contracted,
NULL);
evas_object_show(list);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,96 @@
#include <Elementary.h>
static char *
_genlist_text_get(void *data, Evas_Object *obj , const char *part)
{
if (strcmp(part, "elm.text") == 0)
{
char *buf = malloc(16);
snprintf(buf, 16, "Entry %d.", (int)(uintptr_t)data);
return buf;
}
else return NULL;
}
static Evas_Object *
_genlist_content_get(void *data, Evas_Object *obj, const char *part)
{
int i = (int) (uintptr_t) data;
if (strcmp(part, "elm.swallow.icon") == 0)
{
Evas_Object *bg = elm_bg_add(obj);
elm_bg_color_set(bg, 255 * cos(i / (double) 10), 0, i % 255);
return bg;
}
else if (strcmp(part, "elm.swallow.end") == 0)
{
Evas_Object *bg = elm_bg_add(obj);
elm_bg_color_set(bg, 0, 255 * sin(i / (double) 10), i % 255);
return bg;
}
else return NULL;
}
static void
_genlist_selected_cb(void *data, Evas_Object *obj, void *event_info)
{
Elm_Object_Item *it = (Elm_Object_Item*) event_info;
elm_genlist_item_item_class_update(it, data);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win;
win = elm_win_util_standard_add("Genlist", "Genlist Basic Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
//win 400x400 px
evas_object_resize(win, 400, 400);
//GENLIST here
Evas_Object *list;
list = elm_genlist_add(win);
Elm_Genlist_Item_Class *_itc = elm_genlist_item_class_new();
_itc->item_style = "default";
_itc->func.text_get = _genlist_text_get;
_itc->func.content_get = _genlist_content_get;
_itc->func.state_get = NULL;
_itc->func.del = NULL;
Elm_Genlist_Item_Class *_itc2 = elm_genlist_item_class_new();
_itc2->item_style = "group_index";
_itc2->func.text_get = _genlist_text_get;
_itc2->func.content_get = _genlist_content_get;
_itc2->func.state_get = NULL;
_itc2->func.del = NULL;
int i=0;
for (i=0; i<20; i++)
{
elm_genlist_item_append(list,
_itc,
(void *)(uintptr_t) i, // Item data
NULL, // Parent item for trees, NULL if none
ELM_GENLIST_ITEM_NONE, // Item type; this is the common one
_genlist_selected_cb, // Callback on selection of the item
_itc2 // Data for that callback function
);
}
evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, list);
evas_object_show(list);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,669 @@
#include <Elementary.h>
#include <Evas_GL.h>
typedef struct _GLData GLData;
// GL related data here..
struct _GLData
{
Evas_GL_API *glapi;
GLuint program;
GLuint vtx_shader;
GLuint fgmt_shader;
GLuint vbo;
GLuint vertexID;
GLuint colorID;
GLuint mvpLoc;
GLuint positionLoc;
GLuint colorLoc;
GLfloat model[16], mvp[16];
GLfloat view[16];
GLfloat xangle;
GLfloat yangle;
GLfloat zangle;
Eina_Bool mouse_down : 1;
Eina_Bool initialized : 1;
Evas_Object *slx;
Evas_Object *sly;
Evas_Object *slz;
float slx_value;
float sly_value;
float slz_value;
};
const float unit_matrix[] =
{
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
static const float vertices[] =
{
// Front
-0.5f, 0.5f, 0.5f,
-0.5f, -0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
-0.5f, -0.5f, 0.5f,
0.5f, -0.5f, 0.5f,
// Right
0.5f, 0.5f, 0.5f,
0.5f, -0.5f, 0.5f,
0.5f, 0.5f, -0.5f,
0.5f, 0.5f, -0.5f,
0.5f, -0.5f, 0.5f,
0.5f, -0.5f, -0.5f,
// Back
0.5f, 0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
-0.5f, 0.5f, -0.5f,
-0.5f, 0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
-0.5f, -0.5f, -0.5f,
// Left
-0.5f, 0.5f, -0.5f,
-0.5f, -0.5f, -0.5f,
-0.5f, 0.5f, 0.5f,
-0.5f, 0.5f, 0.5f,
-0.5f, -0.5f, -0.5f,
-0.5f, -0.5f, 0.5f,
// Top
-0.5f, 0.5f, -0.5f,
-0.5f, 0.5f, 0.5f,
0.5f, 0.5f, -0.5f,
0.5f, 0.5f, -0.5f,
-0.5f, 0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
// Bottom
-0.5f, -0.5f, 0.5f,
-0.5f, -0.5f, -0.5f,
0.5f, -0.5f, 0.5f,
0.5f, -0.5f, 0.5f,
-0.5f, -0.5f, -0.5f,
0.5f, -0.5f, -0.5f
};
static const float colors[] =
{
// Front
0.0625f, 0.57421875f, 0.92578125f, 1.0f,
0.0625f, 0.57421875f, 0.92578125f, 1.0f,
0.0625f, 0.57421875f, 0.92578125f, 1.0f,
0.0625f, 0.57421875f, 0.92578125f, 1.0f,
0.0625f, 0.57421875f, 0.92578125f, 1.0f,
0.0625f, 0.57421875f, 0.92578125f, 1.0f,
// Right
0.29296875f, 0.66796875f, 0.82578125f, 1.0f,
0.29296875f, 0.66796875f, 0.82578125f, 1.0f,
0.29296875f, 0.66796875f, 0.82578125f, 1.0f,
0.29296875f, 0.66796875f, 0.82578125f, 1.0f,
0.29296875f, 0.66796875f, 0.82578125f, 1.0f,
0.29296875f, 0.66796875f, 0.82578125f, 1.0f,
// Back
0.52734375f, 0.76171875f, 0.72578125f, 1.0f,
0.52734375f, 0.76171875f, 0.72578125f, 1.0f,
0.52734375f, 0.76171875f, 0.72578125f, 1.0f,
0.52734375f, 0.76171875f, 0.72578125f, 1.0f,
0.52734375f, 0.76171875f, 0.72578125f, 1.0f,
0.52734375f, 0.76171875f, 0.72578125f, 1.0f,
// Left
0.0625f, 0.57421875f, 0.62578125f, 1.0f,
0.0625f, 0.57421875f, 0.62578125f, 1.0f,
0.0625f, 0.57421875f, 0.62578125f, 1.0f,
0.0625f, 0.57421875f, 0.62578125f, 1.0f,
0.0625f, 0.57421875f, 0.62578125f, 1.0f,
0.0625f, 0.57421875f, 0.62578125f, 1.0f,
// Top
0.29296875f, 0.66796875f, 0.52578125f, 1.0f,
0.29296875f, 0.66796875f, 0.52578125f, 1.0f,
0.29296875f, 0.66796875f, 0.52578125f, 1.0f,
0.29296875f, 0.66796875f, 0.52578125f, 1.0f,
0.29296875f, 0.66796875f, 0.52578125f, 1.0f,
0.29296875f, 0.66796875f, 0.52578125f, 1.0f,
// Bottom
0.52734375f, 0.76171875f, 0.42578125f, 1.0f,
0.52734375f, 0.76171875f, 0.42578125f, 1.0f,
0.52734375f, 0.76171875f, 0.42578125f, 1.0f,
0.52734375f, 0.76171875f, 0.42578125f, 1.0f,
0.52734375f, 0.76171875f, 0.42578125f, 1.0f,
0.52734375f, 0.76171875f, 0.42578125f, 1.0f
};
static void
customLoadIdentity(float matrix[16])
{
for (int i = 0; i < 16; i++)
matrix[i] = unit_matrix[i];
}
static void
customMutlMatrix(float matrix[16], const float matrix0[16], const float matrix1[16])
{
int i, row, column;
float temp[16];
for (column = 0; column < 4; column++)
{
for (row = 0; row < 4; row++)
{
temp[column * 4 + row] = 0.0f;
for (i = 0; i < 4; i++)
temp[column * 4 + row] += matrix0[i * 4 + row] * matrix1[column * 4 + i];
}
}
for (i = 0; i < 16; i++)
matrix[i] = temp[i];
}
static void
customScale(float matrix[16], const float sx, const float sy, const float sz)
{
matrix[0] *= sx;
matrix[1] *= sx;
matrix[2] *= sx;
matrix[3] *= sx;
matrix[4] *= sy;
matrix[5] *= sy;
matrix[6] *= sy;
matrix[7] *= sy;
matrix[8] *= sz;
matrix[9] *= sz;
matrix[10] *= sz;
matrix[11] *= sz;
}
static void
customRotate(float matrix[16], const float anglex, const float angley, const float anglez)
{
const float pi = 3.141592f;
float temp[16];
float rz = 2.0f * pi * anglez / 360.0f;
float rx = 2.0f * pi * anglex / 360.0f;
float ry = 2.0f * pi * angley / 360.0f;
float sy = sinf(ry);
float cy = cosf(ry);
float sx = sinf(rx);
float cx = cosf(rx);
float sz = sinf(rz);
float cz = cosf(rz);
customLoadIdentity(temp);
temp[0] = cy * cz - sx * sy * sz;
temp[1] = cz * sx * sy + cy * sz;
temp[2] = -cx * sy;
temp[4] = -cx * sz;
temp[5] = cx * cz;
temp[6] = sx;
temp[8] = cz * sy + cy * sx * sz;
temp[9] = -cy * cz * sx + sy * sz;
temp[10] = cx * cy;
customMutlMatrix(matrix, matrix, temp);
}
static int
customFrustum(float result[16], const float left, const float right, const float bottom, const float top, const float near, const float far)
{
if ((right - left) == 0.0f || (top - bottom) == 0.0f || (far - near) == 0.0f) return 0;
result[0] = 2.0f / (right - left);
result[1] = 0.0f;
result[2] = 0.0f;
result[3] = 0.0f;
result[4] = 0.0f;
result[5] = 2.0f / (top - bottom);
result[6] = 0.0f;
result[7] = 0.0f;
result[8] = 0.0f;
result[9] = 0.0f;
result[10] = -2.0f / (far - near);
result[11] = 0.0f;
result[12] = -(right + left) / (right - left);
result[13] = -(top + bottom) / (top - bottom);
result[14] = -(far + near) / (far - near);
result[15] = 1.0f;
return 1;
}
static int
init_shaders(GLData *gld)
{
Evas_GL_API *gl = gld->glapi;
GLbyte vertex_shader[] =
"#ifdef GL_ES\n"
"precision mediump float;\n"
"#endif\n"
"attribute vec4 a_position;\n"
"attribute vec4 a_color;\n"
"uniform mat4 u_mvp_mat;\n"
"varying vec4 v_color;\n"
"void main()\n"
"{\n"
" gl_Position = u_mvp_mat*a_position;\n"
" v_color = a_color;\n"
"}";
GLbyte fragment_shader[] =
"#ifdef GL_ES\n"
"precision highp float;\n"
"#endif\n"
"varying vec4 v_color;\n"
"void main()\n"
"{\n"
" gl_FragColor = v_color;\n"
"}";
GLint compiled;
const char *p = vertex_shader;
//vertex shader
gld->vtx_shader = gl->glCreateShader(GL_VERTEX_SHADER);
gl->glShaderSource(gld->vtx_shader, 1, &p, NULL);
gl->glCompileShader(gld->vtx_shader);
gl->glGetShaderiv(gld->vtx_shader, GL_COMPILE_STATUS, &compiled);
if (!compiled)
{
GLint info_len = 0;
gl->glGetShaderiv(gld->vtx_shader, GL_INFO_LOG_LENGTH, &info_len);
if (info_len > 1)
{
char* info_log = malloc(sizeof(char) * info_len);
gl->glGetShaderInfoLog(gld->vtx_shader, info_len, NULL, info_log);
printf("Error compiling shader:\n%s\n======\n%s\n======\n", info_log, p);
free(info_log);
}
gl->glDeleteShader(gld->vtx_shader);
}
//fragment shader
p = fragment_shader;
gld->fgmt_shader = gl->glCreateShader(GL_FRAGMENT_SHADER);
gl->glShaderSource(gld->fgmt_shader, 1, &p, NULL);
gl->glCompileShader(gld->fgmt_shader);
gl->glGetShaderiv(gld->fgmt_shader, GL_COMPILE_STATUS, &compiled);
if (!compiled)
{
GLint info_len = 0;
gl->glGetShaderiv(gld->fgmt_shader, GL_INFO_LOG_LENGTH, &info_len);
if (info_len > 1)
{
char* info_log = malloc(sizeof(char) * info_len);
gl->glGetShaderInfoLog(gld->fgmt_shader, info_len, NULL, info_log);
printf("Error compiling shader:\n%s\n======\n%s\n======\n", info_log, p);
free(info_log);
}
gl->glDeleteShader(gld->fgmt_shader);
}
gld->program = gl->glCreateProgram();
GLint linked;
// Load the vertex/fragment shaders
gl->glAttachShader(gld->program, gld->vtx_shader);
gl->glAttachShader(gld->program, gld->fgmt_shader);
gl->glDeleteShader(gld->vtx_shader);
gl->glDeleteShader(gld->fgmt_shader);
gl->glBindAttribLocation(gld->program, 0, "a_position");
gl->glLinkProgram(gld->program);
gl->glGetProgramiv(gld->program, GL_LINK_STATUS, &linked);
if (!linked)
{
GLint info_len = 0;
gl->glGetProgramiv(gld->program, GL_INFO_LOG_LENGTH, &info_len);
if (info_len > 1)
{
char* info_log = malloc(sizeof(char) * info_len);
gl->glGetProgramInfoLog(gld->program, info_len, NULL, info_log);
printf("Error linking program:\n%s\n", info_log);
free(info_log);
}
gl->glDeleteProgram(gld->program);
return 0;
}
gld->mvpLoc = gl->glGetUniformLocation(gld->program, "u_mvp_mat");
gld->positionLoc = gl->glGetAttribLocation(gld->program, "a_position");
gld->colorLoc = gl->glGetAttribLocation(gld->program, "a_color");
return 1;
}
// Callbacks
// intialize callback that gets called once for intialization
static void
_init_gl(Evas_Object *obj)
{
int w, h;
GLData *gld = evas_object_data_get(obj, "gld");
Evas_GL_API *gl = gld->glapi;
elm_glview_size_get(obj, &w, &h);
if (!gld->initialized)
{
if (!init_shaders(gld))
{
printf("Error Initializing Shaders\n");
return;
}
gl->glGenBuffers(1, &gld->vertexID);
gl->glBindBuffer(GL_ARRAY_BUFFER, gld->vertexID);
gl->glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
gl->glGenBuffers(1, &gld->colorID);
gl->glBindBuffer(GL_ARRAY_BUFFER, gld->colorID);
gl->glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors, GL_STATIC_DRAW);
gld->initialized = EINA_TRUE;
}
}
// draw callback is where all the main GL rendering happens
static void
_draw_gl(Evas_Object *obj)
{
Evas_GL_API *gl = elm_glview_gl_api_get(obj);
GLData *gld = evas_object_data_get(obj, "gld");
if(!gld) return;
int w, h;
int r, g, b, a;
//scale
double scalex = elm_slider_value_get(gld->slx);
double scaley = elm_slider_value_get(gld->sly);
double scalez = elm_slider_value_get(gld->slz);
r = 255; g = 255; b = 0; a = 0;
elm_glview_size_get(obj, &w, &h);
gl->glClearDepthf(1.0f);
gl->glClearColor(r / 255.0, g / 255.0, b / 255.0, a / 255.0);
gl->glEnable(GL_CULL_FACE);
gl->glViewport(0, 0, w, h);
gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gl->glUseProgram(gld->program);
gl->glEnableVertexAttribArray(gld->positionLoc);
gl->glBindBuffer(GL_ARRAY_BUFFER, gld->vertexID);
gl->glVertexAttribPointer(gld->positionLoc, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), 0);
gl->glEnableVertexAttribArray(gld->colorLoc);
gl->glBindBuffer(GL_ARRAY_BUFFER, gld->colorID);
gl->glVertexAttribPointer(gld->colorLoc, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(float), 0);
customLoadIdentity(gld->model);
customRotate(gld->model, gld->xangle, gld->yangle, gld->zangle++);
//scale
customScale(gld->model, scalex, scaley, scalez);
customMutlMatrix(gld->mvp, gld->view, gld->model);
gl->glUniformMatrix4fv(gld->mvpLoc, 1, GL_FALSE, gld->mvp);
gl->glDrawArrays(GL_TRIANGLES, 0, 36);
gl->glFlush();
}
// resize callback gets called every time object is resized
static void
_resize_gl(Evas_Object *obj)
{
int w, h;
GLData *gld = evas_object_data_get(obj, "gld");
Evas_GL_API *gl = gld->glapi;
float aspect;
elm_glview_size_get(obj, &w, &h);
customLoadIdentity(gld->view);
if (w > h)
{
aspect = (float) w / h;
customFrustum(gld->view, -1.0 * aspect, 1.0 * aspect, -1.0, 1.0, -1.0, 1.0);
}
else
{
aspect = (float) h / w;
customFrustum(gld->view, -1.0, 1.0, -1.0 * aspect, 1.0 * aspect, -1.0, 1.0);
}
}
// delete callback gets called when glview is deleted
static void
_del_gl(Evas_Object *obj)
{
GLData *gld = evas_object_data_get(obj, "gld");
if (!gld)
{
printf("Unable to get GLData. \n");
return;
}
Evas_GL_API *gl = gld->glapi;
gl->glDeleteShader(gld->vtx_shader);
gl->glDeleteShader(gld->fgmt_shader);
gl->glDeleteProgram(gld->program);
evas_object_data_del((Evas_Object*) obj, "..gld");
}
// just need to notify that glview has changed so it can render
static Eina_Bool
_anim(void *data)
{
elm_glview_changed_set(data);
return EINA_TRUE;
}
static void
_mouse_down_cb(void *data, Evas *e , Evas_Object *obj , void *event_info)
{
GLData *gld = data;
gld->mouse_down = EINA_TRUE;
}
static void
_mouse_up_cb(void *data, Evas *e , Evas_Object *obj , void *event_info)
{
GLData *gld = data;
gld->mouse_down = EINA_FALSE;
}
static void
_mouse_move_cb(void *data, Evas *e , Evas_Object *obj , void *event_info)
{
Evas_Event_Mouse_Move *ev;
ev = (Evas_Event_Mouse_Move *)event_info;
GLData *gld = data;
float dx = 0, dy = 0;
if(gld->mouse_down)
{
dx = ev->cur.canvas.x - ev->prev.canvas.x;
dy = ev->cur.canvas.y - ev->prev.canvas.y;
gld->xangle += dy;
gld->yangle += dx;
}
}
static void
_on_done(void *data, Evas_Object *obj, void *event_info)
{
evas_object_del((Evas_Object*)data);
elm_exit();
}
static void
_del(void *data, Evas *evas, Evas_Object *obj, void *event_info)
{
Ecore_Animator *ani = evas_object_data_get(obj, "ani");
ecore_animator_del(ani);
}
static Eina_Bool
animate_reset_cb(void *data, double pos)
{
GLData *gld = data;
double frame = pos;
float x, y, z;
frame = ecore_animator_pos_map(pos, ECORE_POS_MAP_BOUNCE, 1.8, 7);
x = gld->slx_value * (1 - frame) + 0.75 * frame;
y = gld->sly_value * (1 - frame) + 0.75 * frame;
z = gld->slz_value * (1 - frame) + 0.75 * frame;
elm_slider_value_set(gld->slx, x);
elm_slider_value_set(gld->sly, y);
elm_slider_value_set(gld->slz, z);
return EINA_TRUE;
}
static void btn_reset_cb(void *data, Evas_Object *obj, void *event_info)
{
GLData *gld = data;
gld->slx_value = elm_slider_value_get(gld->slx);
gld->sly_value = elm_slider_value_get(gld->sly);
gld->slz_value = elm_slider_value_get(gld->slz);
ecore_animator_timeline_add(1, animate_reset_cb, gld);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win, *bx, *inner_box, *bt, *gl, *btn_reset;
Ecore_Animator *ani;
GLData *gld = NULL;
if (!(gld = calloc(1, sizeof(GLData)))) return 1;
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
win = elm_win_util_standard_add("glview simple", "GLView Simple");
elm_win_autodel_set(win, EINA_TRUE);
bx = elm_box_add(win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bx);
inner_box = elm_box_add(bx);
evas_object_size_hint_weight_set(inner_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(inner_box);
//-//-//-// THIS IS WHERE GL INIT STUFF HAPPENS (ALA EGL)
//-//
// create a new glview object
gl = elm_glview_add(win);
gld->glapi = elm_glview_gl_api_get(gl);
evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
// mode is simply for supporting alpha, depth buffering, and stencil
// buffering.
elm_glview_mode_set(gl, ELM_GLVIEW_ALPHA | ELM_GLVIEW_DEPTH);
// resize policy tells glview what to do with the surface when it
// resizes. ELM_GLVIEW_RESIZE_POLICY_RECREATE will tell it to
// destroy the current surface and recreate it to the new size
elm_glview_resize_policy_set(gl, ELM_GLVIEW_RESIZE_POLICY_RECREATE);
// render policy tells glview how it would like glview to render
// gl code. ELM_GLVIEW_RENDER_POLICY_ON_DEMAND will have the gl
// calls called in the pixel_get callback, which only gets called
// if the object is visible, hence ON_DEMAND. ALWAYS mode renders
// it despite the visibility of the object.
elm_glview_render_policy_set(gl, ELM_GLVIEW_RENDER_POLICY_ON_DEMAND);
// initialize callback function gets registered here
elm_glview_init_func_set(gl, _init_gl);
// delete callback function gets registered here
elm_glview_del_func_set(gl, _del_gl);
elm_glview_resize_func_set(gl, _resize_gl);
elm_glview_render_func_set(gl, _draw_gl);
//-//
//-//-//-// END GL INIT BLOB
elm_box_pack_end(bx, gl);
evas_object_show(gl);
elm_object_focus_set(gl, EINA_TRUE);
// animating - just a demo. as long as you trigger an update on the image
// object via elm_glview_changed_set() it will be updated.
//
// NOTE: if you delete gl, this animator will keep running trying to access
// gl so you'd better delete this animator with ecore_animator_del().
ani = ecore_animator_add(_anim, gl);
evas_object_data_set(gl, "ani", ani);
evas_object_data_set(gl, "gld", gld);
evas_object_event_callback_add(gl, EVAS_CALLBACK_DEL, _del, gl);
evas_object_event_callback_add(gl, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, gld);
evas_object_event_callback_add(gl, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, gld);
evas_object_event_callback_add(gl, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, gld);
/* Set rotation variables */
gld->xangle = 45.0f;
gld->yangle = 45.0f;
gld->zangle = 0.0f;
gld->mouse_down = EINA_FALSE;
gld->initialized = EINA_FALSE;
// add an 'OK' button to end the program
bt = elm_button_add(win);
elm_object_text_set(bt, "OK");
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx, bt);
evas_object_show(bt);
evas_object_smart_callback_add(bt, "clicked", _on_done, win);
// Slider for X-axis scale
gld->slx = elm_slider_add(inner_box);
evas_object_size_hint_align_set(gld->slx, EVAS_HINT_FILL, 0);
elm_slider_horizontal_set(gld->slx, EINA_TRUE);
elm_slider_unit_format_set(gld->slx, "%1.2f units");
elm_slider_indicator_format_set(gld->slx, "%1.2f units");
elm_slider_indicator_show_set(gld->slx, EINA_TRUE);
elm_slider_min_max_set(gld->slx, 0, 1.5);
elm_slider_value_set(gld->slx, 0.75);
evas_object_color_set(gld->slx, 0.0, 0.0, 120, 255);
elm_box_pack_end(inner_box, gld->slx);
evas_object_show(gld->slx);
// Slider for Y-axis scale
gld->sly = elm_slider_add(inner_box);
evas_object_size_hint_align_set(gld->sly, EVAS_HINT_FILL, 0);
elm_slider_horizontal_set(gld->sly, EINA_TRUE);
elm_slider_unit_format_set(gld->sly, "%1.2f units");
elm_slider_indicator_format_set(gld->sly, "%1.2f units");
elm_slider_indicator_show_set(gld->sly, EINA_TRUE);
elm_slider_min_max_set(gld->sly, 0, 1.5);
elm_slider_value_set(gld->sly, 0.75);
evas_object_color_set(gld->sly, 0.0, 0.0, 120, 255);
elm_box_pack_end(inner_box, gld->sly);
evas_object_show(gld->sly);
// Slider for Z-axis scale
gld->slz = elm_slider_add(inner_box);
evas_object_size_hint_align_set(gld->slz, EVAS_HINT_FILL, 0);
elm_slider_horizontal_set(gld->slz, EINA_TRUE);
elm_slider_unit_format_set(gld->slz, "%1.2f units");
elm_slider_indicator_format_set(gld->slz, "%1.2f units");
elm_slider_indicator_show_set(gld->slz, EINA_TRUE);
elm_slider_min_max_set(gld->slz, 0, 1.5);
elm_slider_value_set(gld->slz, 0.75);
evas_object_color_set(gld->slz, 0.0, 0.0, 120, 255);
elm_box_pack_end(inner_box, gld->slz);
evas_object_show(gld->slz);
// Reset button
btn_reset = elm_button_add(inner_box);
elm_object_text_set(btn_reset, "Reset");
evas_object_smart_callback_add(btn_reset, "clicked", btn_reset_cb, gld);
evas_object_size_hint_align_set(btn_reset, EVAS_HINT_FILL, 0);
elm_box_pack_end(inner_box, btn_reset);
evas_object_show(btn_reset);
evas_object_resize(inner_box, 100, 100);
evas_object_move(inner_box, 0, 5);
evas_object_resize(bx, 800, 800);
evas_object_resize(win, 800, 800);
evas_object_show(win);
// run the mainloop and process events and callbacks
elm_run();
free(gld);
elm_shutdown();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,273 @@
#include <Elementary.h>
#include "structure_menu.h"
#define MAINVIEW "view/main"
#define MAINMENU "menu/main"
#define SIDEMENU "menu/side"
#define ICON_DIR "<path_to_your_icon_dir>"
//to handle the key down events
static Eina_Bool
keydown_cb(void *data , int type , void *event)
{
Menu *me = data;
Ecore_Event_Key *ev = event;
if (!strcmp(ev->keyname, "XF86Send"))
{
if (me->sdmenu_up == EINA_TRUE)
{
// If the menu is visible send a "hide,sidemenu" signal
elm_object_signal_emit(me->layout, "hide,sidemenu", "MenuButton");
// Store the new menu status (hidden).
me->sdmenu_up = EINA_FALSE;
}
else
{
// If the menu is visible send a "hide,sidemenu" signal
elm_object_signal_emit(me->layout, "show,sidemenu", "MenuButton");
// Store the new menu status (hidden).
me->sdmenu_up = EINA_TRUE;
}
}
return ECORE_CALLBACK_PASS_ON;
}
//create the views
static void
_build_main_view(Menu *me)
{
Mainview *view = me->main_view;
char buf[PATH_MAX];
//Main box
view->box = elm_box_add(me->nf);
elm_box_horizontal_set(view->box, EINA_FALSE);
elm_box_homogeneous_set(view->box, EINA_TRUE);
view->img = elm_image_add(view->box);
evas_object_size_hint_weight_set(view->img, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(view->img, 0.5, 0.5);
evas_object_size_hint_min_set(view->img, 25, 25);
snprintf(buf, sizeof(buf), "%s/%s", ICON_DIR, "icon.png");
if (!elm_image_file_set(view->img, buf, NULL))
elm_object_text_set(view->lb_day, "Problem loading image");
elm_box_pack_start(view->box, view->img);
evas_object_show(view->img);
view->lb_day = elm_label_add(view->box);
elm_object_text_set(view->lb_day, "Main view");
evas_object_size_hint_weight_set(view->lb_day, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_pack_end(view->box, view->lb_day);
evas_object_show(view->lb_day);
}
static void
_build_calendar_view(Menu *me)
{
Calview *view = me->cal_view;
view->box = elm_box_add(me->nf);
elm_box_horizontal_set(view->box, EINA_FALSE);
elm_box_homogeneous_set(view->box, EINA_TRUE);
view->calendar = elm_calendar_add(me->nf);
evas_object_size_hint_weight_set(view->calendar, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_align_set(view->calendar, 0.5, 0.5);
elm_box_pack_end(view->box, view->calendar);
evas_object_show(view->calendar);
view->lb_cal = elm_label_add(view->box);
elm_object_text_set(view->lb_cal, "The calendar view");
evas_object_size_hint_weight_set(view->lb_cal, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_pack_end(view->box, view->lb_cal);
evas_object_show(view->lb_cal);
} // End of_build_calendar_view
static void
_build_date_view(Menu *me)
{
Dateview *view = me->date_view;
view->box = elm_box_add(me->nf);
elm_box_horizontal_set(view->box, EINA_FALSE);
elm_box_homogeneous_set(view->box, EINA_TRUE);
view->datetime = elm_datetime_add(me->nf);
evas_object_size_hint_weight_set(view->datetime, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(view->datetime, EVAS_HINT_FILL, 0.5);
elm_box_pack_end(view->box, view->datetime);
evas_object_show(view->datetime);
view->lb_date = elm_label_add(view->box);
elm_object_text_set(view->lb_date, "The calendar view");
evas_object_size_hint_weight_set(view->lb_date, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_pack_end(view->box, view->lb_date);
evas_object_show(view->lb_date);
} // End of_build_calendar_view
static void
_build_settings_view(Menu *me)
{
Setview *view = me->settings_view;
view->box = elm_box_add(me->nf);
elm_box_horizontal_set(view->box, EINA_FALSE);
elm_box_homogeneous_set(view->box, EINA_TRUE);
view->lb = elm_label_add(view->box);
elm_object_text_set(view->lb, "The settings view");
evas_object_size_hint_weight_set(view->lb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_pack_end(view->box, view->lb);
evas_object_show(view->lb);
} // End of_build_calendar_view
static void
_menu_item_selected_cb(void *data, Evas_Object *obj, void *event_info)
{
Elm_Object_Item *it = (Elm_Object_Item*) event_info;
Menu * me = (Menu *)data;
Evas_Object *view;
// Get the menu item text
const char *str = elm_object_item_text_get(it);
// Comparing with the possible view names
if (!strcmp(str, "Calendar"))
{
// Build the "Calendar View"
_build_calendar_view(me);
// Set the view from the application data
view = me->cal_view->box;
}
else if (!strcmp(str, "Date"))
{
// Build the "Date View"
_build_date_view(data);
// Set the view from the application data
view = me->date_view->box;
}
else if (!strcmp(str, "Home"))
{
// Build the "Home or main View"
_build_main_view(me);
// Set the view from the application data
view = me->main_view->box;
}
else if (!strcmp(str, "Settings"))
{
// Build the "Settings" view
_build_settings_view(data);
// Set the view from the application data
view = me->settings_view->box;
}
else if (!strcmp(str, "Clock"))
{
// Build the "Date View"
_build_date_view(me);
// Set the view from the application data
view = me->date_view->box;
}
else return;
// Show the view in the naviframe
elm_layout_content_set(me->layout, MAINVIEW, view);
}
//main menu
static void
_build_main_menu(Menu *me, Evas_Object *win)
{
//Memory allocation for the main menu function.
Tbarmenu *menu = calloc(1, sizeof(Tbarmenu));
//Putting the "main" menu in the application data.
me->menu = menu;
// Creation of the "Menu" toolbar
menu->tb = elm_toolbar_add(win);
// Setting the "Menu" Toolbar properties
elm_toolbar_shrink_mode_set(menu->tb, ELM_TOOLBAR_SHRINK_NONE);
elm_toolbar_transverse_expanded_set(menu->tb, EINA_TRUE);
elm_toolbar_homogeneous_set(menu->tb, EINA_FALSE);
// Adding menu items to the "Menu" toolbar
elm_toolbar_item_append(menu->tb, ICON_DIR"home.svg", "Home", _menu_item_selected_cb, me);
elm_toolbar_item_append(menu->tb, ICON_DIR"calendar.svg", "Calendar", _menu_item_selected_cb, me);
elm_toolbar_item_append(menu->tb, ICON_DIR"clock.svg", "Date", _menu_item_selected_cb, me);
elm_toolbar_item_append(menu->tb, ICON_DIR"settings.svg", "Settings", _menu_item_selected_cb, me);
// Showing the widget
evas_object_show(menu->tb);
// Adding the widget to the "menu/main" SWALLOW container defined in the .edc theme file.
elm_layout_content_set(me->layout, "menu/main", menu->tb);
// Set the default view
elm_toolbar_item_selected_set(elm_toolbar_first_item_get(menu->tb), EINA_TRUE);
}
//side menu not visible at default
static void _build_side_menu(Menu *me, Evas_Object *win)
{
Tbarmenu *sidemenu = calloc(1, sizeof(Tbarmenu));
me->sidemenu = sidemenu;
sidemenu->tb = elm_toolbar_add(win);
elm_toolbar_shrink_mode_set(sidemenu->tb, ELM_TOOLBAR_SHRINK_EXPAND);
elm_toolbar_transverse_expanded_set(sidemenu->tb, EINA_TRUE);
elm_toolbar_item_append(sidemenu->tb, ICON_DIR"/home.svg", "Home", _menu_item_selected_cb, me);
elm_toolbar_item_append(sidemenu->tb, ICON_DIR"/account.svg", "Account", NULL, NULL);
elm_toolbar_item_append(sidemenu->tb, ICON_DIR"/contact.svg", "Friends", NULL, NULL);
elm_toolbar_item_append(sidemenu->tb, ICON_DIR"/clock.svg", "Clock", _menu_item_selected_cb, me);
elm_toolbar_homogeneous_set(sidemenu->tb, EINA_FALSE);
evas_object_show(sidemenu->tb);
elm_object_part_content_set(me->layout, "menu/side", sidemenu->tb);
elm_toolbar_horizontal_set(sidemenu->tb, EINA_FALSE);
elm_toolbar_item_selected_set(elm_toolbar_first_item_get(sidemenu->tb), EINA_TRUE);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win;
char buf[PATH_MAX];
win = elm_win_util_standard_add("Menu", "Menu Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
// Memory allocation
Menu *me = calloc(1, sizeof(Menu));
me->main_view = calloc(1, sizeof(Mainview)); // Allocating memory for the main view
me->cal_view = calloc(1, sizeof(Calview)); // Allocating memory for the calendar view
me->date_view = calloc(1, sizeof(Dateview)); // allocating memory for the date view
me->settings_view = calloc(1, sizeof(Setview)); // allocating memory for the date view
me->sdmenu_up = EINA_FALSE;
me->layout = elm_layout_add(win);
evas_object_resize(me->layout, 400, 400);
elm_layout_file_set(me->layout, "menu.edj", "my_layout");
me->nf = elm_naviframe_add(win);
_build_main_menu(me, win);
_build_side_menu(me, win);
evas_object_show(me->layout);
ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, keydown_cb, me);
evas_object_smart_callback_add(win, "delete,request", _free_menu_cb, me);
//win 400x400 px
evas_object_resize(win, 400, 400);
evas_object_show(win);
elm_run();
free(me->menu);
free(me->sidemenu);
free(me->main_view);
free(me->cal_view);
free(me->settings_view);
free(me);
elm_shutdown();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,102 @@
collections {
group {
name: "my_layout";
parts {
part
{
name: "menu/main";
type: SWALLOW;
description
{
state: "default" 0.0;
rel1.relative: 1.0 0.0;
rel2.relative: 1.0 1.0;
}
description
{
state: "up" 0.0;
rel1.relative: 0.0 0.01;
rel2.relative: 1.0 0.18;
}
} //End menu/main
part
{
name: "view/main";
type: SWALLOW;
description
{
state: "default" 0.0;
rel1.relative: 1.0 1.0;
rel2.relative: 1.0 1.0;
}
description
{
state: "up" 0.0;
rel1.relative: 0.0 1.01;
rel1.to: "menu/main";
rel2.relative: 1.0 1.0;
color: 0 255 0 255;
}
} // END view/main
part
{
name: "menu/side";
type: SWALLOW;
description
{
state: "default" 0.0;
rel1.relative: -0.3 0.0;
rel2.relative: -0.3 1.0;
color: 255 0 0 255;
}
description
{
state: "up" 0.0;
rel1.relative: 0.0 0.2;
rel2.relative: 0.10 1.0;
color: 255 0 0 255;
}
} //END menu/side
}
programs {
program
{
name: "animation,menu_main";
source: "";
signal: "load";
action: STATE_SET "up" 1.0;
target: "menu/main";
transition: LINEAR 0.5;
} // END animation,menu_main
program
{
name: "animation,view_main";
source: "";
signal: "load";
action: STATE_SET "up" 1.0;
target: "view/main";
transition: LINEAR 0.2;
} //END animation,view_main²
program
{
name: "animation,menu_side,hide";
source: "MenuButton";
signal: "hide,sidemenu";
action: STATE_SET "default" 1.0;
target: "menu/side";
transition: LINEAR 0.2;
} //END animation,menu_side,hide
program
{
name: "animation,menu_side";
source: "MenuButton";
signal: "show,sidemenu";
action: STATE_SET "up" 1.0;
target: "menu/side";
transition: LINEAR 0.2;
} //END animation,menu_side
}
}
}

View File

@ -0,0 +1,51 @@
#ifndef __STRUCTURE_MENU_
#define __STRUCTURE_MENU_
typedef struct _Mainview
{
Evas_Object *box; //The main container of the view
Evas_Object *img; //An image
Evas_Object *lb_day; //A label
} Mainview;
typedef struct _Dateview
{
Evas_Object *box; //The main container of the view
Evas_Object *datetime; //A datetime widget
Evas_Object *lb_date; //A label
} Dateview;
typedef struct _Calview
{
Evas_Object *box; //The main container of the view
Evas_Object *calendar; //A calendar widget
Evas_Object *lb_cal; //A label widget
} Calview;
typedef struct _Setview
{
Evas_Object *box; //The main container of the view
Evas_Object *lb; //A label widget
} Setview;
typedef struct _Tbarmenu
{
Evas_Object *tb; //The toolbar
Elm_Object_Item *submenu; //The submenu item
} Tbarmenu;
typedef struct _Menu
{
Evas_Object* layout; // The "edje" layout
Evas_Object *nf; // The Naviframe to handle the views
Tbarmenu *menu; // The main menu
Tbarmenu *sidemenu; // The side menu
Mainview *main_view; // The main view
Calview *cal_view; // The calendar view
Dateview *date_view; // The date and time view
Setview *settings_view; //The settin view
Eina_Bool sdmenu_up; // A bool variable to keep the side menu status
} Menu;
#endif

View File

@ -0,0 +1,196 @@
#include <Elementary.h>
#include <Emotion.h>
#define FILE "<pathToYourVideo>/big_buck_bunny_1080p_h264.mov"
static Evas_Object *nav;
static Eina_Bool info; //if displaying info item
/* Time position and duration update */
static void
_player_info_time_update(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *emotion = obj, *label = data;
char buf[256];
//switch on main item
if (!info)
{
evas_object_smart_callback_del(emotion, "position_update", _player_info_time_update);
evas_object_smart_callback_del(emotion, "length_change", _player_info_time_update);
return;
}
//update
double position = emotion_object_position_get(emotion);
double duration = emotion_object_play_length_get(emotion);
int p_sec = (int) position % 60;
int p_min = position / 60;
int p_hour = position / 3600;
int d_sec = (int) duration % 60;
int d_min = duration / 60;
int d_hour = duration / 3600;
snprintf(buf, sizeof(buf), "%d:%02d:%02d / %d:%02d:%02d", p_hour, p_min, p_sec, d_hour, d_min, d_sec);
elm_object_text_set(label, buf);
}
/* get update status */
static void
_player_info_status_update(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *emotion = obj, *label = data;
char buf[256];
//switch on main item
if (!info)
{
evas_object_smart_callback_del(obj, "playback_finished", _player_info_status_update);
return;
}
//update
double position = emotion_object_position_get(emotion);
double duration = emotion_object_play_length_get(emotion);
if (emotion_object_play_get(emotion))
elm_object_text_set(label, "<b>Playing</b>");
else if (position < duration)
elm_object_text_set(label, "<b>Paused</b>");
else
elm_object_text_set(label, "<b>Ended</b>");
}
/* del info item callback */
static Eina_Bool
_player_info_del_cb(void *data, Elm_Object_Item *it)
{
info = EINA_FALSE;
return EINA_TRUE;
}
/* info callback */
static void
_player_info_cb(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *video = data, *emotion;
Evas_Object *table, *label;
char buf[256];
emotion = elm_video_emotion_get(video);
info = EINA_TRUE;
table = elm_table_add(obj);
elm_table_padding_set(table, 8, 8);
evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(table);
/* display the playing status in label */
label = elm_label_add(table);
evas_object_show(label);
_player_info_status_update(label, emotion, NULL);
elm_table_pack(table, label, 0, 0, 2, 1);
evas_object_smart_callback_add(emotion, "playback_finished", _player_info_status_update, label);
/* get the file name and location */
//set file label
label = elm_label_add(table);
elm_object_text_set(label, "File:");
evas_object_show(label);
elm_table_pack(table, label, 0, 1, 1, 1);
//set file name label
const char *file = emotion_object_file_get(emotion);
label = elm_label_add(table);
elm_object_text_set(label, ecore_file_file_get(file));
evas_object_show(label);
elm_table_pack(table, label, 1, 1, 1, 1);
//set location label
label = elm_label_add(table);
elm_object_text_set(label, "Location:");
evas_object_show(label);
elm_table_pack(table, label, 0, 2, 1, 1);
//set location path label
label = elm_label_add(table);
elm_object_text_set(label, ecore_file_dir_get(file));
elm_object_text_set(label,"/home/efl/videos");
evas_object_show(label);
elm_table_pack(table, label, 1, 2, 1, 1);
/* get the video position and duration */
//set time label
label = elm_label_add(table);
elm_object_text_set(label, "Time:");
evas_object_show(label);
elm_table_pack(table, label, 0, 3, 1, 1);
//set position-duration label
label = elm_label_add(table);
double position = elm_video_play_position_get(video);
double duration = elm_video_play_length_get(video);
int p_sec = (int) position % 60;
int p_min = position / 60;
int p_hour = position / 3600;
int d_sec = (int) duration % 60;
int d_min = duration / 60;
int d_hour = duration / 3600;
snprintf(buf, sizeof(buf), "%d:%02d:%02d / %d:%02d:%02d", p_hour, p_min, p_sec, d_hour, d_min, d_sec);
elm_object_text_set(label, buf);
elm_table_pack(table, label, 1, 3, 1, 1);
evas_object_show(label);
evas_object_smart_callback_add(emotion, "position_update", _player_info_time_update, label);
evas_object_smart_callback_add(emotion, "length_change", _player_info_time_update, label);
/* get the video dimensions */
label = elm_label_add(table);
elm_object_text_set(label, "Size:");
evas_object_show(label);
elm_table_pack(table, label, 0, 4, 1, 1);
label = elm_label_add(table);
int w, h;
emotion_object_size_get(emotion, &w, &h);
snprintf(buf, sizeof(buf), "%d × %d", w, h);
elm_object_text_set(label, buf);
evas_object_show(label);
elm_table_pack(table, label, 1, 4, 1, 1);
/* push info in a separate naviframe item */
Elm_Object_Item *it = elm_naviframe_item_push(nav, "Information", NULL, NULL, table, NULL);
elm_naviframe_item_pop_cb_set(it, _player_info_del_cb, NULL);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win;
info = EINA_FALSE;
win = elm_win_util_standard_add("main", "Multimedia Tutorial");
evas_object_show(win);
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
nav = elm_naviframe_add(win);
evas_object_size_hint_weight_set(nav, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, nav);
evas_object_show(nav);
Evas_Object *video;
video = elm_video_add(win);
evas_object_size_hint_weight_set(video, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_video_file_set(video, FILE);
elm_video_play(video);
evas_object_show(video);
Evas_Object *player;
player = elm_player_add(win);
evas_object_size_hint_weight_set(player, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_content_set(player, video);
evas_object_smart_callback_add(player, "info,clicked", _player_info_cb, video);
evas_object_show(player);
Elm_Object_Item *it = elm_naviframe_item_push(nav, "Video", NULL, NULL, player, NULL);
elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
elm_run();
elm_shutdown();
return EXIT_SUCCESS;
}
ELM_MAIN()

View File

@ -0,0 +1,227 @@
#include <Elementary.h>
#define __UNUSED__ __attribute__((__unused__))
// NOTE: A zipper is a datastructure for an ordered set of elements and a
// cursor in this set, meaning there are elements before the cursor (which are
// stored inside the naviframe) and after (which are stored in the "popped"
// list.
struct naviframe_zipper
{
Evas_Object *naviframe;
Eina_List *popped;
};
static struct naviframe_zipper *
_naviframe_add(Evas_Object *parent)
{
struct naviframe_zipper *z = malloc(sizeof(struct naviframe_zipper));
z->naviframe = elm_naviframe_add(parent);
z->popped = NULL;
evas_object_size_hint_weight_set(z->naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(z->naviframe, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(z->naviframe);
// By default, objects are destroyed when they are popped from the naviframe
// To save and re-use them, enable "preserve_on_pop"
elm_naviframe_content_preserve_on_pop_set(z->naviframe, EINA_TRUE);
return z;
}
// forward declaration of the _button function since there is a circular
// reference below
static Evas_Object * _button(struct naviframe_zipper *, int direction);
// Save the element that is popped from the naviframe
// callback of the prev button
static void
_naviframe_prev(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
{
struct naviframe_zipper *z = data;
//if more than one item push in naviframe
if (elm_naviframe_bottom_item_get(z->naviframe) != elm_naviframe_top_item_get(z->naviframe))
{
z->popped = eina_list_prepend(z->popped, elm_naviframe_item_pop(z->naviframe));
}
}
// Set the first element after the current one available and push it to the
// naviframe
// callback of the next button
static void
_naviframe_next(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
{
struct naviframe_zipper *z = data;
Evas_Object *label, *prev, *next;
const char *text;
Elm_Object_Item *it;
label = eina_list_data_get(z->popped);
z->popped = eina_list_remove_list(z->popped, z->popped);
if (label != NULL)
{
// The widget is saved inside the naviframe but nothing more; we need
// to create new buttons and set the title text again (copy the one
// from the label that is saved).
text = elm_object_text_get(label);
// The _button function creates a button which is either "Previous" (-1) or
// "Next" (1)
prev = _button(z, -1);
next = _button(z, 1);
it = elm_naviframe_item_push(z->naviframe, text, prev, next, label, NULL);
}
}
// Build either a "Previous" or a "Next" button
static Evas_Object *
_button(struct naviframe_zipper *z, int direction)
{
Evas_Object *button;
Evas_Smart_Cb callback;
const char *text;
if (direction < 0)
{
text = "Previous";
callback = _naviframe_prev;
}
else
{
text = "Next";
callback = _naviframe_next;
}
button = elm_button_add(z->naviframe);
elm_object_text_set(button, text);
evas_object_smart_callback_add(button, "clicked", callback, z);
return button;
}
// Generic naviframe-populate function:
// Its third (and last) parameter is a callback for customization, i.e. pushes
// the new items to a specific position; it returns a "context" value that is
// used between its calls and enables behaviors such as "push after the
// previously-pushed item"
static struct naviframe_zipper*
_naviframe_populate_gen(Evas_Object *parent, const char *id,
void * (*populate_cb) (Evas_Object *nav, const char *title, Evas_Object
*prev, Evas_Object *next, Evas_Object *label, Elm_Object_Item *context)
)
{
struct naviframe_zipper *z;
Evas_Object *label,*label2, *prev, *next;
Elm_Object_Item *context = NULL;
char buf[256];
int i;
z = _naviframe_add(parent);
for (i = 0; i < 20; i++)
{
label = elm_label_add(z->naviframe);
label2 = elm_label_add(z->naviframe);
snprintf(buf, sizeof(buf), "%s [%d]", id, i);
elm_object_text_set(label, buf);
evas_object_show(label);
evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
// The _button function creates a button which is either "Previous" (-1) or
// "Next" (1)
prev = _button(z, -1);
next = _button(z, 1);
// Use the populate_cb callback to provide the customization of the way the
// elements are added inside the naviframe
context = populate_cb(z->naviframe, buf, prev, next, label, context);
}
return z;
}
// Push items one after the other
static Elm_Object_Item *
_populate_cb__push(Evas_Object *nav, const char *title,
Evas_Object *prev, Evas_Object *next, Evas_Object *label,
Elm_Object_Item *context)
{
return elm_naviframe_item_push(nav, title, prev, next, label, NULL);
}
// Push items one after the other but use insert_after for it
static Elm_Object_Item *
_populate_cb__push_then_insert_after(Evas_Object *nav, const char *title,
Evas_Object *prev, Evas_Object *next, Evas_Object *label,
Elm_Object_Item *context)
{
if (context == NULL)
{
return elm_naviframe_item_push(nav, title, prev, next, label, NULL);
}
else
{
return elm_naviframe_item_insert_after(nav, context, title, prev, next, label, NULL);
}
}
// Push one item and repeatedly insert new items before the last inserted
// item
static Elm_Object_Item *
_populate_cb__push_then_insert_before(Evas_Object *nav, const char *title,
Evas_Object *prev, Evas_Object *next, Evas_Object *label,
Elm_Object_Item *context)
{
if (context == NULL)
{
return elm_naviframe_item_push(nav, title, prev, next, label, NULL);
}
else
{
return elm_naviframe_item_insert_before(nav, context, title, prev, next, label, NULL);
}
}
static void
_delete_cb(void *data, Evas_Object *obj, void *event_info)
{
struct naviframe_zipper **z = data;
free(*z);
free(*(z+1));
free(*(z+2));
free(z);
evas_object_del(obj);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win;
win = elm_win_util_standard_add("Naviframe", "Naviframe Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
Evas_Object *box;
struct naviframe_zipper **z = malloc(3*sizeof(struct naviframe_zipper *));
box = elm_box_add(win);
elm_box_horizontal_set(box, EINA_FALSE);
elm_box_homogeneous_set(box, EINA_TRUE);
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(box);
elm_win_resize_object_add(win, box);
z[0] = _naviframe_populate_gen(win, "Before", (void *)_populate_cb__push_then_insert_before);
elm_box_pack_end(box, (*z)->naviframe);
z[1] = _naviframe_populate_gen(win, "After", (void *)_populate_cb__push_then_insert_after);
elm_box_pack_end(box, (*(z+1))->naviframe);
z[2] = _naviframe_populate_gen(win, "Push", (void *)_populate_cb__push);
elm_box_pack_end(box, (*(z+2))->naviframe);
evas_object_smart_callback_add(win, "delete,request", _delete_cb, z);
//win 400x400 px
evas_object_resize(win, 400, 400);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,116 @@
#include <Elementary.h>
// clicked callback
static void
_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
printf("Clicked\n");
}
// press callback
static void
_press_cb(void *data, Evas_Object *obj, void *event_info)
{
printf("Pressed\n");
}
// unpress callback
static void
_unpress_cb(void *data, Evas_Object *obj, void *event_info)
{
printf("Unpressed, size : %f\n", elm_panes_content_left_size_get(obj));
}
// double clicked callback
static void
_clicked_double_cb(void *data, Evas_Object *obj, void *event_info)
{
static double size = 0.0;
double tmp_size = 0.0;
tmp_size = elm_panes_content_left_size_get(obj);
if (tmp_size > 0)
{
elm_panes_content_left_size_set(obj, 0.0);
printf("Double clicked, hidden.\n");
}
else
{
elm_panes_content_left_size_set(obj, size);
printf("Double clicked, restoring size.\n");
}
size = tmp_size;
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win;
win = elm_win_util_standard_add("Panes", "Panes Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
//win 400x400 px
evas_object_resize(win, 400, 400);
Evas_Object *panes, *panes_h, *bt;
// Add an elm_panes
panes = elm_panes_add(win);
evas_object_size_hint_weight_set(panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, panes);
evas_object_show(panes);
// Add a horizontal elm_panes
panes_h = elm_panes_add(win);
elm_panes_horizontal_set(panes_h, EINA_TRUE);
elm_object_part_content_set(panes, "left", panes_h);
// Create a button object
bt = elm_button_add(win);
elm_object_text_set(bt, "Right");
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(bt);
// and set it to the "right" part of the vertical Panes
elm_object_part_content_set(panes, "right", bt);
// Create a "Up" button
bt = elm_button_add(win);
elm_object_text_set(bt, "Up");
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(bt);
elm_object_part_content_set(panes_h, "left", bt);
// Create a "Down" button
bt = elm_button_add(win);
elm_object_text_set(bt, "Down");
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(bt);
elm_object_part_content_set(panes_h, "right", bt);
// Set the proportion of the panes to 80%
elm_panes_content_left_size_set(panes, 0.8);
elm_panes_content_left_size_set(panes_h, 0.8);
//panes callbacks
evas_object_smart_callback_add(panes, "clicked", _clicked_cb, panes);
evas_object_smart_callback_add(panes, "press", _press_cb, panes);
evas_object_smart_callback_add(panes, "unpress", _unpress_cb, panes);
evas_object_smart_callback_add(panes, "clicked,double", _clicked_double_cb,
panes);
//panes_h callbacks
evas_object_smart_callback_add(panes_h, "clicked", _clicked_cb, panes_h);
evas_object_smart_callback_add(panes_h, "press", _press_cb, panes_h);
evas_object_smart_callback_add(panes_h, "unpress", _unpress_cb, panes_h);
evas_object_smart_callback_add(panes_h, "clicked,double", _clicked_double_cb,
panes_h);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,57 @@
#include <Elementary.h>
static void
_popup_close_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Evas_Object *popup = data;
//delete popup
evas_object_del(popup);
}
static void
_btn_click_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
// Add an elm popup
Evas_Object *popup;
Evas_Object *btn;
popup = elm_popup_add(data);
elm_object_text_set(popup, "This Popup has content area and "
"action area set, action area has one button Close");
// popup buttons
btn = elm_button_add(popup);
elm_object_text_set(btn, "Close");
elm_object_part_content_set(popup, "button1", btn);
evas_object_smart_callback_add(btn, "clicked", _popup_close_cb, popup);
// popup show should be called after adding all the contents and the buttons
// of popup to set the focus into popup's contents correctly.
evas_object_show(popup);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win, *btn;
win = elm_win_util_standard_add("Popup", "Popup Tutorial");
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
//win 400x400 px
evas_object_resize(win, 400, 400);
btn = elm_button_add(win);
elm_object_text_set(btn, "popup");
evas_object_resize(btn, 100, 50);
evas_object_move(btn, 150, 150);
evas_object_show(btn);
evas_object_smart_callback_add(btn, "clicked", _btn_click_cb, win);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()

View File

@ -0,0 +1,82 @@
#include <Elementary.h>
static void
_save_cb(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *prefs;
Evas_Object *label;
prefs = obj;
label = (Evas_Object *) elm_prefs_item_object_get(prefs, "main:label");
elm_object_text_set(label, "<i>Preferences have been saved.</i>");
}
static void
_action_cb(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *prefs;
Elm_Prefs_Data *prefs_data;
Elm_Prefs_Item_Type type;
Eina_Value value;
int value_int = -1;
Evas_Object *button;
char buf[64];
prefs = obj;
prefs_data = elm_prefs_data_get(prefs);
if (elm_prefs_data_value_get(prefs_data, "main:universe", &type, &value))
{
eina_value_get(&value, &value_int);
snprintf(buf, sizeof(buf), "Value: %d", value_int);
button = (Evas_Object *) elm_prefs_item_object_get(prefs, "main:buttons:action");
elm_object_text_set(button, buf);
}
}
static void
_changed_cb(void *data, Elm_Prefs_Data_Event_Type type, Elm_Prefs_Data *prefs_data, void *event_info)
{
Evas_Object *prefs;
Elm_Prefs_Data_Event_Changed *event;
int value_int;
Evas_Object *label;
char buf[64];
prefs = data;
event = event_info;
if (strcmp(event->key, "main:another")) return;
eina_value_get(event->value, &value_int);
snprintf(buf, sizeof(buf), "Spinner: %d", value_int);
label = (Evas_Object *) elm_prefs_item_object_get(prefs, "main:label");
elm_object_text_set(label, buf);
}
EAPI_MAIN int
elm_main(int argc, char **argv)
{
Evas_Object *win, *conform;
win = elm_win_util_standard_add("main", "Preferences Tutorial");
elm_win_conformant_set(win, EINA_TRUE);
evas_object_show(win);
evas_object_resize(win, 480, 800);
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
conform = elm_conformant_add(win);
evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, conform);
evas_object_show(conform);
Evas_Object *prefs;
prefs = elm_prefs_add(win);
evas_object_size_hint_weight_set(prefs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_content_set(conform, prefs);
evas_object_show(prefs);
elm_prefs_autosave_set(prefs, EINA_FALSE);
elm_prefs_file_set(prefs, "preference.epb", NULL);
Elm_Prefs_Data *prefs_data;
prefs_data = elm_prefs_data_new("preference.cfg", NULL, EET_FILE_MODE_READ_WRITE);
elm_prefs_data_set(prefs, prefs_data);
evas_object_smart_callback_add(prefs, "page,saved", _save_cb, NULL);
evas_object_smart_callback_add(prefs, "action", _action_cb, NULL);
elm_prefs_data_event_callback_add(prefs_data, ELM_PREFS_DATA_EVENT_ITEM_CHANGED, _changed_cb, prefs);
elm_run();
elm_shutdown();
return EXIT_SUCCESS;
}
ELM_MAIN()

View File

@ -0,0 +1,132 @@
collection {
//! [page_main_head]
page {
name: "main";
version: 1;
title: "Main preferences";
subtitle: "Some preferences";
widget: "elm/vertical_box";
//! [page_main_head]
items {
//! [item_int]
item {
name: "universe";
type: INT;
label: "Ultimate Answer of Life, the Universe and Everything";
editable: 1;
int {
min: 0;
max: 100;
default: 42;
}
}
//! [item_int]
//! [item_int_spinner]
item {
name: "another";
type: INT;
label: "Spinner";
widget: "elm/spinner";
int {
min: -50;
max: 200;
}
}
//! [item_int_spinner]
//! [item_float]
item {
name: "floating";
type: FLOAT;
editable: 1;
label: "floating value";
float {
default: 0.6;
min: 0;
max: 1;
}
}
//! [item_float]
//! [item_bool]
item {
name: "boolean";
type: BOOL;
label: "Check here";
bool {
default: true;
}
}
//! [item_bool]
//! [item_display]
item {
name: "sep";
type: SEPARATOR;
}
item {
name: "label";
type: LABEL;
label: "Some other preferences…";
}
//! [item_display]
//! [item_text]
item {
name: "text";
type: TEXT;
editable: 1;
text {
placeholder: "Enter some text here.";
default: "default";
deny: "^[0-9]*$";
}
}
//! [item_text]
//! [item_date]
item {
name: "date";
type: DATE;
label: "First EFL Developer Day";
date {
default: 2012 11 05;
min: 1980 11 1;
max: 2200 12 2;
}
}
//! [item_date]
item {
name: "sep";
type: SEPARATOR;
}
//! [item_page]
item {
name: "buttons";
type: PAGE;
source: "buttons";
}
//! [item_page]
}
}
//! [page_buttons]
page {
name: "buttons";
version: 1;
title: "Actions";
widget: "elm/horizontal_box";
items {
item {
name: "save";
type: SAVE;
label: "Save";
}
item {
name: "reset";
type: RESET;
label: "Reset";
}
item {
name: "action";
type: ACTION;
label: "Action!";
}
}
}
//! [page_buttons]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="120"
height="100"
viewBox="0 0 120 100"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="diagram-block-efl.svg"
inkscape:export-filename="/home/raster/C/wc/media/diagram-block-efl.png"
inkscape:export-xdpi="270"
inkscape:export-ydpi="270">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#404040"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="10.59246"
inkscape:cx="71.183579"
inkscape:cy="54.339412"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
objecttolerance="20"
guidetolerance="20"
gridtolerance="50"
showguides="false"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:snap-grids="true"
inkscape:snap-to-guides="false"
inkscape:window-width="2042"
inkscape:window-height="1638"
inkscape:window-x="2977"
inkscape:window-y="212"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
id="grid4136"
spacingx="1"
spacingy="1"
empspacing="10"
units="px"
dotted="false" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-952.36216)">
<rect
style="opacity:1;fill:#3399ff;fill-opacity:0.25098039;stroke:none;stroke-width:35.40000153;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4144-5"
width="26"
height="19.999979"
x="92"
y="954.36218" />
<rect
style="opacity:1;fill:#3399ff;fill-opacity:0.50196078;stroke:none;stroke-width:35.40000153;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4144"
width="15.931442"
height="19.999979"
x="74"
y="954.36218" />
<rect
style="opacity:1;fill:#3399ff;fill-opacity:0.50196078;stroke:none;stroke-width:35.40000153;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4144-1-4"
width="32.068558"
height="19.999979"
x="40"
y="954.36218" />
<rect
style="opacity:1;fill:#3399ff;fill-opacity:0.69019608;stroke:none;stroke-width:35.40000153;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4144-1"
width="36.034576"
height="19.999979"
x="1.9654238"
y="954.36218" />
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:35.40000153;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4144-8"
width="115.9239"
height="19.999979"
x="2.0761015"
y="976.52509" />
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:35.40000153;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4140"
width="116"
height="29.858479"
x="2"
y="998.50366" />
<rect
style="opacity:1;fill:#606060;fill-opacity:1;stroke:none;stroke-width:35.40000153;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect4138"
width="115.91983"
height="20"
x="2"
y="1030.3622" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;line-height:125%;font-family:Elegante;-inkscape-font-specification:Elegante;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="38.779495"
y="1042.1505"
id="text4161"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4163"
x="38.779495"
y="1042.1505"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:5px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans Light';fill:#ffffff;fill-opacity:1">Base OS + GFX etc.</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;line-height:125%;font-family:Elegante;-inkscape-font-specification:Elegante;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="55.882568"
y="1015.2176"
id="text4161-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4163-8"
x="55.882568"
y="1015.2176"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:5px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans Light'">EFL</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;line-height:125%;font-family:Elegante;-inkscape-font-specification:Elegante;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="47.129116"
y="987.82391"
id="text4161-1-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4163-8-5"
x="47.129116"
y="987.82391"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:5px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans Light'">Elementary</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5px;line-height:125%;font-family:Elegante;-inkscape-font-specification:Elegante;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="3.4446261"
y="965.66101"
id="text4161-1-6-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4163-8-5-5"
x="3.4446261"
y="965.66101"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:5px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans Light';fill:#ffffff;fill-opacity:1">Enlightenment</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;line-height:125%;font-family:Elegante;-inkscape-font-specification:Elegante;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="42.169533"
y="965.66101"
id="text4161-1-6-9-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="42.169533"
y="965.66101"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:5px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans Light';fill:#ffffff;fill-opacity:1"
id="tspan4237">Terminology</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;line-height:125%;font-family:Elegante;-inkscape-font-specification:Elegante;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="76.368797"
y="965.54626"
id="text4161-1-6-9-7-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="76.368797"
y="965.54626"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:5px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans Light';fill:#ffffff;fill-opacity:1"
id="tspan4237-2">Rage</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;line-height:125%;font-family:Elegante;-inkscape-font-specification:Elegante;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="100.96191"
y="965.97961"
id="text4161-1-6-9-7-6-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="100.96191"
y="965.97961"
style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:6.25px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans Light';fill:#ffffff;fill-opacity:1"
id="tspan4237-2-4"><tspan
style="font-size:5px"
id="tspan4155">etc</tspan>.</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 98 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Some files were not shown because too many files have changed in this diff Show More