#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <Elementary.h>
#include <Evas.h>
#define WIDTH (512)
#define HEIGHT (384)
#define DEPTH (100)
#define FLOOR_Y (HEIGHT - 80)
#define SH_THRESHOLD (250)
#define SH_OFFSET_X (- 16)
#define OFFSET_X (90)
#define PADDING_X_1 (16)
#define PADDING_X_2 (12)
#define PADDING_X_3 (22)
#define E_THRESHOLD (WIDTH + 560)
#define LAYER_SHADOW (10)
#define LAYER_LETTER (20)
#define CENTER(total, item)  (((total) - (item)) / 2)
#define LIMIT(val, op, ref) (((val) op (ref)) ? (val) : (ref));
#define PROP_GET(pos, min, max) (((min) + ((max) - (min)) * (pos)) / (max))
static void
_update_box_cb(
void *data __UNUSED__, 
EPhysics_Body *body, 
void *event_info)
{
   int x, y, w, h, floor_distance, alpha = 0;
   
   floor_distance = FLOOR_Y - h;
   
   
   
   
   
   if (y > SH_THRESHOLD)
     {
        int sh_w, sh_h;
        double pos_x;
        evas_object_image_size_get(shadow, &sh_w, &sh_h);
        
        alpha = 255 * (y - SH_THRESHOLD) / (floor_distance - SH_THRESHOLD);
        
        pos_x = (double) x / (WIDTH - w);
        alpha = alpha * PROP_GET(pos_x, 100, 255);
        
        evas_object_move(shadow, x + CENTER(w, sh_w) + SH_OFFSET_X,
                         FLOOR_Y - sh_h + 2);
     }
   evas_object_move(light, x, y);
   
   alpha = (y <= 0) ? 0 : y * 255 / floor_distance;
   
   alpha = alpha * (x - OFFSET_X + 80) / (WIDTH - OFFSET_X);
}
static void
_update_circle_cb(
void *data __UNUSED__, 
EPhysics_Body *body, 
void *event_info)
{
   int x, y, w, h, sh_w, sh_h, alpha = 0;
   const Evas_Map *map;
   
   evas_object_move(light, x, y);
   alpha = x * 255 / (WIDTH - w);
   
   map = evas_object_map_get(image);
   evas_object_map_set(light, map);
   evas_object_map_enable_set(light, 
EINA_TRUE);
   evas_object_image_size_get(shadow, &sh_w, &sh_h);
   evas_object_move(shadow, x + CENTER(w, sh_w) + SH_OFFSET_X,
                    FLOOR_Y - sh_h + 2);
   alpha = 127 + alpha / 2;
   if (x > E_THRESHOLD)
}
static void
{
   int w, h, sh_w, sh_h;
   char buf[1024];
   snprintf(buf, sizeof(buf), PACKAGE_DATA_DIR "/logo_shadow-%s.png", letter);
   *shadow = evas_object_image_filled_add(evas);
   evas_object_image_file_set(*shadow, buf, NULL);
   evas_object_image_size_get(*shadow, &sh_w, &sh_h);
   evas_object_resize(*shadow, sh_w, sh_h);
   evas_object_layer_set(*shadow, LAYER_SHADOW);
   snprintf(buf, sizeof(buf), PACKAGE_DATA_DIR "/logo_letter-%s.png", letter);
   *image = evas_object_image_filled_add(evas);
   evas_object_image_file_set(*image, buf, NULL);
   evas_object_image_size_get(*image, &w, &h);
   evas_object_resize(*image, w, h);
   evas_object_layer_set(*image, LAYER_LETTER);
   snprintf(buf, sizeof(buf), PACKAGE_DATA_DIR "/logo_light-%s.png", letter);
   *light = evas_object_image_filled_add(evas);
   evas_object_image_file_set(*light, buf, NULL);
   evas_object_resize(*light, w, h);
   evas_object_layer_set(*light, LAYER_LETTER);
   
}
static void
{
}
{
   _letter_body_setup_common(body, image);
   return body;
}
{
   _letter_body_setup_common(body, image);
   return body;
}
EAPI_MAIN int
elm_main(int argc __UNUSED__, char **argv __UNUSED__)
{
   unsigned int i = 0;
   int x, w, h, sh_w;
   struct letter_desc {
      const char *letter;
      int padding;
   } falling_letters[] = {
     {"P", PADDING_X_1},
     {"H", PADDING_X_1},
     {"Y", PADDING_X_3},
     {"S1", PADDING_X_2},
     {"I", PADDING_X_2},
     {"C", PADDING_X_3},
     {"S2", 0}
   };
     return - 1;
   evas_object_size_hint_min_set(bg, WIDTH, HEIGHT);
   evas_object_size_hint_max_set(bg, WIDTH, HEIGHT);
                              30);
   evas = evas_object_evas_get(win);
   x = OFFSET_X;
     {
        _letter_add(evas, falling_letters[i].letter, &image, &light, &shadow);
        evas_object_image_size_get(shadow, &sh_w, NULL);
        evas_object_image_size_get(image, &w, &h);
        
        evas_object_move(image, x, -h * (i + 1) - 50);
        evas_object_move(light, x, -h * (i + 1) - 50);
        
        evas_object_move(shadow, x + CENTER(w, sh_w), FLOOR_Y);
        x += falling_letters[i].padding + w;
        letter_body = _letter_body_box_add(world, image);
     }
   
   _letter_add(evas, "E", &image, &light, &shadow);
   evas_object_image_size_get(shadow, &sh_w, NULL);
   evas_object_image_size_get(image, &w, &h);
   
   evas_object_move(image, -w - 1, FLOOR_Y - h + 1);
   evas_object_move(light, -w - 1, FLOOR_Y - h + 1);
   
   evas_object_move(shadow, -w - 1 + CENTER(w, sh_w), FLOOR_Y);
   letter_body = _letter_body_circle_add(world, image);
   
   return 0;
}