This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository echart.

View the commit online.

commit 242148c13716e33fc5d55a05dd93abcd292408f8
Author: Vincent Torri <[email protected]>
AuthorDate: Mon May 25 14:17:47 2026 +0200

    formatting + tests with pie > 180 degrees
---
 src/bin/echart_main.c |  11 +
 src/lib/echart_pie.c  | 638 +++++++++++++++++++++++++-------------------------
 src/lib/echart_pie.h  |  38 +--
 3 files changed, 350 insertions(+), 337 deletions(-)

diff --git a/src/bin/echart_main.c b/src/bin/echart_main.c
index 0d40f8b..0931150 100644
--- a/src/bin/echart_main.c
+++ b/src/bin/echart_main.c
@@ -158,6 +158,17 @@ elm_main(int argc, char **argv)
    echart_pie_data_set(o, v2, nd);
    evas_object_show(o);
 
+   xo = wo;
+   yo = ho;
+
+   o = echart_pie_add(evas_object_evas_get(win));
+   evas_object_move(o, xo, yo);
+   evas_object_resize(o, wo, yo);
+   nd = 5;
+   double v3[5] = { 45, 4, 2, 5, 10 };
+   echart_pie_data_set(o, v3, nd);
+   evas_object_show(o);
+
    evas_object_resize(win, w, h);
    evas_object_show(win);
 
diff --git a/src/lib/echart_pie.c b/src/lib/echart_pie.c
index 41b3fff..f7ce9d4 100644
--- a/src/lib/echart_pie.c
+++ b/src/lib/echart_pie.c
@@ -1,318 +1,320 @@
-/*
- * SPDX-FileCopyrightText: Vincent Torri <[email protected]>
- * SPDX-License-Identifier: BSD-2-Clause
- */
-
-#include <config.h>
-
-#define _USE_MATH_DEFINES
-#include <math.h>
-
-#include "Echart.h"
-#include "echart_color.h"
-#include "echart_private.h"
-
-/*============================================================================*
- *                                  Local                                     *
- *============================================================================*/
-
-#define X_VG(x) (w) * ((x) - sd->ymin) / (sd->ymax - sd->ymin)
-#define Y_VG(y) (h) * (sd->ymax - (y)) / (sd->ymax - sd->ymin)
-
-typedef struct Data Data;
-typedef struct Chart_Pie Chart_Pie;
-
-struct Data
-{
-   Evas_Vg_Shape *pie;
-   double value;
-   unsigned char r, g, b;
-};
-
-struct Chart_Pie
-{
-   Evas_Object_Smart_Clipped_Data __clipped_data;
-
-   Evas_Object *o_bg;
-   Evas_Object *o_vg;
-
-   /* evas_vg */
-   Evas_Vg_Container *container;
-
-   /* data */
-   Data *data;
-   double sum;
-   int nbr_values;
-};
-
-static Evas_Smart *_pie_smart = NULL;
-static Evas_Smart_Class _parent_sc = EVAS_SMART_CLASS_INIT_NULL;
-
-/* Evas_Object smart callbacks */
-
-static void
-_pie_smart_add(Evas_Object *obj)
-{
-   Chart_Pie *sd;
-
-   INF(" * %s", __FUNCTION__);
-
-   sd = calloc(1, sizeof(Chart_Pie));
-   EINA_SAFETY_ON_NULL_RETURN(sd);
-
-   sd->o_bg = evas_object_rectangle_add(evas_object_evas_get(obj));
-   evas_object_move(sd->o_bg, 0, 0);
-   sd->o_vg = evas_object_vg_add(evas_object_evas_get(obj));
-
-   /* evas_vg */
-   sd->container = evas_vg_container_add(sd->o_vg);
-   evas_object_vg_root_node_set(sd->o_vg, sd->container);
-
-   /* data */
-
-   evas_object_smart_data_set(obj, sd);
-
-   _parent_sc.add(obj);
-}
-
-static void
-_pie_smart_del(Evas_Object *obj)
-{
-   Chart_Pie *sd;
-
-   INF(" * %s", __FUNCTION__);
-
-   sd = evas_object_smart_data_get(obj);
-   EINA_SAFETY_ON_NULL_RETURN(sd);
-
-   _parent_sc.del(obj);
-
-   free(sd->data);
-   evas_object_del(sd->o_bg);
-   evas_object_del(sd->o_vg);
-
-   evas_object_smart_data_set(obj, NULL);
-   memset(sd, 0, sizeof(*sd));
-   free(sd);
-}
-
-static void
-_pie_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
-{
-   Chart_Pie *sd;
-   Evas_Coord ox;
-   Evas_Coord oy;
-
-   INF(" * %s", __FUNCTION__);
-
-   sd = evas_object_smart_data_get(obj);
-   EINA_SAFETY_ON_NULL_RETURN(sd);
-
-   evas_object_geometry_get(obj, &ox, &oy, NULL, NULL);
-   if ((x == ox) && (y == oy))
-      return;
-
-   evas_object_move(sd->o_bg, x, y);
-   evas_object_move(sd->o_vg, x, y);
-
-   evas_object_smart_changed(obj);
-}
-
-static void
-_pie_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
-{
-   Chart_Pie *sd;
-   Evas_Coord ow;
-   Evas_Coord oh;
-
-   INF(" * %s", __FUNCTION__);
-
-   sd = evas_object_smart_data_get(obj);
-   EINA_SAFETY_ON_NULL_RETURN(sd);
-
-   evas_object_geometry_get(obj, NULL, NULL, &ow, &oh);
-   if ((w == ow) && (h == oh))
-      return;
-
-   evas_object_resize(sd->o_bg, w, h);
-   evas_object_resize(sd->o_vg, w, h);
-
-   evas_object_smart_changed(obj);
-}
-
-static void
-_pie_smart_show(Evas_Object *obj)
-{
-   Chart_Pie *sd;
-
-   INF(" * %s", __FUNCTION__);
-
-   sd = evas_object_smart_data_get(obj);
-   EINA_SAFETY_ON_NULL_RETURN(sd);
-
-   evas_object_show(sd->o_bg);
-   evas_object_show(sd->o_vg);
-}
-
-static void
-_pie_smart_hide(Evas_Object *obj)
-{
-   Chart_Pie *sd;
-
-   INF(" * %s", __FUNCTION__);
-
-   sd = evas_object_smart_data_get(obj);
-   EINA_SAFETY_ON_NULL_RETURN(sd);
-
-   evas_object_hide(sd->o_bg);
-   evas_object_hide(sd->o_vg);
-}
-
-static void
-_pie_smart_calculate(Evas_Object *obj)
-{
-   Chart_Pie *sd;
-   double theta0;
-   double theta1;
-   double rad;
-   int w, h;
-
-   INF(" * %s", __FUNCTION__);
-
-   sd = evas_object_smart_data_get(obj);
-   EINA_SAFETY_ON_NULL_RETURN(sd);
-
-   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
-   rad = (w < h) ? w : h;
-   rad /= 4;
-
-   theta0 = 0;
-   for (int i = 0; i < sd->nbr_values; i++)
-   {
-      theta1 = 2 * M_PI * sd->data[i].value / sd->sum;
-      printf("theta0 %f theta1 %f %f %f\n", theta0, theta1, sd->data[i].value, sd->sum);
-      printf("end point : %f %f\n", cos(theta0 + theta1), sin(theta0 + theta1));
-
-      evas_vg_shape_append_move_to(sd->data[i].pie, 0, 0);
-      evas_vg_shape_append_line_to(sd->data[i].pie,
-                                   rad * cos(theta0), -rad * sin(theta0));
-      evas_vg_shape_append_arc_to(sd->data[i].pie,
-                                   rad * cos(theta0 + theta1), -rad * sin(theta0 + theta1),
-                                  rad, rad,
-                                  3, EINA_FALSE, EINA_FALSE);
-      evas_vg_shape_append_line_to(sd->data[i].pie, 0, 0);
-      evas_vg_shape_stroke_width_set(sd->data[i].pie, 1);
-      evas_vg_shape_stroke_color_set(sd->data[i].pie, 255, 255, 255, 255);
-      evas_vg_node_color_set(sd->data[i].pie, sd->data[i].r, sd->data[i].g, sd->data[i].b, 255);
-      evas_vg_node_origin_set(sd->data[i].pie, w/2, h/2);
-
-      theta0 += theta1;
-   }
-}
-
-static void
-_pie_smart_init(void)
-{
-   static Evas_Smart_Class sc;
-
-   INF(" * %s", __FUNCTION__);
-
-   evas_object_smart_clipped_smart_set(&_parent_sc);
-   sc           = _parent_sc;
-   sc.name      = "pie";
-   sc.version   = EVAS_SMART_CLASS_VERSION;
-   sc.add       = _pie_smart_add;
-   sc.del       = _pie_smart_del;
-   sc.move      = _pie_smart_move;
-   sc.resize    = _pie_smart_resize;
-   sc.show      = _pie_smart_show;
-   sc.hide      = _pie_smart_hide;
-   sc.calculate = _pie_smart_calculate;
-   _pie_smart = evas_smart_class_new(&sc);
-}
-
-/*============================================================================*
- *                                 Global                                     *
- *============================================================================*/
-
-/*============================================================================*
- *                                   API                                      *
- *============================================================================*/
-
-ECH_API Evas_Object *
-echart_pie_add(Evas *evas)
-{
-   Evas_Object *obj;
-
-   INF(" * %s", __FUNCTION__);
-
-   if (!_pie_smart) _pie_smart_init();
-   obj = evas_object_smart_add(evas, _pie_smart);
-
-   return obj;
-}
-
-ECH_API void
-echart_pie_data_set(Evas_Object *obj, double *values, int nbr_values)
-{
-   Chart_Pie *sd;
-   unsigned int c;
-
-   sd = evas_object_smart_data_get(obj);
-   EINA_SAFETY_ON_NULL_RETURN(sd);
-
-   if (!values || (nbr_values <= 0))
-      return;
-
-   sd->nbr_values = nbr_values;
-
-   sd->data = "" * sizeof(Data));
-   if (!sd->data)
-   {
-      ERR("Can not allocate memory.");
-      return;
-   }
-
-   for (int i = 0; i < sd->nbr_values; i++)
-   {
-      sd->sum += values[i];
-   }
-
-   for (int i = 0; i < sd->nbr_values; i++)
-   {
-      sd->data[i].value = values[i];
-      c = echart_color_get(i).line;
-      sd->data[i].r = (unsigned char)((c >> 16) & 0xff);
-      sd->data[i].g = (unsigned char)((c >> 8) & 0xff);
-      sd->data[i].b = (unsigned char)((c >> 0) & 0xff);
-      sd->data[i].pie = evas_vg_shape_add(sd->container);
-   }
-
-   evas_object_smart_changed(obj);
-}
-
-ECH_API int
-echart_pie_nbr_values_get(Evas_Object *obj)
-{
-   Chart_Pie *sd;
-
-   sd = evas_object_smart_data_get(obj);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(sd, 0);
-
-   return sd->nbr_values;
-}
-
-ECH_API void
-echart_pie_color_set(Evas_Object *obj, int serie_num, int r, int g, int b, int a)
-{
-   Chart_Pie *sd;
-
-   sd = evas_object_smart_data_get(obj);
-   EINA_SAFETY_ON_NULL_RETURN(sd);
-
-   sd->data[serie_num].r = r;
-   sd->data[serie_num].g = g;
-   sd->data[serie_num].b = b;
-
-   evas_object_smart_changed(obj);
-}
+/*
+ * SPDX-FileCopyrightText: Vincent Torri <[email protected]>
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <config.h>
+
+#include "Echart.h"
+#include "echart_color.h"
+#include "echart_private.h"
+
+/*============================================================================*
+ *                                  Local                                     *
+ *============================================================================*/
+
+#define M_PI 3.14159265358979323846
+
+#define X_VG(x) (w) * ((x) - sd->ymin) / (sd->ymax - sd->ymin)
+#define Y_VG(y) (h) * (sd->ymax - (y)) / (sd->ymax - sd->ymin)
+
+typedef struct Data Data;
+typedef struct Chart_Pie Chart_Pie;
+
+struct Data
+{
+   Evas_Vg_Shape *pie;
+   double value;
+   unsigned char r, g, b;
+};
+
+struct Chart_Pie
+{
+   Evas_Object_Smart_Clipped_Data __clipped_data;
+
+   Evas_Object *o_bg;
+   Evas_Object *o_vg;
+
+   /* evas_vg */
+   Evas_Vg_Container *container;
+
+   /* data */
+   Data *data;
+   double sum;
+   int nbr_values;
+};
+
+static Evas_Smart *_pie_smart = NULL;
+static Evas_Smart_Class _parent_sc = EVAS_SMART_CLASS_INIT_NULL;
+
+/* Evas_Object smart callbacks */
+
+static void
+_pie_smart_add(Evas_Object *obj)
+{
+   Chart_Pie *sd;
+
+   INF(" * %s", __FUNCTION__);
+
+   sd = calloc(1, sizeof(Chart_Pie));
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+
+   sd->o_bg = evas_object_rectangle_add(evas_object_evas_get(obj));
+   evas_object_move(sd->o_bg, 0, 0);
+   sd->o_vg = evas_object_vg_add(evas_object_evas_get(obj));
+
+   /* evas_vg */
+   sd->container = evas_vg_container_add(sd->o_vg);
+   evas_object_vg_root_node_set(sd->o_vg, sd->container);
+
+   /* data */
+
+   evas_object_smart_data_set(obj, sd);
+
+   _parent_sc.add(obj);
+}
+
+static void
+_pie_smart_del(Evas_Object *obj)
+{
+   Chart_Pie *sd;
+
+   INF(" * %s", __FUNCTION__);
+
+   sd = evas_object_smart_data_get(obj);
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+
+   _parent_sc.del(obj);
+
+   free(sd->data);
+   evas_object_del(sd->o_bg);
+   evas_object_del(sd->o_vg);
+
+   evas_object_smart_data_set(obj, NULL);
+   memset(sd, 0, sizeof(*sd));
+   free(sd);
+}
+
+static void
+_pie_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
+{
+   Chart_Pie *sd;
+   Evas_Coord ox;
+   Evas_Coord oy;
+
+   INF(" * %s", __FUNCTION__);
+
+   sd = evas_object_smart_data_get(obj);
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+
+   evas_object_geometry_get(obj, &ox, &oy, NULL, NULL);
+   if ((x == ox) && (y == oy))
+      return;
+
+   evas_object_move(sd->o_bg, x, y);
+   evas_object_move(sd->o_vg, x, y);
+
+   evas_object_smart_changed(obj);
+}
+
+static void
+_pie_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
+{
+   Chart_Pie *sd;
+   Evas_Coord ow;
+   Evas_Coord oh;
+
+   INF(" * %s", __FUNCTION__);
+
+   sd = evas_object_smart_data_get(obj);
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+
+   evas_object_geometry_get(obj, NULL, NULL, &ow, &oh);
+   if ((w == ow) && (h == oh))
+      return;
+
+   evas_object_resize(sd->o_bg, w, h);
+   evas_object_resize(sd->o_vg, w, h);
+
+   evas_object_smart_changed(obj);
+}
+
+static void
+_pie_smart_show(Evas_Object *obj)
+{
+   Chart_Pie *sd;
+
+   INF(" * %s", __FUNCTION__);
+
+   sd = evas_object_smart_data_get(obj);
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+
+   evas_object_show(sd->o_bg);
+   evas_object_show(sd->o_vg);
+}
+
+static void
+_pie_smart_hide(Evas_Object *obj)
+{
+   Chart_Pie *sd;
+
+   INF(" * %s", __FUNCTION__);
+
+   sd = evas_object_smart_data_get(obj);
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+
+   evas_object_hide(sd->o_bg);
+   evas_object_hide(sd->o_vg);
+}
+
+static void
+_pie_smart_calculate(Evas_Object *obj)
+{
+   Chart_Pie *sd;
+   double theta0;
+   double theta1;
+   double rad;
+   int w, h;
+
+   INF(" * %s", __FUNCTION__);
+
+   sd = evas_object_smart_data_get(obj);
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+
+   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+   rad = (w < h) ? w : h;
+   rad /= 4;
+
+   theta0 = 0;
+   for (int i = 0; i < sd->nbr_values; i++)
+   {
+      theta1 = 2 * M_PI * sd->data[i].value / sd->sum;
+
+      evas_vg_shape_append_move_to(sd->data[i].pie, 0, 0);
+      evas_vg_shape_append_line_to(sd->data[i].pie,
+                                   rad * cos(theta0), -rad * sin(theta0));
+      if (theta1 < M_PI)
+      {
+         evas_vg_shape_append_arc_to(sd->data[i].pie,
+                                     rad * cos(theta0 + theta1), -rad * sin(theta0 + theta1),
+                                     rad, rad,
+                                     0, EINA_FALSE, EINA_FALSE);
+         evas_vg_shape_append_line_to(sd->data[i].pie, 0, 0);
+         evas_vg_shape_stroke_color_set(sd->data[i].pie, 0, 0, 0, 0);
+         evas_vg_node_color_set(sd->data[i].pie, sd->data[i].r, sd->data[i].g, sd->data[i].b, 255);
+      }
+      else
+      {
+      }
+      evas_vg_node_origin_set(sd->data[i].pie, w/2, h/2);
+
+      theta0 += theta1;
+   }
+}
+
+static void
+_pie_smart_init(void)
+{
+   static Evas_Smart_Class sc;
+
+   INF(" * %s", __FUNCTION__);
+
+   evas_object_smart_clipped_smart_set(&_parent_sc);
+   sc           = _parent_sc;
+   sc.name      = "pie";
+   sc.version   = EVAS_SMART_CLASS_VERSION;
+   sc.add       = _pie_smart_add;
+   sc.del       = _pie_smart_del;
+   sc.move      = _pie_smart_move;
+   sc.resize    = _pie_smart_resize;
+   sc.show      = _pie_smart_show;
+   sc.hide      = _pie_smart_hide;
+   sc.calculate = _pie_smart_calculate;
+   _pie_smart = evas_smart_class_new(&sc);
+}
+
+/*============================================================================*
+ *                                 Global                                     *
+ *============================================================================*/
+
+/*============================================================================*
+ *                                   API                                      *
+ *============================================================================*/
+
+ECH_API Evas_Object *
+echart_pie_add(Evas *evas)
+{
+   Evas_Object *obj;
+
+   INF(" * %s", __FUNCTION__);
+
+   if (!_pie_smart) _pie_smart_init();
+   obj = evas_object_smart_add(evas, _pie_smart);
+
+   return obj;
+}
+
+ECH_API void
+echart_pie_data_set(Evas_Object *obj, double *values, int nbr_values)
+{
+   Chart_Pie *sd;
+   unsigned int c;
+
+   sd = evas_object_smart_data_get(obj);
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+
+   if (!values || (nbr_values <= 0))
+      return;
+
+   sd->nbr_values = nbr_values;
+
+   sd->data = "" * sizeof(Data));
+   if (!sd->data)
+   {
+      ERR("Can not allocate memory.");
+      return;
+   }
+
+   for (int i = 0; i < sd->nbr_values; i++)
+   {
+      sd->sum += values[i];
+   }
+
+   for (int i = 0; i < sd->nbr_values; i++)
+   {
+      sd->data[i].value = values[i];
+      c = echart_color_get(i).line;
+      sd->data[i].r = (unsigned char)((c >> 16) & 0xff);
+      sd->data[i].g = (unsigned char)((c >> 8) & 0xff);
+      sd->data[i].b = (unsigned char)((c >> 0) & 0xff);
+      sd->data[i].pie = evas_vg_shape_add(sd->container);
+   }
+
+   evas_object_smart_changed(obj);
+}
+
+ECH_API int
+echart_pie_nbr_values_get(Evas_Object *obj)
+{
+   Chart_Pie *sd;
+
+   sd = evas_object_smart_data_get(obj);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(sd, 0);
+
+   return sd->nbr_values;
+}
+
+ECH_API void
+echart_pie_color_set(Evas_Object *obj, int serie_num, int r, int g, int b, int a)
+{
+   Chart_Pie *sd;
+
+   sd = evas_object_smart_data_get(obj);
+   EINA_SAFETY_ON_NULL_RETURN(sd);
+
+   sd->data[serie_num].r = r;
+   sd->data[serie_num].g = g;
+   sd->data[serie_num].b = b;
+
+   evas_object_smart_changed(obj);
+}
diff --git a/src/lib/echart_pie.h b/src/lib/echart_pie.h
index c18410e..a7beb85 100644
--- a/src/lib/echart_pie.h
+++ b/src/lib/echart_pie.h
@@ -1,19 +1,19 @@
-/*
- * SPDX-FileCopyrightText: Vincent Torri <[email protected]>
- * SPDX-License-Identifier: BSD-2-Clause
- */
-
-#ifndef ECHART_PIE_H
-#define ECHART_PIE_H
-
-#include <Evas.h>
-
-ECH_API Evas_Object *echart_pie_add(Evas *evas);
-
-ECH_API void echart_pie_data_set(Evas_Object *obj, double *values, int nbr_vamues);
-
-ECH_API int echart_pie_nbr_values_get(Evas_Object *obj);
-
-ECH_API void echart_pie_color_set(Evas_Object *obj, int idx, int r, int g, int b, int a);
-
-#endif /* ECHART_PIE_H */
+/*
+ * SPDX-FileCopyrightText: Vincent Torri <[email protected]>
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#ifndef ECHART_PIE_H
+#define ECHART_PIE_H
+
+#include <Evas.h>
+
+ECH_API Evas_Object *echart_pie_add(Evas *evas);
+
+ECH_API void echart_pie_data_set(Evas_Object *obj, double *values, int nbr_vamues);
+
+ECH_API int echart_pie_nbr_values_get(Evas_Object *obj);
+
+ECH_API void echart_pie_color_set(Evas_Object *obj, int idx, int r, int g, int b, int a);
+
+#endif /* ECHART_PIE_H */

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to