e_hwc_windows: add e_hwc_windows_mirror_set/unset 33/210333/6
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 18 Jul 2019 03:34:24 +0000 (12:34 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Thu, 18 Jul 2019 07:34:20 +0000 (07:34 +0000)
Change-Id: Iac240590beab7b9eb1915e1c7ecdce978438bc25

src/bin/e_hwc.h
src/bin/e_hwc_windows.c
src/bin/e_hwc_windows.h

index 519723f8622d8a10e875c52fa99cd1b2a6f7671e..d37e91b1b17beb92fbf66f6b5960ff5a5b6aad7c 100644 (file)
@@ -115,6 +115,12 @@ struct _E_Hwc
    Eina_Rectangle        pp_rect;
    E_Hwc_Window         *pp_hwc_window;
 
+   /* external output */
+   Eina_Rectangle       mirror_rect;
+   E_Hwc               *mirror_src_hwc;
+   Eina_List           *mirror_dst_hwc;
+   E_Output_Ext_State   ext_state;
+
    /* for fps */
    double               fps;
    double               old_fps;
index 0b56972a9673247109e269702437f57b540e8b69..89031a0d475a1cda3f1cbb7e26f0f363114454d3 100644 (file)
@@ -2729,3 +2729,58 @@ e_hwc_windows_debug_info_get(Eldbus_Message_Iter *iter, E_Hwc_Wins_Debug_Cmd cmd
    else if (cmd >= E_HWC_WINS_DEBUG_CMD_VIS && cmd <= E_HWC_WINS_DEBUG_CMD_NO)
      _e_hwc_windows_window_debug_info_get(iter, cmd);
 }
+
+EINTERN Eina_Bool
+e_hwc_windows_mirror_set(E_Hwc *hwc, E_Hwc *src_hwc, Eina_Rectangle *rect)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, EINA_FALSE);
+
+   EHWSTRACE("e_hwc_windows_mirror_set. rect(%d,%d)(%d,%d)",
+             NULL, hwc, rect->x, rect->y, rect->w, rect->h);
+
+   hwc->mirror_rect.x = rect->x;
+   hwc->mirror_rect.y = rect->y;
+   hwc->mirror_rect.w = rect->w;
+   hwc->mirror_rect.h = rect->h;
+
+   /* add mirror_src to the hwc*/
+   hwc->mirror_src_hwc = src_hwc;
+
+   /* add mirror_dst list to the src_hwc */
+   src_hwc->mirror_dst_hwc = eina_list_append(src_hwc->mirror_dst_hwc, hwc);
+
+   hwc->ext_state = E_OUTPUT_EXT_MIRROR;
+
+   /* make the src_hwc be full gl-compositing */
+   e_hwc_deactive_set(src_hwc, EINA_TRUE);
+
+   return EINA_TRUE;
+}
+
+EINTERN void
+e_hwc_windows_mirror_unset(E_Hwc *hwc)
+{
+   E_Hwc *src_hwc;
+
+   EINA_SAFETY_ON_NULL_RETURN(hwc);
+
+   src_hwc = hwc->mirror_src_hwc;
+   EINA_SAFETY_ON_NULL_RETURN(src_hwc);
+
+   e_hwc_deactive_set(src_hwc, EINA_FALSE);
+
+   hwc->ext_state = E_OUTPUT_EXT_NONE;
+
+   /* remove mirror_dst list at the src_hwc */
+   src_hwc->mirror_dst_hwc = eina_list_remove(src_hwc->mirror_dst_hwc, hwc);
+
+   /* remove mirror_src at the hwc */
+   hwc->mirror_src_hwc = NULL;
+
+   hwc->mirror_rect.x = 0;
+   hwc->mirror_rect.y = 0;
+   hwc->mirror_rect.w = 0;
+   hwc->mirror_rect.h = 0;
+
+   EHWSTRACE("e_hwc_windows_mirror_unset", NULL, hwc);
+}
index 85be4710f375409564df78ee9c48e65e18f2cd99..a9137112febfbf71567983a825ef9e0b1e79ac16 100644 (file)
@@ -36,5 +36,8 @@ EINTERN void                 e_hwc_windows_dump_start(void);
 EINTERN void                 e_hwc_windows_dump_stop(void);
 EINTERN void                 e_hwc_windows_debug_info_get(Eldbus_Message_Iter *iter, E_Hwc_Wins_Debug_Cmd cmd);
 
+EINTERN Eina_Bool            e_hwc_windows_mirror_set(E_Hwc *hwc, E_Hwc *src_hwc, Eina_Rectangle *rect);
+EINTERN void                 e_hwc_windows_mirror_unset(E_Hwc *hwc);
+
 #endif
 #endif