summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2012-01-04 18:33:33 +0000
committerRobin Watts <robin.watts@artifex.com>2012-01-04 19:13:41 +0000
commit2ae2a7b68381f0fc5940e983ccdec5b4cc08d188 (patch)
treea0ff2e359868cf6d4bcc6de7fabc06d9ade9774a /apps
parent94439d77f23763d59457b9946ba35bd354ea4841 (diff)
downloadmupdf-2ae2a7b68381f0fc5940e983ccdec5b4cc08d188.tar.xz
Bug 692739: Add ability to abort time consuming actions
A new 'cookie' parameter is added to page rendering/interpretation functions. Supply this as NULL to get existing behaviour. If you supply a non-NULL cookie, then this is taken as a pointer to a struct that can be used for simple, non-thread locked communication between caller and library. The entire struct should be memset to zero before entry, except for specific flags (thus coping with future extensions to this struct). The abort flag should be zero on entry. It will be checked periodically by the library - if the caller sets it non-zero (via another thread) then the current operation will be aborted. No guarantees are given as to how often this will be checked, or how fast it will be responded to. The progress_max field will be set to an integer (-1 for unknown) representing the number of 'things' to do. The progress field will count up from 0 to this number as time goes by. No guarantees are made as to the accuracy of this information, but it should be useful for offering some sort of progress bar etc. Note that progress_max may increase during the job. In general, callers should be careful to accept out of range or invalid data in this structure as this is deliberately accessed 'unlocked'.
Diffstat (limited to 'apps')
-rw-r--r--apps/pdfapp.c6
-rw-r--r--apps/pdfdraw.c14
-rw-r--r--apps/xpsdraw.c6
3 files changed, 13 insertions, 13 deletions
diff --git a/apps/pdfapp.c b/apps/pdfapp.c
index cdb88e61..34fe09a5 100644
--- a/apps/pdfapp.c
+++ b/apps/pdfapp.c
@@ -333,7 +333,7 @@ static void pdfapp_loadpage_pdf(pdfapp_t *app)
mdev = fz_new_list_device(app->ctx, app->page_list);
fz_try(app->ctx)
{
- pdf_run_page(app->xref, page, mdev, fz_identity);
+ pdf_run_page(app->xref, page, mdev, fz_identity, NULL);
}
fz_catch(app->ctx)
{
@@ -408,7 +408,7 @@ static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage, int repai
/* Extract text */
app->page_text = fz_new_text_span(app->ctx);
tdev = fz_new_text_device(app->ctx, app->page_text);
- fz_execute_display_list(app->page_list, tdev, fz_identity, fz_infinite_bbox);
+ fz_execute_display_list(app->page_list, tdev, fz_identity, fz_infinite_bbox, NULL);
fz_free_device(tdev);
}
@@ -435,7 +435,7 @@ static void pdfapp_showpage(pdfapp_t *app, int loadpage, int drawpage, int repai
app->image = fz_new_pixmap_with_rect(app->ctx, colorspace, bbox);
fz_clear_pixmap_with_color(app->image, 255);
idev = fz_new_draw_device(app->ctx, app->cache, app->image);
- fz_execute_display_list(app->page_list, idev, ctm, bbox);
+ fz_execute_display_list(app->page_list, idev, ctm, bbox, NULL);
fz_free_device(idev);
}
diff --git a/apps/pdfdraw.c b/apps/pdfdraw.c
index 6b2923c1..91d09c6c 100644
--- a/apps/pdfdraw.c
+++ b/apps/pdfdraw.c
@@ -117,7 +117,7 @@ static void drawpage(pdf_xref *xref, int pagenum)
{
list = fz_new_display_list(ctx);
dev = fz_new_list_device(ctx, list);
- pdf_run_page(xref, page, dev, fz_identity);
+ pdf_run_page(xref, page, dev, fz_identity, NULL);
}
fz_catch(ctx)
{
@@ -137,9 +137,9 @@ static void drawpage(pdf_xref *xref, int pagenum)
dev = fz_new_trace_device(ctx);
printf("<page number=\"%d\">\n", pagenum);
if (list)
- fz_execute_display_list(list, dev, fz_identity, fz_infinite_bbox);
+ fz_execute_display_list(list, dev, fz_identity, fz_infinite_bbox, NULL);
else
- pdf_run_page(xref, page, dev, fz_identity);
+ pdf_run_page(xref, page, dev, fz_identity, NULL);
printf("</page>\n");
}
fz_catch(ctx)
@@ -164,9 +164,9 @@ static void drawpage(pdf_xref *xref, int pagenum)
text = fz_new_text_span(ctx);
dev = fz_new_text_device(ctx, text);
if (list)
- fz_execute_display_list(list, dev, fz_identity, fz_infinite_bbox);
+ fz_execute_display_list(list, dev, fz_identity, fz_infinite_bbox, NULL);
else
- pdf_run_page(xref, page, dev, fz_identity);
+ pdf_run_page(xref, page, dev, fz_identity, NULL);
fz_free_device(dev);
dev = NULL;
printf("[Page %d]\n", pagenum);
@@ -219,9 +219,9 @@ static void drawpage(pdf_xref *xref, int pagenum)
dev = fz_new_draw_device(ctx, glyphcache, pix);
if (list)
- fz_execute_display_list(list, dev, ctm, bbox);
+ fz_execute_display_list(list, dev, ctm, bbox, NULL);
else
- pdf_run_page(xref, page, dev, ctm);
+ pdf_run_page(xref, page, dev, ctm, NULL);
fz_free_device(dev);
dev = NULL;
diff --git a/apps/xpsdraw.c b/apps/xpsdraw.c
index ced38357..33fb9db2 100644
--- a/apps/xpsdraw.c
+++ b/apps/xpsdraw.c
@@ -110,7 +110,7 @@ static void drawpage(xps_document *doc, int pagenum)
dev = fz_new_trace_device(doc->ctx);
printf("<page number=\"%d\">\n", pagenum);
if (list)
- fz_execute_display_list(list, dev, fz_identity, fz_infinite_bbox);
+ fz_execute_display_list(list, dev, fz_identity, fz_infinite_bbox, NULL);
else
xps_run_page(doc, page, dev, fz_identity);
printf("</page>\n");
@@ -122,7 +122,7 @@ static void drawpage(xps_document *doc, int pagenum)
fz_text_span *text = fz_new_text_span(doc->ctx);
dev = fz_new_text_device(doc->ctx, text);
if (list)
- fz_execute_display_list(list, dev, fz_identity, fz_infinite_bbox);
+ fz_execute_display_list(list, dev, fz_identity, fz_infinite_bbox, NULL);
else
xps_run_page(doc, page, dev, fz_identity);
fz_free_device(dev);
@@ -166,7 +166,7 @@ static void drawpage(xps_document *doc, int pagenum)
dev = fz_new_draw_device(doc->ctx, glyphcache, pix);
if (list)
- fz_execute_display_list(list, dev, ctm, bbox);
+ fz_execute_display_list(list, dev, ctm, bbox, NULL);
else
xps_run_page(doc, page, dev, ctm);
fz_free_device(dev);