Eina_Bool print;
Eina_Bool slave_mode;
double scale;
+ int pad;
char *title;
};
static Eina_Bool _edje_load_or_show_error(Evas_Object *edje, const char *file, const char *group);
static Ecore_Evas *win;
+static Evas *evas;
+static Evas_Object *bg, *bg2 = NULL, *edje;
+static struct opts opts;
static void
_win_title_set(const char *group, const char *file)
}
static void
-_reset_size_hints(void *data, Evas *e EINA_UNUSED, Evas_Object *stack, void *event_info EINA_UNUSED)
-{
- Evas_Coord minw, minh;
- Evas_Object *edje = data;
-
- edje_object_size_min_get(edje, &minw, &minh);
- if ((minw <= 0) && (minh <= 0))
- edje_object_size_min_calc(edje, &minw, &minh);
-
- evas_object_size_hint_min_set(stack, minw, minh);
-}
-
-static void
-_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *stack EINA_UNUSED, void *event_info)
+_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
{
Evas_Event_Key_Down *ev = event_info;
- struct opts *opts = data;
if ((!strcmp(ev->keyname, "equal")) ||
(!strcmp(ev->keyname, "plus")))
- opts->scale += 0.1;
+ opts.scale += 0.1;
else if ((!strcmp(ev->keyname, "minus")) ||
(!strcmp(ev->keyname, "underscore")))
- opts->scale -= 0.1;
+ opts.scale -= 0.1;
else if ((!strcmp(ev->keyname, "0")))
- opts->scale = 1.0;
- if (opts->scale < 0.1) opts->scale = 0.1;
- else if (opts->scale > 10.0)
- opts->scale = 1.0;
- edje_scale_set(opts->scale);
-}
-
-static Evas_Object *
-_create_stack(Evas *evas, const struct opts *opts)
-{
- Evas_Object *stack = evas_object_box_add(evas);
- if (!stack)
- {
- fputs("ERROR: could not create object stack (box).\n", stderr);
- return NULL;
- }
- evas_object_box_layout_set(stack, evas_object_box_layout_stack, NULL, NULL);
- evas_object_resize(stack, opts->size.w, opts->size.h);
- evas_object_size_hint_weight_set(stack, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(stack, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(stack);
- return stack;
+ opts.scale = 1.0;
+ if (opts.scale < 0.1) opts.scale = 0.1;
+ else if (opts.scale > 10.0)
+ opts.scale = 10.0;
+ edje_scale_set(opts.scale);
}
static Evas_Object *
-_create_bg(Evas *evas, const struct opts *opts)
+_create_bg(void)
{
- const unsigned char *color = opts->color;
- Evas_Object *bg = evas_object_rectangle_add(evas);
- if (!bg)
+ const unsigned char *color = opts.color;
+ Evas_Object *o = evas_object_rectangle_add(evas);
+ if (!o)
{
fputs("ERROR: could not create background.\n", stderr);
return NULL;
}
- evas_object_resize(bg, opts->size.w, opts->size.h);
- evas_object_color_set(bg, color[0], color[1], color[2], 255);
- evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(bg);
- return bg;
+ evas_object_color_set(o, color[0], color[1], color[2], 255);
+ evas_object_show(o);
+ return o;
}
static void
const char *file;
const char *group;
edje_object_signal_callback_del(obj, "edje,change,file", "edje", _edje_reload);
-
edje_object_file_get(obj, &file, &group);
_edje_load_or_show_error(obj, file, group);
}
}
static Evas_Object *
-_create_edje(Evas *evas, const struct opts *opts)
+_create_edje(void)
{
Evas_Coord minw, minh, maxw, maxh;
- Evas_Object *edje = edje_object_add(evas);
- if (!edje)
+ Evas_Object *o = edje_object_add(evas);
+ if (!o)
{
fputs("ERROR: could not create edje.\n", stderr);
return NULL;
}
- if (opts->group)
+ if (opts.group)
{
- if (!_edje_load_or_show_error(edje, opts->file, opts->group))
+ if (!_edje_load_or_show_error(o, opts.file, opts.group))
{
evas_object_del(edje);
return NULL;
}
- if (!opts->title) _win_title_set(opts->group, opts->file);
+ if (!opts.title) _win_title_set(opts.group, opts.file);
}
else
{
- if (edje_file_group_exists(opts->file, "main"))
+ if (edje_file_group_exists(opts.file, "main"))
{
- if (!_edje_load_or_show_error(edje, opts->file, "main"))
+ if (!_edje_load_or_show_error(o, opts.file, "main"))
{
evas_object_del(edje);
return NULL;
}
- if (!opts->title) _win_title_set("main", opts->file);
+ if (!opts.title) _win_title_set("main", opts.file);
}
else
{
- Eina_List *groups = edje_file_collection_list(opts->file);
+ Eina_List *groups = edje_file_collection_list(opts.file);
const char *group;
if (!groups)
{
fprintf(stderr, "ERROR: file '%s' has no groups!\n",
- opts->file);
+ opts.file);
evas_object_del(edje);
return NULL;
}
group = groups->data;
- if (!_edje_load_or_show_error(edje, opts->file, group))
+ if (!_edje_load_or_show_error(o, opts.file, group))
{
edje_file_collection_list_free(groups);
evas_object_del(edje);
return NULL;
}
- if (!opts->title) _win_title_set(group, opts->file);
+ if (!opts.title) _win_title_set(group, opts.file);
edje_file_collection_list_free(groups);
}
}
- evas_object_smart_callback_add(edje, "circular,dependency", _edje_circul, opts->group);
+ evas_object_smart_callback_add(o, "circular,dependency", _edje_circul, opts.group);
- edje_object_size_max_get(edje, &maxw, &maxh);
- edje_object_size_min_get(edje, &minw, &minh);
+ edje_object_size_max_get(o, &maxw, &maxh);
+ edje_object_size_min_get(o, &minw, &minh);
if ((minw <= 0) && (minh <= 0))
- edje_object_size_min_calc(edje, &minw, &minh);
+ edje_object_size_min_calc(o, &minw, &minh);
- evas_object_size_hint_max_set(edje, maxw, maxh);
- evas_object_size_hint_min_set(edje, minw, minh);
+ ecore_evas_size_max_set(win,
+ maxw > 0 ? (maxw + opts.pad * 2) : 0,
+ maxh > 0 ? (maxh + opts.pad * 2) : 0);
+ ecore_evas_size_min_set(win, (minw + opts.pad * 2), (minh + opts.pad * 2));
- evas_object_size_hint_weight_set(edje, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(edje, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(edje);
+ evas_object_show(o);
- return edje;
+ return o;
}
static unsigned char
ecore_main_loop_quit();
}
+static void
+_cb_resize(Ecore_Evas *ee)
+{
+ int w, h;
+ ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
+ evas_object_move(edje, opts.pad, opts.pad);
+ evas_object_resize(edje, w - (opts.pad * 2), h - (opts.pad * 2));
+ evas_object_move(bg, opts.pad, opts.pad);
+ evas_object_resize(bg, w - (opts.pad * 2), h - (opts.pad * 2));
+ if (bg2) evas_object_resize(bg2, w, h);
+}
+
const Ecore_Getopt optdesc = {
"edje_player",
"%prog [options] <filename.edj>",
('Z', "size", "size to use in wxh form.", "WxH",
ecore_getopt_callback_size_parse, NULL),
ECORE_GETOPT_CALLBACK_ARGS
- ('c', "bg-color", "Color of the background (if not shaped or alpha)",
- "RRGGBB", _parse_color, NULL),
+ ('c', "bg-color", "Color of the background (if not shaped or alpha) e.g. 255,150,50",
+ "R,G,B", _parse_color, NULL),
ECORE_GETOPT_STORE_TRUE
('b', "borderless", "Display window without border."),
ECORE_GETOPT_STORE_TRUE
('S', "slave-mode", "Listen for commands on stdin"),
ECORE_GETOPT_STORE_DOUBLE
('z', "scale", "Set scale factor"),
+ ECORE_GETOPT_STORE_INT
+ ('P', "pad", "Set pixel padding around object"),
ECORE_GETOPT_LICENSE('L', "license"),
ECORE_GETOPT_COPYRIGHT('C', "copyright"),
ECORE_GETOPT_VERSION('V', "version"),
int
main(int argc, char **argv)
{
- Evas *evas;
- Evas_Object *stack, *edje;
- struct opts opts;
Eina_Bool quit_option = EINA_FALSE;
int args;
Eina_List *groups;
ECORE_GETOPT_VALUE_BOOL(opts.print),
ECORE_GETOPT_VALUE_BOOL(opts.slave_mode),
ECORE_GETOPT_VALUE_DOUBLE(opts.scale),
+ ECORE_GETOPT_VALUE_INT(opts.pad),
ECORE_GETOPT_VALUE_BOOL(quit_option),
ECORE_GETOPT_VALUE_BOOL(quit_option),
ECORE_GETOPT_VALUE_BOOL(quit_option),
ecore_evas_callback_delete_request_set(win, _cb_delete);
evas = ecore_evas_get(win);
- stack = _create_stack(evas, &opts);
- if (!stack)
- {
- goto free_ecore_evas;
- }
-
- ecore_evas_object_associate(win, stack, ECORE_EVAS_OBJECT_ASSOCIATE_BASE);
if (opts.alpha)
ecore_evas_alpha_set(win, EINA_TRUE);
else if (opts.shaped)
ecore_evas_shaped_set(win, EINA_TRUE);
- else
- {
- Evas_Object *bg = _create_bg(evas, &opts);
- if (bg) evas_object_box_append(stack, bg);
- }
- edje = _create_edje(evas, &opts);
- if (edje)
- evas_object_box_append(stack, edje);
- else
+ if (opts.pad > 0)
{
- goto free_ecore_evas;
+ bg2 = evas_object_rectangle_add(evas);
+ evas_object_resize(bg2, opts.size.w, opts.size.h);
+ if (opts.alpha)
+ evas_object_color_set(bg2, 0, 0, 0, 64);
+ else
+ evas_object_color_set(bg2, 64, 64, 64, 255);
+ evas_object_show(bg2);
}
+ bg = _create_bg();
+
+ edje = _create_edje();
+ if (!edje) goto free_ecore_evas;
- evas_object_focus_set(stack, EINA_TRUE);
- evas_object_event_callback_add(stack, EVAS_CALLBACK_KEY_DOWN,
+ ecore_evas_callback_resize_set(win, _cb_resize);
+ _cb_resize(win);
+ evas_object_focus_set(bg, EINA_TRUE);
+ evas_object_event_callback_add(bg, EVAS_CALLBACK_KEY_DOWN,
_key_down, &opts);
- evas_object_event_callback_add(stack, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _reset_size_hints, edje);
if (opts.print)
{