summaryrefslogtreecommitdiff
path: root/fitz/dev_list.c
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2010-04-19 21:47:23 +0200
committerTor Andersson <tor@ghostscript.com>2010-04-19 21:47:23 +0200
commit186b2c2e36710b5cb9721520f1abd7f3bb8d2aa3 (patch)
treef8fbff2714dd2badfebcc7f625e2dc161cd9810d /fitz/dev_list.c
parent1d2fa92851c8e5ed90279098b81ce2a43add9f68 (diff)
downloadmupdf-186b2c2e36710b5cb9721520f1abd7f3bb8d2aa3.tar.xz
Add support for patterns in stroked paths and text.
Diffstat (limited to 'fitz/dev_list.c')
-rw-r--r--fitz/dev_list.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/fitz/dev_list.c b/fitz/dev_list.c
index 33b2310f..38b333cd 100644
--- a/fitz/dev_list.c
+++ b/fitz/dev_list.c
@@ -49,11 +49,13 @@ fz_freedisplaynode(fz_displaynode *node)
case FZ_CMDFILLPATH:
case FZ_CMDSTROKEPATH:
case FZ_CMDCLIPPATH:
+ case FZ_CMDCLIPSTROKEPATH:
fz_freepath(node->item.path);
break;
case FZ_CMDFILLTEXT:
case FZ_CMDSTROKETEXT:
case FZ_CMDCLIPTEXT:
+ case FZ_CMDCLIPSTROKETEXT:
case FZ_CMDIGNORETEXT:
fz_freetext(node->item.text);
break;
@@ -103,6 +105,15 @@ fz_listclippath(void *user, fz_path *path, fz_matrix ctm)
}
static void
+fz_listclipstrokepath(void *user, fz_path *path, fz_matrix ctm)
+{
+ fz_displaynode *node;
+ node = fz_newdisplaynode(FZ_CMDCLIPSTROKEPATH, ctm, nil, nil, 0.0);
+ node->item.path = fz_clonepath(path);
+ fz_appenddisplaynode(user, node);
+}
+
+static void
fz_listfilltext(void *user, fz_text *text, fz_matrix ctm,
fz_colorspace *colorspace, float *color, float alpha)
{
@@ -132,6 +143,15 @@ fz_listcliptext(void *user, fz_text *text, fz_matrix ctm)
}
static void
+fz_listclipstroketext(void *user, fz_text *text, fz_matrix ctm)
+{
+ fz_displaynode *node;
+ node = fz_newdisplaynode(FZ_CMDCLIPSTROKETEXT, ctm, nil, nil, 0.0);
+ node->item.text = fz_clonetext(text);
+ fz_appenddisplaynode(user, node);
+}
+
+static void
fz_listignoretext(void *user, fz_text *text, fz_matrix ctm)
{
fz_displaynode *node;
@@ -193,10 +213,12 @@ fz_newlistdevice(fz_displaylist *list)
dev->fillpath = fz_listfillpath;
dev->strokepath = fz_liststrokepath;
dev->clippath = fz_listclippath;
+ dev->clipstrokepath = fz_listclipstrokepath;
dev->filltext = fz_listfilltext;
dev->stroketext = fz_liststroketext;
dev->cliptext = fz_listcliptext;
+ dev->clipstroketext = fz_listclipstroketext;
dev->ignoretext = fz_listignoretext;
dev->fillshade = fz_listfillshade;
@@ -250,6 +272,9 @@ fz_executedisplaylist(fz_displaylist *list, fz_device *dev, fz_matrix topctm)
case FZ_CMDCLIPPATH:
dev->clippath(dev->user, node->item.path, ctm);
break;
+ case FZ_CMDCLIPSTROKEPATH:
+ dev->clipstrokepath(dev->user, node->item.path, ctm);
+ break;
case FZ_CMDFILLTEXT:
dev->filltext(dev->user, node->item.text, ctm,
node->colorspace, node->color, node->alpha);
@@ -261,6 +286,9 @@ fz_executedisplaylist(fz_displaylist *list, fz_device *dev, fz_matrix topctm)
case FZ_CMDCLIPTEXT:
dev->cliptext(dev->user, node->item.text, ctm);
break;
+ case FZ_CMDCLIPSTROKETEXT:
+ dev->clipstroketext(dev->user, node->item.text, ctm);
+ break;
case FZ_CMDIGNORETEXT:
dev->ignoretext(dev->user, node->item.text, ctm);
break;