summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mupdf/pdf/annot.h6
-rw-r--r--platform/x11/pdfapp.c2
-rw-r--r--source/pdf/pdf-annot-edit.c20
-rw-r--r--source/pdf/pdf-annot.c24
-rw-r--r--source/pdf/pdf-appearance.c2
-rw-r--r--source/pdf/pdf-form.c8
6 files changed, 46 insertions, 16 deletions
diff --git a/include/mupdf/pdf/annot.h b/include/mupdf/pdf/annot.h
index 7e95b31b..df068bc1 100644
--- a/include/mupdf/pdf/annot.h
+++ b/include/mupdf/pdf/annot.h
@@ -105,7 +105,7 @@ struct pdf_annot_s
pdf_xobject *ap;
int ap_iteration;
- int changed;
+ int dirty;
pdf_annot *next;
};
@@ -221,4 +221,8 @@ void pdf_set_free_text_details(fz_context *ctx, pdf_annot *annot, fz_point *pos,
*/
pdf_annot *pdf_new_annot(fz_context *ctx, pdf_page *page);
+void pdf_dirty_annot(fz_context *ctx, pdf_annot *annot);
+void pdf_clean_annot(fz_context *ctx, pdf_annot *annot);
+int pdf_annot_is_dirty(fz_context *ctx, pdf_annot *annot);
+
#endif
diff --git a/platform/x11/pdfapp.c b/platform/x11/pdfapp.c
index a5c524b4..7590213e 100644
--- a/platform/x11/pdfapp.c
+++ b/platform/x11/pdfapp.c
@@ -807,7 +807,7 @@ static void pdfapp_updatepage(pdfapp_t *app)
for (pannot = pdf_first_annot(app->ctx, (pdf_page*)app->page); pannot; pannot = pdf_next_annot(app->ctx, pannot))
{
- if (pannot->changed)
+ if (pdf_annot_is_dirty(app->ctx, pannot))
{
fz_annot *annot = (fz_annot*)pannot;
fz_rect bounds;
diff --git a/source/pdf/pdf-annot-edit.c b/source/pdf/pdf-annot-edit.c
index d0ad0915..20aeff11 100644
--- a/source/pdf/pdf-annot-edit.c
+++ b/source/pdf/pdf-annot-edit.c
@@ -232,7 +232,7 @@ pdf_set_annot_flags(fz_context *ctx, pdf_annot *annot, int flags)
{
pdf_document *doc = annot->page->doc;
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_F, pdf_new_int(ctx, doc, flags));
- annot->changed = 1;
+ pdf_dirty_annot(ctx, annot);
}
void
@@ -256,7 +256,7 @@ pdf_set_annot_rect(fz_context *ctx, pdf_annot *annot, const fz_rect *rect)
fz_transform_rect(&trect, &inv_page_ctm);
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_Rect, pdf_new_rect(ctx, doc, &trect));
- annot->changed = 1;
+ pdf_dirty_annot(ctx, annot);
}
const char *
@@ -270,7 +270,7 @@ pdf_set_annot_contents(fz_context *ctx, pdf_annot *annot, const char *text)
{
pdf_document *doc = annot->page->doc;
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_Contents, pdf_new_string(ctx, doc, text, strlen(text)));
- annot->changed = 1;
+ pdf_dirty_annot(ctx, annot);
}
static pdf_obj *open_subtypes[] = {
@@ -300,6 +300,7 @@ pdf_set_annot_is_open(fz_context *ctx, pdf_annot *annot, int is_open)
check_allowed_subtypes(ctx, annot, PDF_NAME_Open, open_subtypes);
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_Open,
pdf_new_bool(ctx, doc, is_open));
+ pdf_dirty_annot(ctx, annot);
}
static pdf_obj *icon_name_subtypes[] = {
@@ -329,6 +330,7 @@ pdf_set_annot_icon_name(fz_context *ctx, pdf_annot *annot, const char *name)
pdf_document *doc = annot->page->doc;
check_allowed_subtypes(ctx, annot, PDF_NAME_Name, icon_name_subtypes);
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_Name, pdf_new_name(ctx, doc, name));
+ pdf_dirty_annot(ctx, annot);
}
static int line_ending_value(fz_context *ctx, pdf_obj *line_ending)
@@ -398,6 +400,7 @@ pdf_set_annot_line_ending_styles(fz_context *ctx, pdf_annot *annot, int start_st
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_LE, style);
pdf_array_put_drop(ctx, style, 0, line_ending_name(ctx, start_style));
pdf_array_put_drop(ctx, style, 1, line_ending_name(ctx, end_style));
+ pdf_dirty_annot(ctx, annot);
}
float
@@ -428,8 +431,7 @@ pdf_set_annot_border(fz_context *ctx, pdf_annot *annot, float w)
/* Remove border style and effect dictionaries so they won't interfere. */
pdf_dict_del(ctx, annot->obj, PDF_NAME_BS);
pdf_dict_del(ctx, annot->obj, PDF_NAME_BE);
-
- annot->changed = 1;
+ pdf_dirty_annot(ctx, annot);
}
static void pdf_annot_color_imp(fz_context *ctx, pdf_annot *annot, pdf_obj *key, int *n, float color[4], pdf_obj **allowed)
@@ -521,7 +523,7 @@ static void pdf_set_annot_color_imp(fz_context *ctx, pdf_annot *annot, pdf_obj *
}
pdf_dict_put_drop(ctx, annot->obj, key, arr);
- annot->changed = 1;
+ pdf_dirty_annot(ctx, annot);
}
void
@@ -630,7 +632,7 @@ pdf_set_annot_vertices(fz_context *ctx, pdf_annot *annot, int n, const float *v)
pdf_array_push_drop(ctx, vertices, pdf_new_real(ctx, doc, point.y));
}
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_Vertices, vertices);
- annot->changed = 1;
+ pdf_dirty_annot(ctx, annot);
}
static pdf_obj *quad_point_subtypes[] = {
@@ -708,7 +710,7 @@ pdf_set_annot_quad_points(fz_context *ctx, pdf_annot *annot, int n, const float
}
}
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_QuadPoints, quad_points);
- annot->changed = 1;
+ pdf_dirty_annot(ctx, annot);
}
static pdf_obj *ink_list_subtypes[] = {
@@ -799,7 +801,7 @@ pdf_set_annot_ink_list(fz_context *ctx, pdf_annot *annot, int n, const int *coun
pdf_array_push_drop(ctx, ink_list, stroke);
}
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_InkList, ink_list);
- annot->changed = 1;
+ pdf_dirty_annot(ctx, annot);
}
static void find_free_font_name(fz_context *ctx, pdf_obj *fdict, char *buf, int buf_size)
diff --git a/source/pdf/pdf-annot.c b/source/pdf/pdf-annot.c
index 56681424..7046ff18 100644
--- a/source/pdf/pdf-annot.c
+++ b/source/pdf/pdf-annot.c
@@ -557,3 +557,27 @@ pdf_bound_annot(fz_context *ctx, pdf_annot *annot, fz_rect *rect)
fz_transform_rect(rect, &page_ctm);
return rect;
}
+
+void
+pdf_dirty_annot(fz_context *ctx, pdf_annot *annot)
+{
+ if (annot)
+ {
+ annot->dirty = 1;
+ if (annot->page && annot->page->doc)
+ annot->page->doc->dirty = 1;
+ }
+}
+
+void
+pdf_clean_annot(fz_context *ctx, pdf_annot *annot)
+{
+ if (annot)
+ annot->dirty = 0;
+}
+
+int
+pdf_annot_is_dirty(fz_context *ctx, pdf_annot *annot)
+{
+ return annot ? annot->dirty: 0;
+}
diff --git a/source/pdf/pdf-appearance.c b/source/pdf/pdf-appearance.c
index db99adae..70f684f4 100644
--- a/source/pdf/pdf-appearance.c
+++ b/source/pdf/pdf-appearance.c
@@ -1645,7 +1645,7 @@ void pdf_set_annot_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *ann
pdf_drop_xobject(ctx, xobj);
}
- doc->dirty = 1;
+ pdf_dirty_annot(ctx, annot);
}
static fz_point *
diff --git a/source/pdf/pdf-form.c b/source/pdf/pdf-form.c
index 09b8258e..95b0da54 100644
--- a/source/pdf/pdf-form.c
+++ b/source/pdf/pdf-form.c
@@ -643,11 +643,11 @@ void pdf_update_page(fz_context *ctx, pdf_page *page)
{
pdf_annot *annot;
- /* Reset changed_annots to empty */
+ /* Mark all dirty annots as clean */
for (annot = page->annots; annot; annot = annot->next)
- annot->changed = 0;
+ pdf_clean_annot(ctx, annot);
- /* Flag all changed annots */
+ /* Flag all dirty annots */
for (annot = page->annots; annot; annot = annot->next)
{
pdf_xobject *ap = pdf_keep_xobject(ctx, annot->ap);
@@ -657,7 +657,7 @@ void pdf_update_page(fz_context *ctx, pdf_page *page)
{
pdf_update_annot(ctx, annot);
if ((ap != annot->ap || ap_iteration != annot->ap_iteration))
- annot->changed = 1;
+ pdf_dirty_annot(ctx, annot);
}
fz_always(ctx)
pdf_drop_xobject(ctx, ap);