e_eom: support output mode change
authorJunkyeong Kim <jk0430.kim@samsung.com>
Mon, 21 Jan 2019 11:37:08 +0000 (20:37 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Wed, 23 Jan 2019 04:32:35 +0000 (13:32 +0900)
Change-Id: I9ba3613704a8bafe1b370e91de759abca2cca751
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/bin/e_eom.c
src/bin/e_eom.h

index 06bf9201a89dfb675dd65b8f554b1e01fc9b7f83..3d710f224009c1cb7d35ae854ad9c3d4299d318d 100644 (file)
@@ -2745,3 +2745,75 @@ e_eom_destroy(E_Output *output)
 
    return EINA_TRUE;
 }
+
+EINTERN Eina_Bool
+e_eom_mode_change(E_Output *output, E_Output_Mode *emode)
+{
+   E_EomOutputPtr eom_output = NULL;
+   E_EomVirtualOutputPtr voutput = NULL;
+   E_Output *output_primary = NULL;
+
+   if (!g_eom) return EINA_TRUE;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
+
+   output_primary = e_comp_screen_primary_output_get(e_comp->e_comp_screen);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(output_primary, EINA_FALSE);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(output_primary == output, EINA_FALSE);
+
+   eom_output = _e_eom_output_find(output);
+   if (eom_output == NULL)
+     {
+        eom_output = _e_eom_output_find_added_output(output);
+        if (!eom_output)
+          {
+             EOMER("cannot find output");
+             return EINA_FALSE;
+          }
+     }
+
+   if (eom_output->connection_status == EINA_FALSE)
+     return EINA_FALSE;
+
+   if (eom_output->voutput == NULL)
+     {
+        eom_output->width = output->config.mode.w;
+        eom_output->height = output->config.mode.h;
+
+        EOMDB("mode change output: %s (%dx%d)", eom_output->name, eom_output->width, eom_output->height);
+
+        return EINA_TRUE;
+     }
+   voutput = eom_output->voutput;
+
+   if (eom_output->delay_timer)
+     ecore_timer_del(eom_output->delay_timer);
+   eom_output->delay_timer = NULL;
+
+   if (g_eom->rotate_output == eom_output)
+     {
+        if (g_eom->rotate_timer)
+          ecore_timer_del(g_eom->rotate_timer);
+        g_eom->rotate_timer = NULL;
+        g_eom->rotate_output = NULL;
+     }
+
+   /* update eom_output connect */
+   eom_output->width = output->config.mode.w;
+   eom_output->height = output->config.mode.h;
+   eom_output->phys_width = output->info.size.w;
+   eom_output->phys_height = output->info.size.h;
+   eom_output->name = eina_stringshare_add(output->id);
+   eom_output->connection_status = EINA_TRUE;
+
+   EOMDB("mode change output: %s (%dx%d)", eom_output->name, eom_output->width, eom_output->height);
+   if (voutput->state == PRESENTATION)
+     {
+        voutput->state = WAIT_PRESENTATION;
+        _e_eom_send_configure_event();
+
+        eom_output->delay_timer = ecore_timer_add(EOM_DELAY_CONNECT_CHECK_TIMEOUT, _e_eom_presentation_check, eom_output);
+     }
+
+   return EINA_TRUE;
+}
index ec78e39db6aee715ca5f3dca4a1ad728df22379c..38646b77e84383e6e09276aaad13eb6559039f55 100644 (file)
@@ -14,6 +14,6 @@ EINTERN Eina_Bool e_eom_connect(E_Output *output);
 EINTERN Eina_Bool e_eom_disconnect(E_Output *output);
 EINTERN Eina_Bool e_eom_create(E_Output *output);
 EINTERN Eina_Bool e_eom_destroy(E_Output *output);
-
+EINTERN Eina_Bool e_eom_mode_change(E_Output *output, E_Output_Mode *emode);
 #endif
 #endif