ephysics: initial commit to sandbox
Patch by: Ricardo de Almeida Gonzaga <ricardo@profusion.mobi> SVN revision: 77592
|
@ -20,6 +20,7 @@ EXTRA_DIST = \
|
|||
frame.edc \
|
||||
list.edc \
|
||||
loading_bar.edc \
|
||||
sandbox.edc \
|
||||
shadows.edc \
|
||||
shapes.edc \
|
||||
spinner.edc \
|
||||
|
@ -60,7 +61,14 @@ EXTRA_DIST = \
|
|||
images/spinner_bt_right_pressed.png \
|
||||
images/star.png \
|
||||
images/green-flag.png \
|
||||
images/brown-pole.png
|
||||
images/brown-pole.png \
|
||||
images/ball-custom.png \
|
||||
images/ball-concrete.png \
|
||||
images/ball-iron.png \
|
||||
images/ball-plastic.png \
|
||||
images/ball-polystyrene.png \
|
||||
images/ball-rubber.png \
|
||||
images/ball-wood.png
|
||||
|
||||
ephysics_test.edj: Makefile $(EXTRA_DIST)
|
||||
$(EDJE_CC) $(EDJE_FLAGS) \
|
||||
|
|
|
@ -10,6 +10,7 @@ collections {
|
|||
#include "frame.edc"
|
||||
#include "list.edc"
|
||||
#include "loading_bar.edc"
|
||||
#include "sandbox.edc"
|
||||
#include "shadows.edc"
|
||||
#include "shapes.edc"
|
||||
#include "spinner.edc"
|
||||
|
|
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 9.7 KiB |
|
@ -0,0 +1,165 @@
|
|||
images {
|
||||
image: "ball-custom.png" COMP;
|
||||
image: "ball-concrete.png" COMP;
|
||||
image: "ball-iron.png" COMP;
|
||||
image: "ball-plastic.png" COMP;
|
||||
image: "ball-polystyrene.png" COMP;
|
||||
image: "ball-rubber.png" COMP;
|
||||
image: "ball-wood.png" COMP;
|
||||
}
|
||||
|
||||
group {
|
||||
name: "sandbox";
|
||||
min: 1280 720;
|
||||
max: 1280 720;
|
||||
|
||||
externals {
|
||||
external: "elm";
|
||||
}
|
||||
|
||||
images{
|
||||
image: "background.jpg" COMP;
|
||||
}
|
||||
|
||||
parts {
|
||||
part {
|
||||
name: "bg";
|
||||
type: EXTERNAL;
|
||||
source: "elm/bg";
|
||||
mouse_events: 0;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
rel1.relative: 0.7 0;
|
||||
rel2.relative: 1 1;
|
||||
fixed: 1 1;
|
||||
align: 1 0.5;
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "bg_world";
|
||||
type: IMAGE;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
rel1.relative: 0.0 0.0;
|
||||
rel2.relative: 0.7 1.0;
|
||||
fixed: 1 1;
|
||||
image.normal: "background.jpg";
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "swallow";
|
||||
type: SWALLOW;
|
||||
description {
|
||||
state: "default" 0;
|
||||
rel1.relative: 0.7 0;
|
||||
rel2.relative: 1 1;
|
||||
fixed: 1 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group {
|
||||
name: "0";
|
||||
parts {
|
||||
part {
|
||||
name: "ball";
|
||||
mouse_events: 0;
|
||||
type: IMAGE;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
image.normal: "ball-custom.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group {
|
||||
name: "1";
|
||||
parts {
|
||||
part {
|
||||
name: "ball";
|
||||
mouse_events: 0;
|
||||
type: IMAGE;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
image.normal: "ball-concrete.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group {
|
||||
name: "2";
|
||||
parts {
|
||||
part {
|
||||
name: "ball";
|
||||
mouse_events: 0;
|
||||
type: IMAGE;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
image.normal: "ball-iron.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group {
|
||||
name: "3";
|
||||
parts {
|
||||
part {
|
||||
name: "ball";
|
||||
mouse_events: 0;
|
||||
type: IMAGE;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
image.normal: "ball-plastic.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group {
|
||||
name: "4";
|
||||
parts {
|
||||
part {
|
||||
name: "ball";
|
||||
mouse_events: 0;
|
||||
type: IMAGE;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
image.normal: "ball-polystyrene.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group {
|
||||
name: "5";
|
||||
parts {
|
||||
part {
|
||||
name: "ball";
|
||||
mouse_events: 0;
|
||||
type: IMAGE;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
image.normal: "ball-rubber.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group {
|
||||
name: "6";
|
||||
parts {
|
||||
part {
|
||||
name: "ball";
|
||||
mouse_events: 0;
|
||||
type: IMAGE;
|
||||
description {
|
||||
state: "default" 0.0;
|
||||
image.normal: "ball-wood.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -10,9 +10,9 @@ AM_CPPFLAGS = \
|
|||
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
||||
@EPHYSICS_TEST_CFLAGS@
|
||||
|
||||
bin_PROGRAMS = ephysics_test ephysics_logo
|
||||
bin_PROGRAMS = ephysics_test ephysics_logo ephysics_sandbox
|
||||
|
||||
EXTRA_PROGRAMS = ephysics_test ephysics_logo
|
||||
EXTRA_PROGRAMS = ephysics_test ephysics_logo ephysics_sandbox
|
||||
|
||||
ephysics_test_SOURCES = \
|
||||
test.c \
|
||||
|
@ -47,6 +47,9 @@ test_flag.c
|
|||
ephysics_logo_SOURCES = \
|
||||
ephysics_logo.c
|
||||
|
||||
ephysics_sandbox_SOURCES = \
|
||||
ephysics_sandbox.c
|
||||
|
||||
ephysics_test_LDADD = \
|
||||
$(top_builddir)/src/lib/libephysics.la \
|
||||
@EPHYSICS_TEST_LIBS@
|
||||
|
@ -55,9 +58,15 @@ ephysics_logo_LDADD = \
|
|||
$(top_builddir)/src/lib/libephysics.la \
|
||||
@EPHYSICS_TEST_LIBS@
|
||||
|
||||
ephysics_sandbox_LDADD = \
|
||||
$(top_builddir)/src/lib/libephysics.la \
|
||||
@EPHYSICS_TEST_LIBS@
|
||||
|
||||
ephysics_logo_LDFLAGS =
|
||||
|
||||
ephysics_test_LDFLAGS =
|
||||
|
||||
ephysics_sandbox_LDFLAGS =
|
||||
|
||||
EXTRA_DIST = ephysics_test.h
|
||||
endif
|
||||
|
|
|
@ -0,0 +1,876 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include<stdio.h>
|
||||
#include<string.h>
|
||||
#include<Eina.h>
|
||||
#include<Elementary.h>
|
||||
#include<EPhysics.h>
|
||||
|
||||
#define EPHYSICS_TEST_THEME "ephysics_test"
|
||||
#define WIDTH (1280)
|
||||
#define HEIGHT (720)
|
||||
|
||||
typedef struct _Sandie_Data {
|
||||
Evas_Object *win;
|
||||
EPhysics_World *world;
|
||||
EPhysics_Body *body1, *body2;
|
||||
} Sandie_Data;
|
||||
|
||||
static void
|
||||
_body_del(void *data __UNUSED__, EPhysics_Body *body __UNUSED__,
|
||||
void *event_info)
|
||||
{
|
||||
if (event_info) evas_object_del(event_info);
|
||||
}
|
||||
|
||||
static void
|
||||
_world_gravity_x_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_World *world = data;
|
||||
double gravity_y;
|
||||
|
||||
ephysics_world_gravity_get(world, NULL, &gravity_y);
|
||||
ephysics_world_gravity_set(world, elm_spinner_value_get(obj), gravity_y);
|
||||
}
|
||||
|
||||
static void
|
||||
_world_gravity_y_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_World *world = data;
|
||||
double gravity_x;
|
||||
|
||||
ephysics_world_gravity_get(world, &gravity_x, NULL);
|
||||
ephysics_world_gravity_set(world, gravity_x, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_world_rate_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_World *world = data;
|
||||
|
||||
ephysics_world_rate_set(world, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_world_max_sleeping_time_cb(void *data, Evas_Object *obj,
|
||||
void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_World *world = data;
|
||||
|
||||
ephysics_world_max_sleeping_time_set(world, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_world_friction_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
Evas_Object *win = data;
|
||||
|
||||
ephysics_body_friction_set(evas_object_data_get(win, "top"),
|
||||
elm_spinner_value_get(obj));
|
||||
ephysics_body_friction_set(evas_object_data_get(win, "bottom"),
|
||||
elm_spinner_value_get(obj));
|
||||
ephysics_body_friction_set(evas_object_data_get(win, "left"),
|
||||
elm_spinner_value_get(obj));
|
||||
ephysics_body_friction_set(evas_object_data_get(win, "right"),
|
||||
elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_world_restitution_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
Evas_Object *win = data;
|
||||
|
||||
ephysics_body_restitution_set(evas_object_data_get(win, "top"),
|
||||
elm_spinner_value_get(obj));
|
||||
ephysics_body_restitution_set(evas_object_data_get(win, "bottom"),
|
||||
elm_spinner_value_get(obj));
|
||||
ephysics_body_restitution_set(evas_object_data_get(win, "left"),
|
||||
elm_spinner_value_get(obj));
|
||||
ephysics_body_restitution_set(evas_object_data_get(win, "right"),
|
||||
elm_spinner_value_get(obj));
|
||||
}
|
||||
/*
|
||||
static void
|
||||
_body_type_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
EPhysics_World *world;
|
||||
Evas_Object *body_image;
|
||||
double mass, rotation, friction, restitution, lin_damping, ang_damping;
|
||||
double lin_sleeping, ang_sleeping;
|
||||
|
||||
mass = ephysics_body_mass_get(body);
|
||||
rotation = ephysics_body_rotation_get(body);
|
||||
friction = ephysics_body_friction_get(body);
|
||||
restitution = ephysics_body_restitution_get(body);
|
||||
ephysics_body_damping_get(body, &lin_damping, &ang_damping);
|
||||
ephysics_body_sleeping_threshold_get(body, &lin_sleeping, &ang_sleeping);
|
||||
body_image = ephysics_body_evas_object_unset(body);
|
||||
world = ephysics_body_world_get(body);
|
||||
|
||||
ephysics_body_del(body);
|
||||
|
||||
if (elm_check_state_get(obj))
|
||||
{
|
||||
body = ephysics_body_soft_circle_add(world);
|
||||
ephysics_body_soft_body_hardness_set(body, 10);
|
||||
elm_object_disabled_set(evas_object_data_get(obj, "hardness"), EINA_FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
body = ephysics_body_circle_add(world);
|
||||
elm_object_disabled_set(evas_object_data_get(obj, "hardness"), EINA_TRUE);
|
||||
}
|
||||
|
||||
body_image = ephysics_body_evas_object_set(body, body_image, EINA_TRUE);
|
||||
ephysics_body_mass_set(body, mass);
|
||||
ephysics_body_rotation_set(body, rotation);
|
||||
ephysics_body_friction_set(body, friction);
|
||||
}
|
||||
*/
|
||||
static void
|
||||
_body_material_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
//Evas_Object *body_image;
|
||||
|
||||
ephysics_body_material_set(body, elm_spinner_value_get(obj));
|
||||
|
||||
elm_spinner_value_set(evas_object_data_get(obj, "density"),
|
||||
ephysics_body_density_get(body));
|
||||
elm_spinner_value_set(evas_object_data_get(obj, "friction"),
|
||||
ephysics_body_friction_get(body));
|
||||
elm_spinner_value_set(evas_object_data_get(obj, "restitution"),
|
||||
ephysics_body_restitution_get(body));
|
||||
/*
|
||||
|
||||
img_name = elm_spinner_value_get(obj); //name if its possible
|
||||
evas_object_del(ephysics_body_evas_object_unset(body));
|
||||
|
||||
body_image = elm_image_add(evas_object_data_get(obj, "win"));
|
||||
elm_image_file_set(
|
||||
body_image, PACKAGE_DATA_DIR "/" EPHYSICS_TEST_THEME ".edj", img_name);
|
||||
evas_object_resize(body_image, 70, 70);
|
||||
evas_object_move(body_image, 150, 150);//FIX!
|
||||
evas_object_show(body_image);
|
||||
ephysics_body_evas_object_set(body, body_image, EINA_TRUE);
|
||||
*/
|
||||
}
|
||||
|
||||
static void
|
||||
_body_mass_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
|
||||
ephysics_body_mass_set(body, elm_spinner_value_get(obj));
|
||||
|
||||
elm_spinner_value_set(evas_object_data_get(obj, "density"), 0);
|
||||
}
|
||||
|
||||
static void
|
||||
_body_density_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
|
||||
ephysics_body_density_set(body, elm_spinner_value_get(obj));
|
||||
|
||||
elm_spinner_value_set(evas_object_data_get(obj, "mass"),
|
||||
ephysics_body_mass_get(body));
|
||||
}
|
||||
|
||||
static void
|
||||
_body_rotation_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
|
||||
ephysics_body_rotation_set(body, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_body_friction_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
|
||||
ephysics_body_friction_set(body, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_body_restitution_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
|
||||
ephysics_body_restitution_set(body, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_body_damping_linear_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
double angular_damping;
|
||||
|
||||
ephysics_body_damping_get(body, NULL, &angular_damping);
|
||||
ephysics_body_damping_set(body, elm_spinner_value_get(obj), angular_damping);
|
||||
}
|
||||
|
||||
static void
|
||||
_body_damping_angular_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
double linear_damping;
|
||||
|
||||
ephysics_body_damping_get(body, &linear_damping, NULL);
|
||||
ephysics_body_damping_set(body, linear_damping, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_body_sleeping_threshold_linear_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
double angular_sleeping;
|
||||
|
||||
ephysics_body_sleeping_threshold_get(body, NULL, &angular_sleeping);
|
||||
ephysics_body_sleeping_threshold_set(body, elm_spinner_value_get(obj),
|
||||
angular_sleeping);
|
||||
}
|
||||
|
||||
static void
|
||||
_body_sleeping_threshold_angular_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
double linear_sleeping;
|
||||
|
||||
ephysics_body_sleeping_threshold_get(body, &linear_sleeping, NULL);
|
||||
ephysics_body_sleeping_threshold_set(body, linear_sleeping,
|
||||
elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_body_torque_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
|
||||
ephysics_body_torque_apply(body, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_body_impulse_x_x_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
Evas_Coord rel_x, rel_y;
|
||||
double y;
|
||||
|
||||
y = elm_spinner_value_get(evas_object_data_get(obj, "y"));
|
||||
rel_x = elm_spinner_value_get(evas_object_data_get(obj, "relx"));
|
||||
rel_y = elm_spinner_value_get(evas_object_data_get(obj, "rely"));
|
||||
|
||||
ephysics_body_impulse_apply(body, elm_spinner_value_get(obj), y, rel_x,
|
||||
rel_y);
|
||||
}
|
||||
|
||||
static void
|
||||
_body_impulse_x_rel_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
Evas_Object *aux;
|
||||
Evas_Coord rel_y;
|
||||
double x, y;
|
||||
|
||||
aux = evas_object_data_get(obj, "x");
|
||||
|
||||
x = elm_spinner_value_get(aux);
|
||||
y = elm_spinner_value_get(evas_object_data_get(aux, "y"));
|
||||
rel_y = elm_spinner_value_get(evas_object_data_get(aux, "rely"));
|
||||
|
||||
ephysics_body_impulse_apply(body, x, y, elm_spinner_value_get(obj), rel_y);
|
||||
}
|
||||
|
||||
static void
|
||||
_body_impulse_y_y_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
Evas_Object *aux;
|
||||
Evas_Coord rel_x, rel_y;
|
||||
double x;
|
||||
|
||||
aux = evas_object_data_get(obj, "x");
|
||||
|
||||
x = elm_spinner_value_get(aux);
|
||||
rel_x = elm_spinner_value_get(evas_object_data_get(aux, "relx"));
|
||||
rel_y = elm_spinner_value_get(evas_object_data_get(aux, "rely"));
|
||||
|
||||
ephysics_body_impulse_apply(body, x, elm_spinner_value_get(obj), rel_x,
|
||||
rel_y);
|
||||
}
|
||||
|
||||
static void
|
||||
_body_impulse_y_rel_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
Evas_Object *aux;
|
||||
Evas_Coord rel_x;
|
||||
double x, y;
|
||||
|
||||
aux = evas_object_data_get(obj, "x");
|
||||
|
||||
x = elm_spinner_value_get(aux);
|
||||
y = elm_spinner_value_get(evas_object_data_get(aux, "y"));
|
||||
rel_x = elm_spinner_value_get(evas_object_data_get(aux, "relx"));
|
||||
|
||||
ephysics_body_impulse_apply(body, x, y, rel_x, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_body_force_x_x_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
Evas_Coord rel_x, rel_y;
|
||||
double y;
|
||||
|
||||
y = elm_spinner_value_get(evas_object_data_get(obj, "y"));
|
||||
rel_x = elm_spinner_value_get(evas_object_data_get(obj, "relx"));
|
||||
rel_y = elm_spinner_value_get(evas_object_data_get(obj, "rely"));
|
||||
|
||||
ephysics_body_force_apply(body, elm_spinner_value_get(obj), y, rel_x, rel_y);
|
||||
}
|
||||
|
||||
static void
|
||||
_body_force_x_rel_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
Evas_Object *aux;
|
||||
Evas_Coord rel_y;
|
||||
double x, y;
|
||||
|
||||
aux = evas_object_data_get(obj, "x");
|
||||
|
||||
x = elm_spinner_value_get(aux);
|
||||
y = elm_spinner_value_get(evas_object_data_get(aux, "y"));
|
||||
rel_y = elm_spinner_value_get(evas_object_data_get(aux, "rely"));
|
||||
|
||||
ephysics_body_force_apply(body, x, y, elm_spinner_value_get(obj), rel_y);
|
||||
}
|
||||
|
||||
static void
|
||||
_body_force_y_y_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
Evas_Object *aux;
|
||||
Evas_Coord rel_x, rel_y;
|
||||
double x;
|
||||
|
||||
aux = evas_object_data_get(obj, "x");
|
||||
|
||||
x = elm_spinner_value_get(aux);
|
||||
rel_x = elm_spinner_value_get(evas_object_data_get(aux, "relx"));
|
||||
rel_y = elm_spinner_value_get(evas_object_data_get(aux, "rely"));
|
||||
|
||||
ephysics_body_force_apply(body, x, elm_spinner_value_get(obj), rel_x, rel_y);
|
||||
}
|
||||
|
||||
static void
|
||||
_body_force_y_rel_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
Evas_Object *aux;
|
||||
Evas_Coord rel_x;
|
||||
double x, y;
|
||||
|
||||
aux = evas_object_data_get(obj, "x");
|
||||
|
||||
x = elm_spinner_value_get(aux);
|
||||
y = elm_spinner_value_get(evas_object_data_get(aux, "y"));
|
||||
rel_x = elm_spinner_value_get(evas_object_data_get(aux, "relx"));
|
||||
|
||||
ephysics_body_force_apply(body, x, y, rel_x, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_body_linear_velocity_x_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
double ylinear;
|
||||
|
||||
ylinear = elm_spinner_value_get(evas_object_data_get(obj, "y"));
|
||||
ephysics_body_linear_velocity_set(body, elm_spinner_value_get(obj), ylinear);
|
||||
}
|
||||
|
||||
static void
|
||||
_body_linear_velocity_y_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
double xlinear;
|
||||
|
||||
xlinear = elm_spinner_value_get(evas_object_data_get(obj, "x"));
|
||||
ephysics_body_linear_velocity_set(body, xlinear, elm_spinner_value_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
_body_angular_velocity_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
|
||||
ephysics_body_angular_velocity_set(body, elm_spinner_value_get(obj));
|
||||
}
|
||||
/*
|
||||
static void
|
||||
_body_hardness_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
EPhysics_Body *body = data;
|
||||
|
||||
ephysics_body_soft_body_hardness_set(body, elm_spinner_value_get(obj));
|
||||
}
|
||||
*/
|
||||
static void
|
||||
_sandie_label_add(Evas_Object *win, Evas_Object *bxparent,
|
||||
const char *subcategory)
|
||||
{
|
||||
Evas_Object *label;
|
||||
|
||||
label = elm_label_add(win);
|
||||
elm_object_text_set(label, subcategory);
|
||||
elm_box_pack_end(bxparent, label);
|
||||
evas_object_show(label);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_sandie_enum_add(Evas_Object *win, Evas_Object *bxparent,
|
||||
const char *subcategory)
|
||||
{
|
||||
Evas_Object *sp;
|
||||
|
||||
_sandie_label_add(win, bxparent, subcategory);
|
||||
|
||||
sp = elm_spinner_add(win);
|
||||
elm_spinner_wrap_set(sp, EINA_TRUE);
|
||||
elm_spinner_min_max_set(sp, 0, 6);
|
||||
elm_spinner_value_set(sp, 0);
|
||||
elm_spinner_step_set(sp, 1);
|
||||
elm_spinner_label_format_set(sp, "%.0f");
|
||||
elm_spinner_editable_set(sp, EINA_FALSE);
|
||||
|
||||
elm_spinner_special_value_add(sp, EPHYSICS_BODY_MATERIAL_CUSTOM, "Custom");
|
||||
elm_spinner_special_value_add(sp, EPHYSICS_BODY_MATERIAL_CONCRETE, "Concrete");
|
||||
elm_spinner_special_value_add(sp, EPHYSICS_BODY_MATERIAL_IRON, "Iron");
|
||||
elm_spinner_special_value_add(sp, EPHYSICS_BODY_MATERIAL_PLASTIC, "Plastic");
|
||||
elm_spinner_special_value_add(sp, EPHYSICS_BODY_MATERIAL_POLYSTYRENE, "Polystyrene");
|
||||
elm_spinner_special_value_add(sp, EPHYSICS_BODY_MATERIAL_RUBBER, "Rubber");
|
||||
elm_spinner_special_value_add(sp, EPHYSICS_BODY_MATERIAL_WOOD, "Wood");
|
||||
|
||||
evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
|
||||
evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_box_pack_end(bxparent, sp);
|
||||
evas_object_show(sp);
|
||||
|
||||
evas_object_data_set(sp, "win", win);
|
||||
|
||||
return sp;
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_sandie_toggle_add(Evas_Object *win, Evas_Object *bxparent,
|
||||
const char *subcategory, const char *labeloff,
|
||||
const char *labelon)
|
||||
{
|
||||
Evas_Object *tg;
|
||||
|
||||
_sandie_label_add(win, bxparent, subcategory);
|
||||
|
||||
tg = elm_check_add(win);
|
||||
elm_object_style_set(tg, "toggle");
|
||||
elm_object_part_text_set(tg, "off", labeloff);
|
||||
elm_object_part_text_set(tg, "on", labelon);
|
||||
evas_object_size_hint_align_set(tg, 0.5, 0.5);
|
||||
evas_object_size_hint_weight_set(tg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_box_pack_end(bxparent, tg);
|
||||
evas_object_show(tg);
|
||||
|
||||
return tg;
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_sandie_spinner_add(Evas_Object *win, Evas_Object *bxparent,
|
||||
const char *subcategory, const char *itemlb, float min,
|
||||
float max, float initial, float step)
|
||||
{
|
||||
Evas_Object *sp;
|
||||
|
||||
_sandie_label_add(win, bxparent, subcategory);
|
||||
|
||||
sp = elm_spinner_add(win);
|
||||
elm_spinner_label_format_set(sp, itemlb);
|
||||
elm_spinner_step_set(sp, step);
|
||||
elm_spinner_wrap_set(sp, ELM_WRAP_CHAR);
|
||||
elm_spinner_value_set(sp, initial);
|
||||
elm_spinner_min_max_set(sp, min, max);
|
||||
evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
|
||||
evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_box_pack_end(bxparent, sp);
|
||||
evas_object_show(sp);
|
||||
|
||||
return sp;
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_sandie_double_spinner_box_add(Evas_Object *win, Evas_Object *bxparent,
|
||||
const char *subcategory)
|
||||
{
|
||||
Evas_Object *dbx;
|
||||
|
||||
_sandie_label_add(win, bxparent, subcategory);
|
||||
|
||||
dbx = elm_box_add(win);
|
||||
elm_box_horizontal_set(dbx, EINA_TRUE);
|
||||
evas_object_size_hint_weight_set(dbx, EVAS_HINT_EXPAND, 0.0);
|
||||
evas_object_size_hint_align_set(dbx, EVAS_HINT_FILL, 0.0);
|
||||
elm_box_align_set(dbx, 0.0, 0.5);
|
||||
elm_box_pack_end(bxparent, dbx);
|
||||
evas_object_show(dbx);
|
||||
|
||||
return dbx;
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_category_add(Evas_Object *win, Evas_Object *bxparent, const char *label)
|
||||
{
|
||||
Evas_Object *cfr, *cbx;
|
||||
|
||||
cfr = elm_frame_add(win);
|
||||
elm_frame_autocollapse_set(cfr, EINA_TRUE);
|
||||
elm_object_text_set(cfr, label);
|
||||
evas_object_size_hint_weight_set(cfr, EVAS_HINT_EXPAND, 0.0);
|
||||
evas_object_size_hint_fill_set(cfr, EVAS_HINT_FILL, 0.0);
|
||||
elm_box_pack_end(bxparent, cfr);
|
||||
evas_object_show(cfr);
|
||||
|
||||
cbx = elm_box_add(win);
|
||||
elm_box_horizontal_set(cbx, EINA_FALSE);
|
||||
evas_object_size_hint_weight_set(cbx, EVAS_HINT_EXPAND, 0.0);
|
||||
evas_object_size_hint_align_set(cbx, EVAS_HINT_FILL, 0.0);
|
||||
elm_box_align_set(cbx, 0.0, 0.5);
|
||||
elm_object_content_set(cfr, cbx);
|
||||
evas_object_show(cbx);
|
||||
|
||||
return cbx;
|
||||
}
|
||||
|
||||
static void
|
||||
_menu_body_items_create(Evas_Object *win, Evas_Object *bxparent,
|
||||
const char *category, EPhysics_Body *body)
|
||||
{
|
||||
Evas_Object *bx, *dbx, *widget, *aux_widget, *material_widget, *type_widget;
|
||||
|
||||
bx = _category_add(win, bxparent, category);
|
||||
type_widget = _sandie_toggle_add(win, bx, "Body Type", "Solid", "Soft");
|
||||
material_widget = _sandie_enum_add(win, bx, "Body Material");
|
||||
aux_widget = _sandie_spinner_add(win, bx, "Mass", "%1.3f kg",
|
||||
0, 100, 15, 2);
|
||||
widget = _sandie_spinner_add(win, bx, "Density", "%1.3f kg/m³",
|
||||
0, 9999, 0, 2);
|
||||
evas_object_data_set(aux_widget, "density", widget);
|
||||
evas_object_data_set(material_widget, "density", widget);
|
||||
evas_object_smart_callback_add(aux_widget, "delay,changed", _body_mass_cb, body);
|
||||
evas_object_data_set(widget, "mass", aux_widget);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_density_cb, body);
|
||||
widget = _sandie_spinner_add(win, bx, "Rotation", "%1.0fº",
|
||||
-360, 360, 0, 2);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_rotation_cb, body);
|
||||
widget = _sandie_spinner_add(win, bx, "Friction", "%1.3f",
|
||||
0, 1, 0.5, 0.05);
|
||||
evas_object_data_set(material_widget, "friction", widget);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_friction_cb, body);
|
||||
widget = _sandie_spinner_add(win, bx, "Restitution", "%1.3f",
|
||||
0, 1, 0, 0.05);
|
||||
evas_object_data_set(material_widget, "restitution", widget);
|
||||
evas_object_smart_callback_add(material_widget, "delay,changed", _body_material_cb, body);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_restitution_cb, body);
|
||||
dbx = _sandie_double_spinner_box_add(win, bx, "Damping");
|
||||
widget = _sandie_spinner_add(win, dbx, "Linear:", "%1.3f",
|
||||
0, 1, 0, 0.05);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_damping_linear_cb, body);
|
||||
widget = _sandie_spinner_add(win, dbx, "Angular:", "%1.3f",
|
||||
0, 1, 0, 0.05);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_damping_angular_cb, body);
|
||||
dbx = _sandie_double_spinner_box_add(win, bx, "Sleeping Threshold");
|
||||
widget = _sandie_spinner_add(win, dbx, "Linear:", "%1.2f p/s",
|
||||
0, 100, 0, 2);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_sleeping_threshold_linear_cb, body);
|
||||
widget = _sandie_spinner_add(win, dbx, "Angular:", "%1.2f º/s",
|
||||
0, 360, 0, 2);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_sleeping_threshold_angular_cb, body);
|
||||
widget = _sandie_spinner_add(win, bx, "Torque", "%1.3f",
|
||||
0, 1, 0.5, 0.05);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_torque_cb, body);
|
||||
|
||||
//Impulse needs four values
|
||||
dbx = _sandie_double_spinner_box_add(win, bx, "Impulse X");
|
||||
aux_widget = _sandie_spinner_add(win, dbx, "X:", "%1.3f kg * p/s",
|
||||
-360, 360, 0, 2);
|
||||
widget = _sandie_spinner_add(win, dbx, "Rel Position X:", "%1.2f",
|
||||
0, 360, 0, 2);
|
||||
evas_object_data_set(aux_widget, "relx", widget);
|
||||
dbx = _sandie_double_spinner_box_add(win, bx, "Impulse Y");
|
||||
widget = _sandie_spinner_add(win, dbx, "Y:", "%1.3f kg * p/s",
|
||||
-360, 360, 0, 2);
|
||||
evas_object_data_set(aux_widget, "y", widget);
|
||||
widget = _sandie_spinner_add(win, dbx, "Rel Position Y:", "%1.2f",
|
||||
0, 360, 0, 2);
|
||||
evas_object_data_set(aux_widget, "rely", widget);
|
||||
evas_object_smart_callback_add(aux_widget, "delay,changed", _body_impulse_x_x_cb, body);
|
||||
evas_object_data_set(widget, "x", aux_widget);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_impulse_x_rel_cb, body);
|
||||
widget = evas_object_data_get(aux_widget, "y");
|
||||
evas_object_data_set(widget, "x", aux_widget);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_impulse_y_y_cb, body);
|
||||
widget = evas_object_data_get(aux_widget, "relx");
|
||||
evas_object_data_set(widget, "x", aux_widget);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_impulse_y_rel_cb, body);
|
||||
|
||||
//Force needs four values
|
||||
dbx = _sandie_double_spinner_box_add(win, bx, "Force X");
|
||||
aux_widget = _sandie_spinner_add(win, dbx, "X:", "%1.3f kg * p/s/s",
|
||||
-360, 360, 0, 2);
|
||||
widget = _sandie_spinner_add(win, dbx, "Rel Position X:", "%1.2f",
|
||||
0, 360, 0, 2);
|
||||
evas_object_data_set(aux_widget, "relx", widget);
|
||||
dbx = _sandie_double_spinner_box_add(win, bx, "Force Y");
|
||||
widget = _sandie_spinner_add(win, dbx, "Y:", "%1.3f kg * p/s/s",
|
||||
-360, 360, 0, 2);
|
||||
evas_object_data_set(aux_widget, "y", widget);
|
||||
widget = _sandie_spinner_add(win, dbx, "Rel Position Y:", "%1.2f",
|
||||
0, 360, 0, 2);
|
||||
evas_object_data_set(aux_widget, "rely", widget);
|
||||
evas_object_smart_callback_add(aux_widget, "delay,changed", _body_force_x_x_cb, body);
|
||||
evas_object_data_set(widget, "x", aux_widget);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_force_x_rel_cb, body);
|
||||
widget = evas_object_data_get(aux_widget, "y");
|
||||
evas_object_data_set(widget, "x", aux_widget);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_force_y_y_cb, body);
|
||||
widget = evas_object_data_get(aux_widget, "relx");
|
||||
evas_object_data_set(widget, "x", aux_widget);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_force_y_rel_cb, body);
|
||||
|
||||
dbx = _sandie_double_spinner_box_add(win, bx, "Linear Velocity");
|
||||
aux_widget = _sandie_spinner_add(win, dbx, "X:", "%1.2f p/s",
|
||||
-800, 800, 0, 2);
|
||||
widget = _sandie_spinner_add(win, dbx, "Y:", "%1.2f p/s",
|
||||
-800, 800, 0, 2);
|
||||
evas_object_data_set(aux_widget, "y", widget);
|
||||
evas_object_smart_callback_add(aux_widget, "delay,changed", _body_linear_velocity_x_cb, body);
|
||||
evas_object_data_set(widget, "x", aux_widget);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_linear_velocity_y_cb, body);
|
||||
|
||||
widget = _sandie_spinner_add(win, bx, "Angular Velocity", "%1.2f º/s",
|
||||
0, 360, 0, 2);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_angular_velocity_cb, body);
|
||||
/* widget = _sandie_spinner_add(win, bx, "Soft Body Hardness", "%1.2f%%",
|
||||
0, 100, 100, 2);
|
||||
elm_object_disabled_set(widget, EINA_TRUE);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _body_hardness_cb, body);
|
||||
evas_object_data_set(type_widget, "hardness", widget);
|
||||
evas_object_smart_callback_add(type_widget, "changed", _body_type_cb, body);//FIX CB
|
||||
*/
|
||||
}
|
||||
|
||||
static EPhysics_Body *
|
||||
_sandie_body_add(Evas_Object *win, EPhysics_World *world, int x, int y)
|
||||
{
|
||||
Evas_Object *body_image;
|
||||
EPhysics_Body *body;
|
||||
|
||||
body_image = elm_image_add(win);
|
||||
elm_image_file_set(
|
||||
body_image, PACKAGE_DATA_DIR "/" EPHYSICS_TEST_THEME ".edj", "big-blue-ball");
|
||||
evas_object_resize(body_image, 70, 70);
|
||||
evas_object_move(body_image, x, y);
|
||||
evas_object_show(body_image);
|
||||
|
||||
body = ephysics_body_circle_add(world);
|
||||
ephysics_body_evas_object_set(body, body_image, EINA_TRUE);
|
||||
ephysics_body_mass_set(body, 20);
|
||||
ephysics_body_central_impulse_apply(body, 8201, 2110);
|
||||
ephysics_body_event_callback_add(body, EPHYSICS_CALLBACK_BODY_DEL,
|
||||
_body_del, NULL);
|
||||
|
||||
return body;
|
||||
}
|
||||
static void
|
||||
_menu_items_create(Evas_Object *win, Evas_Object *bxparent,
|
||||
EPhysics_World *world)
|
||||
{
|
||||
Evas_Object *bx, *dbx, *widget;
|
||||
|
||||
bx = _category_add(win, bxparent, "EPhysics World");
|
||||
dbx = _sandie_double_spinner_box_add(win, bx, "Gravity");
|
||||
widget = _sandie_spinner_add(win, dbx, "X:", "%1.2f m/s²",
|
||||
0, 100, 0, 2);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _world_gravity_x_cb, world);
|
||||
widget = _sandie_spinner_add(win, dbx, "Y:", "%1.2f m/s²",
|
||||
0, 100, 9.81, 2);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _world_gravity_y_cb, world);
|
||||
widget = _sandie_spinner_add(win, bx, "Rate", "%1.0f pixel/meter",
|
||||
0, 100, 20, 2);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _world_rate_cb, world);
|
||||
widget = _sandie_spinner_add(win, bx, "Max Sleeping Time", "%1.0f s",
|
||||
0, 100, 2, 2);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _world_max_sleeping_time_cb, world);
|
||||
|
||||
bx = _category_add(win, bxparent, "EPhysics Boundaries");
|
||||
widget = _sandie_spinner_add(win, bx, "Friction", "%1.3f",
|
||||
0, 1, 0.5, 0.05);
|
||||
evas_object_data_set(widget, "win", win);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _world_friction_cb, win);
|
||||
widget = _sandie_spinner_add(win, bx, "Restitution", "%1.3f",
|
||||
0, 1, 0, 0.05);
|
||||
evas_object_smart_callback_add(widget, "delay,changed", _world_restitution_cb, win);
|
||||
}
|
||||
|
||||
static void
|
||||
_world_populate(Sandie_Data *sandie, Evas_Object *bxparent)
|
||||
{
|
||||
sandie->body1 = _sandie_body_add(sandie->win, sandie->world, (int) WIDTH / 4,
|
||||
(int) HEIGHT / 5);
|
||||
sandie->body2 = _sandie_body_add(sandie->win, sandie->world, (int) WIDTH / 4,
|
||||
(int) HEIGHT / 2);
|
||||
|
||||
_menu_body_items_create(sandie->win, bxparent, "EPhysics Body 1",
|
||||
sandie->body1);
|
||||
_menu_body_items_create(sandie->win, bxparent, "EPhysics Body 2",
|
||||
sandie->body2);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
_restart(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||
{
|
||||
Sandie_Data *sandie = data;
|
||||
|
||||
ephysics_body_del(sandie->body1);
|
||||
ephysics_body_del(sandie->body2);
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
_menu_create(Sandie_Data *sandie)
|
||||
{
|
||||
Evas_Object *bx0, *fr, *lb, *bt, *sc, *bxparent, *layout;
|
||||
|
||||
layout = evas_object_data_get(sandie->win, "layout");
|
||||
|
||||
bx0 = elm_box_add(sandie->win);
|
||||
evas_object_size_hint_weight_set(bx0, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_object_part_content_set(layout, "swallow", bx0);
|
||||
evas_object_show(bx0);
|
||||
|
||||
fr = elm_frame_add(sandie->win);
|
||||
elm_frame_autocollapse_set(fr, EINA_TRUE);
|
||||
elm_object_text_set(fr, "Information");
|
||||
elm_box_pack_end(bx0, fr);
|
||||
evas_object_show(fr);
|
||||
|
||||
lb = elm_label_add(sandie->win);
|
||||
elm_object_text_set(lb,
|
||||
"Please modify physical parameters below<br/>"
|
||||
"the test button to show the test window.");
|
||||
elm_object_content_set(fr, lb);
|
||||
evas_object_show(lb);
|
||||
|
||||
bt = elm_button_add(sandie->win);
|
||||
elm_object_text_set(bt, " Try ");
|
||||
elm_box_pack_end(bx0, bt);
|
||||
evas_object_show(bt);
|
||||
evas_object_smart_callback_add(bt, "clicked", _restart, sandie);
|
||||
|
||||
sc = elm_scroller_add(sandie->win);
|
||||
elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE);
|
||||
elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);
|
||||
evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_fill_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
elm_box_pack_end(bx0, sc);
|
||||
evas_object_show(sc);
|
||||
|
||||
bxparent = elm_box_add(sandie->win);
|
||||
evas_object_size_hint_weight_set(bxparent, EVAS_HINT_EXPAND, 0.0);
|
||||
evas_object_size_hint_align_set(bxparent, EVAS_HINT_FILL, 0.0);
|
||||
elm_object_content_set(sc, bxparent);
|
||||
evas_object_show(bxparent);
|
||||
|
||||
_menu_items_create(sandie->win, bxparent, sandie->world);
|
||||
|
||||
return bxparent;
|
||||
}
|
||||
|
||||
static EPhysics_World *
|
||||
_sandie_world_add(Evas_Object *win)
|
||||
{
|
||||
EPhysics_World *world;
|
||||
|
||||
world = ephysics_world_new();
|
||||
ephysics_world_render_geometry_set(world, 80, 80, (int) WIDTH * 0.7 - 160,
|
||||
HEIGHT - 160);
|
||||
evas_object_data_set(win, "top", ephysics_body_top_boundary_add(world));
|
||||
evas_object_data_set(win, "bottom", ephysics_body_bottom_boundary_add(world));
|
||||
evas_object_data_set(win, "left", ephysics_body_left_boundary_add(world));
|
||||
evas_object_data_set(win, "right", ephysics_body_right_boundary_add(world));
|
||||
|
||||
return world;
|
||||
}
|
||||
|
||||
EAPI int
|
||||
elm_main()
|
||||
{
|
||||
Sandie_Data *sandie;
|
||||
Evas_Object *layout, *bxparent;
|
||||
short int r = 0;
|
||||
|
||||
if (!ephysics_init())
|
||||
{
|
||||
printf("\nFailed to init ephysics");//ERR
|
||||
r = -1;
|
||||
goto shutdown;
|
||||
}
|
||||
|
||||
sandie = calloc(1, sizeof(Sandie_Data));
|
||||
if (!sandie)
|
||||
{
|
||||
printf("Failed to alloc sandie data");//ERR
|
||||
r = -1;
|
||||
return r;
|
||||
}
|
||||
|
||||
elm_theme_extension_add(NULL, PACKAGE_DATA_DIR "/" EPHYSICS_TEST_THEME ".edj");
|
||||
|
||||
sandie->win = elm_win_add(NULL, "Sandbox", ELM_WIN_BASIC);
|
||||
|
||||
elm_win_title_set(sandie->win, "EPhysics Sandbox");
|
||||
evas_object_resize(sandie->win, WIDTH, HEIGHT);
|
||||
elm_win_screen_constrain_set(sandie->win, EINA_TRUE);
|
||||
elm_win_autodel_set(sandie->win, EINA_TRUE);
|
||||
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
|
||||
|
||||
layout = elm_layout_add(sandie->win);
|
||||
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_win_resize_object_add(sandie->win, layout);
|
||||
elm_layout_file_set(layout, PACKAGE_DATA_DIR "/" EPHYSICS_TEST_THEME ".edj",
|
||||
"sandbox");
|
||||
evas_object_show(layout);
|
||||
evas_object_data_set(sandie->win, "layout", layout);
|
||||
|
||||
evas_object_show(sandie->win);
|
||||
|
||||
sandie->world = _sandie_world_add(sandie->win);
|
||||
|
||||
bxparent = _menu_create(sandie);
|
||||
|
||||
_world_populate(sandie, bxparent);
|
||||
|
||||
elm_run();
|
||||
|
||||
shutdown:
|
||||
ephysics_shutdown();
|
||||
|
||||
elm_shutdown();
|
||||
|
||||
return r;
|
||||
}
|
||||
ELM_MAIN()
|