e_desk: added getter to e_desk_zoom 63/170863/1
authorGwanglim Lee <gl77.lee@samsung.com>
Fri, 23 Feb 2018 01:41:19 +0000 (10:41 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Fri, 23 Feb 2018 01:41:19 +0000 (10:41 +0900)
Change-Id: I5382440d321454472753c29625812c539ed0bb12

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

index c82f51e3321b959bb410653f58aff95d7bf0a1af..2e94f7b13e03456a882663fe2e37c67ecdcf860e 100644 (file)
@@ -928,6 +928,49 @@ e_desk_zoom_set(E_Desk *desk, double zoomx, double zoomy, int cx, int cy)
      }
 }
 
+E_API Eina_Bool
+e_desk_zoom_get(E_Desk *desk, double *zoomx, double *zoomy, int *cx, int *cy)
+{
+   E_Zone *zone = NULL;
+   E_Output *eout = NULL;
+   Eina_Bool res = EINA_FALSE;
+
+   E_OBJECT_CHECK_RETURN(desk, EINA_FALSE);
+   E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, EINA_FALSE);
+
+   if (e_config->use_pp_zoom)
+     {
+        if (e_comp_screen_pp_support())
+          {
+             zone = desk->zone;
+             eout = e_output_find(zone->output_id);
+             if (!eout)
+               {
+                  ERR("e_desk_zoom_set: fail get eout");
+                  return res;
+               }
+
+             res = e_output_zoom_get(eout, zoomx, zoomy, cx, cy);
+             return res;
+          }
+     }
+
+   if (e_config->use_desk_smart_obj)
+     {
+        E_DESK_SMART_DATA_GET(desk->smart_obj, sd);
+        EINA_SAFETY_ON_NULL_RETURN_VAL(sd, EINA_FALSE);
+
+        if (zoomx) *zoomx = sd->zoom.ratio_x;
+        if (zoomy) *zoomy = sd->zoom.ratio_y;
+        if (cx) *cx = sd->zoom.center_x;
+        if (cy) *cy = sd->zoom.center_y;
+
+        res = EINA_TRUE;
+     }
+
+   return res;
+}
+
 E_API void
 e_desk_zoom_unset(E_Desk *desk)
 {
index 8ff5a7cc544f58f379ccc12d465e3e16edabe430..41a05599362e80252e6632e409cc71372e4eccb4 100644 (file)
@@ -103,6 +103,7 @@ E_API unsigned int e_desks_count(void);
 
 E_API void         e_desk_geometry_set(E_Desk *desk, int x, int y, int w, int h);
 E_API void         e_desk_zoom_set(E_Desk *desk, double zoomx, double zoomy, int cx, int cy);
+E_API Eina_Bool    e_desk_zoom_get(E_Desk *desk, double *zoomx, double *zoomy, int *cx, int *cy);
 E_API void         e_desk_zoom_unset(E_Desk *desk);
 
 E_API void         e_desk_smart_member_add(E_Desk *desk, Evas_Object *obj);
index 94183f40bc66985dd4a8415b30b3aada1e873376..d0d7a2752c63e4de1aae566b784694877e92b085 100644 (file)
@@ -2948,6 +2948,36 @@ e_output_zoom_set(E_Output *output, double zoomx, double zoomy, int cx, int cy)
    return EINA_TRUE;
 }
 
+EINTERN Eina_Bool
+e_output_zoom_get(E_Output *output, double *zoomx, double *zoomy, int *cx, int *cy)
+{
+   E_Output *output_primary = NULL;
+
+   if (!e_comp_screen_pp_support())
+     {
+        WRN("Comp Screen does not support the Zoom.");
+        return EINA_FALSE;
+     }
+
+   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);
+
+   if (output != output_primary)
+     {
+        ERR("Only Primary Output can support the Zoom.");
+        return EINA_FALSE;
+     }
+
+   if (zoomx) *zoomx = output->zoom_conf.zoomx;
+   if (zoomy) *zoomy = output->zoom_conf.zoomy;
+   if (cx) *cx = output->zoom_conf.init_cx;
+   if (cy) *cy = output->zoom_conf.init_cy;
+
+   return EINA_TRUE;
+}
+
 EINTERN void
 e_output_zoom_unset(E_Output *output)
 {
index bcef20de2634a97e169cf2bc869dfb81c65ea176..71228afc84f722aaec06939663883447a19586ab 100644 (file)
@@ -179,6 +179,7 @@ EINTERN void              e_output_size_get(E_Output *output, int *w, int *h);
 EINTERN E_Plane         * e_output_default_fb_target_get(E_Output *output);
 EINTERN Eina_Bool         e_output_fake_config_set(E_Output *output, int w, int h);
 EINTERN Eina_Bool         e_output_zoom_set(E_Output *output, double zoomx, double zoomy, int cx, int cy);
+EINTERN Eina_Bool         e_output_zoom_get(E_Output *output, double *zoomx, double *zoomy, int *cx, int *cy);
 EINTERN void              e_output_zoom_unset(E_Output *output);
 EINTERN Eina_Bool         e_output_capture(E_Output *output, tbm_surface_h surface, Eina_Bool auto_rotate, Eina_Bool sync, E_Output_Capture_Cb func, void *data);
 EINTERN Eina_Bool         e_output_stream_capture_queue(E_Output *output, tbm_surface_h surface, E_Output_Capture_Cb func, void *data);