[librsvg/rustification] rsvg_path_builder_init(): Remove n_elements argument
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg/rustification] rsvg_path_builder_init(): Remove n_elements argument
- Date: Fri, 28 Oct 2016 16:22:37 +0000 (UTC)
commit ddd77f691f88db16926c77610a61a28787f0e15d
Author: Federico Mena Quintero <federico gnome org>
Date: Fri Oct 28 08:53:38 2016 -0500
rsvg_path_builder_init(): Remove n_elements argument
The array of cairo_path_data grows as needed, anyway; we just
start out with a reasonable capacity now, instead of having
each caller guesstimate on its own.
This will help porting this code to Rust.
rsvg-path.c | 10 ++++++----
rsvg-path.h | 4 ++--
rsvg-shapes.c | 20 ++++++--------------
3 files changed, 14 insertions(+), 20 deletions(-)
---
diff --git a/rsvg-path.c b/rsvg-path.c
index eda05b1..3a5295a 100644
--- a/rsvg-path.c
+++ b/rsvg-path.c
@@ -71,10 +71,12 @@ rsvg_path_builder_add_element (RsvgPathBuilder *builder,
}
void
-rsvg_path_builder_init (RsvgPathBuilder *builder,
- int n_elements)
+rsvg_path_builder_init (RsvgPathBuilder *builder)
{
- builder->path_data = g_array_sized_new (FALSE, FALSE, sizeof (cairo_path_data_t), n_elements);
+ /* The starting capacity is just to avoid lots of little resizes while growing
+ * a small path. After that, it will grow as needed.
+ */
+ builder->path_data = g_array_sized_new (FALSE, FALSE, sizeof (cairo_path_data_t), 32);
builder->last_move_to_index = -1;
}
@@ -736,7 +738,7 @@ rsvg_parse_path (const char *path_str)
{
RSVGParsePathCtx ctx;
- rsvg_path_builder_init (&ctx.builder, 32);
+ rsvg_path_builder_init (&ctx.builder);
ctx.cp.point.x = 0.0;
ctx.cp.point.y = 0.0;
diff --git a/rsvg-path.h b/rsvg-path.h
index a0bf3b3..25e67fa 100644
--- a/rsvg-path.h
+++ b/rsvg-path.h
@@ -40,8 +40,8 @@ typedef struct {
} RsvgPathBuilder;
G_GNUC_INTERNAL
-void rsvg_path_builder_init (RsvgPathBuilder *builder,
- int n_elements);
+void rsvg_path_builder_init (RsvgPathBuilder *builder);
+
G_GNUC_INTERNAL
void rsvg_path_builder_move_to (RsvgPathBuilder *builder,
double x,
diff --git a/rsvg-shapes.c b/rsvg-shapes.c
index 20f0777..b883474 100644
--- a/rsvg-shapes.c
+++ b/rsvg-shapes.c
@@ -165,15 +165,7 @@ _rsvg_node_poly_build_path (const char *value,
return NULL;
}
- /* Calculate the number of cairo_path_data_t we'll need:
- *
- * pointlist_len / 2 -> number of commands
- * pointlist_len / 2 -> number of points
- * + 1 -> closepath
- * ---------------------------------------------
- * pointlist_len + 1 -> total
- */
- rsvg_path_builder_init (&builder, pointlist_len + 1);
+ rsvg_path_builder_init (&builder);
rsvg_path_builder_move_to (&builder, pointlist[0], pointlist[1]);
@@ -293,7 +285,7 @@ _rsvg_node_line_draw (RsvgNode * overself, RsvgDrawingCtx * ctx, int dominate)
RsvgNodeLine *self = (RsvgNodeLine *) overself;
double x1, y1, x2, y2;
- rsvg_path_builder_init (&builder, 4);
+ rsvg_path_builder_init (&builder);
x1 = _rsvg_css_normalize_length (&self->x1, ctx, 'h');
y1 = _rsvg_css_normalize_length (&self->y1, ctx, 'v');
@@ -416,7 +408,7 @@ _rsvg_node_rect_draw (RsvgNode * self, RsvgDrawingCtx * ctx, int dominate)
if (rx == 0) {
/* Easy case, no rounded corners */
- rsvg_path_builder_init (&builder, 11);
+ rsvg_path_builder_init (&builder);
rsvg_path_builder_move_to (&builder, x, y);
rsvg_path_builder_line_to (&builder, x + w, y);
@@ -467,7 +459,7 @@ _rsvg_node_rect_draw (RsvgNode * self, RsvgDrawingCtx * ctx, int dominate)
right_y1 = left_y1;
right_y2 = left_y2;
- rsvg_path_builder_init (&builder, 32); /* an estimate; the arc segments may grow the array anyway */
+ rsvg_path_builder_init (&builder);
rsvg_path_builder_move_to (&builder, top_x1, top_y);
rsvg_path_builder_line_to (&builder, top_x2, top_y);
@@ -569,7 +561,7 @@ _rsvg_node_circle_draw (RsvgNode * self, RsvgDrawingCtx * ctx, int dominate)
/* approximate a circle using 4 bezier curves */
- rsvg_path_builder_init (&builder, 19);
+ rsvg_path_builder_init (&builder);
rsvg_path_builder_move_to (&builder, cx + r, cy);
@@ -665,7 +657,7 @@ _rsvg_node_ellipse_draw (RsvgNode * self, RsvgDrawingCtx * ctx, int dominate)
/* approximate an ellipse using 4 bezier curves */
- rsvg_path_builder_init (&builder, 19);
+ rsvg_path_builder_init (&builder);
rsvg_path_builder_move_to (&builder, cx + rx, cy);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]