summaryrefslogtreecommitdiff
path: root/src/lib/evas
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/evas')
-rw-r--r--src/lib/evas/Evas_Loader.h22
-rw-r--r--src/lib/evas/common/evas_image_load.c50
2 files changed, 41 insertions, 31 deletions
diff --git a/src/lib/evas/Evas_Loader.h b/src/lib/evas/Evas_Loader.h
index e60647d6f1..220deabb9b 100644
--- a/src/lib/evas/Evas_Loader.h
+++ b/src/lib/evas/Evas_Loader.h
@@ -130,7 +130,14 @@ struct _Evas_Image_Load_Opts
};
typedef Emile_Image_Animated Evas_Image_Animated;
-typedef Emile_Image_Property Evas_Image_Property;
+typedef struct _Evas_Image_Property Evas_Image_Property;
+
+struct _Evas_Image_Property
+{
+ Emile_Image_Property info;
+ // need_data is set to True when to get accurate property, data need to be loaded
+ Eina_Bool need_data;
+};
typedef struct _Evas_Image_Load_Func Evas_Image_Load_Func;
@@ -186,7 +193,7 @@ typedef Emile_Colorspace Evas_Colorspace; /**< Colorspaces for pixel data suppor
#define EVAS_COLORSPACE_RGBA_S3TC_DXT4 EMILE_COLORSPACE_RGBA_S3TC_DXT4
#define EVAS_COLORSPACE_RGBA_S3TC_DXT5 EMILE_COLORSPACE_RGBA_S3TC_DXT5
-#define EVAS_IMAGE_LOAD_VERSION 1
+#define EVAS_IMAGE_LOAD_VERSION 2
struct _Evas_Image_Load_Func
{
@@ -198,11 +205,14 @@ struct _Evas_Image_Load_Func
void (*file_close) (void *loader_data);
Eina_Bool (*file_head) (void *loader_data,
- Evas_Image_Property *prop,
- int *error);
+ Evas_Image_Property *prop,
+ int *error);
+ Eina_Bool (*file_head_with_data) (void *loader_data,
+ Evas_Image_Property *prop,
+ void *pixels, int *error);
Eina_Bool (*file_data) (void *loader_data,
- Evas_Image_Property *prop,
- void *pixels, int *error);
+ Evas_Image_Property *prop,
+ void *pixels, int *error);
double (*frame_duration) (void *loader_data,
int start, int frame_num);
diff --git a/src/lib/evas/common/evas_image_load.c b/src/lib/evas/common/evas_image_load.c
index c0121391b9..f8d00cc292 100644
--- a/src/lib/evas/common/evas_image_load.c
+++ b/src/lib/evas/common/evas_image_load.c
@@ -215,17 +215,17 @@ _evas_image_file_header(Evas_Module *em, Image_Entry *ie, int *error)
DBG("loaded file head using module '%s' (%p): %s",
em->definition->name, em, file);
- ie->w = property.w;
- ie->h = property.h;
- ie->borders.l = property.borders.l;
- ie->borders.r = property.borders.r;
- ie->borders.t = property.borders.t;
- ie->borders.b = property.borders.b;
- ie->scale = property.scale;
- ie->flags.alpha = property.alpha;
- if (property.cspaces) ie->cspaces = property.cspaces;
- ie->flags.rotated = property.rotated;
- ie->flags.flipped = property.flipped;
+ ie->w = property.info.w;
+ ie->h = property.info.h;
+ ie->borders.l = property.info.borders.l;
+ ie->borders.r = property.info.borders.r;
+ ie->borders.t = property.info.borders.t;
+ ie->borders.b = property.info.borders.b;
+ ie->scale = property.info.scale;
+ ie->flags.alpha = property.info.alpha;
+ if (property.info.cspaces) ie->cspaces = property.info.cspaces;
+ ie->flags.rotated = property.info.rotated;
+ ie->flags.flipped = property.info.flipped;
r = EINA_FALSE;
}
else
@@ -448,20 +448,20 @@ end:
_timestamp_build(&(ie->tstamp), &st);
memset(&property, 0, sizeof (property));
- property.w = ie->w;
- property.h = ie->h;
- property.scale = ie->scale;
- property.rotated = ie->flags.rotated;
- property.flipped = ie->flags.flipped;
- property.premul = EINA_FALSE;
- property.alpha_sparse = EINA_FALSE;
- property.cspace = ie->space;
+ property.info.w = ie->w;
+ property.info.h = ie->h;
+ property.info.scale = ie->scale;
+ property.info.rotated = ie->flags.rotated;
+ property.info.flipped = ie->flags.flipped;
+ property.info.premul = EINA_FALSE;
+ property.info.alpha_sparse = EINA_FALSE;
+ property.info.cspace = ie->space;
evas_cache_image_surface_alloc(ie, ie->w, ie->h);
- property.borders.l = ie->borders.l;
- property.borders.r = ie->borders.r;
- property.borders.t = ie->borders.t;
- property.borders.b = ie->borders.b;
+ property.info.borders.l = ie->borders.l;
+ property.info.borders.r = ie->borders.r;
+ property.info.borders.t = ie->borders.t;
+ property.info.borders.b = ie->borders.b;
pixels = evas_cache_image_pixels(ie);
if (!pixels)
@@ -472,9 +472,9 @@ end:
evas_image_load_func->file_data(ie->loader_data, &property, pixels, &ret);
- ie->flags.alpha_sparse = property.alpha_sparse;
+ ie->flags.alpha_sparse = property.info.alpha_sparse;
- if (property.premul) evas_common_image_premul(ie);
+ if (property.info.premul) evas_common_image_premul(ie);
return ret;
}