efl: move PATH manipulation from Evas into Efl interfaces.
authorCedric BAIL <cedric@osg.samsung.com>
Fri, 3 Apr 2015 14:21:48 +0000 (16:21 +0200)
committerCedric BAIL <cedric@osg.samsung.com>
Fri, 3 Apr 2015 14:21:48 +0000 (16:21 +0200)
src/Makefile_Efl.am
src/lib/efl/Efl.h
src/lib/efl/interfaces/efl_graphics_utils.c [new file with mode: 0644]
src/lib/efl/interfaces/efl_graphics_utils.h [new file with mode: 0644]
src/lib/evas/canvas/evas_vg_private.h
src/lib/evas/canvas/evas_vg_utils.c

index 0c4d8b9..6180697 100644 (file)
@@ -24,6 +24,7 @@ CLEANFILES += \
 EXTRA_DIST += \
       lib/efl/Efl_Config.h \
       lib/efl/Efl.h \
+      lib/efl/interfaces/efl_graphics_utils.h \
       $(efl_eolian_files)
 
 efleolianfilesdir = $(datadir)/eolian/include/efl-@VMAJ@
@@ -31,7 +32,10 @@ efleolianfiles_DATA = $(efl_eolian_files)
 
 lib_LTLIBRARIES += lib/efl/libefl.la
 
-lib_efl_libefl_la_SOURCES = lib/efl/interfaces/efl_interfaces_main.c
+lib_efl_libefl_la_SOURCES = \
+lib/efl/interfaces/efl_interfaces_main.c \
+lib/efl/interfaces/efl_graphics_utils.c
+
 lib_efl_libefl_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl -I$(top_srcdir)/src/lib/efl @EFL_CFLAGS@
 lib_efl_libefl_la_LIBADD = @EFL_LIBS@
 lib_efl_libefl_la_DEPENDENCIES = @EFL_INTERNAL_LIBS@
@@ -43,7 +47,9 @@ dist_installed_eflheaders_DATA = \
               lib/efl/Efl.h
 
 installed_eflinterfacesdir = $(includedir)/efl-@VMAJ@/interfaces
-nodist_installed_eflinterfaces_DATA = $(efl_eolian_files_h)
+nodist_installed_eflinterfaces_DATA = \
+$(efl_eolian_files_h) \
+lib/efl/interfaces/efl_graphics_utils.h
 
 if HAVE_ELUA
 
index 9f00be3..bcbea5f 100644 (file)
@@ -125,6 +125,7 @@ typedef enum _Efl_Graphics_Gradient_Spread
 #include "interfaces/efl_text.eo.h"
 #include "interfaces/efl_text_properties.eo.h"
 
+#include "interfaces/efl_graphics_utils.h"
 #include "interfaces/efl_graphics_shape.eo.h"
 #include "interfaces/efl_graphics_gradient.eo.h"
 #include "interfaces/efl_graphics_gradient_linear.eo.h"
diff --git a/src/lib/efl/interfaces/efl_graphics_utils.c b/src/lib/efl/interfaces/efl_graphics_utils.c
new file mode 100644 (file)
index 0000000..5db0252
--- /dev/null
@@ -0,0 +1,230 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Efl.h>
+
+static unsigned int
+efl_graphics_path_command_length(Efl_Graphics_Path_Command command)
+{
+   switch (command)
+     {
+      case EFL_GRAPHICS_PATH_COMMAND_TYPE_END: return 0;
+      case EFL_GRAPHICS_PATH_COMMAND_TYPE_MOVE_TO: return 2;
+      case EFL_GRAPHICS_PATH_COMMAND_TYPE_LINE_TO: return 2;
+      case EFL_GRAPHICS_PATH_COMMAND_TYPE_QUADRATIC_TO: return 4;
+      case EFL_GRAPHICS_PATH_COMMAND_TYPE_SQUADRATIC_TO: return 2;
+      case EFL_GRAPHICS_PATH_COMMAND_TYPE_CUBIC_TO: return 6;
+      case EFL_GRAPHICS_PATH_COMMAND_TYPE_SCUBIC_TO: return 4;
+      case EFL_GRAPHICS_PATH_COMMAND_TYPE_ARC_TO: return 5;
+      case EFL_GRAPHICS_PATH_COMMAND_TYPE_CLOSE: return 0;
+      case EFL_GRAPHICS_PATH_COMMAND_TYPE_LAST: return 0;
+     }
+   return 0;
+}
+
+static inline void
+_efl_graphics_path_length(const Efl_Graphics_Path_Command *commands,
+                          unsigned int *cmd_length,
+                          unsigned int *pts_length)
+{
+   if (commands)
+     while (commands[*cmd_length] != EFL_GRAPHICS_PATH_COMMAND_TYPE_END)
+       {
+          *pts_length += efl_graphics_path_command_length(commands[*cmd_length]);
+          (*cmd_length)++;
+       }
+
+   // Accounting for END command and handle gracefully the NULL case at the same time
+   cmd_length++;
+}
+
+static inline Eina_Bool
+efl_graphics_path_grow(Efl_Graphics_Path_Command command,
+                       Efl_Graphics_Path_Command **commands, double **points,
+                       double **offset_point)
+{
+   Efl_Graphics_Path_Command *cmd_tmp;
+   double *pts_tmp;
+   unsigned int cmd_length = 0, pts_length = 0;
+
+   _efl_graphics_path_length(*commands, &cmd_length, &pts_length);
+
+   if (efl_graphics_path_command_length(command))
+     {
+        pts_length += efl_graphics_path_command_length(command);
+        pts_tmp = realloc(*points, pts_length * sizeof (double));
+        if (!pts_tmp) return EINA_FALSE;
+
+        *points = pts_tmp;
+        *offset_point = *points + pts_length - efl_graphics_path_command_length(command);
+     }
+
+   cmd_tmp = realloc(*commands,
+                     (cmd_length + 1) * sizeof (Efl_Graphics_Path_Command));
+   if (!cmd_tmp) return EINA_FALSE;
+   *commands = cmd_tmp;
+
+   // Append the command
+   cmd_tmp[cmd_length - 1] = command;
+   // NULL terminate the stream
+   cmd_tmp[cmd_length] = EFL_GRAPHICS_PATH_COMMAND_TYPE_END;
+
+   return EINA_TRUE;
+}
+
+EAPI Eina_Bool
+efl_graphics_path_dup(Efl_Graphics_Path_Command **out_cmd, double **out_pts,
+                      const Efl_Graphics_Path_Command *in_cmd, const double *in_pts)
+{
+   unsigned int cmd_length = 0, pts_length = 0;
+
+   _efl_graphics_path_length(in_cmd, &cmd_length, &pts_length);
+
+   *out_pts = malloc(pts_length * sizeof (double));
+   *out_cmd = malloc(cmd_length * sizeof (Efl_Graphics_Path_Command));
+   if (!(*out_pts) || !(*out_cmd))
+     {
+        free(*out_pts);
+        free(*out_cmd);
+        return EINA_FALSE;
+     }
+
+   memcpy(*out_pts, in_pts, pts_length * sizeof (double));
+   memcpy(*out_cmd, in_cmd, cmd_length * sizeof (Efl_Graphics_Path_Command));
+   return EINA_TRUE;
+}
+
+EAPI void
+efl_graphics_path_append_move_to(Efl_Graphics_Path_Command **commands, double **points,
+                                 double x, double y)
+{
+   double *offset_point;
+
+   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_MOVE_TO,
+                          commands, points, &offset_point))
+     return ;
+
+   offset_point[0] = x;
+   offset_point[1] = y;
+}
+
+EAPI void
+efl_graphics_path_append_line_to(Efl_Graphics_Path_Command **commands, double **points,
+                                 double x, double y)
+{
+   double *offset_point;
+
+   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_LINE_TO,
+                          commands, points, &offset_point))
+     return ;
+
+   offset_point[0] = x;
+   offset_point[1] = y;
+}
+
+EAPI void
+efl_graphics_path_append_quadratic_to(Efl_Graphics_Path_Command **commands, double **points,
+                                      double x, double y, double ctrl_x, double ctrl_y)
+{
+   double *offset_point;
+
+   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_QUADRATIC_TO,
+                          commands, points, &offset_point))
+     return ;
+
+   offset_point[0] = x;
+   offset_point[1] = y;
+   offset_point[2] = ctrl_x;
+   offset_point[3] = ctrl_y;
+}
+
+EAPI void
+efl_graphics_path_append_squadratic_to(Efl_Graphics_Path_Command **commands, double **points,
+                                       double x, double y)
+{
+   double *offset_point;
+
+   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_SQUADRATIC_TO,
+                          commands, points, &offset_point))
+     return ;
+
+   offset_point[0] = x;
+   offset_point[1] = y;
+}
+
+EAPI void
+efl_graphics_path_append_cubic_to(Efl_Graphics_Path_Command **commands, double **points,
+                                  double x, double y,
+                                  double ctrl_x0, double ctrl_y0,
+                                  double ctrl_x1, double ctrl_y1)
+{
+   double *offset_point;
+
+   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_CUBIC_TO,
+                          commands, points, &offset_point))
+     return ;
+
+   offset_point[0] = x;
+   offset_point[1] = y;
+   offset_point[2] = ctrl_x0;
+   offset_point[3] = ctrl_y0;
+   offset_point[4] = ctrl_x1;
+   offset_point[5] = ctrl_y1;
+}
+
+EAPI void
+efl_graphics_path_append_scubic_to(Efl_Graphics_Path_Command **commands, double **points,
+                                   double x, double y,
+                                   double ctrl_x, double ctrl_y)
+{
+   double *offset_point;
+
+   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_SCUBIC_TO,
+                          commands, points, &offset_point))
+     return ;
+
+   offset_point[0] = x;
+   offset_point[1] = y;
+   offset_point[2] = ctrl_x;
+   offset_point[3] = ctrl_y;
+}
+
+EAPI void
+efl_graphics_path_append_arc_to(Efl_Graphics_Path_Command **commands, double **points,
+                                double x, double y,
+                                double rx, double ry,
+                                double angle)
+{
+   double *offset_point;
+
+   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_ARC_TO,
+                          commands, points, &offset_point))
+     return ;
+
+   offset_point[0] = x;
+   offset_point[1] = y;
+   offset_point[2] = rx;
+   offset_point[3] = ry;
+   offset_point[4] = angle;
+}
+
+EAPI void
+efl_graphics_path_append_close(Efl_Graphics_Path_Command **commands, double **points)
+{
+   double *offset_point;
+
+   efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_ARC_TO,
+                     commands, points, &offset_point);
+}
+
+EAPI void
+efl_graphics_path_append_circle(Efl_Graphics_Path_Command **commands, double **points,
+                                double x, double y, double radius)
+{
+   efl_graphics_path_append_move_to(commands, points, x, y - radius);
+   efl_graphics_path_append_arc_to(commands, points, x + radius, y, radius, radius, 0);
+   efl_graphics_path_append_arc_to(commands, points, x, y + radius, radius, radius, 0);
+   efl_graphics_path_append_arc_to(commands, points, x - radius, y, radius, radius, 0);
+   efl_graphics_path_append_arc_to(commands, points, x, y - radius, radius, radius, 0);
+}
diff --git a/src/lib/efl/interfaces/efl_graphics_utils.h b/src/lib/efl/interfaces/efl_graphics_utils.h
new file mode 100644 (file)
index 0000000..1465e13
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef EFL_GRAPHICS_UTILS_H_
+# define EFL_GRAPHICS_UTILS_H_
+
+EAPI Eina_Bool
+efl_graphics_path_dup(Efl_Graphics_Path_Command **out_cmd, double **out_pts,
+                      const Efl_Graphics_Path_Command *in_cmd, const double *in_pts);
+
+EAPI void
+efl_graphics_path_append_move_to(Efl_Graphics_Path_Command **commands, double **points,
+                                 double x, double y);
+
+EAPI void
+efl_graphics_path_append_line_to(Efl_Graphics_Path_Command **commands, double **points,
+                                 double x, double y);
+
+EAPI void
+efl_graphics_path_append_quadratic_to(Efl_Graphics_Path_Command **commands, double **points,
+                                      double x, double y, double ctrl_x, double ctrl_y);
+
+EAPI void
+efl_graphics_path_append_squadratic_to(Efl_Graphics_Path_Command **commands, double **points,
+                                       double x, double y);
+
+EAPI void
+efl_graphics_path_append_cubic_to(Efl_Graphics_Path_Command **commands, double **points,
+                                  double x, double y,
+                                  double ctrl_x0, double ctrl_y0,
+                                  double ctrl_x1, double ctrl_y1);
+
+EAPI void
+efl_graphics_path_append_scubic_to(Efl_Graphics_Path_Command **commands, double **points,
+                                   double x, double y,
+                                   double ctrl_x, double ctrl_y);
+
+EAPI void
+efl_graphics_path_append_arc_to(Efl_Graphics_Path_Command **commands, double **points,
+                                double x, double y,
+                                double rx, double ry,
+                                double angle);
+
+EAPI void
+efl_graphics_path_append_close(Efl_Graphics_Path_Command **commands, double **points);
+
+EAPI void
+efl_graphics_path_append_circle(Efl_Graphics_Path_Command **commands, double **points,
+                                double x, double y, double radius);
+
+
+#endif
index 6b26a24..3358e50 100644 (file)
@@ -21,8 +21,4 @@ struct _Evas_VG_Container_Data
    Eina_List *children;
 };
 
-Eina_Bool
-efl_graphics_path_dup(Efl_Graphics_Path_Command **out_cmd, double **out_pts,
-                      const Efl_Graphics_Path_Command *in_cmd, const double *in_pts);
-
 #endif
index 4b34e87..f61c339 100644 (file)
@@ -2,228 +2,3 @@
 #include "evas_private.h"
 
 #include "evas_vg_private.h"
-
-static unsigned int
-efl_graphics_path_command_length(Efl_Graphics_Path_Command command)
-{
-   switch (command)
-     {
-      case EFL_GRAPHICS_PATH_COMMAND_TYPE_END: return 0;
-      case EFL_GRAPHICS_PATH_COMMAND_TYPE_MOVE_TO: return 2;
-      case EFL_GRAPHICS_PATH_COMMAND_TYPE_LINE_TO: return 2;
-      case EFL_GRAPHICS_PATH_COMMAND_TYPE_QUADRATIC_TO: return 4;
-      case EFL_GRAPHICS_PATH_COMMAND_TYPE_SQUADRATIC_TO: return 2;
-      case EFL_GRAPHICS_PATH_COMMAND_TYPE_CUBIC_TO: return 6;
-      case EFL_GRAPHICS_PATH_COMMAND_TYPE_SCUBIC_TO: return 4;
-      case EFL_GRAPHICS_PATH_COMMAND_TYPE_ARC_TO: return 5;
-      case EFL_GRAPHICS_PATH_COMMAND_TYPE_CLOSE: return 0;
-      case EFL_GRAPHICS_PATH_COMMAND_TYPE_LAST: return 0;
-     }
-   return 0;
-}
-
-static inline void
-_efl_graphics_path_length(const Efl_Graphics_Path_Command *commands,
-                          unsigned int *cmd_length,
-                          unsigned int *pts_length)
-{
-   if (commands)
-     while (commands[*cmd_length] != EFL_GRAPHICS_PATH_COMMAND_TYPE_END)
-       {
-          *pts_length += efl_graphics_path_command_length(commands[*cmd_length]);
-          (*cmd_length)++;
-       }
-
-   // Accounting for END command and handle gracefully the NULL case at the same time
-   cmd_length++;
-}
-
-static inline Eina_Bool
-efl_graphics_path_grow(Efl_Graphics_Path_Command command,
-                       Efl_Graphics_Path_Command **commands, double **points,
-                       double **offset_point)
-{
-   Efl_Graphics_Path_Command *cmd_tmp;
-   double *pts_tmp;
-   unsigned int cmd_length = 0, pts_length = 0;
-
-   _efl_graphics_path_length(*commands, &cmd_length, &pts_length);
-
-   if (efl_graphics_path_command_length(command))
-     {
-        pts_length += efl_graphics_path_command_length(command);
-        pts_tmp = realloc(*points, pts_length * sizeof (double));
-        if (!pts_tmp) return EINA_FALSE;
-
-        *points = pts_tmp;
-        *offset_point = *points + pts_length - efl_graphics_path_command_length(command);
-     }
-
-   cmd_tmp = realloc(*commands,
-                     (cmd_length + 1) * sizeof (Efl_Graphics_Path_Command));
-   if (!cmd_tmp) return EINA_FALSE;
-   *commands = cmd_tmp;
-
-   // Append the command
-   cmd_tmp[cmd_length - 1] = command;
-   // NULL terminate the stream
-   cmd_tmp[cmd_length] = EFL_GRAPHICS_PATH_COMMAND_TYPE_END;
-
-   return EINA_TRUE;
-}
-
-Eina_Bool
-efl_graphics_path_dup(Efl_Graphics_Path_Command **out_cmd, double **out_pts,
-                      const Efl_Graphics_Path_Command *in_cmd, const double *in_pts)
-{
-   unsigned int cmd_length = 0, pts_length = 0;
-
-   _efl_graphics_path_length(in_cmd, &cmd_length, &pts_length);
-
-   *out_pts = malloc(pts_length * sizeof (double));
-   *out_cmd = malloc(cmd_length * sizeof (Efl_Graphics_Path_Command));
-   if (!(*out_pts) || !(*out_cmd))
-     {
-        free(*out_pts);
-        free(*out_cmd);
-        return EINA_FALSE;
-     }
-
-   memcpy(*out_pts, in_pts, pts_length * sizeof (double));
-   memcpy(*out_cmd, in_cmd, cmd_length * sizeof (Efl_Graphics_Path_Command));
-   return EINA_TRUE;
-}
-
-void
-efl_graphics_path_append_move_to(Efl_Graphics_Path_Command **commands, double **points,
-                                 double x, double y)
-{
-   double *offset_point;
-
-   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_MOVE_TO,
-                          commands, points, &offset_point))
-     return ;
-
-   offset_point[0] = x;
-   offset_point[1] = y;
-}
-
-void
-efl_graphics_path_append_line_to(Efl_Graphics_Path_Command **commands, double **points,
-                                 double x, double y)
-{
-   double *offset_point;
-
-   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_LINE_TO,
-                          commands, points, &offset_point))
-     return ;
-
-   offset_point[0] = x;
-   offset_point[1] = y;
-}
-
-void
-efl_graphics_path_append_quadratic_to(Efl_Graphics_Path_Command **commands, double **points,
-                                      double x, double y, double ctrl_x, double ctrl_y)
-{
-   double *offset_point;
-
-   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_QUADRATIC_TO,
-                          commands, points, &offset_point))
-     return ;
-
-   offset_point[0] = x;
-   offset_point[1] = y;
-   offset_point[2] = ctrl_x;
-   offset_point[3] = ctrl_y;
-}
-
-void
-efl_graphics_path_append_squadratic_to(Efl_Graphics_Path_Command **commands, double **points,
-                                       double x, double y)
-{
-   double *offset_point;
-
-   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_SQUADRATIC_TO,
-                          commands, points, &offset_point))
-     return ;
-
-   offset_point[0] = x;
-   offset_point[1] = y;
-}
-
-void
-efl_graphics_path_append_cubic_to(Efl_Graphics_Path_Command **commands, double **points,
-                                  double x, double y,
-                                  double ctrl_x0, double ctrl_y0,
-                                  double ctrl_x1, double ctrl_y1)
-{
-   double *offset_point;
-
-   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_CUBIC_TO,
-                          commands, points, &offset_point))
-     return ;
-
-   offset_point[0] = x;
-   offset_point[1] = y;
-   offset_point[2] = ctrl_x0;
-   offset_point[3] = ctrl_y0;
-   offset_point[4] = ctrl_x1;
-   offset_point[5] = ctrl_y1;
-}
-
-void
-efl_graphics_path_append_scubic_to(Efl_Graphics_Path_Command **commands, double **points,
-                                   double x, double y,
-                                   double ctrl_x, double ctrl_y)
-{
-   double *offset_point;
-
-   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_SCUBIC_TO,
-                          commands, points, &offset_point))
-     return ;
-
-   offset_point[0] = x;
-   offset_point[1] = y;
-   offset_point[2] = ctrl_x;
-   offset_point[3] = ctrl_y;
-}
-
-void
-efl_graphics_path_append_arc_to(Efl_Graphics_Path_Command **commands, double **points,
-                                double x, double y,
-                                double rx, double ry,
-                                double angle)
-{
-   double *offset_point;
-
-   if (!efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_ARC_TO,
-                          commands, points, &offset_point))
-     return ;
-
-   offset_point[0] = x;
-   offset_point[1] = y;
-   offset_point[2] = rx;
-   offset_point[3] = ry;
-   offset_point[4] = angle;
-}
-
-void
-efl_graphics_path_append_close(Efl_Graphics_Path_Command **commands, double **points)
-{
-   double *offset_point;
-
-   efl_graphics_path_grow(EFL_GRAPHICS_PATH_COMMAND_TYPE_ARC_TO,
-                     commands, points, &offset_point);
-}
-
-void
-efl_graphics_path_append_circle(Efl_Graphics_Path_Command **commands, double **points,
-                                double x, double y, double radius)
-{
-   efl_graphics_path_append_move_to(commands, points, x, y - radius);
-   efl_graphics_path_append_arc_to(commands, points, x + radius, y, radius, radius, 0);
-   efl_graphics_path_append_arc_to(commands, points, x, y + radius, radius, radius, 0);
-   efl_graphics_path_append_arc_to(commands, points, x - radius, y, radius, radius, 0);
-   efl_graphics_path_append_arc_to(commands, points, x, y - radius, radius, radius, 0);
-}