simplify, move thumb count to theme, min limit to contents.

If we used such a large border with small item sizes, the content size
would be zero and thus icons did turn invisible. Limit that to 16x16.

"thumbs" in group will say how many thumbnails are desired, instead of
hardcoding it to 3.

countless code simplifications.



SVN revision: 53207
This commit is contained in:
Gustavo Sverzut Barbieri 2010-10-08 20:21:29 +00:00
parent 5637a4879f
commit 50c67f7ad6
2 changed files with 141 additions and 196 deletions

View File

@ -95,72 +95,29 @@ collections
}
}
}
group
{
name: "/ephoto/thumb/no_border";
parts
{
part
{
name: "border";
type: RECT;
mouse_events: 0;
description
{
state: "default" 0.0;
color: 255 255 255 0;
rel1.offset: 18 18;
rel2.offset: -17 -17;
}
}
part
{
name: "clipper";
type: RECT;
mouse_events: 0;
description
{
state: "default" 0.0;
visible: 1;
color: 255 255 255 255;
}
}
part
{
name: "ephoto.swallow.content";
type: SWALLOW;
mouse_events: 1;
clip_to: "clipper";
description
{
state: "default" 0.0;
visible: 1;
rel1.to: "border";
rel1.offset: 8 8;
rel2.to: "border";
rel2.offset: -9 -9;
color: 255 255 255 255;
}
}
part
{
name: "event_area";
type: RECT;
mouse_events: 1;
description
{
state: "default" 0.0;
color: 255 255 255 0;
rel1.to: "clipper";
rel1.relative: 0.0 0.0;
rel1.offset: 0 0;
rel2.to: "clipper";
rel2.relative: 1.0 1.0;
rel2.offset: -1 -1;
}
}
}
}
group { name: "/ephoto/thumb/no_border";
parts {
part { name: "ephoto.swallow.content";
type: SWALLOW;
mouse_events: 0;
description { state: "default" 0.0;
min: 16 16;
rel1.offset: 8 8;
rel2.offset: -9 -9;
}
}
part {
name: "eventarea";
type: RECT;
description { state: "default" 0.0;
color: 255 255 255 0;
}
}
}
}
group
{
name: "elm/gengrid/item/ephoto/default";
@ -617,73 +574,58 @@ collections
}
}
}
group
{
name: "/ephoto/directory/thumb/layout";
parts
{
part {
name: "ephoto.swallow.thumb1";
group { name: "/ephoto/directory/thumb/layout";
data.item: "thumbs" "3";
parts {
part { name: "ephoto.swallow.thumb1";
type: SWALLOW;
description {
state: "default" 0.0;
color: 255 0 0 255;
map {
on: 0;
}
map.on: 0;
}
}
part {
name: "ephoto.swallow.thumb2";
type: SWALLOW;
part { name: "ephoto.swallow.thumb2";
type: SWALLOW;
description {
state: "default" 0.0;
color: 255 0 0 255;
map {
on: 1;
rotation {
z: 20;
}
}
}
}
part {
name: "ephoto.swallow.thumb3";
type: SWALLOW;
description {
state: "default" 0.0;
color: 255 0 0 255;
map {
on: 1;
rotation {
z: -20;
}
}
}
}
}
programs {
program { name: "load";
signal: "load";
script {
new Float:val;
custom_state(PART:"ephoto.swallow.thumb3", "default", 0.0);
custom_state(PART:"ephoto.swallow.thumb2", "default", 0.0);
val = randf();
val = 40 * val - 20;
set_state_val(PART:"ephoto.swallow.thumb3", STATE_MAP_ROT_Z, val);
val = randf();
val = 40 * val - 20;
set_state_val(PART:"ephoto.swallow.thumb2", STATE_MAP_ROT_Z, val);
set_state(PART:"ephoto.swallow.thumb2", "custom", 0.0);
set_state(PART:"ephoto.swallow.thumb3", "custom", 0.0);
on: 1;
rotation.z: 20;
}
}
}
}
}
part { name: "ephoto.swallow.thumb3";
type: SWALLOW;
description {
state: "default" 0.0;
map {
on: 1;
rotation.z: -20;
}
}
}
}
programs {
program { name: "load";
signal: "load";
script {
new Float:val;
custom_state(PART:"ephoto.swallow.thumb3", "default", 0.0);
custom_state(PART:"ephoto.swallow.thumb2", "default", 0.0);
val = randf();
val = 40 * val - 20;
set_state_val(PART:"ephoto.swallow.thumb3", STATE_MAP_ROT_Z, val);
val = randf();
val = 40 * val - 20;
set_state_val(PART:"ephoto.swallow.thumb2", STATE_MAP_ROT_Z, val);
set_state(PART:"ephoto.swallow.thumb2", "custom", 0.0);
set_state(PART:"ephoto.swallow.thumb3", "custom", 0.0);
}
}
}
}
}

View File

@ -1,8 +1,4 @@
#include <Elementary.h>
#include <Eio.h>
#include "config.h"
#include "ephoto.h"
typedef struct _Directory_Thumb Directory_Thumb;
@ -10,10 +6,21 @@ struct _Directory_Thumb
{
Evas_Object *layout;
Eio_File *file;
Eina_List *thumbs;
Eina_List *frames;
const char *path;
int theme_thumb_count;
};
static void
_layout_del(void *data, Evas *e, Evas_Object *layout, void *event_info)
{
Directory_Thumb *dt = data;
if (dt->file) eio_file_cancel(dt->file);
eina_list_free(dt->frames);
eina_stringshare_del(dt->path);
free(dt);
}
static Eina_Bool
_populate_filter(void *data, const char *file)
{
@ -37,113 +44,109 @@ static void
_populate_end(void *data)
{
Directory_Thumb *dt = (Directory_Thumb*) data;
dt->file = NULL;
}
static void
_populate_error(int error, void *data)
{
Directory_Thumb *dt = (Directory_Thumb*)data;
dt->file = NULL;
}
static void
_populate_main(void *data, const char *file)
{
Evas_Object *thumb, *o;
Evas_Object *frame, *image;
int position;
Directory_Thumb *dt = data;
char buf[4096];
position = eina_list_count(dt->thumbs);
position = eina_list_count(dt->frames);
if (position > 3 )
if (position > dt->theme_thumb_count)
{
eio_file_cancel(dt->file);
return;
if (dt->file)
{
eio_file_cancel(dt->file);
dt->file = NULL;
}
return;
}
thumb = elm_layout_add(dt->layout);
elm_layout_file_set(thumb, PACKAGE_DATA_DIR "/themes/default/ephoto.edj",
"/ephoto/thumb/no_border");
evas_object_size_hint_weight_set(thumb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(thumb);
frame = elm_layout_add(dt->layout);
if (!elm_layout_file_set
(frame, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/thumb"))
ERR("could not load group '/ephoto/thumb' from file '%s'",
PACKAGE_DATA_DIR "/themes/default/ephoto.edj");
evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(frame);
thumb = elm_layout_add(dt->layout);
elm_layout_file_set(thumb, PACKAGE_DATA_DIR "/themes/default/ephoto.edj",
"/ephoto/thumb");
evas_object_size_hint_weight_set(thumb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(thumb);
o = elm_thumb_add(thumb);
elm_thumb_file_set(o, file, NULL);
elm_object_style_set(o, "ephoto");
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND,
EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL,
EVAS_HINT_FILL);
evas_object_show(o);
elm_layout_content_set(thumb, "ephoto.swallow.content", o);
image = elm_thumb_add(frame);
elm_thumb_file_set(image, file, NULL);
elm_object_style_set(image, "ephoto");
evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(image, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_layout_content_set(frame, "ephoto.swallow.content", image);
snprintf(buf, sizeof(buf), "ephoto.swallow.thumb%d", position);
elm_layout_content_set(dt->layout, buf, thumb);
evas_object_show(thumb);
dt->thumbs = eina_list_append(dt->thumbs, thumb);
elm_layout_content_set(dt->layout, buf, frame);
dt->frames = eina_list_append(dt->frames, frame);
}
Evas_Object *ephoto_directory_thumb_add(Evas_Object *parent, const char *path)
Evas_Object *
ephoto_directory_thumb_add(Evas_Object *parent, const char *path)
{
Directory_Thumb *dt;
Evas_Object *thumb, *o;
Evas_Object *thumb, *placeholder;
const char *s;
dt = calloc(1, sizeof( Directory_Thumb));
dt->path = eina_stringshare_add(path);
dt->layout = elm_layout_add(parent);
if (!elm_layout_file_set(dt->layout, PACKAGE_DATA_DIR "/themes/default/ephoto.edj",
"/ephoto/directory/thumb/layout"))
printf(" Error loading group /ephoto/directory/thumb/layout in %s\n", PACKAGE_DATA_DIR "/themes/default/ephoto.edj");
evas_object_size_hint_weight_set(dt->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
if (!elm_layout_file_set
(dt->layout, PACKAGE_DATA_DIR "/themes/default/ephoto.edj",
"/ephoto/directory/thumb/layout"))
ERR("could not load group '/ephoto/directory/thumb/layout' from file '%s'",
PACKAGE_DATA_DIR "/themes/default/ephoto.edj");
evas_object_size_hint_weight_set
(dt->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(dt->layout);
evas_object_data_set(dt->layout, "dt", dt);
evas_object_event_callback_add
(dt->layout, EVAS_CALLBACK_DEL, _layout_del, dt);
thumb = elm_layout_add(dt->layout);
if (!elm_layout_file_set(thumb, PACKAGE_DATA_DIR "/themes/default/ephoto.edj",
"/ephoto/thumb/no_border"))
printf(" Error loading group /ephoto/thumb/no_border in %s\n", PACKAGE_DATA_DIR "/themes/default/ephoto.edj");
if (!elm_layout_file_set
(thumb, PACKAGE_DATA_DIR "/themes/default/ephoto.edj",
"/ephoto/thumb/no_border"))
ERR("could not load group '/ephoto/thumb/no_border' from file '%s'",
PACKAGE_DATA_DIR "/themes/default/ephoto.edj");
//evas_object_size_hint_weight_set(thumb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(thumb);
o = elm_image_add(thumb);
elm_image_file_set(o, PACKAGE_DATA_DIR "/images/change_directory.png", NULL);
evas_object_show(o);
elm_layout_content_set(thumb, "ephoto.swallow.content", o);
elm_layout_content_set(dt->layout, "ephoto.swallow.thumb1", thumb);
evas_object_show(dt->layout);
evas_object_data_set(dt->layout, "dt", dt);
placeholder = elm_image_add(thumb);
elm_image_file_set
(placeholder, PACKAGE_DATA_DIR "/images/change_directory.png", NULL);
elm_layout_content_set(thumb, "ephoto.swallow.content", placeholder);
dt->file = eio_file_ls(path,
_populate_filter,
_populate_main,
_populate_end,
_populate_error,
dt);
s = edje_object_data_get(elm_layout_edje_get(dt->layout), "thumbs");
if (s)
{
dt->theme_thumb_count = atoi(s);
/* TODO: fix "Up" to be another type of directory and do not need
* to check for existence here */
if ((dt->theme_thumb_count > 0) && (ecore_file_exists(path)))
dt->file = eio_file_ls(path,
_populate_filter,
_populate_main,
_populate_end,
_populate_error,
dt);
}
/* TODO add del callback to free dt and its member */
return dt->layout;
}