[prev in list] [next in list] [prev in thread] [next in thread]
List: enlightenment-devel
Subject: [E-devel] Re: E CVS: libs/ewl ningerso
From: dan sinclair <zero () perplexity ! org>
Date: 2006-03-31 14:25:34
Message-ID: 442D3BDE.7020500 () perplexity ! org
[Download RAW message or body]
In ewl_image.h you have the #ifdef BUILD_EPSILON_SUPPORT commented out,
shoudn't that be enabled? Also, in struct Ewl_Image_Thumbnail you'll
need to put a check for epsilon support around the Epsilon_Request
entry. Maybe that should be a void * so it's always there?
dan
Enlightenment CVS wrote:
> Enlightenment CVS committal
>
> Author : ningerso
> Project : e17
> Module : libs/ewl
>
> Dir : e17/libs/ewl/src/lib
>
>
> Modified Files:
> ewl_image.c ewl_image.h
>
>
> Log Message:
> Add epsilon thumbnail support to ewl_image and support a separate API for
> cases where an originating image widget is not present.
>
> ===================================================================
> RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_image.c,v
> retrieving revision 1.33
> retrieving revision 1.34
> diff -u -3 -r1.33 -r1.34
> --- ewl_image.c 22 Mar 2006 02:41:25 -0000 1.33
> +++ ewl_image.c 31 Mar 2006 06:42:45 -0000 1.34
> @@ -3,7 +3,11 @@
> #include "ewl_macros.h"
> #include "ewl_private.h"
>
> +static Ecore_Event_Handler *ewl_image_epsilon_handler = NULL;
> +
> static Ewl_Image_Type ewl_image_type_get(const char *i);
> +static int ewl_image_thumbnail_complete_cb(void *data, int type, void *event);
> +static void ewl_image_thumb_destroy_cb(Ewl_Widget *w, void *ev, void *data);
>
> /**
> * @return Returns a pointer to a new image widget on success, NULL on failure.
> @@ -183,8 +187,13 @@
> w = EWL_WIDGET(i);
> emb = ewl_embed_widget_find(w);
>
> - IF_FREE(i->path);
> - IF_FREE(i->key);
> + if (i->path != im) {
> + IF_FREE(i->path);
> + }
> +
> + if (i->key != key) {
> + IF_FREE(i->key);
> + }
>
> /*
> * Determine the type of image to be loaded.
> @@ -450,6 +459,124 @@
> i->tile.h = h;
>
> DLEAVE_FUNCTION(DLEVEL_STABLE);
> +}
> +
> +/**
> + * @param i: the image to thumbnail
> + * @return Returns a thumbnailed image widget on success, NULL on failure.
> + * @brief Create a widget representing a thumbnailed version of the image.
> + */
> +Ewl_Widget *
> +ewl_image_thumbnail_get(Ewl_Image *i)
> +{
> + Ewl_Widget *thumb = NULL;
> +
> + DENTER_FUNCTION(DLEVEL_STABLE);
> + DCHECK_PARAM_PTR_RET("i", i, NULL);
> + DCHECK_TYPE_RET("i", i, EWL_IMAGE_TYPE, NULL);
> +
> +#ifdef BUILD_EPSILON_SUPPORT
> + if (i->path && (i->type == EWL_IMAGE_TYPE_NORMAL)) {
> +
> + printf("FOO\n");
> + thumb = ewl_image_thumbnail_new();
> + if (thumb) {
> + printf("BAR\n");
> + ewl_image_thumbnail_request(EWL_IMAGE_THUMBNAIL(thumb),
> + (char *)ewl_image_file_path_get(i));
> + EWL_IMAGE_THUMBNAIL(thumb)->orig = EWL_WIDGET(i);
> + }
> + }
> +#endif
> +
> + DRETURN_PTR(thumb, DLEVEL_STABLE);
> +}
> +
> +Ewl_Widget *
> +ewl_image_thumbnail_new()
> +{
> + Ewl_Image_Thumbnail *thumb;
> +
> + DENTER_FUNCTION(DLEVEL_STABLE);
> +
> + thumb = NEW(Ewl_Image_Thumbnail, 1);
> + if (!ewl_image_thumbnail_init(EWL_IMAGE_THUMBNAIL(thumb))) {
> + ewl_widget_destroy(EWL_WIDGET(thumb));
> + thumb = NULL;
> + }
> +
> + DRETURN_PTR(thumb, DLEVEL_STABLE);
> +}
> +
> +int
> +ewl_image_thumbnail_init(Ewl_Image_Thumbnail *image)
> +{
> + DENTER_FUNCTION(DLEVEL_STABLE);
> +
> + if (!ewl_image_init(EWL_IMAGE(image)))
> + DRETURN_INT(FALSE, DLEVEL_STABLE);
> +
> + ewl_callback_append(EWL_WIDGET(image), EWL_CALLBACK_DESTROY,
> + ewl_image_thumb_destroy_cb, NULL);
> +
> + if (!ewl_image_epsilon_handler) {
> + epsilon_thumb_init();
> + ewl_image_epsilon_handler =
> + ecore_event_handler_add(EPSILON_EVENT_DONE,
> + ewl_image_thumbnail_complete_cb,
> + NULL);
> + }
> +
> + DRETURN_INT(TRUE, DLEVEL_STABLE);
> +}
> +
> +void
> +ewl_image_thumbnail_request(Ewl_Image_Thumbnail *thumb, char *path)
> +{
> + DENTER_FUNCTION(DLEVEL_STABLE);
> + DCHECK_PARAM_PTR("thumb", thumb);
> + DCHECK_PARAM_PTR("path", path);
> +
> + printf("Thumbnail requested for %s\n", path);
> + thumb->thumb = epsilon_add(path, NULL, EPSILON_THUMB_NORMAL, thumb);
> +
> + DLEAVE_FUNCTION(DLEVEL_STABLE);
> +}
> +
> +static void
> +ewl_image_thumb_destroy_cb(Ewl_Widget *w, void *ev, void *data)
> +{
> + Ewl_Image_Thumbnail *thumb = EWL_IMAGE_THUMBNAIL(w);
> +
> + DENTER_FUNCTION(DLEVEL_STABLE);
> +
> + if (thumb->thumb) {
> + epsilon_del(thumb->thumb);
> + thumb->thumb = NULL;
> + }
> +
> + DLEAVE_FUNCTION(DLEVEL_STABLE);
> +}
> +
> +static int
> +ewl_image_thumbnail_complete_cb(void *data, int type, void *event)
> +{
> + Ewl_Image_Thumbnail *thumb;
> +
> +#ifdef BUILD_EPSILON_SUPPORT
> + Epsilon_Request *ev = event;
> +#endif
> +
> + DENTER_FUNCTION(DLEVEL_STABLE);
> +
> + thumb = ev->data;
> +
> + printf("Thumbnail set: %s\n", ev->dest);
> + if (thumb) {
> + ewl_image_file_path_set(EWL_IMAGE(thumb), ev->dest);
> + }
> +
> + DRETURN_INT(TRUE, DLEVEL_STABLE);
> }
>
> void
> ===================================================================
> RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_image.h,v
> retrieving revision 1.19
> retrieving revision 1.20
> diff -u -3 -r1.19 -r1.20
> --- ewl_image.h 15 Mar 2006 04:03:48 -0000 1.19
> +++ ewl_image.h 31 Mar 2006 06:42:46 -0000 1.20
> @@ -1,6 +1,11 @@
> #ifndef EWL_IMAGE_H
> #define EWL_IMAGE_H
>
> +/* #ifdef BUILD_EPSILON_SUPPORT */
> +#include <Epsilon.h>
> +#include <Epsilon_Request.h>
> +/* #endif */
> +
> /**
> * @addtogroup Ewl_Image Ewl_Image: An Image Display Widget
> * Provides a widget for displaying evas loadable images, and edjes.
> @@ -65,6 +70,27 @@
> } tile; /**< Image tiling information */
> };
>
> +/**
> + * Inherits from Ewl_Image and extends to provide reference to original image.
> + */
> +struct Ewl_Image_Thumbnail
> +{
> + Ewl_Image image; /**< Inherit from Ewl_Image */
> + Epsilon_Request *thumb; /**< Outstanding request to thumbnail image */
> + Ewl_Widget *orig; /**< Reference to image used to create thumb */
> +};
> +
> +/**
> + * The Ewl_Image_Thumbnail widget
> + */
> +typedef struct Ewl_Image_Thumbnail Ewl_Image_Thumbnail;
> +
> +/**
> + * @def EWL_IMAGE_Thumbnail(image)
> + * Typecase a pointer to an Ewl_Image_Thumbnail widget
> + */
> +#define EWL_IMAGE_THUMBNAIL(image) ((Ewl_Image_Thumbnail *) image)
> +
> Ewl_Widget *ewl_image_new(void);
> int ewl_image_init(Ewl_Image *i);
>
> @@ -86,6 +112,13 @@
> int w, int h);
> void ewl_image_constrain_set(Ewl_Image *i, unsigned int size);
> unsigned int ewl_image_constrain_get(Ewl_Image *i);
> +
> +Ewl_Widget *ewl_image_thumbnail_get(Ewl_Image *i);
> +
> +Ewl_Widget *ewl_image_thumbnail_new();
> +int ewl_image_thumbnail_init(Ewl_Image_Thumbnail *image);
> +void ewl_image_thumbnail_request(Ewl_Image_Thumbnail *thumb,
> + char *path);
>
> /*
> * Internally used callbacks, override at your own risk.
>
>
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by xPML, a groundbreaking scripting language
> that extends applications into web and mobile media. Attend the live webcast
> and join the prime developer group breaking into this new coding territory!
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
> _______________________________________________
> enlightenment-cvs mailing list
> enlightenment-cvs@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs
>
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic