what about generating thumbnails that match the expected view size?

now generating thumbnails at 128, 256 and 512, the generation is
delayed to avoid unnecessary work for ethumbd.



SVN revision: 53217
This commit is contained in:
Gustavo Sverzut Barbieri 2010-10-08 22:48:12 +00:00
parent 2fd24ddbac
commit e3a1481bb9
6 changed files with 102 additions and 17 deletions

View File

@ -25,7 +25,6 @@ main(int argc, char **argv)
r = 1;
goto end_log_domain;
}
ethumb_client_size_set(client, 100, 100);
ethumb_client_crop_align_set(client, 0.5, 0.5);
ethumb_client_aspect_set(client, ETHUMB_THUMB_KEEP_ASPECT);
ethumb_client_orientation_set(client, ETHUMB_THUMB_ORIENT_ORIGINAL);

View File

@ -30,6 +30,9 @@ typedef enum _Ephoto_Orient Ephoto_Orient;
/*Main Functions*/
void ephoto_create_main_window(const char *directory, const char *image);
void ephoto_thumb_size_set(int size);
Evas_Object *ephoto_thumb_add(Evas_Object *parent, const char *path);
/* Configuration */
Eina_Bool ephoto_config_init(Ephoto *em);
@ -85,6 +88,7 @@ struct _Ephoto_Config
int config_version;
int thumb_size;
int thumb_gen_size;
int remember_directory;
const char *directory;
@ -122,6 +126,7 @@ extern Ephoto *em;
extern int __log_domain;
#define DBG(...) EINA_LOG_DOM_DBG(__log_domain, __VA_ARGS__)
#define INF(...) EINA_LOG_DOM_INFO(__log_domain, __VA_ARGS__)
#define ERR(...) EINA_LOG_DOM_ERR(__log_domain, __VA_ARGS__)
static inline Eina_Bool

View File

@ -1,6 +1,6 @@
#include "ephoto.h"
#define CONFIG_VERSION 4
#define CONFIG_VERSION 5
static int _ephoto_config_load(Ephoto *em);
static Eina_Bool _ephoto_on_config_save(void *data);
@ -24,6 +24,7 @@ ephoto_config_init(Ephoto *em)
#define C_VAL(edd, type, member, dtype) EET_DATA_DESCRIPTOR_ADD_BASIC(edd, type, #member, member, dtype)
C_VAL(D, T, config_version, EET_T_INT);
C_VAL(D, T, thumb_size, EET_T_INT);
C_VAL(D, T, thumb_gen_size, EET_T_INT);
C_VAL(D, T, remember_directory, EET_T_INT);
C_VAL(D, T, directory, EET_T_STRING);
C_VAL(D, T, slideshow_timeout, EET_T_DOUBLE);
@ -37,6 +38,7 @@ ephoto_config_init(Ephoto *em)
/* Start a new config */
em->config->config_version = CONFIG_VERSION;
em->config->thumb_size = 256;
em->config->thumb_gen_size = 256;
em->config->remember_directory = 1;
em->config->slideshow_timeout = 4.0;
em->config->slideshow_transition =
@ -59,6 +61,9 @@ ephoto_config_init(Ephoto *em)
if (em->config->config_version < 4)
em->config->sort_images = 1;
if (em->config->config_version < 5)
em->config->thumb_gen_size = 256;
/* Incremental additions */
em->config->config_version = CONFIG_VERSION;
break;

View File

@ -69,8 +69,7 @@ _populate_main(void *data, const Eina_File_Direct_Info *info)
evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(frame);
image = elm_thumb_add(frame);
elm_thumb_file_set(image, info->path, NULL);
image = ephoto_thumb_add(frame, info->path);
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);

View File

@ -3,6 +3,9 @@
/*Ephoto Main Global*/
Ephoto *em;
static Eina_List *_thumbs = NULL;
static Ecore_Timer *_thumb_gen_size_changed_timer = NULL;
/*Inline Callbacks*/
static void _ephoto_delete_main_window(void *data, Evas_Object *obj, void *event_info);
static void _ephoto_flow_browser_delete_cb(void *data, Evas_Object *obj, void *event_info);
@ -42,10 +45,22 @@ void
ephoto_create_main_window(const char *directory, const char *image)
{
char current_directory[PATH_MAX];
Ethumb_Client *client = elm_thumb_ethumb_client_get();
em = calloc(1, sizeof(Ephoto));
if (!ephoto_config_init(em))
_ephoto_delete_main_window(NULL, NULL, NULL);
{
_ephoto_delete_main_window(NULL, NULL, NULL);
return;
}
if ((em->config->thumb_gen_size != 128) &&
(em->config->thumb_gen_size != 256) &&
(em->config->thumb_gen_size != 512))
ephoto_thumb_size_set(em->config->thumb_size);
else
ethumb_client_size_set
(client, em->config->thumb_gen_size, em->config->thumb_gen_size);
/*Setup the main window*/
em->win = elm_win_add(NULL, "ephoto", ELM_WIN_BASIC);
@ -150,3 +165,71 @@ _ephoto_delete_main_window(void *data, Evas_Object *obj, void *event_info)
elm_exit();
}
static Eina_Bool
_thumb_gen_size_changed_timer_cb(void *data)
{
const int gen_size = (long)data;
Ethumb_Client *client;
const Eina_List *l;
Evas_Object *o;
if (em->config->thumb_gen_size == gen_size) goto end;
INF("thumbnail generation size changed from %d to %d",
em->config->thumb_gen_size, gen_size);
client = elm_thumb_ethumb_client_get();
em->config->thumb_gen_size = gen_size;
ethumb_client_size_set(client, gen_size, gen_size);
EINA_LIST_FOREACH(_thumbs, l, o)
elm_thumb_reload(o);
end:
_thumb_gen_size_changed_timer = NULL;
return EINA_FALSE;
}
void
ephoto_thumb_size_set(int size)
{
int gen_size;
if (em->config->thumb_size != size)
{
INF("thumbnail display size changed from %d to %d",
em->config->thumb_size, size);
em->config->thumb_size = size;
ephoto_config_save(em, EINA_FALSE);
}
if (size <= 128) gen_size = 128;
else if (size <= 256) gen_size = 256;
else gen_size = 512;
if (_thumb_gen_size_changed_timer)
{
ecore_timer_del(_thumb_gen_size_changed_timer);
_thumb_gen_size_changed_timer = NULL;
}
_thumb_gen_size_changed_timer = ecore_timer_add
(0.1, _thumb_gen_size_changed_timer_cb, (void*)(long)gen_size);
}
static void
_thumb_del(void *data, Evas *e, Evas_Object *o, void *event_info)
{
_thumbs = eina_list_remove(_thumbs, o);
}
Evas_Object *
ephoto_thumb_add(Evas_Object *parent, const char *path)
{
Evas_Object *o = elm_thumb_add(parent);
if (!o) return NULL;
elm_thumb_file_set(o, path, NULL);
_thumbs = eina_list_append(_thumbs, o);
evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _thumb_del, NULL);
return o;
}

View File

@ -394,14 +394,11 @@ _ephoto_zoom_regular_size(void *data, Evas_Object *obj, void *event)
static void
_ephoto_slider_changed(void *data, Evas_Object *obj, void *event)
{
int val;
Ephoto_Thumb_Browser *tb = data;
Ephoto_Thumb_Browser *tb = data;
int val = elm_slider_value_get(tb->thumb_slider);
elm_gengrid_item_size_set(tb->thumb_browser, val, val / THUMB_RATIO);
val = elm_slider_value_get(tb->thumb_slider);
elm_gengrid_item_size_set(tb->thumb_browser, val, val / THUMB_RATIO);
em->config->thumb_size = val;
ephoto_config_save(em, EINA_FALSE);
ephoto_thumb_size_set(val);
}
/* Called when adding a directory or a file to elm_gengrid */
@ -460,11 +457,8 @@ _ephoto_get_icon(void *data, Evas_Object *obj, const char *part)
o = ephoto_directory_thumb_add(thumb, etd->thumb_path);
}
else
{
o = elm_thumb_add(thumb);
elm_thumb_file_set(o, etd->thumb_path, NULL);
}
evas_object_show(o);
o = ephoto_thumb_add(thumb, etd->thumb_path);
elm_layout_content_set(thumb, "ephoto.swallow.content", o);
return thumb;