e_output: add e_output_rotate 20/127320/2
authorBoram Park <boram1288.park@samsung.com>
Sun, 23 Apr 2017 03:50:38 +0000 (12:50 +0900)
committerBoram Park <boram1288.park@samsung.com>
Thu, 27 Apr 2017 06:40:37 +0000 (15:40 +0900)
Change-Id: Ia2214a9f5ecd12d722bdc887d48711a115b90234

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

index 1505d6b3bc29672ca6724c995756bc590f23228d..b2ec1c0aec245e8e61c1b6f3e5580e9409bd44ce 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 47decb06d79819e048de87e4a29c520c08148356..f0f0098f6159153b68096843b269f9f352291b40 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);