2013-04-25 22:13:00 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "elementary_config.h"
|
|
|
|
#endif
|
|
|
|
|
2008-09-29 23:58:56 -07:00
|
|
|
#include <Elementary.h>
|
2013-04-25 22:13:00 -07:00
|
|
|
|
2008-09-29 23:58:56 -07:00
|
|
|
#include "elm_priv.h"
|
2012-07-30 15:36:38 -07:00
|
|
|
#include "elm_widget_icon.h"
|
2012-11-25 22:32:53 -08:00
|
|
|
#include "elm_widget_image.h"
|
|
|
|
|
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-11-25 22:32:53 -08:00
|
|
|
EAPI Eo_Op ELM_OBJ_ICON_BASE_ID = EO_NOOP;
|
|
|
|
|
|
|
|
#define MY_CLASS ELM_OBJ_ICON_CLASS
|
|
|
|
#define MY_CLASS_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
|
|
|
/* 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
|
2012-11-25 22:32:53 -08:00
|
|
|
(sd->obj, sd->thumb.thumb.path,
|
2012-05-25 12:53:59 -07:00
|
|
|
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
|
2012-11-25 22:32:53 -08:00
|
|
|
(sd->obj, sd->thumb.thumb.path, sd->thumb.thumb.key);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
if (ret)
|
|
|
|
evas_object_smart_callback_call
|
2012-11-25 22:32:53 -08:00
|
|
|
(sd->obj, SIG_THUMB_DONE, NULL);
|
2012-05-25 12:53:59 -07:00
|
|
|
else
|
|
|
|
evas_object_smart_callback_call
|
2012-11-25 22:32:53 -08:00
|
|
|
(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)
|
2013-03-08 20:23:42 -08:00
|
|
|
EINA_LIST_FREE(_elm_icon_retry, sd)
|
2012-05-25 12:53:59 -07:00
|
|
|
_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;
|
2012-11-25 22:32:53 -08:00
|
|
|
Eina_Bool ret = EINA_FALSE;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
elm_image_file_get(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-11-25 22:32:53 -08:00
|
|
|
elm_image_file_set(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-25 22:32:53 -08:00
|
|
|
evas_object_smart_callback_call(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;
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
min_size = _icon_size_min_get(sd->obj);
|
2012-05-25 12:53:59 -07:00
|
|
|
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
|
|
|
{
|
2013-04-24 04:41:37 -07:00
|
|
|
ELM_ICON_DATA_GET(data, sd);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
_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-11-25 22:32:53 -08:00
|
|
|
_elm_icon_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
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-11-25 22:32:53 -08:00
|
|
|
Elm_Icon_Smart_Data *sd = _pd;
|
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
|
|
|
|
2013-03-18 09:07:38 -07:00
|
|
|
eo_do_super(obj, MY_CLASS, elm_obj_image_sizing_eval());
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
sd->in_eval--;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_edje_signals_free(Elm_Icon_Smart_Data *sd)
|
|
|
|
{
|
|
|
|
Edje_Signal_Data *esd;
|
|
|
|
|
2013-03-08 20:23:42 -08: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
|
|
|
}
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
static void
|
|
|
|
_elm_icon_smart_file_set(Eo *obj, void *_pd, va_list *list)
|
2012-05-25 12:53:59 -07:00
|
|
|
{
|
|
|
|
Evas_Object *pclip;
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
Elm_Icon_Smart_Data *sd = _pd;
|
2013-04-24 04:41:37 -07:00
|
|
|
Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
const char *file = va_arg(*list, const char *);
|
|
|
|
const char *key = va_arg(*list, const char *);
|
|
|
|
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
|
|
|
if (ret) *ret = EINA_FALSE;
|
|
|
|
Eina_Bool int_ret = EINA_FALSE;
|
|
|
|
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN(file);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
_edje_signals_free(sd);
|
|
|
|
|
|
|
|
#ifdef ELM_EFREET
|
|
|
|
if (!sd->freedesktop.use)
|
2013-05-29 04:55:19 -07:00
|
|
|
ELM_SAFE_FREE(sd->stdicon, eina_stringshare_del);
|
2012-05-25 12:53:59 -07:00
|
|
|
#endif
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (!sd->is_video)
|
|
|
|
{
|
2013-03-18 09:07:38 -07:00
|
|
|
eo_do_super(obj, MY_CLASS, elm_obj_image_file_set(file, key, &int_ret));
|
2012-11-25 22:32:53 -08:00
|
|
|
if (ret) *ret = int_ret;
|
|
|
|
return;
|
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
/* parent's edje file setting path replicated here (we got .eet
|
|
|
|
* extension, so bypassing it) */
|
2012-11-25 22:32:53 -08:00
|
|
|
if (id->prev_img)
|
|
|
|
evas_object_del(id->prev_img);
|
|
|
|
id->prev_img = NULL;
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (!id->edje)
|
2008-09-29 23:58:56 -07:00
|
|
|
{
|
2012-11-25 22:32:53 -08:00
|
|
|
pclip = evas_object_clip_get(id->img);
|
|
|
|
if (id->img) evas_object_del(id->img);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
/* Edje object instead */
|
2012-11-25 22:32:53 -08:00
|
|
|
id->img = edje_object_add(evas_object_evas_get(obj));
|
|
|
|
evas_object_smart_member_add(id->img, obj);
|
|
|
|
if (id->show)
|
|
|
|
evas_object_show(id->img);
|
|
|
|
evas_object_clip_set(id->img, pclip);
|
2008-09-29 23:58:56 -07:00
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
id->edje = EINA_TRUE;
|
|
|
|
if (!edje_object_file_set(id->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
|
2012-11-25 22:32:53 -08:00
|
|
|
(edje_object_load_error_get(id->img)));
|
|
|
|
return;
|
2008-10-06 18:23:49 -07:00
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
evas_object_move(id->img, id->img_x,
|
|
|
|
id->img_y);
|
|
|
|
evas_object_resize(id->img, id->img_w,
|
|
|
|
id->img_h);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (ret) *ret = EINA_TRUE;
|
2008-09-29 23:58:56 -07:00
|
|
|
}
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
static void
|
|
|
|
_elm_icon_smart_memfile_set(Eo *obj, void *_pd, va_list *list)
|
2008-10-08 02:33:05 -07:00
|
|
|
{
|
2012-11-25 22:32:53 -08:00
|
|
|
Elm_Icon_Smart_Data *sd = _pd;
|
|
|
|
|
|
|
|
const void *img = va_arg(*list, const void *);
|
|
|
|
size_t size = va_arg(*list, size_t);
|
|
|
|
const char *format = va_arg(*list, const char *);
|
|
|
|
const char *key = va_arg(*list, const char *);
|
|
|
|
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
|
|
|
if (ret) *ret = EINA_FALSE;
|
|
|
|
Eina_Bool int_ret = EINA_FALSE;
|
|
|
|
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN(img);
|
|
|
|
EINA_SAFETY_ON_TRUE_RETURN(!size);
|
2013-05-29 04:55:19 -07:00
|
|
|
ELM_SAFE_FREE(sd->stdicon, eina_stringshare_del);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
_edje_signals_free(sd);
|
|
|
|
|
2013-03-18 09:07:38 -07:00
|
|
|
eo_do_super(obj, MY_CLASS, elm_obj_image_memfile_set(img, size, format, key, &int_ret));
|
2012-11-25 22:32:53 -08:00
|
|
|
if (ret) *ret = int_ret;
|
2012-05-25 12:53:59 -07:00
|
|
|
}
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
static void
|
|
|
|
_elm_icon_smart_theme(Eo *obj, void *_pd, va_list *list)
|
2012-05-25 12:53:59 -07:00
|
|
|
{
|
2012-11-25 22:32:53 -08:00
|
|
|
Elm_Icon_Smart_Data *sd = _pd;
|
|
|
|
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
|
|
|
if (ret) *ret = EINA_FALSE;
|
|
|
|
Eina_Bool int_ret = EINA_FALSE;
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
if (sd->stdicon)
|
|
|
|
_elm_theme_object_icon_set(obj, sd->stdicon, elm_widget_style_get(obj));
|
|
|
|
|
2013-03-18 09:07:38 -07:00
|
|
|
eo_do_super(obj, MY_CLASS, elm_wdg_theme(&int_ret));
|
2012-11-25 22:32:53 -08:00
|
|
|
if (!int_ret) return;
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (ret) *ret = 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;
|
2012-11-25 22:32:53 -08:00
|
|
|
Eina_Bool ret = EINA_FALSE;
|
2011-09-14 11:28:22 -07:00
|
|
|
|
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);
|
2012-11-25 22:32:53 -08:00
|
|
|
eo_do(obj, elm_obj_image_sizing_eval());
|
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
|
|
|
{
|
2013-04-24 04:41:37 -07:00
|
|
|
ELM_ICON_DATA_GET(data, sd);
|
2012-05-25 12:53:59 -07:00
|
|
|
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
|
2013-04-24 04:41:37 -07:00
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_standard_resize_cb, data);
|
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
|
|
|
{
|
2013-04-24 04:41:37 -07:00
|
|
|
ELM_ICON_DATA_GET(data, sd);
|
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
|
2012-11-25 22:32:53 -08:00
|
|
|
_elm_icon_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
2012-05-25 12:53:59 -07:00
|
|
|
{
|
2012-11-25 22:32:53 -08:00
|
|
|
Elm_Icon_Smart_Data *priv = _pd;
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2013-09-24 21:33:39 -07:00
|
|
|
eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
|
|
|
|
elm_widget_sub_object_parent_add(obj);
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
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
|
2012-11-25 22:32:53 -08:00
|
|
|
_elm_icon_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
2012-05-25 12:53:59 -07:00
|
|
|
{
|
2012-11-25 22:32:53 -08:00
|
|
|
Elm_Icon_Smart_Data *sd = _pd;
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
if (sd->stdicon) eina_stringshare_del(sd->stdicon);
|
|
|
|
|
|
|
|
#ifdef HAVE_ELEMENTARY_ETHUMB
|
2013-07-03 16:39:00 -07:00
|
|
|
if (sd->thumb.request)
|
|
|
|
{
|
|
|
|
Ethumb_Client *ethumbd = elm_thumb_ethumb_client_get();
|
|
|
|
if (ethumbd) _icon_thumb_stop(sd, ethumbd);
|
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
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);
|
|
|
|
|
2013-03-18 09:07:38 -07:00
|
|
|
eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
|
2012-05-25 12:53:59 -07:00
|
|
|
}
|
|
|
|
|
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
|
|
|
{
|
|
|
|
|
2013-04-24 04:41:37 -07:00
|
|
|
Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (!id->edje) return;
|
|
|
|
|
|
|
|
edje_object_signal_emit(id->img, emission, source);
|
2012-05-25 12:53:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
2013-04-24 04:41:37 -07:00
|
|
|
Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (!id->edje) return;
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
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
|
2012-11-25 22:32:53 -08:00
|
|
|
(id->img, emission, source, _edje_signal_callback, esd);
|
2012-05-25 12:53:59 -07:00
|
|
|
}
|
|
|
|
|
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);
|
2013-04-24 04:41:37 -07:00
|
|
|
Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (!id->edje) return NULL;
|
2012-05-25 12:53:59 -07:00
|
|
|
|
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;
|
|
|
|
|
|
|
|
edje_object_signal_callback_del_full
|
2012-11-25 22:32:53 -08:00
|
|
|
(id->img, emission, source,
|
2012-05-25 12:53:59 -07:00
|
|
|
_edje_signal_callback, esd);
|
|
|
|
|
2012-11-29 23:55:49 -08:00
|
|
|
free(esd);
|
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
return data; /* stop at 1st match */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
|
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
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
|
2012-11-25 22:32:53 -08:00
|
|
|
Evas_Object *obj = eo_add(MY_CLASS, parent);
|
|
|
|
eo_unref(obj);
|
|
|
|
return obj;
|
|
|
|
}
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
static void
|
|
|
|
_constructor(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Elm_Icon_Smart_Data *sd = _pd;
|
|
|
|
sd->obj = obj;
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2013-03-18 09:07:38 -07:00
|
|
|
eo_do_super(obj, MY_CLASS, eo_constructor());
|
2012-11-25 22:32:53 -08:00
|
|
|
eo_do(obj,
|
|
|
|
evas_obj_type_set(MY_CLASS_NAME),
|
|
|
|
evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL));
|
2008-10-06 18:23:49 -07:00
|
|
|
}
|
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-11-25 22:32:53 -08:00
|
|
|
Eina_Bool ret = EINA_FALSE;
|
|
|
|
eo_do(obj, elm_obj_image_memfile_set(img, size, format, key, &ret));
|
|
|
|
return ret;
|
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;
|
2012-11-25 22:32:53 -08:00
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE);
|
2009-04-03 14:52:01 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
Eina_Bool ret = EINA_FALSE;
|
|
|
|
eo_do(obj, elm_obj_image_file_set(file, group, &ret));
|
|
|
|
return ret;
|
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);
|
2012-11-25 22:32:53 -08:00
|
|
|
eo_do(obj, elm_obj_icon_thumb_set(file, group));
|
|
|
|
}
|
2011-05-31 09:16:01 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
static void
|
|
|
|
_thumb_set(Eo *obj, void *_pd, va_list *list)
|
|
|
|
{
|
|
|
|
const char *file = va_arg(*list, const char *);
|
|
|
|
const char *group = va_arg(*list, const char *);
|
2011-05-31 09:16:01 -07:00
|
|
|
#ifdef HAVE_ELEMENTARY_ETHUMB
|
2012-11-25 22:32:53 -08:00
|
|
|
Elm_Icon_Smart_Data *sd = _pd;
|
2012-05-28 06:08:48 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
evas_object_event_callback_del_full
|
2013-04-24 04:41:37 -07:00
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_standard_resize_cb, obj);
|
2012-05-25 12:53:59 -07:00
|
|
|
evas_object_event_callback_del_full
|
2013-04-24 04:41:37 -07:00
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_thumb_resize_cb, obj);
|
2011-09-14 11:28:22 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
evas_object_event_callback_add
|
2013-04-24 04:41:37 -07:00
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_thumb_resize_cb, obj);
|
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
|
2013-04-24 04:41:37 -07:00
|
|
|
(ELM_ECORE_EVENT_ETHUMB_CONNECT, _icon_thumb_apply_cb, obj);
|
2011-05-31 09:16:01 -07:00
|
|
|
}
|
|
|
|
#else
|
2012-05-25 12:53:59 -07:00
|
|
|
(void)obj;
|
2012-11-25 22:32:53 -08:00
|
|
|
(void)_pd;
|
2012-05-25 12:53:59 -07:00
|
|
|
(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;
|
2012-11-25 22:32:53 -08:00
|
|
|
|
|
|
|
Eina_Bool ret = EINA_FALSE;
|
|
|
|
eo_do(obj, elm_obj_icon_standard_set(name, &ret));
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2013-04-24 04:41:37 -07:00
|
|
|
_standard_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2011-06-24 01:59:56 -07:00
|
|
|
Eina_Bool fdo = EINA_FALSE;
|
2012-11-25 22:32:53 -08:00
|
|
|
const char *name = va_arg(*list, const char *);
|
|
|
|
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
2011-06-23 07:54:29 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (!name)
|
|
|
|
{
|
|
|
|
if (ret) *ret = EINA_FALSE;
|
|
|
|
return;
|
|
|
|
}
|
2011-06-23 07:54:29 -07:00
|
|
|
|
2012-05-25 12:53:59 -07:00
|
|
|
evas_object_event_callback_del_full
|
2013-04-24 04:41:37 -07:00
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_standard_resize_cb, obj);
|
2011-06-23 07:54:29 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
Eina_Bool int_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
|
2013-04-24 04:41:37 -07:00
|
|
|
(obj, EVAS_CALLBACK_RESIZE, _elm_icon_standard_resize_cb, obj);
|
2011-06-24 01:59:56 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (ret) *ret = int_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;
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
const char *ret = NULL;
|
|
|
|
eo_do((Eo *) obj, elm_obj_icon_standard_get(&ret));
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_standard_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|
|
|
{
|
|
|
|
|
|
|
|
Elm_Icon_Smart_Data *sd = _pd;
|
|
|
|
const char **ret = va_arg(*list, const char **);
|
|
|
|
|
|
|
|
*ret = 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);
|
2012-11-25 22:32:53 -08:00
|
|
|
|
|
|
|
eo_do(obj, elm_obj_icon_order_lookup_set(order));
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_order_lookup_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|
|
|
{
|
|
|
|
|
|
|
|
Elm_Icon_Smart_Data *sd = _pd;
|
|
|
|
Elm_Icon_Lookup_Order order = va_arg(*list, Elm_Icon_Lookup_Order);
|
2012-05-25 12:53:59 -07:00
|
|
|
|
|
|
|
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;
|
2012-11-25 22:32:53 -08:00
|
|
|
Elm_Icon_Lookup_Order ret = ELM_ICON_LOOKUP_THEME_FDO;
|
|
|
|
eo_do((Eo *) obj, elm_obj_icon_order_lookup_get(&ret));
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_order_lookup_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|
|
|
{
|
2012-05-25 12:53:59 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
Elm_Icon_Smart_Data *sd = _pd;
|
|
|
|
Elm_Icon_Lookup_Order *ret = va_arg(*list, Elm_Icon_Lookup_Order *);
|
|
|
|
|
|
|
|
*ret = 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
|
|
|
}
|
2012-11-25 22:32:53 -08:00
|
|
|
|
|
|
|
static void
|
|
|
|
_class_constructor(Eo_Class *klass)
|
|
|
|
{
|
|
|
|
const Eo_Op_Func_Description func_desc[] = {
|
|
|
|
EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor),
|
|
|
|
|
|
|
|
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_icon_smart_add),
|
|
|
|
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_icon_smart_del),
|
|
|
|
|
|
|
|
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_THEME), _elm_icon_smart_theme),
|
|
|
|
|
|
|
|
EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_FILE_SET), _elm_icon_smart_file_set),
|
|
|
|
EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_MEMFILE_SET), _elm_icon_smart_memfile_set),
|
|
|
|
EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_SIZING_EVAL), _elm_icon_smart_sizing_eval),
|
|
|
|
|
|
|
|
EO_OP_FUNC(ELM_OBJ_ICON_ID(ELM_OBJ_ICON_SUB_ID_THUMB_SET), _thumb_set),
|
|
|
|
EO_OP_FUNC(ELM_OBJ_ICON_ID(ELM_OBJ_ICON_SUB_ID_STANDARD_SET), _standard_set),
|
|
|
|
EO_OP_FUNC(ELM_OBJ_ICON_ID(ELM_OBJ_ICON_SUB_ID_STANDARD_GET), _standard_get),
|
|
|
|
EO_OP_FUNC(ELM_OBJ_ICON_ID(ELM_OBJ_ICON_SUB_ID_ORDER_LOOKUP_SET), _order_lookup_set),
|
|
|
|
EO_OP_FUNC(ELM_OBJ_ICON_ID(ELM_OBJ_ICON_SUB_ID_ORDER_LOOKUP_GET), _order_lookup_get),
|
|
|
|
|
|
|
|
EO_OP_FUNC_SENTINEL
|
|
|
|
};
|
|
|
|
eo_class_funcs_set(klass, func_desc);
|
2013-02-09 23:52:31 -08:00
|
|
|
|
|
|
|
evas_smart_legacy_type_register(MY_CLASS_NAME, klass);
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
static const Eo_Op_Description op_desc[] = {
|
|
|
|
EO_OP_DESCRIPTION(ELM_OBJ_ICON_SUB_ID_THUMB_SET, "Set the file that will be used, but use a generated thumbnail."),
|
|
|
|
EO_OP_DESCRIPTION(ELM_OBJ_ICON_SUB_ID_STANDARD_SET, "Set the icon by icon standards names."),
|
|
|
|
EO_OP_DESCRIPTION(ELM_OBJ_ICON_SUB_ID_STANDARD_GET, "Get the icon name set by icon standard names."),
|
|
|
|
EO_OP_DESCRIPTION(ELM_OBJ_ICON_SUB_ID_ORDER_LOOKUP_SET, "Sets the icon lookup order used by elm_icon_standard_set()."),
|
2013-08-21 13:23:44 -07:00
|
|
|
EO_OP_DESCRIPTION(ELM_OBJ_ICON_SUB_ID_ORDER_LOOKUP_GET, "Get the icon lookup order."),
|
2012-11-25 22:32:53 -08:00
|
|
|
EO_OP_DESCRIPTION_SENTINEL
|
|
|
|
};
|
|
|
|
static const Eo_Class_Description class_desc = {
|
|
|
|
EO_VERSION,
|
|
|
|
MY_CLASS_NAME,
|
|
|
|
EO_CLASS_TYPE_REGULAR,
|
|
|
|
EO_CLASS_DESCRIPTION_OPS(&ELM_OBJ_ICON_BASE_ID, op_desc, ELM_OBJ_ICON_SUB_ID_LAST),
|
|
|
|
NULL,
|
|
|
|
sizeof(Elm_Icon_Smart_Data),
|
|
|
|
_class_constructor,
|
|
|
|
NULL
|
|
|
|
};
|
|
|
|
EO_DEFINE_CLASS(elm_obj_icon_class_get, &class_desc, ELM_OBJ_IMAGE_CLASS, NULL);
|