diff --git a/legacy/evas/configure.in b/legacy/evas/configure.in index e0491f8e1e..b412c19e87 100644 --- a/legacy/evas/configure.in +++ b/legacy/evas/configure.in @@ -188,6 +188,8 @@ PKG_CHECK_MODULES( [ have_evas_software_xcb="yes" ], [ have_evas_software_xcb="no" ]) +## manually disable xcb engine by default - not auto detected. +have_evas_software_xcb="no" ## Manual override AC_MSG_CHECKING(whether software xcb backend is to be built) AC_ARG_ENABLE(software-xcb, [ --enable-software-xcb enable the Software XCB rendering backend], [ @@ -239,6 +241,8 @@ PKG_CHECK_MODULES(DIRECTFB, directfb >= 0.9.16, [ have_evas_directfb="yes" ], [ have_evas_directfb="no" ] ) +## manually disable directfb engine by default - not auto detected. +have_evas_directfb="no" ## Manual override AC_MSG_CHECKING(whether directfb backend is to be built) AC_ARG_ENABLE(directfb, [ --enable-directfb enable the DirectFB rendering backend], [ @@ -352,6 +356,8 @@ AC_CHECK_HEADER(qdirectpainter_qws.h, #include ] ) +## manually disable qtopia engine by default - not auto detected. +have_evas_qtopia="no" ## Manual override AC_MSG_CHECKING(whether software qtopia backend is to be built) AC_ARG_ENABLE(software-qtopia, [ --enable-software-qtopia enable the Software Qtopia rendering backend], [ @@ -405,6 +411,8 @@ ENGINE_GL_X11_PRG=""; ], [ have_evas_gl_x11="no" ] ) +## manually disable gl engine by default - not auto detected. +have_evas_gl_x11="no" ## Manual override AC_MSG_CHECKING(whether gl x11 backend is to be built) AC_ARG_ENABLE(gl-x11, [ --enable-gl-x11 enable the OpenGL X11 display engine], [ diff --git a/legacy/evas/src/bin/evas_test_main.c b/legacy/evas/src/bin/evas_test_main.c index 38f5514abf..e5991ea6b8 100644 --- a/legacy/evas/src/bin/evas_test_main.c +++ b/legacy/evas/src/bin/evas_test_main.c @@ -2062,6 +2062,11 @@ setup(void) ob = evas_object_image_add(evas); evas_object_image_file_set(ob, IM "e_logo.png", NULL); + +// evas_object_image_save(ob, "t.png", NULL, "compress=9"); +// evas_object_image_save(ob, "t.jpg", NULL, "quality=20 compress=7"); +// evas_object_image_save(ob, "t.eet", "key", "quality=50"); + evas_object_image_size_get(ob, &iw, &ih); evas_object_move(ob, (win_w - iw) / 2, 0); evas_object_resize(ob, iw, ih); diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h index 7843c33d19..7514db9a3e 100644 --- a/legacy/evas/src/lib/Evas.h +++ b/legacy/evas/src/lib/Evas.h @@ -388,6 +388,7 @@ extern "C" { EAPI void evas_object_image_smooth_scale_set(Evas_Object *obj, Evas_Bool smooth_scale); EAPI Evas_Bool evas_object_image_smooth_scale_get(Evas_Object *obj); EAPI void evas_object_image_reload (Evas_Object *obj); + EAPI Evas_Bool evas_object_image_save (Evas_Object *obj, const char *file, const char *key, const char *flags); EAPI Evas_Bool evas_object_image_pixels_import (Evas_Object *obj, Evas_Pixel_Import_Source *pixels); EAPI void evas_object_image_pixels_get_callback_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *o), void *data); EAPI void evas_object_image_pixels_dirty_set (Evas_Object *obj, Evas_Bool dirty); diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index 08f6d22d1d..f4f92c4084 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -839,6 +839,72 @@ evas_object_image_reload(Evas_Object *obj) evas_object_change(obj); } +/** + * To be documented. + * + * FIXME: To be fixed. + * + */ +Evas_Bool +evas_object_image_save(Evas_Object *obj, const char *file, const char *key, const char *flags) +{ + Evas_Object_Image *o; + DATA32 *data = NULL; + int quality = 80, compress = 9, ok = 0; + RGBA_Image *im; + + MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); + return 0; + MAGIC_CHECK_END(); + o = (Evas_Object_Image *)(obj->object_data); + MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE); + return 0; + MAGIC_CHECK_END(); + + if (!o->engine_data) return 0; + o->engine_data = obj->layer->evas->engine.func->image_data_get(obj->layer->evas->engine.data.output, + o->engine_data, + 0, + &data); + if (flags) + { + char *p, *pp; + char *tflags; + + tflags = strdup(flags); + if (tflags) + { + p = tflags; + while (p) + { + pp = strchr(p, ' '); + if (pp) *pp = 0; + sscanf(p, "quality=%i", &quality); + sscanf(p, "compress=%i", &compress); + if (pp) p = pp + 1; + else break; + } + free(tflags); + } + } + im = evas_common_image_new(); + if (im) + { + if (o->cur.has_alpha) im->flags |= RGBA_IMAGE_HAS_ALPHA; + im->image = evas_common_image_surface_new(im); + if (im->image) + { + im->image->data = data; + im->image->w = o->cur.image.w; + im->image->h = o->cur.image.h; + im->image->no_free = 1; + ok = evas_common_save_image_to_file(im, file, key, quality, compress); + } + evas_common_image_free(im); + } + return ok; +} + /** * To be documented. * diff --git a/legacy/evas/src/lib/engines/common/Makefile.am b/legacy/evas/src/lib/engines/common/Makefile.am index f1cf9fc3b0..e3271a8458 100644 --- a/legacy/evas/src/lib/engines/common/Makefile.am +++ b/legacy/evas/src/lib/engines/common/Makefile.am @@ -38,6 +38,7 @@ evas_font_main.c \ evas_font_query.c \ evas_gradient_main.c \ evas_image_load.c \ +evas_image_save.c \ evas_image_main.c \ evas_line_main.c \ evas_polygon_main.c \ diff --git a/legacy/evas/src/lib/include/evas_common.h b/legacy/evas/src/lib/include/evas_common.h index fa0d2963b5..62b3f9c3ef 100644 --- a/legacy/evas/src/lib/include/evas_common.h +++ b/legacy/evas/src/lib/include/evas_common.h @@ -742,6 +742,7 @@ void evas_common_image_dirty (RGBA_Image *im); RGBA_Image *evas_common_load_image_from_file (const char *file, const char *key); void evas_common_load_image_data_from_file(RGBA_Image *im); +int evas_common_save_image_to_file (RGBA_Image *im, const char *file, const char *key, int quality, int compress); /****/ void evas_common_rectangle_init (void);