summaryrefslogtreecommitdiff
path: root/fitz/node_path.c
diff options
context:
space:
mode:
Diffstat (limited to 'fitz/node_path.c')
-rw-r--r--fitz/node_path.c147
1 files changed, 43 insertions, 104 deletions
diff --git a/fitz/node_path.c b/fitz/node_path.c
index 1ef469eb..bca274d3 100644
--- a/fitz/node_path.c
+++ b/fitz/node_path.c
@@ -1,17 +1,12 @@
#include "fitz_base.h"
-#include "fitz_tree.h"
+#include "fitz_res.h"
-fz_error
-fz_newpathnode(fz_pathnode **pathp)
+fz_path *
+fz_newpath(void)
{
- fz_pathnode *path;
-
- path = *pathp = fz_malloc(sizeof(fz_pathnode));
- if (!path)
- return fz_rethrow(-1, "out of memory");
-
- fz_initnode((fz_node*)path, FZ_NPATH);
+ fz_path *path;
+ path = fz_malloc(sizeof(fz_path));
path->paint = FZ_FILL;
path->linecap = 0;
path->linejoin = 0;
@@ -22,99 +17,55 @@ fz_newpathnode(fz_pathnode **pathp)
path->cap = 0;
path->els = nil;
- return fz_okay;
-}
-
-fz_error
-fz_clonepathnode(fz_pathnode **pathp, fz_pathnode *oldpath)
-{
- fz_pathnode *path;
-
- path = *pathp = fz_malloc(sizeof(fz_pathnode));
- if (!path)
- return fz_rethrow(-1, "out of memory");
-
- fz_initnode((fz_node*)path, FZ_NPATH);
-
- path->paint = FZ_FILL;
- path->linecap = 0;
- path->linejoin = 0;
- path->linewidth = 1.0;
- path->miterlimit = 10.0;
- path->dash = nil;
- path->len = oldpath->len;
- path->cap = oldpath->len;
-
- path->els = fz_malloc(sizeof (fz_pathel) * path->len);
- if (!path->els) {
- fz_free(path);
- return fz_rethrow(-1, "out of memory");
- }
- memcpy(path->els, oldpath->els, sizeof(fz_pathel) * path->len);
-
- return fz_okay;
+ return path;
}
void
-fz_droppathnode(fz_pathnode *node)
+fz_droppath(fz_path *node)
{
fz_free(node->dash);
fz_free(node->els);
}
-static fz_error
-growpath(fz_pathnode *path, int n)
+static void
+growpath(fz_path *path, int n)
{
- int newcap;
- fz_pathel *newels;
-
+ if (path->len + n < path->cap)
+ return;
while (path->len + n > path->cap)
- {
- newcap = path->cap + 36;
- newels = fz_realloc(path->els, sizeof (fz_pathel) * newcap);
- if (!newels)
- return fz_rethrow(-1, "out of memory");
- path->cap = newcap;
- path->els = newels;
- }
-
- return fz_okay;
+ path->cap = path->cap + 36;
+ path->els = fz_realloc(path->els, sizeof (fz_pathel) * path->cap);
}
-fz_error
-fz_moveto(fz_pathnode *path, float x, float y)
+void
+fz_moveto(fz_path *path, float x, float y)
{
- if (growpath(path, 3) != fz_okay)
- return fz_rethrow(-1, "out of memory");
+ growpath(path, 3);
path->els[path->len++].k = FZ_MOVETO;
path->els[path->len++].v = x;
path->els[path->len++].v = y;
- return fz_okay;
}
-fz_error
-fz_lineto(fz_pathnode *path, float x, float y)
+void
+fz_lineto(fz_path *path, float x, float y)
{
if (path->len == 0)
- return fz_throw("no current point");
- if (growpath(path, 3) != fz_okay)
- return fz_rethrow(-1, "out of memory");
+ fz_moveto(path, 0, 0);
+ growpath(path, 3);
path->els[path->len++].k = FZ_LINETO;
path->els[path->len++].v = x;
path->els[path->len++].v = y;
- return fz_okay;
}
-fz_error
-fz_curveto(fz_pathnode *path,
+void
+fz_curveto(fz_path *path,
float x1, float y1,
float x2, float y2,
float x3, float y3)
{
if (path->len == 0)
- return fz_throw("no current point");
- if (growpath(path, 7) != fz_okay)
- return fz_rethrow(-1, "out of memory");
+ fz_moveto(path, 0, 0);
+ growpath(path, 7);
path->els[path->len++].k = FZ_CURVETO;
path->els[path->len++].v = x1;
path->els[path->len++].v = y1;
@@ -122,40 +73,33 @@ fz_curveto(fz_pathnode *path,
path->els[path->len++].v = y2;
path->els[path->len++].v = x3;
path->els[path->len++].v = y3;
- return fz_okay;
}
-fz_error
-fz_curvetov(fz_pathnode *path, float x2, float y2, float x3, float y3)
+void
+fz_curvetov(fz_path *path, float x2, float y2, float x3, float y3)
{
float x1 = path->els[path->len-2].v;
float y1 = path->els[path->len-1].v;
- return fz_curveto(path, x1, y1, x2, y2, x3, y3);
+ fz_curveto(path, x1, y1, x2, y2, x3, y3);
}
-fz_error
-fz_curvetoy(fz_pathnode *path, float x1, float y1, float x3, float y3)
+void
+fz_curvetoy(fz_path *path, float x1, float y1, float x3, float y3)
{
- return fz_curveto(path, x1, y1, x3, y3, x3, y3);
+ fz_curveto(path, x1, y1, x3, y3, x3, y3);
}
-fz_error
-fz_closepath(fz_pathnode *path)
+void
+fz_closepath(fz_path *path)
{
if (path->len == 0)
- {
- fz_warn("tried to close an empty path");
- return fz_okay;
- }
-
- if (growpath(path, 1) != fz_okay)
- return fz_rethrow(-1, "out of memory");
+ return;
+ growpath(path, 1);
path->els[path->len++].k = FZ_CLOSEPATH;
- return fz_okay;
}
-fz_error
-fz_endpath(fz_pathnode *path, fz_pathkind paint, fz_stroke *stroke, fz_dash *dash)
+void
+fz_setpathstate(fz_path *path, fz_pathkind paint, fz_stroke *stroke, fz_dash *dash)
{
path->paint = paint;
path->dash = dash;
@@ -166,8 +110,6 @@ fz_endpath(fz_pathnode *path, fz_pathkind paint, fz_stroke *stroke, fz_dash *das
path->linewidth = stroke->linewidth;
path->miterlimit = stroke->miterlimit;
}
-
- return fz_okay;
}
static inline fz_rect boundexpand(fz_rect r, fz_point p)
@@ -180,7 +122,7 @@ static inline fz_rect boundexpand(fz_rect r, fz_point p)
}
fz_rect
-fz_boundpathnode(fz_pathnode *path, fz_matrix ctm)
+fz_boundpath(fz_path *path, fz_matrix ctm)
{
fz_point p;
fz_rect r = fz_emptyrect;
@@ -232,7 +174,7 @@ fz_boundpathnode(fz_pathnode *path, fz_matrix ctm)
}
void
-fz_printpathnode(fz_pathnode *path, int indent)
+fz_printpath(fz_path *path, int indent)
{
float x, y;
int i = 0;
@@ -287,7 +229,7 @@ fz_printpathnode(fz_pathnode *path, int indent)
}
void
-fz_debugpathnode(fz_pathnode *path, int indent)
+fz_debugpath(fz_path *path, int indent)
{
float x, y;
int i = 0;
@@ -325,22 +267,19 @@ fz_debugpathnode(fz_pathnode *path, int indent)
}
}
-fz_error
-fz_newdash(fz_dash **dashp, float phase, int len, float *array)
+fz_dash *
+fz_newdash(float phase, int len, float *array)
{
fz_dash *dash;
int i;
- dash = *dashp = fz_malloc(sizeof(fz_dash) + sizeof(float) * len);
- if (!dash)
- return fz_rethrow(-1, "out of memory");
-
+ dash = fz_malloc(sizeof(fz_dash) + sizeof(float) * len);
dash->len = len;
dash->phase = phase;
for (i = 0; i < len; i++)
dash->array[i] = array[i];
- return fz_okay;
+ return dash;
}
void