Eolian: Integration of Image

This commit is contained in:
Daniel Zaoui 2014-03-23 13:05:20 +02:00
parent c48c2e2608
commit fceca47f28
6 changed files with 717 additions and 730 deletions

View File

@ -593,7 +593,9 @@ BUILT_SOURCES = \
elm_grid.eo.c \
elm_grid.eo.h \
elc_hoversel.eo.c \
elc_hoversel.eo.h
elc_hoversel.eo.h \
elm_image.eo.c \
elm_image.eo.h
EXTRA_DIST += \
elm_widget.eo \
@ -630,7 +632,8 @@ EXTRA_DIST += \
elm_gesture_layer.eo \
elm_glview.eo \
elm_grid.eo \
elc_hoversel.eo
elc_hoversel.eo \
elm_image.eo
nodist_includesunstable_HEADERS = \
elm_widget.eo.h \
@ -667,5 +670,6 @@ nodist_includesunstable_HEADERS = \
elm_gesture_layer.eo.h \
elm_glview.eo.h \
elm_grid.eo.h \
elc_hoversel.eo.h
elc_hoversel.eo.h \
elm_image.eo.h

View File

@ -353,7 +353,7 @@ static void
_edje_signals_free(Elm_Icon_Smart_Data *sd)
{
Edje_Signal_Data *esd;
Elm_Image_Smart_Data *id = eo_data_scope_get(sd->obj, ELM_OBJ_IMAGE_CLASS);
Elm_Image_Data *id = eo_data_scope_get(sd->obj, ELM_OBJ_IMAGE_CLASS);
EINA_LIST_FREE(sd->edje_signals, esd)
{
@ -372,7 +372,7 @@ _elm_icon_smart_file_set(Eo *obj, void *_pd, va_list *list)
Evas_Object *pclip;
Elm_Icon_Smart_Data *sd = _pd;
Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
Elm_Image_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
const char *file = va_arg(*list, const char *);
const char *key = va_arg(*list, const char *);
@ -630,7 +630,7 @@ _elm_icon_signal_emit(Evas_Object *obj,
const char *source)
{
Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
Elm_Image_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
if (!id->edje) return;
@ -648,7 +648,7 @@ _elm_icon_signal_callback_add(Evas_Object *obj,
Edje_Signal_Data *esd;
ELM_ICON_DATA_GET(obj, sd);
Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
Elm_Image_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
if (!id->edje) return;
@ -679,7 +679,7 @@ _elm_icon_signal_callback_del(Evas_Object *obj,
Eina_List *l;
ELM_ICON_DATA_GET(obj, sd);
Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
Elm_Image_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
if (!id->edje) return NULL;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,547 @@
class Elm_Image (Elm_Widget, Evas_Clickable_Interface)
{
eo_prefix: elm_obj_image;
properties {
editable {
set {
/*@
Make the image 'editable'.
This means the image is a valid drag target for drag and drop, and can be
cut or pasted too.
@ingroup Image */
}
get {
/*@
Check if the image is 'editable'.
@return Editability.
A return value of EINA_TRUE means the image is a valid drag target
for drag and drop, and can be cut or pasted too.
@ingroup Image */
}
values {
Eina_Bool set; /*@ Turn on or off editability. Default is @c EINA_FALSE. */
}
}
smooth_scale {
set {
/*@ No description supplied by the EAPI. */
}
get {
/*@ No description supplied by the EAPI. */
}
values {
Eina_Bool smooth;
}
}
resize_down {
set {
/*@ No description supplied by the EAPI. */
}
get {
/*@ No description supplied by the EAPI. */
}
values {
Eina_Bool resize_down;
}
}
load_size {
set {
/*@ No description supplied by the EAPI. */
}
get {
/*@ No description supplied by the EAPI. */
}
values {
int size;
}
}
animated_play {
set {
/*@
Start or stop an image object's animation.
To actually start playing any image object's animation, if it
supports it, one must do something like:
@code
if (elm_image_animated_available_get(img))
{
elm_image_animated_set(img, EINA_TRUE);
elm_image_animated_play_set(img, EINA_TRUE);
}
@endcode
elm_image_animated_set() will enable animation on the image, <b>but
not start it yet</b>. This is the function one uses to start and
stop animations on image objects.
@see elm_image_animated_available_get()
@see elm_image_animated_set()
@see elm_image_animated_play_get()
@ingroup Image
@since 1.7 */
}
get {
/*@
Get whether an image object is under animation or not.
@return @c EINA_TRUE, if the image is being animated, @c EINA_FALSE
otherwise.
@see elm_image_animated_play_get()
@ingroup Image
@since 1.7 */
}
values {
Eina_Bool play; /*@ @c EINA_TRUE to start the animation, @c EINA_FALSE
otherwise. Default is @c EINA_FALSE. */
}
}
resize_up {
set {
/*@ No description supplied by the EAPI. */
}
get {
/*@ No description supplied by the EAPI. */
}
values {
Eina_Bool resize_up;
}
}
smooth {
set {
/*@
Set the smooth effect for an image.
Set the scaling algorithm to be used when scaling the image. Smooth
scaling provides a better resulting image, but is slower.
The smooth scaling should be disabled when making animations that change
the image size, since it will be faster. Animations that don't require
resizing of the image can keep the smooth scaling enabled (even if the
image is already scaled, since the scaled image will be cached).
@see elm_image_smooth_get()
@ingroup Image */
}
get {
/*@
Get the smooth effect for an image.
@return @c EINA_TRUE if smooth scaling is enabled, @c EINA_FALSE otherwise.
@see elm_image_smooth_set()
@ingroup Image */
}
values {
Eina_Bool smooth; /*@ @c EINA_TRUE if smooth scaling should be used, @c EINA_FALSE
otherwise. Default is @c EINA_TRUE. */
}
}
no_scale {
set {
/*@
Disable scaling of this object.
This function disables scaling of the elm_image widget through the
function elm_object_scale_set(). However, this does not affect the widget
size/resize in any way. For that effect, take a look at
elm_image_resizable_set().
@see elm_image_no_scale_get()
@see elm_image_resizable_set()
@see elm_object_scale_set()
@ingroup Image */
}
get {
/*@
Get whether scaling is disabled on the object.
@return @c EINA_TRUE if scaling is disabled, @c EINA_FALSE otherwise
@see elm_image_no_scale_set()
@ingroup Image */
}
values {
Eina_Bool no_scale; /*@ @c EINA_TRUE if the object is not scalable, @c EINA_FALSE
otherwise. Default is @c EINA_FALSE. */
}
}
animated {
set {
/*@
Set whether an image object (which supports animation) is to
animate itself or not.
An image object, even if it supports animation, will be displayed
by default without animation. Call this function with @a animated
set to @c EINA_TRUE to enable its animation. To start or stop the
animation, actually, use elm_image_animated_play_set().
@see elm_image_animated_get()
@see elm_image_animated_available_get()
@see elm_image_animated_play_set()
@ingroup Image
@since 1.7 */
}
get {
/*@
Get whether an image object has animation enabled or not.
@return @c EINA_TRUE if the image has animation enabled,
@c EINA_FALSE otherwise.
@see elm_image_animated_set()
@ingroup Image
@since 1.7 */
}
values {
Eina_Bool anim; /*@ @c EINA_TRUE if the object is to animate itself,
@c EINA_FALSE otherwise. Default is @c EINA_FALSE. */
}
}
scale {
set {
/*@ No description supplied by the EAPI. */
}
get {
/*@ No description supplied by the EAPI. */
}
values {
double scale;
}
}
file {
set {
/*@
Set the file that will be used as the image's source.
@return (@c EINA_TRUE = success, @c EINA_FALSE = error)
@see elm_image_file_get()
@note This function will trigger the Edje file case based on the
extension of the @a file string (expects @c ".edj", for this
case).
@note If you use animated gif image and create multiple image objects with
one gif image file, you should set the @p group differently for each object.
Or image objects will share one evas image cache entry and you will get
unwanted frames.
@ingroup Image */
return Eina_Bool;
legacy null;
}
get {
/*@
Get the file that will be used as image.
@see elm_image_file_set()
@ingroup Image */
}
values {
const char *file; /*@ The path to file that will be used as image source */
const char *group; /*@ The group that the image belongs to, in case it's an
EET (including Edje case) file. This can be used as a key inside
evas image cache if this is a normal image file not eet file. */
}
}
fill_inside {
set {
/*@ No description supplied by the EAPI. */
}
get {
/*@ No description supplied by the EAPI. */
}
values {
Eina_Bool fill_inside;
}
}
aspect_fixed {
set {
/*@
Set whether the original aspect ratio of the image should be kept on resize.
The original aspect ratio (width / height) of the image is usually
distorted to match the object's size. Enabling this option will retain
this original aspect, and the way that the image is fit into the object's
area depends on the option set by elm_image_fill_outside_set().
@see elm_image_aspect_fixed_get()
@see elm_image_fill_outside_set()
@ingroup Image */
}
get {
/*@
Get if the object retains the original aspect ratio.
@return @c EINA_TRUE if the object keeps the original aspect, @c EINA_FALSE
otherwise.
@ingroup Image */
}
values {
Eina_Bool fixed; /*@ @c EINA_TRUE if the image should retain the aspect,
@c EINA_FALSE otherwise. */
}
}
orient {
set {
/*@
Set the image orientation.
This function allows to rotate or flip the given image.
@see elm_image_orient_get()
@see @ref Elm_Image_Orient
@ingroup Image */
}
get {
/*@
Get the image orientation.
@return The image orientation @ref Elm_Image_Orient
@see elm_image_orient_set()
@see @ref Elm_Image_Orient
@ingroup Image */
}
values {
Elm_Image_Orient orient; /*@ The image orientation @ref Elm_Image_Orient
Default is #ELM_IMAGE_ORIENT_NONE. */
}
}
fill_outside {
set {
/*@
Set if the image fills the entire object area, when keeping the aspect ratio.
When the image should keep its aspect ratio even if resized to another
aspect ratio, there are two possibilities to resize it: keep the entire
image inside the limits of height and width of the object (@p fill_outside
is @c EINA_FALSE) or let the extra width or height go outside of the object,
and the image will fill the entire object (@p fill_outside is @c EINA_TRUE).
@note This option will have no effect if
elm_image_aspect_fixed_set() is set to @c EINA_FALSE.
@see elm_image_fill_outside_get()
@see elm_image_aspect_fixed_set()
@ingroup Image */
}
get {
/*@
Get if the object is filled outside
@return @c EINA_TRUE if the object is filled outside, @c EINA_FALSE otherwise.
@see elm_image_fill_outside_set()
@ingroup Image */
}
values {
Eina_Bool fill_outside; /*@ @c EINA_TRUE if the object is filled outside,
@c EINA_FALSE otherwise. Default is @c EINA_FALSE. */
}
}
resizable {
set {
/*@
Set if the object is (up/down) resizable.
This function limits the image resize ability. If @p size_up is set to
@c EINA_FALSE, the object can't have its height or width resized to a value
higher than the original image size. Same is valid for @p size_down.
@see elm_image_resizable_get()
@ingroup Image */
}
get {
/*@
Get if the object is (up/down) resizable.
@see elm_image_resizable_set()
@ingroup Image */
}
values {
Eina_Bool up; /*@ A bool to set if the object is resizable up. Default is
@c EINA_TRUE. */
Eina_Bool down; /*@ A bool to set if the object is resizable down. Default
is @c EINA_TRUE. */
}
}
preload_disabled {
set {
/*@
Enable or disable preloading of the image
@ingroup Image */
}
values {
Eina_Bool disabled; /*@ If EINA_TRUE, preloading will be disabled */
}
}
mmap {
set {
/*@
Set the file that will be used as the image's source.
@return (@c EINA_TRUE = success, @c EINA_FALSE = error)
@see elm_image_file_set()
@note This function will trigger the Edje file case based on the
extension of the @a file string use to create the Eina_File (expects
@c ".edj", for this case).
@note If you use animated gif image and create multiple image objects with
one gif image file, you should set the @p group differently for each object.
Or image objects will share one evas image cache entry and you will get
unwanted frames.
@ingroup Image */
return Eina_Bool;
legacy null;
}
values {
const Eina_File *file; /*@ The handler to an Eina_File that will be used as image source */
const char *group; /*@ The group that the image belongs to, in case it's an
EET (including Edje case) file. This can be used as a key inside
evas image cache if this is a normal image file not eet file. */
}
}
memfile {
set {
/*@
Set a location in memory to be used as an image object's source
bitmap.
This function is handy when the contents of an image file are
mapped in memory, for example.
The @p format string should be something like @c "png", @c "jpg",
@c "tga", @c "tiff", @c "bmp" etc, when provided (@c NULL, on the
contrary). This improves the loader performance as it tries the
"correct" loader first, before trying a range of other possible
loaders until one succeeds.
@return (@c EINA_TRUE = success, @c EINA_FALSE = error)
@since 1.7
@ingroup Image */
return Eina_Bool;
}
values {
const void *img; /*@ The binary data that will be used as image source */
size_t size; /*@ The size of binary data blob @p img */
const char *format; /*@ (Optional) expected format of @p img bytes */
const char *key; /*@ Optional indexing key of @p img to be passed to the
image loader (eg. if @p img is a memory-mapped EET file) */
}
}
animated_available {
get {
/*@
Get whether an image object supports animation or not.
@return @c EINA_TRUE if the image supports animation,
@c EINA_FALSE otherwise.
This function returns if this Elementary image object's internal
image can be animated. Currently Evas only supports GIF
animation. If the return value is @b EINA_FALSE, other
@c elm_image_animated_xxx API calls won't work.
@see elm_image_animated_set()
@ingroup Image
@since 1.7 */
return Eina_Bool;
}
}
object {
get {
/*@
Get the inlined image object of the image widget.
@return The inlined image object, or NULL if none exists
This function allows one to get the underlying @c Evas_Object of type
Image from this elementary widget. It can be useful to do things like get
the pixel data, save the image to a file, etc.
@note Be careful to not manipulate it, as it is under control of
elementary.
@ingroup Image */
return Evas_Object *;
}
}
object_size {
get {
/*@
Get the current size of the image.
This is the real size of the image, not the size of the object.
@ingroup Image */
}
values {
int w; /*@ Pointer to store width, or NULL. */
int h; /*@ Pointer to store height, or NULL. */
}
}
}
methods {
sizing_eval {
/*@ No description supplied by the EAPI. */
}
}
implements {
class::constructor;
Eo_Base::constructor;
Evas_Smart::hide;
Evas_Smart::clip::set;
Evas_Smart::clip_unset;
Evas_Smart::show;
Evas_Smart::color::set;
Evas_Smart::move;
Evas_Smart::add;
Evas_Smart::del;
Evas_Smart::member_add;
Evas_Smart::resize;
Elm_Widget::theme_apply;
Elm_Widget::event;
}
events {
drop;
clicked;
download,start;
download,progress;
download,done;
download,error;
}
}

View File

@ -3,6 +3,8 @@
*
* @{
*/
#include "elm_image.eo.h"
#if 0
#define ELM_OBJ_IMAGE_CLASS elm_obj_image_class_get()
const Eo_Class *elm_obj_image_class_get(void) EINA_CONST;
@ -560,6 +562,7 @@ enum
*/
#define elm_obj_image_scale_get(ret) ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_SCALE_GET), EO_TYPECHECK(double *, ret)
#endif
/**
* @}

View File

@ -25,8 +25,8 @@
/**
* Base widget smart data extended with image instance data.
*/
typedef struct _Elm_Image_Smart_Data Elm_Image_Smart_Data;
struct _Elm_Image_Smart_Data
typedef struct _Elm_Image_Data Elm_Image_Data;
struct _Elm_Image_Data
{
Evas_Object *hit_rect;
Evas_Object *img;
@ -67,7 +67,7 @@ struct _Elm_Image_Smart_Data
*/
#define ELM_IMAGE_DATA_GET(o, sd) \
Elm_Image_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_IMAGE_CLASS)
Elm_Image_Data * sd = eo_data_scope_get(o, ELM_OBJ_IMAGE_CLASS)
#define ELM_IMAGE_DATA_GET_OR_RETURN(o, ptr) \
ELM_IMAGE_DATA_GET(o, ptr); \