evas-wayland-shm: Fix rotation for wayland shm engine 74/65874/2 accepted/tizen/common/20160415.162428 accepted/tizen/ivi/20160415.083923 accepted/tizen/mobile/20160415.083902 accepted/tizen/tv/20160415.083915 accepted/tizen/wearable/20160415.083844 submit/tizen/20160415.043720
authorChris Michael <cpmichael@osg.samsung.com>
Mon, 21 Mar 2016 13:29:32 +0000 (09:29 -0400)
committerGwanglim Lee <gl77.lee@samsung.com>
Fri, 15 Apr 2016 04:35:22 +0000 (21:35 -0700)
Prior to this fix, window rotation was not operating correctly and the
surface contents would get rendered at the wrong size and position.
This patch fixes the engine so that rotation operates properly now.

NB: Tested with the Window States(2) test in elementary

Thanks to shiin for reporting :)

@fix

Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Conflicts:
src/modules/evas/engines/wayland_shm/evas_outbuf.c

Change-Id: I171a2a4f77ce9feae014825f8b0d80e891014780

src/modules/evas/engines/wayland_shm/evas_outbuf.c

index 5fedd8a..0c2c5ff 100644 (file)
@@ -43,9 +43,18 @@ _evas_outbuf_setup(int w, int h, int rot, Outbuf_Depth depth, Eina_Bool alpha, s
      }
 
    /* try to create the outbuf surface */
-   if (!(ob->surface = 
-         _evas_shm_surface_create(disp, shm, surface, w, h, ob->num_buff, alpha)))
-     goto surf_err;
+   if ((ob->rotation == 0) || (ob->rotation == 180))
+     {
+        ob->surface =
+          _evas_shm_surface_create(disp, shm, surface, w, h, ob->num_buff, alpha);
+        if (!ob->surface) goto surf_err;
+     }
+   else if ((ob->rotation == 90) || (ob->rotation == 270))
+     {
+        ob->surface =
+          _evas_shm_surface_create(disp, shm, surface, h, w, ob->num_buff, alpha);
+        if (!ob->surface) goto surf_err;
+     }
 
    eina_array_step_set(&ob->priv.onebuf_regions, sizeof(Eina_Array), 8);
 
@@ -303,8 +312,16 @@ _evas_outbuf_reconfigure(Outbuf *ob, int x, int y, int w, int h, int rot, Outbuf
    else
      ob->surface->flags = 0;
 
-   _evas_shm_surface_reconfigure(ob->surface, x, y, w, h, 
-                                 ob->num_buff, ob->surface->flags);
+   if ((ob->rotation == 0) || (ob->rotation == 180))
+     {
+        _evas_shm_surface_reconfigure(ob->surface, x, y, w, h,
+                                      ob->num_buff, ob->surface->flags);
+     }
+   else if ((ob->rotation == 90) || (ob->rotation == 270))
+     {
+        _evas_shm_surface_reconfigure(ob->surface, x, y, h, w,
+                                      ob->num_buff, ob->surface->flags);
+     }
 
    _evas_outbuf_idle_flush(ob);
 }