[evas gl] fix bug when application use evas_object_image_save() in gl backend
authorsunghyun kim <scholb.kim@samsung.com>
Tue, 20 Dec 2016 11:55:15 +0000 (20:55 +0900)
committerWonki Kim <wonki_.kim@samsung.com>
Mon, 2 Jan 2017 07:27:04 +0000 (16:27 +0900)
Usally, evas_object_image_save() in gl backend need to rotate image_data for save.
but if application call evas_object_image_save() after elm_image_orient_set(),
it can make strange calculation by img_object for save().
so it need to be deleted after save image file.

Change-Id: I1ddf7bf3e7a49888f2ca48e499305f808cafe297

src/modules/evas/engines/gl_common/evas_gl_common.h
src/modules/evas/engines/gl_generic/evas_engine.c

index c157871006596fe10c809a59404ef3cc03db4ea1..6b4b9d6dd23bd13dbfa64042304ede3094009e42 100644 (file)
@@ -469,6 +469,7 @@ struct _Evas_GL_Image
    unsigned char    direct : 1; // evas gl direct renderable
    /*Disable generate atlas for texture unit, EINA_FALSE by default*/
    Eina_Bool        disable_atlas : 1;
+   Eina_Bool rotated : 1; // check eng_image_orient_set() called
 };
 
 struct _Evas_GL_Font_Texture
index 4e5b519a3b4369d00d7f617ce208a230e8a50c3b..9c5ccb08b831f2a764290c0f1e0fb4f0c9ce4c6c 100644 (file)
@@ -709,8 +709,7 @@ eng_image_data_get(void *data, void *image, int to_write, DATA32 **image_data, i
    if (im->native.data)
      return im;
 
-   if (im->im &&
-       im->orient != EVAS_IMAGE_ORIENT_NONE)
+   if (im->im && im->rotated)
      {
         im_new = _rotate_image_data(data, image);
         if (!im_new)
@@ -718,9 +717,9 @@ eng_image_data_get(void *data, void *image, int to_write, DATA32 **image_data, i
              if (err) *err = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
              return im;
           }
-        evas_gl_common_image_free(im);
 
         *image_data = im_new->im->image.data;
+        if (tofree) *tofree = EINA_TRUE;
         return im_new;
      }
 
@@ -1009,6 +1008,7 @@ eng_image_orient_set(void *data, void *image, Evas_Image_Orient orient)
    im_new->cached = EINA_FALSE;
 
    im_new->orient = orient;
+   im_new->rotated = EINA_TRUE;
    im_new->tex = im->tex;
    im_new->tex->references++;
    im_new->tex->pt->references++;