e_util_transform: Add e_util_transform_zoom 85/290985/1
authorJunseok Kim <juns.kim@samsung.com>
Tue, 4 Apr 2023 03:54:27 +0000 (12:54 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 6 Apr 2023 04:58:12 +0000 (13:58 +0900)
Added e_util_transform_zoom for contain zoom information for using zoom API of evas_map.

Change-Id: I03b4d2ae0c8e0344c467157db592e963e437748a

src/bin/e_util_transform.c
src/bin/e_util_transform.h

index 8e1f9ae..5c7e1ae 100644 (file)
@@ -55,6 +55,10 @@ e_util_transform_init(E_Util_Transform *transform)
    transform->bg_transform.scale[0] = 1.0;
    transform->bg_transform.scale[1] = 1.0;
    transform->bg_transform.scale[2] = 1.0;
+   transform->zoom.zoom_x = 1.0;
+   transform->zoom.zoom_y = 1.0;
+   transform->zoom.cx = 1;
+   transform->zoom.cy = 1;
    transform->changed = EINA_TRUE;
    transform->ref_count = back_ref_count;
 }
@@ -204,6 +208,20 @@ e_util_transform_rotation_axis_reset(E_Util_Transform *transform)
 }
 
 E_API void
+e_util_transform_zoom_set(E_Util_Transform *transform, double zoom_x, double zoom_y, int cx, int cy)
+{
+   if (!transform) return;
+
+   transform->zoom.zoom_x = zoom_x;
+   transform->zoom.zoom_y = zoom_y;
+   transform->zoom.cx = cx;
+   transform->zoom.cy = cy;
+
+   transform->use_zoom = EINA_TRUE;
+   transform->changed = EINA_TRUE;
+}
+
+E_API void
 e_util_transform_role_set(E_Util_Transform *transform, const char *role)
 {
    if (!transform) return;
@@ -236,6 +254,14 @@ e_util_transform_merge(E_Util_Transform *in_out, E_Util_Transform *input)
 
    _e_util_transform_value_merge(&in_out->transform, &input->transform);
 
+   if (input->use_zoom)
+     {
+        in_out->zoom.zoom_x *= input->zoom.zoom_x;
+        in_out->zoom.zoom_y *= input->zoom.zoom_y;
+        in_out->zoom.cx += input->zoom.cx;
+        in_out->zoom.cy += input->zoom.cy;
+     }
+
    if(input->use_axis)
      memcpy(&in_out->rotation_axis, &input->rotation_axis, sizeof(input->rotation_axis));
 
@@ -249,6 +275,7 @@ e_util_transform_merge(E_Util_Transform *in_out, E_Util_Transform *input)
    in_out->use_viewport |= input->use_viewport;
    in_out->use_bg_transform |= input->use_bg_transform;
    in_out->use_axis |= input->use_axis;
+   in_out->use_zoom |= input->use_zoom;
 
    in_out->changed = EINA_TRUE;
 }
@@ -352,6 +379,16 @@ e_util_transform_rotation_round_get(E_Util_Transform *transform, int *x, int *y,
 }
 
 E_API void
+e_util_transform_zoom_get(E_Util_Transform *transform, double *zoom_x, double *zoom_y, int *cx, int *cy)
+{
+   if (!transform) return;
+   if (zoom_x) *zoom_x = transform->zoom.zoom_x;
+   if (zoom_y) *zoom_y = transform->zoom.zoom_y;
+   if (cx) *cx = transform->zoom.cx;
+   if (cy) *cy = transform->zoom.cy;
+}
+
+E_API void
 e_util_transform_bg_move_get(E_Util_Transform *transform, double *x, double *y, double *z)
 {
    if (!transform) return;
index 3b3c05c..2c65957 100644 (file)
@@ -8,6 +8,7 @@ typedef struct _E_Util_Transform_Axis               E_Util_Transform_Axis;
 typedef struct _E_Util_Transform_Vertex             E_Util_Transform_Vertex;
 typedef struct _E_Util_Transform_Rect_Vertex        E_Util_Transform_Rect_Vertex;
 typedef struct _E_Util_Transform_Matrix             E_Util_Transform_Matrix;
+typedef struct _E_Util_Transform_Zoom               E_Util_Transform_Zoom;
 
 
 #else
@@ -39,6 +40,12 @@ struct _E_Util_Transform_Axis
    double axis[3];
 };
 
+struct _E_Util_Transform_Zoom
+{
+   double zoom_x, zoom_y;
+   int cx, cy;
+};
+
 struct _E_Util_Transform
 {
    E_Util_Transform_Value    transform;
@@ -46,12 +53,14 @@ struct _E_Util_Transform
    E_Util_Transform_Texcoord texcoord;
    E_Util_Transform_Rect     viewport;
    E_Util_Transform_Axis     rotation_axis;
+   E_Util_Transform_Zoom     zoom;
    int                       ref_count;
    Eina_Bool                 changed;
    Eina_Bool                 use_texcoord;
    Eina_Bool                 use_viewport;
    Eina_Bool                 use_bg_transform;
    Eina_Bool                 use_axis;
+   Eina_Bool                 use_zoom;
    Eina_Stringshare         *role;
 };
 
@@ -87,6 +96,7 @@ E_API void                         e_util_transform_texcoord_set(E_Util_Transfor
 E_API void                         e_util_transform_viewport_set(E_Util_Transform *transform, int x, int y, int w, int h);
 E_API void                         e_util_transform_rotation_axis_set(E_Util_Transform *transform, double ax, double ay, double az);
 E_API void                         e_util_transform_rotation_axis_reset(E_Util_Transform *transform);
+E_API void                         e_util_transform_zoom_set(E_Util_Transform *transform, double zoom_x, double zoom_y, int cx, int cy);
 E_API void                         e_util_transform_role_set(E_Util_Transform *transform, const char *role);
 E_API const char                  *e_util_transform_role_get(E_Util_Transform *transform);
 
@@ -102,6 +112,7 @@ E_API void                         e_util_transform_scale_get(E_Util_Transform *
 E_API void                         e_util_transform_scale_round_get(E_Util_Transform *transform, int *x, int *y, int *z);
 E_API void                         e_util_transform_rotation_get(E_Util_Transform *transform, double *x, double *y, double *z);
 E_API void                         e_util_transform_rotation_round_get(E_Util_Transform *transform, int *x, int *y, int *z);
+E_API void                         e_util_transform_zoom_get(E_Util_Transform *transform, double *zoom_x, double *zoom_y, int *cx, int *cy);
 E_API void                         e_util_transform_bg_move_get(E_Util_Transform *transform, double *x, double *y, double *z);
 E_API void                         e_util_transform_bg_move_round_get(E_Util_Transform *transform, int *x, int *y, int *z);
 E_API void                         e_util_transform_bg_scale_get(E_Util_Transform *transform, double *x, double *y, double *z);