e_output: add e_output_rotate
authorBoram Park <boram1288.park@samsung.com>
Sun, 23 Apr 2017 03:50:38 +0000 (12:50 +0900)
committerBoram Park <boram1288.park@samsung.com>
Tue, 16 May 2017 04:53:45 +0000 (13:53 +0900)
Change-Id: Ia2214a9f5ecd12d722bdc887d48711a115b90234

src/bin/e_output.c
src/bin/e_output.h

index 2b56fbc520e7e74056a20ea51d4ae3307094b318..a283f1750e21dc28e1032bb1c1e99cb465aec79f 100644 (file)
@@ -275,6 +275,56 @@ e_output_del(E_Output *output)
    free(output);
 }
 
+EINTERN Eina_Bool
+e_output_rotate(E_Output *output, int rotate)
+{
+   unsigned int transform = WL_OUTPUT_TRANSFORM_NORMAL;
+   int rot_dif;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
+
+   /* FIXME: currently the screen size can't be changed in runtime. To make it
+    * possible, the output mode should be changeable first.
+    */
+   rot_dif = output->config.rotation - rotate;
+   if (rot_dif < 0) rot_dif = -rot_dif;
+
+   if ((rot_dif % 180) && (output->config.geom.w != output->config.geom.h))
+     {
+        ERR("output size(%dx%d) should be squre.",
+            output->config.geom.w, output->config.geom.h);
+        return EINA_FALSE;
+     }
+
+   switch (rotate)
+     {
+      case 90:
+        transform = WL_OUTPUT_TRANSFORM_90;
+        break;
+      case 180:
+        transform = WL_OUTPUT_TRANSFORM_180;
+        break;
+      case 270:
+        transform = WL_OUTPUT_TRANSFORM_270;
+        break;
+      case 0:
+      default:
+        transform = WL_OUTPUT_TRANSFORM_NORMAL;
+        break;
+     }
+
+   output->config.rotation = rotate;
+
+   e_comp_wl_output_init(output->id, output->info.name,
+                         output->info.screen,
+                         output->config.geom.x, output->config.geom.y,
+                         output->config.geom.w, output->config.geom.h,
+                         output->info.size.w, output->info.size.h,
+                         output->config.mode.refresh, 0, transform);
+
+   return EINA_TRUE;
+}
+
 EINTERN Eina_Bool
 e_output_update(E_Output *output)
 {
index c2e2c0f2b6902f23bbbc21cf3d5ad4568a183757..5ea06c9c37fa8ed5e4e8d4e3a8c6cf5ea3d9378d 100644 (file)
@@ -73,6 +73,7 @@ EINTERN void              e_output_shutdown(void);
 EINTERN E_Output        * e_output_new(E_Comp_Screen *e_comp_screen, int index);
 EINTERN E_Output        * e_output_drm_new(Ecore_Drm_Output *output);
 EINTERN void              e_output_del(E_Output *output);
+EINTERN Eina_Bool         e_output_rotate(E_Output *output, int rotate);
 EINTERN Eina_Bool         e_output_update(E_Output *output);
 EINTERN Eina_Bool         e_output_drm_update(E_Output *output);
 EINTERN Eina_Bool         e_output_mode_apply(E_Output *output, E_Output_Mode *mode);