diff --git a/configure.ac b/configure.ac index 16abae0..90a7c2c 100644 --- a/configure.ac +++ b/configure.ac @@ -5,6 +5,8 @@ rm -f config.cache AC_INIT([ephoto], [0.9.99], [enlightenment-devel@lists.sourceforge.net]) +AC_CHECK_HEADERS([dirent.h limits.h math.h arpa/inet.h netinet/in.h]) + AC_PREREQ([2.60]) AC_CONFIG_SRCDIR([configure.ac]) AC_CONFIG_MACRO_DIR([m4]) @@ -45,6 +47,8 @@ PKG_CHECK_MODULES([EFL], [ eina >= 1.7.0 evas >= 1.7.0 ecore >= 1.7.0 + ecore-file >= 1.7.0 + ecore-ipc >= 1.7.0 edje >= 1.7.0 eo >= 1.7.0 eio >= 1.7.0 diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 0698c96..e7ecc29 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -20,17 +20,38 @@ endif ephoto_SOURCES = \ ephoto.c \ - ephoto_main.c \ + ephoto_bcg.c \ + ephoto_color.c \ ephoto_config.c \ + ephoto_cropper.c \ + ephoto_editor.c \ + ephoto_filters.c \ + ephoto_hsv.c \ + ephoto_ipc.c \ + ephoto_main.c \ + ephoto_thumb.c \ ephoto_thumb_browser.c \ ephoto_single_browser.c \ - ephoto_slideshow.c \ - ephoto_cropper.c \ - ephoto_bcg.c \ - ephoto_hsv.c \ - ephoto_filters.c \ - ephoto_color.c \ - ephoto_editor.c + ephoto_slideshow.c + +internal_bindir = $(datadir)/$(PACKAGE) +internal_bin_PROGRAMS = ephoto_thumbnail + +ephoto_thumbnail_CPPFLAGS = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/src/bin \ + -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ + -Wall \ + -Wextra \ + -Wshadow \ + @EFL_CFLAGS@ + +ephoto_thumbnail_LDADD = @EFL_LIBS@ + +ephoto_thumbnail_SOURCES = \ + ephoto_thumbnailer.c \ + ephoto_ipc.c \ + ephoto_thumb.c noinst_HEADERS = ephoto.h EXTRA_DIST = ephoto.h diff --git a/src/bin/ephoto.c b/src/bin/ephoto.c index 6d21161..642a41f 100644 --- a/src/bin/ephoto.c +++ b/src/bin/ephoto.c @@ -9,7 +9,6 @@ elm_main(int argc, char **argv) eio_init(); elm_need_efreet(); - elm_need_ethumb(); elm_language_set(""); elm_app_compile_data_dir_set(PACKAGE_DATA_DIR); elm_app_info_set(elm_main, "ephoto", "themes/crop.edj"); @@ -21,7 +20,11 @@ elm_main(int argc, char **argv) #endif if (!efreet_mime_init()) - printf("Could not initialize Efreet_Mime!\n"); + printf("Could not initialize Efreet_Mime!\n"); + if (!e_ipc_init()) + printf("Could not initialize IPC!\n"); + if (!e_thumb_init()) + printf("Could not initialize Thumbnailer!\n"); elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); @@ -71,6 +74,7 @@ elm_main(int argc, char **argv) elm_run(); end: + e_thumb_shutdown(); efreet_mime_shutdown(); eio_shutdown(); diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h index a9bdf00..f7ad4ae 100644 --- a/src/bin/ephoto.h +++ b/src/bin/ephoto.h @@ -5,9 +5,17 @@ # include "config.h" # endif +# include +# include +# include +# include +# include +# include +# include # include # include # include +# include # include # include # include @@ -16,13 +24,6 @@ # include # include # include -# include -# include -# include -# include -# include -# include -# include # ifdef HAVE_PO # include @@ -36,6 +37,9 @@ # define ngettext(String1, String2, Var) Var == 1 ? String1 : String2 #endif +# define USE_IPC + +/*local types*/ typedef struct _Ephoto_Config Ephoto_Config; typedef struct _Ephoto Ephoto; typedef struct _Ephoto_Entry Ephoto_Entry; @@ -44,7 +48,9 @@ typedef struct _Ephoto_Event_Entry_Create Ephoto_Event_Entry_Create; typedef enum _Ephoto_State Ephoto_State; typedef enum _Ephoto_Orient Ephoto_Orient; typedef enum _Ephoto_Sort Ephoto_Sort; +typedef enum _Ephoto_Ipc_Domain Ephoto_Ipc_Domain; +/*main window functions*/ Evas_Object *ephoto_window_add(const char *path); void ephoto_title_set(Ephoto *ephoto, const char *title); void ephoto_thumb_size_set(Ephoto *ephoto, int size); @@ -54,11 +60,13 @@ void ephoto_thumb_path_set(Evas_Object *obj, const char *path); void ephoto_directory_set(Ephoto *ephoto, const char *path, Elm_Object_Item *expanded, Eina_Bool dirs_only, Eina_Bool thumbs_only); +/*config panel functions*/ Eina_Bool ephoto_config_init(Ephoto *em); void ephoto_config_save(Ephoto *em); void ephoto_config_free(Ephoto *em); void ephoto_config_main(Ephoto *em); +/*single image functions*/ Evas_Object *ephoto_single_browser_add(Ephoto *ephoto, Evas_Object *parent); void ephoto_single_browser_entries_set(Evas_Object *obj, Eina_List *entries); void ephoto_single_browser_entry_set(Evas_Object *obj, Ephoto_Entry *entry); @@ -72,22 +80,40 @@ void ephoto_single_browser_cancel_editing(Evas_Object *main, Evas_Object *image); /* smart callbacks called: "back" - the user wants to go back to the previous * screen. */ + +/*slideshow functions*/ Evas_Object *ephoto_slideshow_add(Ephoto *ephoto, Evas_Object *parent); void ephoto_slideshow_entries_set(Evas_Object *obj, Eina_List *entries); void ephoto_slideshow_entry_set(Evas_Object *obj, Ephoto_Entry *entry); - /* smart callbacks called: "back" - the user wants to go back to the previous * screen. */ + +/*thumbnail browser functions*/ Evas_Object *ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent); void ephoto_thumb_browser_fsel_clear(Ephoto *ephoto); void ephoto_thumb_browser_top_dir_set(Ephoto *ephoto, const char *dir); void ephoto_thumb_browser_insert(Ephoto *ephoto, Ephoto_Entry *entry); void ephoto_thumb_browser_remove(Ephoto *ephoto, Ephoto_Entry *entry); void ephoto_thumb_browser_update(Ephoto *ephoto, Ephoto_Entry *entry); - /* smart callbacks called: "selected" - an item in the thumb browser is * selected. The selected Ephoto_Entry is passed as event_info argument. */ +/*thumbnailing functions taken from enlightenment*/ +int e_thumb_init(void); +int e_thumb_shutdown(void); +Evas_Object *e_thumb_icon_add(Evas *evas); +void e_thumb_icon_file_set(Evas_Object *obj, const char *file, const char *key); +void e_thumb_icon_size_set(Evas_Object *obj, int w, int h); +void e_thumb_icon_begin(Evas_Object *obj); +void e_thumb_icon_end(Evas_Object *obj); +void e_thumb_icon_rethumb(Evas_Object *obj); +const char *e_thumb_sort_id_get(Evas_Object *obj); +void e_thumb_client_data(Ecore_Ipc_Event_Client_Data *e); +void e_thumb_client_del(Ecore_Ipc_Event_Client_Del *e); +int e_ipc_init(void); +int e_ipc_shutdown(void); + +/*editing functions*/ Evas_Object *ephoto_editor_add(Evas_Object *parent, const char *title, const char *data_name, void *data); void ephoto_editor_del(Evas_Object *obj); @@ -105,6 +131,8 @@ void ephoto_filter_black_and_white(Evas_Object *main, Evas_Object *image); void ephoto_filter_old_photo(Evas_Object *main, Evas_Object *image); void ephoto_filter_histogram_eq(Evas_Object *main, Evas_Object *image); +/*data types and structures*/ + enum _Ephoto_State { EPHOTO_STATE_THUMB, @@ -132,6 +160,11 @@ enum _Ephoto_Sort EPHOTO_SORT_MODTIME_DESCENDING }; +enum _Ephoto_Ipc_Domain +{ + EPHOTO_IPC_DOMAIN_THUMB +}; + struct _Ephoto_Config { int config_version; @@ -219,6 +252,7 @@ struct _Ephoto_Event_Entry_Create Ephoto_Entry *entry; }; +/*ephoto file functions*/ Ephoto_Entry *ephoto_entry_new(Ephoto *ephoto, const char *path, const char *label, Eina_File_Type type); Eina_Bool ephoto_entry_exists(Ephoto *ephoto, const char *path); @@ -230,6 +264,7 @@ void ephoto_entry_free_listener_del(Ephoto_Entry *entry, void ephoto_entries_free(Ephoto *ephoto); int ephoto_entries_cmp(const void *pa, const void *pb); +/*check if image can be loaded*/ static inline Eina_Bool _ephoto_eina_file_direct_info_image_useful(const Eina_File_Direct_Info *info) { @@ -264,6 +299,7 @@ _ephoto_eina_file_direct_info_image_useful(const Eina_File_Direct_Info *info) return EINA_FALSE; } +/*check if image can be saved*/ static inline Eina_Bool _ephoto_file_image_can_save(const char *ext) { @@ -283,6 +319,7 @@ _ephoto_file_image_can_save(const char *ext) return EINA_FALSE; } +/*event types*/ extern int EPHOTO_EVENT_ENTRY_CREATE; extern int EPHOTO_EVENT_POPULATE_START; extern int EPHOTO_EVENT_POPULATE_END; diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c index dcd8e8e..9ca0269 100644 --- a/src/bin/ephoto_main.c +++ b/src/bin/ephoto_main.c @@ -630,25 +630,9 @@ _thumb_gen_size_changed_timer_cb(void *data) EINA_LIST_FOREACH(ephoto->thumbs, l, o) { - Ethumb_Thumb_Format format; - - format = (Ethumb_Thumb_Format) (uintptr_t) - evas_object_data_get(o, "ephoto_format"); - if (format) - { - elm_thumb_format_set(o, format); - if (format == ETHUMB_THUMB_FDO) - { - if (ephoto->config->thumb_gen_size < 256) - elm_thumb_fdo_size_set(o, ETHUMB_THUMB_NORMAL); - else - elm_thumb_fdo_size_set(o, ETHUMB_THUMB_LARGE); - } - else - elm_thumb_size_set(o, ephoto->thumb_gen_size, + e_thumb_icon_size_set(o, ephoto->thumb_gen_size, ephoto->thumb_gen_size); - elm_thumb_reload(o); - } + e_thumb_icon_rethumb(o); } end: ephoto->timer.thumb_regen = NULL; @@ -682,6 +666,7 @@ _thumb_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, { Ephoto *ephoto = data; + e_thumb_icon_end(obj); ephoto->thumbs = eina_list_remove(ephoto->thumbs, obj); } @@ -698,16 +683,29 @@ ephoto_thumb_add(Ephoto *ephoto, Evas_Object *parent, const char *path) { ext++; if ((strcasecmp(ext, "edj") == 0)) - o = elm_icon_add(parent); + { + o = elm_icon_add(parent); + } else - o = elm_thumb_add(parent); + { + o = e_thumb_icon_add(parent); + e_thumb_icon_file_set(o, path, NULL); + e_thumb_icon_size_set(o, ephoto->thumb_gen_size, + ephoto->thumb_gen_size); + e_thumb_icon_begin(o); + } } else - o = elm_thumb_add(parent); - ephoto_thumb_path_set(o, path); + { + o = e_thumb_icon_add(parent); + e_thumb_icon_file_set(o, path, NULL); + e_thumb_icon_size_set(o, ephoto->thumb_gen_size, + ephoto->thumb_gen_size); + e_thumb_icon_begin(o); + } } else - o = elm_thumb_add(parent); + o = e_thumb_icon_add(parent); if (!o) return NULL; @@ -720,16 +718,13 @@ ephoto_thumb_add(Ephoto *ephoto, Evas_Object *parent, const char *path) void ephoto_thumb_path_set(Evas_Object *obj, const char *path) { - Ethumb_Thumb_Format format = ETHUMB_THUMB_FDO; const char *group = NULL; const char *ext = strrchr(path, '.'); if (ext) { ext++; - if ((strcasecmp(ext, "jpg") == 0) || (strcasecmp(ext, "jpeg") == 0)) - format = ETHUMB_THUMB_JPEG; - else if ((strcasecmp(ext, "edj") == 0)) + if ((strcasecmp(ext, "edj") == 0)) { if (edje_file_group_exists(path, "e/desktop/background")) group = "e/desktop/background"; @@ -741,16 +736,11 @@ ephoto_thumb_path_set(Evas_Object *obj, const char *path) edje_file_collection_list_free(g); } elm_image_file_set(obj, path, group); - evas_object_data_set(obj, "ephoto_format", NULL); return; } } - elm_thumb_format_set(obj, format); - evas_object_data_set(obj, "ephoto_format", (void *) (uintptr_t) format); - elm_thumb_crop_align_set(obj, 0.5, 0.5); - elm_thumb_aspect_set(obj, ETHUMB_THUMB_CROP); - elm_thumb_orientation_set(obj, ETHUMB_THUMB_ORIENT_ORIGINAL); - elm_thumb_file_set(obj, path, group); + e_thumb_icon_file_set(obj, path, group); + e_thumb_icon_begin(obj); } Ephoto_Entry * diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c index e35e4fb..ab4e6cb 100644 --- a/src/bin/ephoto_thumb_browser.c +++ b/src/bin/ephoto_thumb_browser.c @@ -312,7 +312,10 @@ _ephoto_thumb_file_icon_get(void *data, Evas_Object *obj, return NULL; if (e) - thumb = ephoto_thumb_add(e->ephoto, obj, e->path); + { + thumb = ephoto_thumb_add(e->ephoto, obj, e->path); + evas_object_show(thumb); + } return thumb; }