evas_map: fix rendering bug 'mapped smart parent'+'image_object_update_add' 58/200258/1
authorJiyoun Park <jy0703.park@samsung.com>
Wed, 20 Feb 2019 11:39:41 +0000 (20:39 +0900)
committerJiyoun Park <jy0703.park@samsung.com>
Thu, 21 Feb 2019 01:38:55 +0000 (10:38 +0900)
commit23de6660338021abb596bebd807b5e3889551748
tree4fdcf778d6858d6e6eb3a9b15c7ee2a20ebf8c3f
parent4e87b608ab69fa7df594a7a4f817595738240934
evas_map: fix rendering bug 'mapped smart parent'+'image_object_update_add'

Problem case:
1. there is smart object(e_comp_object) + mapped
2. e_comp_object's mapped size 400X400
3. image object A is child of e_comp_object
4. map surface is (800X800) , image_object size is also (800X800)
5. e_comp_object is mapped, so map surface (800X800) will be rendered 400X400 into evas by map image render.

step1: E20 calls evas_object_image_data_update_add(A,  100X100)

step2: e_comp_object and A are added "render_objects" list according below process
    -> _evas_render_phase1_object_process(e_comp_object)
        ->e_comp_object cahnged, and it is smart object and mapped ,
             so map_not_can_map=1 & obj_changed=1;
        ->_evas_render_phase1_object_mapped(e_comp_object)
           ->_evas_render_phase1_object_process(A)
             ->_evas_render_phase1_object_changed_normal(A)

step3: _evas_render_phase1_direct function
      -> 400X400 is added into rende area by e_comp_object's render pre function
      -> 800X800 is removed and 100X100 is added by evas_object_image_render_pre(A)

The problem is 800X800 is removed because
   o->pixels->pixel_updates=1   by update_add function.
   inside that condition evas_render_update_del(800X800)

I think evas update rect should not be affectey by render area related with inside map.

if image object's parent is mapped, image object will be rendered whole area in map render code,
I add code to check this

@tizen_only

Change-Id: Id0f3f56a3602481fa9d5761d922f89a107c7d397
Signed-off-by: Jiyoun Park <jy0703.park@samsung.com>
src/lib/evas/canvas/evas_object_image.c
src/lib/evas/canvas/evas_render.c
src/lib/evas/include/evas_private.h