2008-09-29 23:58:56 -07:00
|
|
|
#include <Elementary.h>
|
|
|
|
#include "elm_priv.h"
|
2012-07-30 15:36:38 -07:00
|
|
|
#include "elm_widget_icon.h"
|
2008-09-29 23:58:56 -07:00
|
|
|
|
2010-11-26 03:37:45 -08:00
|
|
|
#ifdef ELM_EFREET
|
|
|
|
#define NON_EXISTING (void *)-1
|
2010-12-10 12:29:50 -08:00
|
|
|
static const char *icon_theme = NULL;
|
2010-11-26 03:37:45 -08:00
|
|
|
#endif
|
|
|
|
|
2012-07-30 15:36:38 -07:00
|
|
|
EAPI const char ELM_ICON_SMART_NAME[] = "elm_icon";
|
2008-09-29 23:58:56 -07:00
|
|
|
|
2011-05-31 09:16:01 -07:00
|
|
|
#ifdef HAVE_ELEMENTARY_ETHUMB
|
|
|
|
static Eina_List *_elm_icon_retry = NULL;
|
|
|
|
static int _icon_pending_request = 0;
|
|
|
|
#endif
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
static const char SIG_THUMB_DONE[] = "thumb,done";
|
|
|
|
static const char SIG_THUMB_ERROR[] = "thumb,error";
|
|
|
|
static const Evas_Smart_Cb_Description _smart_callbacks[] = {
|
|
|
|
{SIG_THUMB_DONE, ""},
|
|
|
|
{SIG_THUMB_ERROR, ""},
|
2011-04-15 10:05:34 -07:00
|
|
|
{NULL, NULL}
|
|
|
|
};
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
EVAS_SMART_SUBCLASS_NEW
|
2012-07-30 15:36:38 -07:00
|
|
|
(ELM_ICON_SMART_NAME, _elm_icon, Elm_Icon_Smart_Class,
|
2012-05-25 12:53:59 -07:00
|
|
|
Elm_Image_Smart_Class, elm_image_smart_class_get, _smart_callbacks);
|
2011-04-15 10:05:34 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
/* FIXME: move this code to ecore */
|
2010-11-05 11:22:42 -07:00
|
|
|
#ifdef _WIN32
|
|
|
|
static Eina_Bool
|
|
|
|
_path_is_absolute(const char *path)
|
|
|
|
{
|
|
|
|
//TODO: Check if this works with all absolute paths in windows
|
2012-05-25 12:53:59 -07:00
|
|
|
return (isalpha(*path)) && (*(path + 1) == ':') &&
|
|
|
|
((*(path + 2) == '\\') || (*(path + 2) == '/'));
|
2010-11-05 11:22:42 -07:00
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2010-11-05 11:22:42 -07:00
|
|
|
#else
|
|
|
|
static Eina_Bool
|
|
|
|
_path_is_absolute(const char *path)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
return *path == '/';
|
2010-11-05 11:22:42 -07:00
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2010-11-05 11:22:42 -07:00
|
|
|
#endif
|
|
|
|
|
2011-06-25 21:53:43 -07:00
|
|
|
static inline int
|
|
|
|
_icon_size_min_get(Evas_Object *icon)
|
|
|
|
{
|
|
|
|
int size;
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
elm_image_object_size_get(icon, &size, NULL);
|
|
|
|
|
2011-09-02 09:19:22 -07:00
|
|
|
return (size < 16) ? 16 : size;
|
2011-06-25 21:53:43 -07:00
|
|
|
}
|
|
|
|
|
2011-05-31 09:16:01 -07:00
|
|
|
#ifdef HAVE_ELEMENTARY_ETHUMB
|
|
|
|
static void
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_stop(Elm_Icon_Smart_Data *sd,
|
|
|
|
void *ethumbd)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
if (sd->thumb.request)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ethumb_client_thumb_async_cancel(ethumbd, sd->thumb.request);
|
|
|
|
sd->thumb.request = NULL;
|
2011-05-31 09:16:01 -07:00
|
|
|
_icon_pending_request--;
|
|
|
|
}
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (sd->thumb.retry)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
_elm_icon_retry = eina_list_remove(_elm_icon_retry, sd);
|
|
|
|
sd->thumb.retry = EINA_FALSE;
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_display(Elm_Icon_Smart_Data *sd)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
|
|
|
Eina_Bool ret = EINA_FALSE;
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (sd->thumb.format == ETHUMB_THUMB_EET)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
|
|
|
int prefix_size;
|
2012-05-25 12:53:59 -07:00
|
|
|
const char **ext, *ptr;
|
|
|
|
static const char *extensions[] =
|
|
|
|
{
|
|
|
|
".avi", ".mp4", ".ogv", ".mov", ".mpg", ".wmv", NULL
|
|
|
|
};
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
prefix_size = eina_stringshare_strlen(sd->thumb.file.path) - 4;
|
2011-05-31 09:16:01 -07:00
|
|
|
if (prefix_size >= 0)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ptr = sd->thumb.file.path + prefix_size;
|
2011-05-31 09:16:01 -07:00
|
|
|
for (ext = extensions; *ext; ++ext)
|
|
|
|
if (!strcasecmp(ptr, *ext))
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
sd->is_video = EINA_TRUE;
|
2011-05-31 09:16:01 -07:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
ret = elm_image_file_set
|
|
|
|
(ELM_WIDGET_DATA(sd)->obj, sd->thumb.thumb.path,
|
|
|
|
sd->thumb.thumb.key);
|
|
|
|
|
|
|
|
sd->is_video = EINA_FALSE;
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!ret)
|
2012-05-25 12:53:59 -07:00
|
|
|
ret = elm_image_file_set
|
|
|
|
(ELM_WIDGET_DATA(sd)->obj, sd->thumb.thumb.path, sd->thumb.thumb.key);
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
evas_object_smart_callback_call
|
|
|
|
(ELM_WIDGET_DATA(sd)->obj, SIG_THUMB_DONE, NULL);
|
|
|
|
else
|
|
|
|
evas_object_smart_callback_call
|
|
|
|
(ELM_WIDGET_DATA(sd)->obj, SIG_THUMB_ERROR, NULL);
|
2011-05-31 09:16:01 -07:00
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_retry(Elm_Icon_Smart_Data *sd)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
return _icon_thumb_display(sd);
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_icon_thumb_cleanup(Ethumb_Client *ethumbd)
|
|
|
|
{
|
|
|
|
Eina_List *l, *ll;
|
2012-05-25 12:53:59 -07:00
|
|
|
Elm_Icon_Smart_Data *sd;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-10-01 00:36:27 -07:00
|
|
|
EINA_LIST_FOREACH_SAFE(_elm_icon_retry, l, ll, sd)
|
2012-05-25 12:53:59 -07:00
|
|
|
if (_icon_thumb_retry(sd))
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
|
|
|
_elm_icon_retry = eina_list_remove_list(_elm_icon_retry, l);
|
2012-05-25 12:53:59 -07:00
|
|
|
sd->thumb.retry = EINA_FALSE;
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
if (_icon_pending_request == 0)
|
2012-05-25 12:53:59 -07:00
|
|
|
EINA_LIST_FREE (_elm_icon_retry, sd)
|
|
|
|
_icon_thumb_stop(sd, ethumbd);
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_finish(Elm_Icon_Smart_Data *sd,
|
|
|
|
Ethumb_Client *ethumbd)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2011-06-09 03:24:26 -07:00
|
|
|
const char *file = NULL, *group = NULL;
|
2011-05-31 09:16:01 -07:00
|
|
|
Eina_Bool ret;
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_image_file_get(ELM_WIDGET_DATA(sd)->obj, &file, &group);
|
2011-05-31 09:16:01 -07:00
|
|
|
file = eina_stringshare_ref(file);
|
|
|
|
group = eina_stringshare_ref(group);
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
ret = _icon_thumb_display(sd);
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2011-06-09 03:24:26 -07:00
|
|
|
if (!ret && file)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
if (!sd->thumb.retry)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
_elm_icon_retry = eina_list_append(_elm_icon_retry, sd);
|
|
|
|
sd->thumb.retry = EINA_TRUE;
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Back to previous image */
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_image_file_set(ELM_WIDGET_DATA(sd)->obj, file, group);
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
_icon_thumb_cleanup(ethumbd);
|
|
|
|
|
|
|
|
eina_stringshare_del(file);
|
|
|
|
eina_stringshare_del(group);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_done(Ethumb_Client *client,
|
|
|
|
const char *thumb_path,
|
|
|
|
const char *thumb_key,
|
|
|
|
void *data)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
Elm_Icon_Smart_Data *sd = data;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (EINA_UNLIKELY(!sd->thumb.request))
|
|
|
|
{
|
|
|
|
ERR("Something odd happened with a thumbnail request");
|
|
|
|
return;
|
|
|
|
}
|
2011-05-31 09:16:01 -07:00
|
|
|
|
|
|
|
_icon_pending_request--;
|
2012-05-25 12:53:59 -07:00
|
|
|
sd->thumb.request = NULL;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
eina_stringshare_replace(&sd->thumb.thumb.path, thumb_path);
|
|
|
|
eina_stringshare_replace(&sd->thumb.thumb.key, thumb_key);
|
|
|
|
sd->thumb.format = ethumb_client_format_get(client);
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_finish(sd, client);
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_error(Ethumb_Client *client,
|
|
|
|
void *data)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
Elm_Icon_Smart_Data *sd = data;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (EINA_UNLIKELY(!sd->thumb.request))
|
|
|
|
{
|
|
|
|
ERR("Something odd happened with a thumbnail request");
|
|
|
|
return;
|
|
|
|
}
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2011-12-01 07:37:56 -08:00
|
|
|
_icon_pending_request--;
|
2012-05-25 12:53:59 -07:00
|
|
|
sd->thumb.request = NULL;
|
|
|
|
|
|
|
|
ERR("could not generate thumbnail for %s (key: %s)",
|
|
|
|
sd->thumb.file.path, sd->thumb.file.key);
|
|
|
|
|
2012-11-06 11:51:26 -08:00
|
|
|
evas_object_smart_callback_call(ELM_WIDGET_DATA(sd)->obj, SIG_THUMB_ERROR, NULL);
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2011-12-01 07:37:56 -08:00
|
|
|
_icon_thumb_cleanup(client);
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_apply(Elm_Icon_Smart_Data *sd)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
|
|
|
Ethumb_Client *ethumbd;
|
2012-05-25 12:53:59 -07:00
|
|
|
int min_size;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
|
|
|
ethumbd = elm_thumb_ethumb_client_get();
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_stop(sd, ethumbd);
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (!sd->thumb.file.path) return;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
|
|
|
_icon_pending_request++;
|
2012-05-25 12:53:59 -07:00
|
|
|
if (!ethumb_client_file_set
|
|
|
|
(ethumbd, sd->thumb.file.path, sd->thumb.file.key)) return;
|
|
|
|
|
|
|
|
min_size = _icon_size_min_get(ELM_WIDGET_DATA(sd)->obj);
|
|
|
|
ethumb_client_size_set(ethumbd, min_size, min_size);
|
|
|
|
|
|
|
|
sd->thumb.request = ethumb_client_thumb_async_get
|
|
|
|
(ethumbd, _icon_thumb_done, _icon_thumb_error, sd);
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_apply_cb(void *data,
|
|
|
|
int type __UNUSED__,
|
|
|
|
void *ev __UNUSED__)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
Elm_Icon_Smart_Data *sd = data;
|
|
|
|
|
|
|
|
_icon_thumb_apply(sd);
|
2011-05-31 09:16:01 -07:00
|
|
|
|
|
|
|
return ECORE_CALLBACK_RENEW;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
2009-09-26 11:41:19 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
static Eina_Bool
|
|
|
|
#ifdef ELM_EFREET
|
|
|
|
_icon_freedesktop_set(Evas_Object *obj,
|
|
|
|
const char *name,
|
|
|
|
int size)
|
|
|
|
#else
|
|
|
|
_icon_freedesktop_set(Evas_Object * obj __UNUSED__,
|
|
|
|
const char *name __UNUSED__,
|
|
|
|
int size __UNUSED__)
|
|
|
|
#endif
|
|
|
|
{
|
|
|
|
#ifdef ELM_EFREET
|
|
|
|
const char *path;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_need_efreet();
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (icon_theme == NON_EXISTING) return EINA_FALSE;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (!icon_theme)
|
|
|
|
{
|
|
|
|
Efreet_Icon_Theme *theme;
|
|
|
|
/* TODO: Listen for EFREET_EVENT_ICON_CACHE_UPDATE */
|
|
|
|
theme = efreet_icon_theme_find(getenv("E_ICON_THEME"));
|
|
|
|
if (!theme)
|
|
|
|
{
|
|
|
|
const char **itr;
|
|
|
|
static const char *themes[] = {
|
|
|
|
"gnome", "Human", "oxygen", "hicolor", NULL
|
|
|
|
};
|
|
|
|
for (itr = themes; *itr; itr++)
|
|
|
|
{
|
|
|
|
theme = efreet_icon_theme_find(*itr);
|
|
|
|
if (theme) break;
|
|
|
|
}
|
|
|
|
}
|
2008-09-29 23:58:56 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (!theme)
|
|
|
|
{
|
|
|
|
icon_theme = NON_EXISTING;
|
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
icon_theme = eina_stringshare_add(theme->name.internal);
|
|
|
|
}
|
|
|
|
path = efreet_icon_path_find(icon_theme, name, size);
|
|
|
|
sd->freedesktop.use = !!path;
|
|
|
|
if (sd->freedesktop.use)
|
|
|
|
{
|
|
|
|
sd->freedesktop.requested_size = size;
|
2012-05-28 14:50:11 -07:00
|
|
|
elm_image_file_set(obj, path, NULL);
|
2012-05-25 12:53:59 -07:00
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
return EINA_FALSE;
|
2008-11-15 05:58:50 -08:00
|
|
|
}
|
|
|
|
|
2010-10-29 11:42:01 -07:00
|
|
|
static void
|
2012-05-25 12:53:59 -07:00
|
|
|
_elm_icon_smart_sizing_eval(Evas_Object *obj)
|
2010-10-29 11:42:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
int w, h;
|
2010-10-29 11:42:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
2010-10-29 11:42:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (sd->in_eval) return;
|
2010-10-29 11:42:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
sd->in_eval++;
|
|
|
|
elm_image_object_size_get(obj, &w, &h);
|
2009-07-06 23:46:51 -07:00
|
|
|
|
2010-10-14 15:21:43 -07:00
|
|
|
#ifdef ELM_EFREET
|
2012-05-25 12:53:59 -07:00
|
|
|
if (sd->freedesktop.use && sd->stdicon)
|
2010-10-14 15:21:43 -07:00
|
|
|
{
|
2011-09-22 06:51:22 -07:00
|
|
|
int size;
|
2010-10-14 15:21:43 -07:00
|
|
|
/* This icon has been set to a freedesktop icon, and the requested
|
|
|
|
appears to have a different size than the requested size, so try to
|
|
|
|
request another, higher resolution, icon.
|
2012-05-25 12:53:59 -07:00
|
|
|
FIXME: Find a better heuristic to determine if there should be
|
|
|
|
an icon with a different resolution. */
|
|
|
|
size = ((w / 16) + 1) * 16;
|
|
|
|
_icon_freedesktop_set(obj, sd->stdicon, size);
|
2010-10-14 15:21:43 -07:00
|
|
|
}
|
|
|
|
#endif
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
_elm_icon_parent_sc->sizing_eval(obj);
|
|
|
|
|
|
|
|
sd->in_eval--;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_edje_signals_free(Elm_Icon_Smart_Data *sd)
|
|
|
|
{
|
|
|
|
Edje_Signal_Data *esd;
|
|
|
|
|
2012-05-28 13:35:35 -07:00
|
|
|
EINA_LIST_FREE (sd->edje_signals, esd)
|
2008-09-29 23:58:56 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
eina_stringshare_del(esd->emission);
|
|
|
|
eina_stringshare_del(esd->source);
|
|
|
|
free(esd);
|
2008-09-29 23:58:56 -07:00
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
|
|
|
_elm_icon_smart_file_set(Evas_Object *obj,
|
|
|
|
const char *file,
|
|
|
|
const char *key)
|
|
|
|
{
|
|
|
|
Evas_Object *pclip;
|
|
|
|
|
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE);
|
|
|
|
|
|
|
|
_edje_signals_free(sd);
|
|
|
|
|
|
|
|
#ifdef ELM_EFREET
|
|
|
|
if (!sd->freedesktop.use)
|
|
|
|
{
|
|
|
|
if (sd->stdicon) eina_stringshare_del(sd->stdicon);
|
|
|
|
sd->stdicon = NULL;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
if (!sd->is_video) return _elm_icon_parent_sc->file_set(obj, file, key);
|
|
|
|
|
|
|
|
/* parent's edje file setting path replicated here (we got .eet
|
|
|
|
* extension, so bypassing it) */
|
|
|
|
if (ELM_IMAGE_DATA(sd)->prev_img)
|
|
|
|
evas_object_del(ELM_IMAGE_DATA(sd)->prev_img);
|
|
|
|
ELM_IMAGE_DATA(sd)->prev_img = NULL;
|
|
|
|
|
|
|
|
if (!ELM_IMAGE_DATA(sd)->edje)
|
2008-09-29 23:58:56 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
pclip = evas_object_clip_get(ELM_IMAGE_DATA(sd)->img);
|
|
|
|
if (ELM_IMAGE_DATA(sd)->img) evas_object_del(ELM_IMAGE_DATA(sd)->img);
|
|
|
|
|
|
|
|
/* Edje object instead */
|
|
|
|
ELM_IMAGE_DATA(sd)->img = edje_object_add(evas_object_evas_get(obj));
|
|
|
|
evas_object_smart_member_add(ELM_IMAGE_DATA(sd)->img, obj);
|
|
|
|
if (ELM_IMAGE_DATA(sd)->show)
|
|
|
|
evas_object_show(ELM_IMAGE_DATA(sd)->img);
|
|
|
|
evas_object_clip_set(ELM_IMAGE_DATA(sd)->img, pclip);
|
2008-09-29 23:58:56 -07:00
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
ELM_IMAGE_DATA(sd)->edje = EINA_TRUE;
|
|
|
|
if (!edje_object_file_set(ELM_IMAGE_DATA(sd)->img, file, key))
|
2008-10-06 18:23:49 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ERR("failed to set edje file '%s', group '%s': %s", file, key,
|
|
|
|
edje_load_error_str
|
|
|
|
(edje_object_load_error_get(ELM_IMAGE_DATA(sd)->img)));
|
|
|
|
return EINA_FALSE;
|
2008-10-06 18:23:49 -07:00
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
evas_object_move(ELM_IMAGE_DATA(sd)->img, ELM_IMAGE_DATA(sd)->img_x,
|
|
|
|
ELM_IMAGE_DATA(sd)->img_y);
|
|
|
|
evas_object_resize(ELM_IMAGE_DATA(sd)->img, ELM_IMAGE_DATA(sd)->img_w,
|
|
|
|
ELM_IMAGE_DATA(sd)->img_h);
|
|
|
|
|
|
|
|
return EINA_TRUE;
|
2008-09-29 23:58:56 -07:00
|
|
|
}
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
static Eina_Bool
|
|
|
|
_elm_icon_smart_memfile_set(Evas_Object *obj,
|
|
|
|
const void *img,
|
|
|
|
size_t size,
|
|
|
|
const char *format,
|
|
|
|
const char *key)
|
2008-10-08 02:33:05 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
Eina_Bool ret;
|
|
|
|
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(img, EINA_FALSE);
|
|
|
|
EINA_SAFETY_ON_TRUE_RETURN_VAL(!size, EINA_FALSE);
|
|
|
|
eina_stringshare_del(sd->stdicon);
|
|
|
|
sd->stdicon = NULL;
|
|
|
|
|
|
|
|
_edje_signals_free(sd);
|
|
|
|
|
|
|
|
ret = _elm_icon_parent_sc->memfile_set(obj, img, size, format, key);
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
|
|
|
_elm_icon_smart_theme(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
if (sd->stdicon)
|
|
|
|
_elm_theme_object_icon_set(obj, sd->stdicon, elm_widget_style_get(obj));
|
|
|
|
|
|
|
|
if (!ELM_WIDGET_CLASS(_elm_icon_parent_sc)->theme(obj))
|
|
|
|
return EINA_FALSE;
|
|
|
|
|
|
|
|
return EINA_TRUE;
|
2008-10-08 02:33:05 -07:00
|
|
|
}
|
|
|
|
|
2011-09-14 11:28:22 -07:00
|
|
|
static Eina_Bool
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_standard_set(Evas_Object *obj,
|
|
|
|
const char *name)
|
2011-09-14 11:28:22 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
if (_elm_theme_object_icon_set(obj, name, "default"))
|
2011-09-14 11:28:22 -07:00
|
|
|
{
|
|
|
|
#ifdef ELM_EFREET
|
|
|
|
/* TODO: elm_unneed_efreet() */
|
2012-05-25 12:53:59 -07:00
|
|
|
sd->freedesktop.use = EINA_FALSE;
|
2011-09-14 11:28:22 -07:00
|
|
|
#endif
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2011-09-14 11:28:22 -07:00
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
2011-09-26 23:40:06 -07:00
|
|
|
#ifdef ELM_EFREET
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_file_set(Elm_Icon_Smart_Data *sd,
|
|
|
|
Evas_Object *obj,
|
|
|
|
const char *path)
|
2011-09-26 23:40:06 -07:00
|
|
|
#else
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_file_set(Elm_Icon_Smart_Data * sd __UNUSED__,
|
|
|
|
Evas_Object * obj,
|
|
|
|
const char *path)
|
2011-09-26 23:40:06 -07:00
|
|
|
#endif
|
2011-09-14 11:28:22 -07:00
|
|
|
{
|
2012-05-28 14:50:11 -07:00
|
|
|
if (elm_image_file_set(obj, path, NULL))
|
2011-09-14 11:28:22 -07:00
|
|
|
{
|
|
|
|
#ifdef ELM_EFREET
|
|
|
|
/* TODO: elm_unneed_efreet() */
|
2012-05-25 12:53:59 -07:00
|
|
|
sd->freedesktop.use = EINA_FALSE;
|
2011-09-14 11:28:22 -07:00
|
|
|
#endif
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
2012-05-25 12:53:59 -07:00
|
|
|
_elm_icon_standard_set(Evas_Object *obj,
|
|
|
|
const char *name,
|
|
|
|
Eina_Bool *fdo)
|
2011-09-14 11:28:22 -07:00
|
|
|
{
|
|
|
|
char *tmp;
|
|
|
|
Eina_Bool ret;
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
2011-09-14 11:28:22 -07:00
|
|
|
/* try locating the icon using the specified lookup order */
|
2012-05-25 12:53:59 -07:00
|
|
|
switch (sd->lookup_order)
|
2011-09-14 11:28:22 -07:00
|
|
|
{
|
|
|
|
case ELM_ICON_LOOKUP_FDO:
|
2012-05-25 12:53:59 -07:00
|
|
|
ret = _icon_freedesktop_set(obj, name, _icon_size_min_get(obj));
|
|
|
|
if (ret && fdo) *fdo = EINA_TRUE;
|
|
|
|
break;
|
|
|
|
|
2011-09-14 11:28:22 -07:00
|
|
|
case ELM_ICON_LOOKUP_THEME:
|
2012-05-25 12:53:59 -07:00
|
|
|
ret = _icon_standard_set(obj, name);
|
|
|
|
break;
|
|
|
|
|
2011-09-14 11:28:22 -07:00
|
|
|
case ELM_ICON_LOOKUP_THEME_FDO:
|
2012-05-25 12:53:59 -07:00
|
|
|
ret = _icon_standard_set(obj, name);
|
|
|
|
if (!ret)
|
|
|
|
{
|
|
|
|
ret = _icon_freedesktop_set(obj, name, _icon_size_min_get(obj));
|
|
|
|
if (ret && fdo) *fdo = EINA_TRUE;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2011-09-14 11:28:22 -07:00
|
|
|
case ELM_ICON_LOOKUP_FDO_THEME:
|
|
|
|
default:
|
2012-05-25 12:53:59 -07:00
|
|
|
ret = _icon_freedesktop_set(obj, name, _icon_size_min_get(obj));
|
|
|
|
if (!ret)
|
|
|
|
ret = _icon_standard_set(obj, name);
|
|
|
|
else if (fdo)
|
|
|
|
*fdo = EINA_TRUE;
|
|
|
|
break;
|
2011-09-14 11:28:22 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
eina_stringshare_replace(&sd->stdicon, name);
|
|
|
|
_elm_icon_smart_sizing_eval(obj);
|
2011-09-14 11:28:22 -07:00
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_path_is_absolute(name))
|
2012-05-25 12:53:59 -07:00
|
|
|
return _icon_file_set(sd, obj, name);
|
2011-09-14 11:28:22 -07:00
|
|
|
|
|
|
|
/* if that fails, see if icon name is in the format size/name. if so,
|
|
|
|
try locating a fallback without the size specification */
|
|
|
|
if (!(tmp = strchr(name, '/'))) return EINA_FALSE;
|
|
|
|
++tmp;
|
|
|
|
if (*tmp) return elm_icon_standard_set(obj, tmp);
|
|
|
|
/* give up */
|
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-25 12:53:59 -07:00
|
|
|
_elm_icon_standard_resize_cb(void *data,
|
|
|
|
Evas *e __UNUSED__,
|
|
|
|
Evas_Object *obj,
|
|
|
|
void *event_info __UNUSED__)
|
2011-09-14 11:28:22 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
Elm_Icon_Smart_Data *sd = data;
|
|
|
|
const char *refup = eina_stringshare_ref(sd->stdicon);
|
2011-09-14 11:28:22 -07:00
|
|
|
Eina_Bool fdo = EINA_FALSE;
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (!_elm_icon_standard_set(obj, sd->stdicon, &fdo) || (!fdo))
|
|
|
|
evas_object_event_callback_del_full
|
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_standard_resize_cb, sd);
|
2011-09-14 11:28:22 -07:00
|
|
|
eina_stringshare_del(refup);
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef HAVE_ELEMENTARY_ETHUMB
|
|
|
|
static void
|
2012-05-25 12:53:59 -07:00
|
|
|
_elm_icon_thumb_resize_cb(void *data,
|
|
|
|
Evas *e __UNUSED__,
|
|
|
|
Evas_Object *obj,
|
|
|
|
void *event_info __UNUSED__)
|
2011-09-14 11:28:22 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
Elm_Icon_Smart_Data *sd = data;
|
2011-09-14 11:28:22 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (sd->thumb.file.path)
|
|
|
|
elm_icon_thumb_set(obj, sd->thumb.file.path, sd->thumb.file.key);
|
2011-09-14 11:28:22 -07:00
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
static void
|
|
|
|
_elm_icon_smart_add(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
EVAS_SMART_DATA_ALLOC(obj, Elm_Icon_Smart_Data);
|
|
|
|
|
|
|
|
ELM_WIDGET_CLASS(_elm_icon_parent_sc)->base.add(obj);
|
|
|
|
|
|
|
|
priv->lookup_order = ELM_ICON_LOOKUP_THEME_FDO;
|
|
|
|
|
|
|
|
#ifdef HAVE_ELEMENTARY_ETHUMB
|
|
|
|
priv->thumb.request = NULL;
|
2011-09-14 11:28:22 -07:00
|
|
|
#endif
|
2012-05-25 12:53:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_elm_icon_smart_del(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
#ifdef HAVE_ELEMENTARY_ETHUMB
|
|
|
|
Ethumb_Client *ethumbd;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
if (sd->stdicon) eina_stringshare_del(sd->stdicon);
|
|
|
|
|
|
|
|
#ifdef HAVE_ELEMENTARY_ETHUMB
|
|
|
|
ethumbd = elm_thumb_ethumb_client_get();
|
|
|
|
_icon_thumb_stop(sd, ethumbd);
|
|
|
|
|
|
|
|
eina_stringshare_del(sd->thumb.file.path);
|
|
|
|
eina_stringshare_del(sd->thumb.file.key);
|
|
|
|
eina_stringshare_del(sd->thumb.thumb.path);
|
|
|
|
eina_stringshare_del(sd->thumb.thumb.key);
|
|
|
|
|
|
|
|
if (sd->thumb.eeh)
|
|
|
|
ecore_event_handler_del(sd->thumb.eeh);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
_edje_signals_free(sd);
|
|
|
|
|
|
|
|
ELM_WIDGET_CLASS(_elm_icon_parent_sc)->base.del(obj);
|
|
|
|
}
|
|
|
|
|
2012-05-28 13:35:35 -07:00
|
|
|
/* WARNING: to be deprecated */
|
|
|
|
void
|
|
|
|
_elm_icon_signal_emit(Evas_Object *obj,
|
|
|
|
const char *emission,
|
|
|
|
const char *source)
|
2012-05-25 12:53:59 -07:00
|
|
|
{
|
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
if (!ELM_IMAGE_DATA(sd)->edje) return;
|
|
|
|
|
|
|
|
edje_object_signal_emit(ELM_IMAGE_DATA(sd)->img, emission, source);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_edje_signal_callback(void *data,
|
|
|
|
Evas_Object *obj __UNUSED__,
|
|
|
|
const char *emission,
|
|
|
|
const char *source)
|
|
|
|
{
|
|
|
|
Edje_Signal_Data *esd = data;
|
|
|
|
|
|
|
|
esd->func(esd->data, esd->obj, emission, source);
|
|
|
|
}
|
|
|
|
|
2012-05-28 13:35:35 -07:00
|
|
|
/* WARNING: to be deprecated */
|
|
|
|
void
|
|
|
|
_elm_icon_signal_callback_add(Evas_Object *obj,
|
|
|
|
const char *emission,
|
|
|
|
const char *source,
|
|
|
|
Edje_Signal_Cb func_cb,
|
|
|
|
void *data)
|
2012-05-25 12:53:59 -07:00
|
|
|
{
|
|
|
|
Edje_Signal_Data *esd;
|
|
|
|
|
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
if (!ELM_IMAGE_DATA(sd)->edje) return;
|
|
|
|
|
|
|
|
esd = ELM_NEW(Edje_Signal_Data);
|
|
|
|
if (!esd) return;
|
|
|
|
|
|
|
|
esd->obj = obj;
|
|
|
|
esd->func = func_cb;
|
|
|
|
esd->emission = eina_stringshare_add(emission);
|
|
|
|
esd->source = eina_stringshare_add(source);
|
|
|
|
esd->data = data;
|
2012-05-28 13:35:35 -07:00
|
|
|
sd->edje_signals =
|
|
|
|
eina_list_append(sd->edje_signals, esd);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
edje_object_signal_callback_add
|
|
|
|
(ELM_IMAGE_DATA(sd)->img, emission, source, _edje_signal_callback, esd);
|
|
|
|
}
|
|
|
|
|
2012-05-28 13:35:35 -07:00
|
|
|
/* WARNING: to be deprecated */
|
|
|
|
void *
|
|
|
|
_elm_icon_signal_callback_del(Evas_Object *obj,
|
|
|
|
const char *emission,
|
|
|
|
const char *source,
|
|
|
|
Edje_Signal_Cb func_cb)
|
2012-05-25 12:53:59 -07:00
|
|
|
{
|
|
|
|
Edje_Signal_Data *esd = NULL;
|
|
|
|
void *data = NULL;
|
|
|
|
Eina_List *l;
|
|
|
|
|
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
if (!ELM_IMAGE_DATA(sd)->edje) return NULL;
|
|
|
|
|
2012-10-01 00:36:27 -07:00
|
|
|
EINA_LIST_FOREACH(sd->edje_signals, l, esd)
|
2012-05-25 12:53:59 -07:00
|
|
|
{
|
|
|
|
if ((esd->func == func_cb) && (!strcmp(esd->emission, emission)) &&
|
|
|
|
(!strcmp(esd->source, source)))
|
|
|
|
{
|
2012-05-28 13:35:35 -07:00
|
|
|
sd->edje_signals = eina_list_remove_list(sd->edje_signals, l);
|
2012-05-25 12:53:59 -07:00
|
|
|
eina_stringshare_del(esd->emission);
|
|
|
|
eina_stringshare_del(esd->source);
|
|
|
|
data = esd->data;
|
|
|
|
free(esd);
|
|
|
|
|
|
|
|
edje_object_signal_callback_del_full
|
|
|
|
(ELM_IMAGE_DATA(sd)->img, emission, source,
|
|
|
|
_edje_signal_callback, esd);
|
|
|
|
|
|
|
|
return data; /* stop at 1st match */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-07-30 15:36:38 -07:00
|
|
|
_elm_icon_smart_set_user(Elm_Icon_Smart_Class *sc)
|
2012-05-25 12:53:59 -07:00
|
|
|
{
|
|
|
|
ELM_WIDGET_CLASS(sc)->base.add = _elm_icon_smart_add;
|
|
|
|
ELM_WIDGET_CLASS(sc)->base.del = _elm_icon_smart_del;
|
|
|
|
|
|
|
|
ELM_WIDGET_CLASS(sc)->theme = _elm_icon_smart_theme;
|
|
|
|
|
2012-07-30 15:36:38 -07:00
|
|
|
ELM_IMAGE_CLASS(sc)->file_set = _elm_icon_smart_file_set;
|
|
|
|
ELM_IMAGE_CLASS(sc)->memfile_set = _elm_icon_smart_memfile_set;
|
|
|
|
ELM_IMAGE_CLASS(sc)->sizing_eval = _elm_icon_smart_sizing_eval;
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI const Elm_Icon_Smart_Class *
|
|
|
|
elm_icon_smart_class_get(void)
|
|
|
|
{
|
|
|
|
static Elm_Icon_Smart_Class _sc =
|
|
|
|
ELM_ICON_SMART_CLASS_INIT_NAME_VERSION(ELM_ICON_SMART_NAME);
|
|
|
|
static const Elm_Icon_Smart_Class *class = NULL;
|
|
|
|
Evas_Smart_Class *esc = (Evas_Smart_Class *)&_sc;
|
|
|
|
|
|
|
|
if (class) return class;
|
|
|
|
|
|
|
|
_elm_icon_smart_set(&_sc);
|
|
|
|
esc->callbacks = _smart_callbacks;
|
|
|
|
class = &_sc;
|
|
|
|
|
|
|
|
return class;
|
2012-05-25 12:53:59 -07:00
|
|
|
}
|
2011-09-14 11:28:22 -07:00
|
|
|
|
2008-10-06 18:23:49 -07:00
|
|
|
EAPI Evas_Object *
|
|
|
|
elm_icon_add(Evas_Object *parent)
|
2008-09-29 23:58:56 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
Evas_Object *obj;
|
2011-04-15 10:08:04 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
|
|
|
|
|
2012-07-18 14:03:39 -07:00
|
|
|
obj = elm_widget_add(_elm_icon_smart_class_new(), parent);
|
|
|
|
if (!obj) return NULL;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (!elm_widget_sub_object_add(parent, obj))
|
|
|
|
ERR("could not add %p as sub object of %p", obj, parent);
|
2009-07-06 23:46:51 -07:00
|
|
|
|
2008-10-06 18:23:49 -07:00
|
|
|
return obj;
|
|
|
|
}
|
2008-09-29 23:58:56 -07:00
|
|
|
|
2011-07-22 16:03:46 -07:00
|
|
|
EAPI Eina_Bool
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_memfile_set(Evas_Object *obj,
|
|
|
|
const void *img,
|
|
|
|
size_t size,
|
|
|
|
const char *format,
|
|
|
|
const char *key)
|
2011-07-22 16:03:46 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) EINA_FALSE;
|
2011-07-22 16:03:46 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
return elm_image_memfile_set(obj, img, size, format, key);
|
2011-07-22 16:03:46 -07:00
|
|
|
}
|
|
|
|
|
2009-04-03 14:52:01 -07:00
|
|
|
EAPI Eina_Bool
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_file_set(Evas_Object *obj,
|
|
|
|
const char *file,
|
|
|
|
const char *group)
|
2008-10-06 18:23:49 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) EINA_FALSE;
|
2009-04-03 14:52:01 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
return elm_image_file_set(obj, file, group);
|
2008-10-06 18:23:49 -07:00
|
|
|
}
|
|
|
|
|
2010-10-27 07:38:37 -07:00
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_file_get(const Evas_Object *obj,
|
|
|
|
const char **file,
|
|
|
|
const char **group)
|
2010-10-27 07:38:37 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
|
|
|
|
|
|
|
elm_image_file_get(obj, file, group);
|
2010-10-27 07:38:37 -07:00
|
|
|
}
|
|
|
|
|
2011-05-31 09:16:01 -07:00
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_thumb_set(Evas_Object *obj,
|
|
|
|
const char *file,
|
|
|
|
const char *group)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
2011-05-31 09:16:01 -07:00
|
|
|
|
|
|
|
#ifdef HAVE_ELEMENTARY_ETHUMB
|
2012-05-28 06:08:48 -07:00
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
evas_object_event_callback_del_full
|
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_standard_resize_cb, sd);
|
|
|
|
evas_object_event_callback_del_full
|
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_thumb_resize_cb, sd);
|
2011-09-14 11:28:22 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
evas_object_event_callback_add
|
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_thumb_resize_cb, sd);
|
2011-09-14 11:28:22 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
eina_stringshare_replace(&sd->thumb.file.path, file);
|
|
|
|
eina_stringshare_replace(&sd->thumb.file.key, group);
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-02-15 21:58:23 -08:00
|
|
|
if (elm_thumb_ethumb_client_connected_get())
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
_icon_thumb_apply(sd);
|
|
|
|
return;
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (!sd->thumb.eeh)
|
2011-05-31 09:16:01 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
sd->thumb.eeh = ecore_event_handler_add
|
|
|
|
(ELM_ECORE_EVENT_ETHUMB_CONNECT, _icon_thumb_apply_cb, sd);
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
#else
|
2012-05-25 12:53:59 -07:00
|
|
|
(void)obj;
|
|
|
|
(void)file;
|
|
|
|
(void)group;
|
2011-05-31 09:16:01 -07:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2011-08-10 23:05:05 -07:00
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_icon_animated_available_get(const Evas_Object *obj)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) EINA_FALSE;
|
2011-08-10 23:05:05 -07:00
|
|
|
|
2012-05-28 13:35:35 -07:00
|
|
|
return elm_image_animated_available_get(obj);
|
2011-08-10 23:05:05 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
2012-05-28 13:35:29 -07:00
|
|
|
elm_icon_animated_set(Evas_Object *obj,
|
|
|
|
Eina_Bool anim)
|
2011-08-10 23:05:05 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
|
|
|
|
2012-05-28 13:35:29 -07:00
|
|
|
return elm_image_animated_set(obj, anim);
|
2011-08-10 23:05:05 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_icon_animated_get(const Evas_Object *obj)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) EINA_FALSE;
|
|
|
|
|
2012-05-28 13:35:29 -07:00
|
|
|
return elm_image_animated_get(obj);
|
2011-08-10 23:05:05 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_animated_play_set(Evas_Object *obj,
|
|
|
|
Eina_Bool play)
|
2011-08-10 23:05:05 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
2011-08-10 23:05:05 -07:00
|
|
|
|
2012-05-28 13:35:29 -07:00
|
|
|
elm_image_animated_play_set(obj, play);
|
2011-08-10 23:05:05 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_icon_animated_play_get(const Evas_Object *obj)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) EINA_FALSE;
|
|
|
|
|
2012-05-28 13:35:29 -07:00
|
|
|
return elm_image_animated_play_get(obj);
|
2011-08-10 23:05:05 -07:00
|
|
|
}
|
|
|
|
|
2011-06-23 07:54:29 -07:00
|
|
|
EAPI Eina_Bool
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_standard_set(Evas_Object *obj,
|
|
|
|
const char *name)
|
2011-06-23 07:54:29 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) EINA_FALSE;
|
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
2011-06-24 01:59:56 -07:00
|
|
|
Eina_Bool fdo = EINA_FALSE;
|
|
|
|
Eina_Bool ret;
|
2011-06-23 07:54:29 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
if (!name) return EINA_FALSE;
|
2011-06-23 07:54:29 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
evas_object_event_callback_del_full
|
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_standard_resize_cb, sd);
|
2011-06-23 07:54:29 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
ret = _elm_icon_standard_set(obj, name, &fdo);
|
2011-06-24 01:59:56 -07:00
|
|
|
|
|
|
|
if (fdo)
|
2012-05-25 12:53:59 -07:00
|
|
|
evas_object_event_callback_add
|
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_standard_resize_cb, sd);
|
2011-06-24 01:59:56 -07:00
|
|
|
|
|
|
|
return ret;
|
2011-06-23 07:54:29 -07:00
|
|
|
}
|
|
|
|
|
2010-10-27 07:38:37 -07:00
|
|
|
EAPI const char *
|
|
|
|
elm_icon_standard_get(const Evas_Object *obj)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) NULL;
|
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
return sd->stdicon;
|
2010-10-27 07:38:37 -07:00
|
|
|
}
|
|
|
|
|
2010-10-14 15:21:43 -07:00
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_order_lookup_set(Evas_Object *obj,
|
|
|
|
Elm_Icon_Lookup_Order order)
|
2010-10-14 15:21:43 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
sd->lookup_order = order;
|
2010-10-14 15:21:43 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Elm_Icon_Lookup_Order
|
2010-10-25 07:34:22 -07:00
|
|
|
elm_icon_order_lookup_get(const Evas_Object *obj)
|
2010-10-14 15:21:43 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) ELM_ICON_LOOKUP_THEME_FDO;
|
|
|
|
ELM_ICON_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
return sd->lookup_order;
|
2008-10-08 02:33:05 -07:00
|
|
|
}
|
|
|
|
|
2008-10-06 18:23:49 -07:00
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_smooth_set(Evas_Object *obj,
|
|
|
|
Eina_Bool smooth)
|
2008-10-06 18:23:49 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
2009-09-26 11:41:19 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_image_smooth_set(obj, smooth);
|
2008-10-06 18:23:49 -07:00
|
|
|
}
|
|
|
|
|
2010-10-27 07:38:37 -07:00
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_icon_smooth_get(const Evas_Object *obj)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) EINA_FALSE;
|
2010-10-27 07:38:37 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
return elm_image_smooth_get(obj);
|
2010-10-27 07:38:37 -07:00
|
|
|
}
|
|
|
|
|
2008-10-06 18:23:49 -07:00
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_no_scale_set(Evas_Object *obj,
|
|
|
|
Eina_Bool no_scale)
|
2008-10-06 18:23:49 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
2009-09-26 11:41:19 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_image_no_scale_set(obj, no_scale);
|
2008-10-06 18:23:49 -07:00
|
|
|
}
|
|
|
|
|
2010-10-27 07:38:37 -07:00
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_icon_no_scale_get(const Evas_Object *obj)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) EINA_FALSE;
|
|
|
|
|
|
|
|
return elm_image_no_scale_get(obj);
|
2010-10-27 07:38:37 -07:00
|
|
|
}
|
|
|
|
|
2012-03-05 05:36:01 -08:00
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_resizable_set(Evas_Object *obj,
|
|
|
|
Eina_Bool size_up,
|
|
|
|
Eina_Bool size_down)
|
2008-10-06 18:23:49 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
2009-09-26 11:41:19 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_image_resizable_set(obj, size_up, size_down);
|
2008-10-06 18:23:49 -07:00
|
|
|
}
|
|
|
|
|
2010-10-27 07:38:37 -07:00
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_resizable_get(const Evas_Object *obj,
|
|
|
|
Eina_Bool *size_up,
|
|
|
|
Eina_Bool *size_down)
|
2010-10-27 07:38:37 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
|
|
|
|
|
|
|
elm_image_resizable_get(obj, size_up, size_down);
|
2010-10-27 07:38:37 -07:00
|
|
|
}
|
|
|
|
|
2008-10-06 18:23:49 -07:00
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_fill_outside_set(Evas_Object *obj,
|
|
|
|
Eina_Bool fill_outside)
|
2008-10-06 18:23:49 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
2009-09-26 11:41:19 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_image_fill_outside_set(obj, fill_outside);
|
2008-09-29 23:58:56 -07:00
|
|
|
}
|
2009-03-12 22:50:38 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_icon_fill_outside_get(const Evas_Object *obj)
|
2011-07-27 13:31:40 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) EINA_FALSE;
|
2011-07-27 13:31:40 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
return elm_image_fill_outside_get(obj);
|
2011-07-27 13:31:40 -07:00
|
|
|
}
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
EAPI void
|
|
|
|
elm_icon_size_get(const Evas_Object *obj,
|
|
|
|
int *w,
|
|
|
|
int *h)
|
2010-10-27 07:38:37 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
2010-10-27 07:38:37 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_image_object_size_get(obj, w, h);
|
2010-10-27 07:38:37 -07:00
|
|
|
}
|
2009-09-17 15:39:18 -07:00
|
|
|
|
2009-03-12 22:50:38 -07:00
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_prescale_set(Evas_Object *obj,
|
|
|
|
int size)
|
2009-03-12 22:50:38 -07:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
2009-09-26 11:41:19 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_image_prescale_set(obj, size);
|
2009-03-12 22:50:38 -07:00
|
|
|
}
|
2010-06-30 06:20:58 -07:00
|
|
|
|
2010-10-27 07:38:37 -07:00
|
|
|
EAPI int
|
|
|
|
elm_icon_prescale_get(const Evas_Object *obj)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) 0;
|
2010-06-30 06:20:58 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
return elm_image_prescale_get(obj);
|
2010-10-27 07:38:37 -07:00
|
|
|
}
|
2011-11-06 07:56:31 -08:00
|
|
|
|
|
|
|
EAPI Evas_Object *
|
|
|
|
elm_icon_object_get(Evas_Object *obj)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) 0;
|
2011-11-06 07:56:31 -08:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
return elm_image_object_get(obj);
|
2011-11-06 07:56:31 -08:00
|
|
|
}
|
2011-11-06 20:25:16 -08:00
|
|
|
|
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_preload_disabled_set(Evas_Object *obj,
|
|
|
|
Eina_Bool disabled)
|
2011-11-06 20:25:16 -08:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
2011-11-06 20:25:16 -08:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_image_preload_disabled_set(obj, disabled);
|
2011-11-06 20:25:16 -08:00
|
|
|
}
|
2012-02-16 14:48:32 -08:00
|
|
|
|
|
|
|
EAPI void
|
2012-05-25 12:53:59 -07:00
|
|
|
elm_icon_aspect_fixed_set(Evas_Object *obj,
|
|
|
|
Eina_Bool fixed)
|
2012-02-16 14:48:32 -08:00
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj);
|
|
|
|
|
|
|
|
elm_image_aspect_fixed_set(obj, fixed);
|
2012-02-16 14:48:32 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
|
|
|
elm_icon_aspect_fixed_get(const Evas_Object *obj)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
ELM_ICON_CHECK(obj) EINA_FALSE;
|
|
|
|
|
|
|
|
return elm_image_aspect_fixed_get(obj);
|
2012-02-16 14:48:32 -08:00
|
|
|
}
|