summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-appearance.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2015-01-21 16:42:45 +0100
committerTor Andersson <tor.andersson@artifex.com>2015-02-17 18:05:39 +0100
commitf84a189d5f94250e46d2cbd1a75aba00130e2dd6 (patch)
tree8ee614ab90de1baa8941f91ae4946ed5c2e70721 /source/pdf/pdf-appearance.c
parent681039767f2ccc72e236246178893eb0989169c9 (diff)
downloadmupdf-f84a189d5f94250e46d2cbd1a75aba00130e2dd6.tar.xz
Add ctx parameter and remove embedded contexts for API regularity.
Purge several embedded contexts: Remove embedded context in fz_output. Remove embedded context in fz_stream. Remove embedded context in fz_device. Remove fz_rebind_stream (since it is no longer necessary). Remove embedded context in svg_device. Remove embedded context in XML parser. Add ctx argument to fz_document functions. Remove embedded context in fz_document. Remove embedded context in pdf_document. Remove embedded context in pdf_obj. Make fz_page independent of fz_document in the interface. We shouldn't need to pass the document to all functions handling a page. If a page is tied to the source document, it's redundant; otherwise it's just pointless. Fix reference counting oddity in fz_new_image_from_pixmap.
Diffstat (limited to 'source/pdf/pdf-appearance.c')
-rw-r--r--source/pdf/pdf-appearance.c447
1 files changed, 214 insertions, 233 deletions
diff --git a/source/pdf/pdf-appearance.c b/source/pdf/pdf-appearance.c
index a8d8d6ef..ce9bdb1f 100644
--- a/source/pdf/pdf-appearance.c
+++ b/source/pdf/pdf-appearance.c
@@ -93,7 +93,7 @@ void pdf_parse_da(fz_context *ctx, char *da, pdf_da_info *di)
fz_var(name);
fz_try(ctx)
{
- for (tok = pdf_lex(str, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(str, &lbuf))
+ for (tok = pdf_lex(ctx, str, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(ctx, str, &lbuf))
{
switch (tok)
{
@@ -147,8 +147,8 @@ void pdf_parse_da(fz_context *ctx, char *da, pdf_da_info *di)
fz_always(ctx)
{
fz_free(ctx, name);
- fz_drop_stream(str);
- pdf_lexbuf_fin(&lbuf);
+ fz_drop_stream(ctx, str);
+ pdf_lexbuf_fin(ctx, &lbuf);
}
fz_catch(ctx)
{
@@ -156,16 +156,15 @@ void pdf_parse_da(fz_context *ctx, char *da, pdf_da_info *di)
}
}
-static void get_font_info(pdf_document *doc, pdf_obj *dr, char *da, font_info *font_rec)
+static void get_font_info(fz_context *ctx, pdf_document *doc, pdf_obj *dr, char *da, font_info *font_rec)
{
- fz_context *ctx = doc->ctx;
pdf_font_desc *font;
pdf_parse_da(ctx, da, &font_rec->da_rec);
if (font_rec->da_rec.font_name == NULL)
fz_throw(ctx, FZ_ERROR_GENERIC, "No font name in default appearance");
- font_rec->font = font = pdf_load_font(doc, dr, pdf_dict_gets(pdf_dict_gets(dr, "Font"), font_rec->da_rec.font_name), 0);
+ font_rec->font = font = pdf_load_font(ctx, doc, dr, pdf_dict_gets(ctx, pdf_dict_gets(ctx, dr, "Font"), font_rec->da_rec.font_name), 0);
font_rec->lineheight = 1.0;
if (font && font->ascent != 0.0f && font->descent != 0.0f)
font_rec->lineheight = (font->ascent - font->descent) / 1000.0;
@@ -178,24 +177,24 @@ static void font_info_fin(fz_context *ctx, font_info *font_rec)
pdf_da_info_fin(ctx, &font_rec->da_rec);
}
-static void get_text_widget_info(pdf_document *doc, pdf_obj *widget, text_widget_info *info)
+static void get_text_widget_info(fz_context *ctx, pdf_document *doc, pdf_obj *widget, text_widget_info *info)
{
- char *da = pdf_to_str_buf(pdf_get_inheritable(doc, widget, "DA"));
- int ff = pdf_get_field_flags(doc, widget);
- pdf_obj *ml = pdf_get_inheritable(doc, widget, "MaxLen");
+ char *da = pdf_to_str_buf(ctx, pdf_get_inheritable(ctx, doc, widget, "DA"));
+ int ff = pdf_get_field_flags(ctx, doc, widget);
+ pdf_obj *ml = pdf_get_inheritable(ctx, doc, widget, "MaxLen");
- info->dr = pdf_get_inheritable(doc, widget, "DR");
- info->col = pdf_dict_getp(widget, "MK/BG");
- info->q = pdf_to_int(pdf_get_inheritable(doc, widget, "Q"));
+ info->dr = pdf_get_inheritable(ctx, doc, widget, "DR");
+ info->col = pdf_dict_getp(ctx, widget, "MK/BG");
+ info->q = pdf_to_int(ctx, pdf_get_inheritable(ctx, doc, widget, "Q"));
info->multiline = (ff & Ff_Multiline) != 0;
info->comb = (ff & (Ff_Multiline|Ff_Password|Ff_FileSelect|Ff_Comb)) == Ff_Comb;
if (ml == NULL)
info->comb = 0;
else
- info->max_len = pdf_to_int(ml);
+ info->max_len = pdf_to_int(ctx, ml);
- get_font_info(doc, info->dr, da, &info->font_rec);
+ get_font_info(ctx, doc, info->dr, da, &info->font_rec);
}
void pdf_fzbuf_print_da(fz_context *ctx, fz_buffer *fzbuf, pdf_da_info *di)
@@ -223,9 +222,9 @@ void pdf_fzbuf_print_da(fz_context *ctx, fz_buffer *fzbuf, pdf_da_info *di)
}
}
-static fz_rect *measure_text(pdf_document *doc, font_info *font_rec, const fz_matrix *tm, char *text, fz_rect *bbox)
+static fz_rect *measure_text(fz_context *ctx, pdf_document *doc, font_info *font_rec, const fz_matrix *tm, char *text, fz_rect *bbox)
{
- pdf_measure_text(doc->ctx, font_rec->font, (unsigned char *)text, strlen(text), bbox);
+ pdf_measure_text(ctx, font_rec->font, (unsigned char *)text, strlen(text), bbox);
bbox->x0 *= font_rec->da_rec.font_size * tm->a;
bbox->y0 *= font_rec->da_rec.font_size * tm->d;
@@ -237,24 +236,24 @@ static fz_rect *measure_text(pdf_document *doc, font_info *font_rec, const fz_ma
static void fzbuf_print_color(fz_context *ctx, fz_buffer *fzbuf, pdf_obj *arr, int stroke, float adj)
{
- switch (pdf_array_len(arr))
+ switch (pdf_array_len(ctx, arr))
{
case 1:
fz_buffer_printf(ctx, fzbuf, stroke?"%f G\n":"%f g\n",
- pdf_to_real(pdf_array_get(arr, 0)) + adj);
+ pdf_to_real(ctx, pdf_array_get(ctx, arr, 0)) + adj);
break;
case 3:
fz_buffer_printf(ctx, fzbuf, stroke?"%f %f %f RG\n":"%f %f %f rg\n",
- pdf_to_real(pdf_array_get(arr, 0)) + adj,
- pdf_to_real(pdf_array_get(arr, 1)) + adj,
- pdf_to_real(pdf_array_get(arr, 2)) + adj);
+ pdf_to_real(ctx, pdf_array_get(ctx, arr, 0)) + adj,
+ pdf_to_real(ctx, pdf_array_get(ctx, arr, 1)) + adj,
+ pdf_to_real(ctx, pdf_array_get(ctx, arr, 2)) + adj);
break;
case 4:
fz_buffer_printf(ctx, fzbuf, stroke?"%f %f %f %f K\n":"%f %f %f %f k\n",
- pdf_to_real(pdf_array_get(arr, 0)),
- pdf_to_real(pdf_array_get(arr, 1)),
- pdf_to_real(pdf_array_get(arr, 2)),
- pdf_to_real(pdf_array_get(arr, 3)));
+ pdf_to_real(ctx, pdf_array_get(ctx, arr, 0)),
+ pdf_to_real(ctx, pdf_array_get(ctx, arr, 1)),
+ pdf_to_real(ctx, pdf_array_get(ctx, arr, 2)),
+ pdf_to_real(ctx, pdf_array_get(ctx, arr, 3)));
break;
}
}
@@ -310,25 +309,23 @@ static fz_buffer *create_text_buffer(fz_context *ctx, const fz_rect *clip, text_
return fzbuf;
}
-static fz_buffer *create_aligned_text_buffer(pdf_document *doc, const fz_rect *clip, text_widget_info *info, const fz_matrix *tm, char *text)
+static fz_buffer *create_aligned_text_buffer(fz_context *ctx, pdf_document *doc, const fz_rect *clip, text_widget_info *info, const fz_matrix *tm, char *text)
{
- fz_context *ctx = doc->ctx;
fz_matrix atm = *tm;
if (info->q != Q_Left)
{
fz_rect rect;
- measure_text(doc, &info->font_rec, tm, text, &rect);
+ measure_text(ctx, doc, &info->font_rec, tm, text, &rect);
atm.e -= info->q == Q_Right ? rect.x1 : (rect.x1 - rect.x0) / 2;
}
return create_text_buffer(ctx, clip, info, &atm, text);
}
-static void measure_ascent_descent(pdf_document *doc, font_info *finf, char *text, float *ascent, float *descent)
+static void measure_ascent_descent(fz_context *ctx, pdf_document *doc, font_info *finf, char *text, float *ascent, float *descent)
{
- fz_context *ctx = doc->ctx;
char *testtext = NULL;
fz_rect bbox;
font_info tinf = *finf;
@@ -342,7 +339,7 @@ static void measure_ascent_descent(pdf_document *doc, font_info *finf, char *tex
strcpy(testtext, "My");
strcat(testtext, text);
tinf.da_rec.font_size = 1;
- measure_text(doc, &tinf, &fz_identity, testtext, &bbox);
+ measure_text(ctx, doc, &tinf, &fz_identity, testtext, &bbox);
*descent = -bbox.y0;
*ascent = bbox.y1;
}
@@ -572,9 +569,8 @@ static void fzbuf_print_text_word(fz_context *ctx, fz_buffer *fzbuf, float x, fl
fz_buffer_printf(ctx, fzbuf, ") Tj\n");
}
-static fz_buffer *create_text_appearance(pdf_document *doc, const fz_rect *bbox, const fz_matrix *oldtm, text_widget_info *info, char *text)
+static fz_buffer *create_text_appearance(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const fz_matrix *oldtm, text_widget_info *info, char *text)
{
- fz_context *ctx = doc->ctx;
int fontsize;
int variable;
float height, width, full_width;
@@ -610,7 +606,7 @@ static fz_buffer *create_text_appearance(pdf_document *doc, const fz_rect *bbox,
info->font_rec.da_rec.font_size = fontsize;
- measure_ascent_descent(doc, &info->font_rec, text, &ascent, &descent);
+ measure_ascent_descent(ctx, doc, &info->font_rec, text, &ascent, &descent);
if (info->multiline)
{
@@ -709,7 +705,7 @@ static fz_buffer *create_text_appearance(pdf_document *doc, const fz_rect *bbox,
if (variable)
{
- measure_text(doc, &info->font_rec, &tm, text, &tbox);
+ measure_text(ctx, doc, &info->font_rec, &tm, text, &tbox);
if (tbox.x1 - tbox.x0 > width)
{
@@ -720,7 +716,7 @@ static fz_buffer *create_text_appearance(pdf_document *doc, const fz_rect *bbox,
}
}
- fzbuf = create_aligned_text_buffer(doc, &rect, info, &tm, text);
+ fzbuf = create_aligned_text_buffer(ctx, doc, &rect, info, &tm, text);
}
}
fz_always(ctx)
@@ -736,14 +732,13 @@ static fz_buffer *create_text_appearance(pdf_document *doc, const fz_rect *bbox,
return fzbuf;
}
-static int get_matrix(pdf_document *doc, pdf_xobject *form, int q, fz_matrix *mt)
+static int get_matrix(fz_context *ctx, pdf_document *doc, pdf_xobject *form, int q, fz_matrix *mt)
{
- fz_context *ctx = doc->ctx;
int found = 0;
pdf_lexbuf lbuf;
fz_stream *str;
- str = pdf_open_stream(doc, pdf_to_num(form->contents), pdf_to_gen(form->contents));
+ str = pdf_open_stream(ctx, doc, pdf_to_num(ctx, form->contents), pdf_to_gen(ctx, form->contents));
pdf_lexbuf_init(ctx, &lbuf, PDF_LEXBUF_SMALL);
@@ -754,7 +749,7 @@ static int get_matrix(pdf_document *doc, pdf_xobject *form, int q, fz_matrix *mt
int coef_i = 0;
/* Look for the text matrix Tm in the stream */
- for (tok = pdf_lex(str, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(str, &lbuf))
+ for (tok = pdf_lex(ctx, str, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(ctx, str, &lbuf))
{
if (tok == PDF_TOK_INT || tok == PDF_TOK_REAL)
{
@@ -789,7 +784,7 @@ static int get_matrix(pdf_document *doc, pdf_xobject *form, int q, fz_matrix *mt
if (found)
{
fz_rect bbox;
- pdf_to_rect(ctx, pdf_dict_gets(form->contents, "BBox"), &bbox);
+ pdf_to_rect(ctx, pdf_dict_gets(ctx, form->contents, "BBox"), &bbox);
switch (q)
{
@@ -809,8 +804,8 @@ static int get_matrix(pdf_document *doc, pdf_xobject *form, int q, fz_matrix *mt
}
fz_always(ctx)
{
- fz_drop_stream(str);
- pdf_lexbuf_fin(&lbuf);
+ fz_drop_stream(ctx, str);
+ pdf_lexbuf_fin(ctx, &lbuf);
}
fz_catch(ctx)
{
@@ -912,23 +907,22 @@ static void account_for_rot(fz_rect *rect, fz_matrix *mat, int rot)
}
}
-static void copy_resources(pdf_obj *dst, pdf_obj *src)
+static void copy_resources(fz_context *ctx, pdf_obj *dst, pdf_obj *src)
{
int i, len;
- len = pdf_dict_len(src);
+ len = pdf_dict_len(ctx, src);
for (i = 0; i < len; i++)
{
- pdf_obj *key = pdf_dict_get_key(src, i);
+ pdf_obj *key = pdf_dict_get_key(ctx, src, i);
- if (!pdf_dict_get(dst, key))
- pdf_dict_put(dst, key, pdf_dict_get_val(src, i));
+ if (!pdf_dict_get(ctx, dst, key))
+ pdf_dict_put(ctx, dst, key, pdf_dict_get_val(ctx, src, i));
}
}
-static pdf_xobject *load_or_create_form(pdf_document *doc, pdf_obj *obj, fz_rect *rect)
+static pdf_xobject *load_or_create_form(fz_context *ctx, pdf_document *doc, pdf_obj *obj, fz_rect *rect)
{
- fz_context *ctx = doc->ctx;
pdf_obj *ap = NULL;
fz_matrix mat;
int rot;
@@ -943,36 +937,36 @@ static pdf_xobject *load_or_create_form(pdf_document *doc, pdf_obj *obj, fz_rect
fz_var(fzbuf);
fz_try(ctx)
{
- rot = pdf_to_int(pdf_dict_getp(obj, "MK/R"));
- pdf_to_rect(ctx, pdf_dict_gets(obj, "Rect"), rect);
+ rot = pdf_to_int(ctx, pdf_dict_getp(ctx, obj, "MK/R"));
+ pdf_to_rect(ctx, pdf_dict_gets(ctx, obj, "Rect"), rect);
rect->x1 -= rect->x0;
rect->y1 -= rect->y0;
rect->x0 = rect->y0 = 0;
account_for_rot(rect, &mat, rot);
- ap = pdf_dict_gets(obj, "AP");
+ ap = pdf_dict_gets(ctx, obj, "AP");
if (ap == NULL)
{
- ap = pdf_new_dict(doc, 1);
- pdf_dict_puts_drop(obj, "AP", ap);
+ ap = pdf_new_dict(ctx, doc, 1);
+ pdf_dict_puts_drop(ctx, obj, "AP", ap);
}
- formobj = pdf_dict_gets(ap, dn);
+ formobj = pdf_dict_gets(ctx, ap, dn);
if (formobj == NULL)
{
- formobj = pdf_new_xobject(doc, rect, &mat);
- pdf_dict_puts_drop(ap, dn, formobj);
+ formobj = pdf_new_xobject(ctx, doc, rect, &mat);
+ pdf_dict_puts_drop(ctx, ap, dn, formobj);
create_form = 1;
}
- form = pdf_load_xobject(doc, formobj);
+ form = pdf_load_xobject(ctx, doc, formobj);
if (create_form)
{
fzbuf = fz_new_buffer(ctx, 1);
- pdf_update_xobject_contents(doc, form, fzbuf);
+ pdf_update_xobject_contents(ctx, doc, form, fzbuf);
}
- copy_resources(form->resources, pdf_get_inheritable(doc, obj, "DR"));
+ copy_resources(ctx, form->resources, pdf_get_inheritable(ctx, doc, obj, "DR"));
}
fz_always(ctx)
{
@@ -987,9 +981,8 @@ static pdf_xobject *load_or_create_form(pdf_document *doc, pdf_obj *obj, fz_rect
return form;
}
-static void update_marked_content(pdf_document *doc, pdf_xobject *form, fz_buffer *fzbuf)
+static void update_marked_content(fz_context *ctx, pdf_document *doc, pdf_xobject *form, fz_buffer *fzbuf)
{
- fz_context *ctx = doc->ctx;
pdf_token tok;
pdf_lexbuf lbuf;
fz_stream *str_outer = NULL;
@@ -1009,12 +1002,12 @@ static void update_marked_content(pdf_document *doc, pdf_xobject *form, fz_buffe
int first = 1;
newbuf = fz_new_buffer(ctx, 0);
- str_outer = pdf_open_stream(doc, pdf_to_num(form->contents), pdf_to_gen(form->contents));
+ str_outer = pdf_open_stream(ctx, doc, pdf_to_num(ctx, form->contents), pdf_to_gen(ctx, form->contents));
len = fz_buffer_storage(ctx, fzbuf, &buf);
str_inner = fz_open_memory(ctx, buf, len);
/* Copy the existing appearance stream to newbuf while looking for BMC */
- for (tok = pdf_lex(str_outer, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(str_outer, &lbuf))
+ for (tok = pdf_lex(ctx, str_outer, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(ctx, str_outer, &lbuf))
{
if (first)
first = 0;
@@ -1031,12 +1024,12 @@ static void update_marked_content(pdf_document *doc, pdf_xobject *form, fz_buffe
if (bmc_found)
{
/* Drop Tx BMC from the replacement appearance stream */
- (void)pdf_lex(str_inner, &lbuf);
- (void)pdf_lex(str_inner, &lbuf);
+ (void)pdf_lex(ctx, str_inner, &lbuf);
+ (void)pdf_lex(ctx, str_inner, &lbuf);
}
/* Copy the replacement appearance stream to newbuf */
- for (tok = pdf_lex(str_inner, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(str_inner, &lbuf))
+ for (tok = pdf_lex(ctx, str_inner, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(ctx, str_inner, &lbuf))
{
fz_buffer_printf(ctx, newbuf, " ");
pdf_print_token(ctx, newbuf, tok, &lbuf);
@@ -1045,14 +1038,14 @@ static void update_marked_content(pdf_document *doc, pdf_xobject *form, fz_buffe
if (bmc_found)
{
/* Drop the rest of the existing appearance stream until EMC found */
- for (tok = pdf_lex(str_outer, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(str_outer, &lbuf))
+ for (tok = pdf_lex(ctx, str_outer, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(ctx, str_outer, &lbuf))
{
if (tok == PDF_TOK_KEYWORD && !strcmp(lbuf.scratch, "EMC"))
break;
}
/* Copy the rest of the existing appearance stream to newbuf */
- for (tok = pdf_lex(str_outer, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(str_outer, &lbuf))
+ for (tok = pdf_lex(ctx, str_outer, &lbuf); tok != PDF_TOK_EOF; tok = pdf_lex(ctx, str_outer, &lbuf))
{
fz_buffer_printf(ctx, newbuf, " ");
pdf_print_token(ctx, newbuf, tok, &lbuf);
@@ -1060,14 +1053,14 @@ static void update_marked_content(pdf_document *doc, pdf_xobject *form, fz_buffe
}
/* Use newbuf in place of the existing appearance stream */
- pdf_update_xobject_contents(doc, form, newbuf);
+ pdf_update_xobject_contents(ctx, doc, form, newbuf);
}
fz_always(ctx)
{
- fz_drop_stream(str_outer);
- fz_drop_stream(str_inner);
+ fz_drop_stream(ctx, str_outer);
+ fz_drop_stream(ctx, str_inner);
fz_drop_buffer(ctx, newbuf);
- pdf_lexbuf_fin(&lbuf);
+ pdf_lexbuf_fin(ctx, &lbuf);
}
fz_catch(ctx)
{
@@ -1075,9 +1068,9 @@ static void update_marked_content(pdf_document *doc, pdf_xobject *form, fz_buffe
}
}
-static int get_border_style(pdf_obj *obj)
+static int get_border_style(fz_context *ctx, pdf_obj *obj)
{
- char *sname = pdf_to_name(pdf_dict_getp(obj, "BS/S"));
+ char *sname = pdf_to_name(ctx, pdf_dict_getp(ctx, obj, "BS/S"));
if (!strcmp(sname, "D"))
return BS_Dashed;
@@ -1091,15 +1084,14 @@ static int get_border_style(pdf_obj *obj)
return BS_Solid;
}
-static float get_border_width(pdf_obj *obj)
+static float get_border_width(fz_context *ctx, pdf_obj *obj)
{
- float w = pdf_to_real(pdf_dict_getp(obj, "BS/W"));
+ float w = pdf_to_real(ctx, pdf_dict_getp(ctx, obj, "BS/W"));
return w == 0.0 ? 1.0 : w;
}
-void pdf_update_text_appearance(pdf_document *doc, pdf_obj *obj, char *eventValue)
+void pdf_update_text_appearance(fz_context *ctx, pdf_document *doc, pdf_obj *obj, char *eventValue)
{
- fz_context *ctx = doc->ctx;
text_widget_info info;
pdf_xobject *form = NULL;
fz_buffer *fzbuf = NULL;
@@ -1116,19 +1108,19 @@ void pdf_update_text_appearance(pdf_document *doc, pdf_obj *obj, char *eventValu
fz_var(text);
fz_try(ctx)
{
- get_text_widget_info(doc, obj, &info);
+ get_text_widget_info(ctx, doc, obj, &info);
if (eventValue)
text = to_font_encoding(ctx, info.font_rec.font, eventValue);
else
- text = pdf_field_value(doc, obj);
+ text = pdf_field_value(ctx, doc, obj);
- form = load_or_create_form(doc, obj, &rect);
+ form = load_or_create_form(ctx, doc, obj, &rect);
- has_tm = get_matrix(doc, form, info.q, &tm);
- fzbuf = create_text_appearance(doc, &form->bbox, has_tm ? &tm : NULL, &info,
+ has_tm = get_matrix(ctx, doc, form, info.q, &tm);
+ fzbuf = create_text_appearance(ctx, doc, &form->bbox, has_tm ? &tm : NULL, &info,
text?text:"");
- update_marked_content(doc, form, fzbuf);
+ update_marked_content(ctx, doc, form, fzbuf);
}
fz_always(ctx)
{
@@ -1143,9 +1135,8 @@ void pdf_update_text_appearance(pdf_document *doc, pdf_obj *obj, char *eventValu
}
}
-void pdf_update_combobox_appearance(pdf_document *doc, pdf_obj *obj)
+void pdf_update_combobox_appearance(fz_context *ctx, pdf_document *doc, pdf_obj *obj)
{
- fz_context *ctx = doc->ctx;
text_widget_info info;
pdf_xobject *form = NULL;
fz_buffer *fzbuf = NULL;
@@ -1162,24 +1153,24 @@ void pdf_update_combobox_appearance(pdf_document *doc, pdf_obj *obj)
fz_var(fzbuf);
fz_try(ctx)
{
- get_text_widget_info(doc, obj, &info);
+ get_text_widget_info(ctx, doc, obj, &info);
- val = pdf_get_inheritable(doc, obj, "V");
+ val = pdf_get_inheritable(ctx, doc, obj, "V");
- if (pdf_is_array(val))
- val = pdf_array_get(val, 0);
+ if (pdf_is_array(ctx, val))
+ val = pdf_array_get(ctx, val, 0);
- text = pdf_to_str_buf(val);
+ text = pdf_to_str_buf(ctx, val);
if (!text)
text = "";
- form = load_or_create_form(doc, obj, &rect);
+ form = load_or_create_form(ctx, doc, obj, &rect);
- has_tm = get_matrix(doc, form, info.q, &tm);
- fzbuf = create_text_appearance(doc, &form->bbox, has_tm ? &tm : NULL, &info,
+ has_tm = get_matrix(ctx, doc, form, info.q, &tm);
+ fzbuf = create_text_appearance(ctx, doc, &form->bbox, has_tm ? &tm : NULL, &info,
text?text:"");
- update_marked_content(doc, form, fzbuf);
+ update_marked_content(ctx, doc, form, fzbuf);
}
fz_always(ctx)
{
@@ -1193,9 +1184,8 @@ void pdf_update_combobox_appearance(pdf_document *doc, pdf_obj *obj)
}
}
-void pdf_update_pushbutton_appearance(pdf_document *doc, pdf_obj *obj)
+void pdf_update_pushbutton_appearance(fz_context *ctx, pdf_document *doc, pdf_obj *obj)
{
- fz_context *ctx = doc->ctx;
fz_rect rect;
pdf_xobject *form = NULL;
fz_buffer *fzbuf = NULL;
@@ -1212,18 +1202,18 @@ void pdf_update_pushbutton_appearance(pdf_document *doc, pdf_obj *obj)
fz_var(fzbuf);
fz_try(ctx)
{
- form = load_or_create_form(doc, obj, &rect);
+ form = load_or_create_form(ctx, doc, obj, &rect);
fzbuf = fz_new_buffer(ctx, 0);
- tobj = pdf_dict_getp(obj, "MK/BG");
- if (pdf_is_array(tobj))
+ tobj = pdf_dict_getp(ctx, obj, "MK/BG");
+ if (pdf_is_array(ctx, tobj))
{
fzbuf_print_color(ctx, fzbuf, tobj, 0, 0.0);
fz_buffer_printf(ctx, fzbuf, fmt_re,
rect.x0, rect.y0, rect.x1, rect.y1);
fz_buffer_printf(ctx, fzbuf, fmt_f);
}
- bstyle = get_border_style(obj);
- bwidth = get_border_width(obj);
+ bstyle = get_border_style(ctx, obj);
+ bwidth = get_border_width(ctx, obj);
btotal = bwidth;
if (bstyle == BS_Beveled || bstyle == BS_Inset)
{
@@ -1253,7 +1243,7 @@ void pdf_update_pushbutton_appearance(pdf_document *doc, pdf_obj *obj)
fz_buffer_printf(ctx, fzbuf, fmt_f);
}
- tobj = pdf_dict_getp(obj, "MK/BC");
+ tobj = pdf_dict_getp(ctx, obj, "MK/BC");
if (tobj)
{
fzbuf_print_color(ctx, fzbuf, tobj, 1, 0.0);
@@ -1264,27 +1254,27 @@ void pdf_update_pushbutton_appearance(pdf_document *doc, pdf_obj *obj)
fz_buffer_printf(ctx, fzbuf, fmt_s);
}
- tobj = pdf_dict_getp(obj, "MK/CA");
+ tobj = pdf_dict_getp(ctx, obj, "MK/CA");
if (tobj)
{
fz_rect clip = rect;
fz_rect bounds;
fz_matrix mat;
- char *da = pdf_to_str_buf(pdf_get_inheritable(doc, obj, "DA"));
- char *text = pdf_to_str_buf(tobj);
+ char *da = pdf_to_str_buf(ctx, pdf_get_inheritable(ctx, doc, obj, "DA"));
+ char *text = pdf_to_str_buf(ctx, tobj);
clip.x0 += btotal;
clip.y0 += btotal;
clip.x1 -= btotal;
clip.y1 -= btotal;
- get_font_info(doc, form->resources, da, &font_rec);
- measure_text(doc, &font_rec, &fz_identity, text, &bounds);
+ get_font_info(ctx, doc, form->resources, da, &font_rec);
+ measure_text(ctx, doc, &font_rec, &fz_identity, text, &bounds);
fz_translate(&mat, (rect.x1 - bounds.x1)/2, (rect.y1 - bounds.y1)/2);
fzbuf_print_text(ctx, fzbuf, &clip, NULL, &font_rec, &mat, text);
}
- pdf_update_xobject_contents(doc, form, fzbuf);
+ pdf_update_xobject_contents(ctx, doc, form, fzbuf);
}
fz_always(ctx)
{
@@ -1298,7 +1288,7 @@ void pdf_update_pushbutton_appearance(pdf_document *doc, pdf_obj *obj)
}
}
-void pdf_update_text_markup_appearance(pdf_document *doc, pdf_annot *annot, fz_annot_type type)
+void pdf_update_text_markup_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *annot, fz_annot_type type)
{
float color[3];
float alpha;
@@ -1335,19 +1325,18 @@ void pdf_update_text_markup_appearance(pdf_document *doc, pdf_annot *annot, fz_a
return;
}
- pdf_set_markup_appearance(doc, annot, color, alpha, line_thickness, line_height);
+ pdf_set_markup_appearance(ctx, doc, annot, color, alpha, line_thickness, line_height);
}
static void update_rect(fz_context *ctx, pdf_annot *annot)
{
- pdf_to_rect(ctx, pdf_dict_gets(annot->obj, "Rect"), &annot->rect);
+ pdf_to_rect(ctx, pdf_dict_gets(ctx, annot->obj, "Rect"), &annot->rect);
annot->pagerect = annot->rect;
fz_transform_rect(&annot->pagerect, &annot->page->ctm);
}
-void pdf_set_annot_appearance(pdf_document *doc, pdf_annot *annot, fz_rect *rect, fz_display_list *disp_list)
+void pdf_set_annot_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *annot, fz_rect *rect, fz_display_list *disp_list)
{
- fz_context *ctx = doc->ctx;
pdf_obj *obj = annot->obj;
const fz_matrix *page_ctm = &annot->page->ctm;
fz_matrix ctm;
@@ -1365,32 +1354,32 @@ void pdf_set_annot_appearance(pdf_document *doc, pdf_annot *annot, fz_rect *rect
fz_transform_rect(&trect, &ctm);
- pdf_dict_puts_drop(obj, "Rect", pdf_new_rect(doc, &trect));
+ pdf_dict_puts_drop(ctx, obj, "Rect", pdf_new_rect(ctx, doc, &trect));
/* See if there is a current normal appearance */
- ap_obj = pdf_dict_getp(obj, "AP/N");
- if (!pdf_is_stream(doc, pdf_to_num(ap_obj), pdf_to_gen(ap_obj)))
+ ap_obj = pdf_dict_getp(ctx, obj, "AP/N");
+ if (!pdf_is_stream(ctx, doc, pdf_to_num(ctx, ap_obj), pdf_to_gen(ctx, ap_obj)))
ap_obj = NULL;
if (ap_obj == NULL)
{
- ap_obj = pdf_new_xobject(doc, &trect, &mat);
- pdf_dict_putp_drop(obj, "AP/N", ap_obj);
+ ap_obj = pdf_new_xobject(ctx, doc, &trect, &mat);
+ pdf_dict_putp_drop(ctx, obj, "AP/N", ap_obj);
}
else
{
- pdf_xref_ensure_incremental_object(doc, pdf_to_num(ap_obj));
+ pdf_xref_ensure_incremental_object(ctx, doc, pdf_to_num(ctx, ap_obj));
/* Update bounding box and matrix in reused xobject obj */
- pdf_dict_puts_drop(ap_obj, "BBox", pdf_new_rect(doc, &trect));
- pdf_dict_puts_drop(ap_obj, "Matrix", pdf_new_matrix(doc, &mat));
+ pdf_dict_puts_drop(ctx, ap_obj, "BBox", pdf_new_rect(ctx, doc, &trect));
+ pdf_dict_puts_drop(ctx, ap_obj, "Matrix", pdf_new_matrix(ctx, doc, &mat));
}
- dev = pdf_new_pdf_device(doc, ap_obj, pdf_dict_gets(ap_obj, "Resources"), &mat);
- fz_run_display_list(disp_list, dev, &ctm, &fz_infinite_rect, NULL);
- fz_drop_device(dev);
+ dev = pdf_new_pdf_device(ctx, doc, ap_obj, pdf_dict_gets(ctx, ap_obj, "Resources"), &mat);
+ fz_run_display_list(ctx, disp_list, dev, &ctm, &fz_infinite_rect, NULL);
+ fz_drop_device(ctx, dev);
/* Mark the appearance as changed - required for partial update */
- xobj = pdf_load_xobject(doc, ap_obj);
+ xobj = pdf_load_xobject(ctx, doc, ap_obj);
if (xobj)
{
/* Update bounding box and matrix also in the xobject structure */
@@ -1406,23 +1395,22 @@ void pdf_set_annot_appearance(pdf_document *doc, pdf_annot *annot, fz_rect *rect
}
fz_catch(ctx)
{
- fz_drop_device(dev);
+ fz_drop_device(ctx, dev);
fz_rethrow(ctx);
}
}
static fz_point *
-quadpoints(pdf_document *doc, pdf_obj *annot, int *nout)
+quadpoints(fz_context *ctx, pdf_document *doc, pdf_obj *annot, int *nout)
{
- fz_context *ctx = doc->ctx;
- pdf_obj *quad = pdf_dict_gets(annot, "QuadPoints");
+ pdf_obj *quad = pdf_dict_gets(ctx, annot, "QuadPoints");
fz_point *qp = NULL;
int i, n;
if (!quad)
return NULL;
- n = pdf_array_len(quad);
+ n = pdf_array_len(ctx, quad);
if (n%8 != 0)
return NULL;
@@ -1434,8 +1422,8 @@ quadpoints(pdf_document *doc, pdf_obj *annot, int *nout)
for (i = 0; i < n; i += 2)
{
- qp[i/2].x = pdf_to_real(pdf_array_get(quad, i));
- qp[i/2].y = pdf_to_real(pdf_array_get(quad, i+1));
+ qp[i/2].x = pdf_to_real(ctx, pdf_array_get(ctx, quad, i));
+ qp[i/2].y = pdf_to_real(ctx, pdf_array_get(ctx, quad, i+1));
}
}
fz_catch(ctx)
@@ -1449,16 +1437,15 @@ quadpoints(pdf_document *doc, pdf_obj *annot, int *nout)
return qp;
}
-void pdf_set_markup_appearance(pdf_document *doc, pdf_annot *annot, float color[3], float alpha, float line_thickness, float line_height)
+void pdf_set_markup_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *annot, float color[3], float alpha, float line_thickness, float line_height)
{
- fz_context *ctx = doc->ctx;
const fz_matrix *page_ctm = &annot->page->ctm;
fz_path *path = NULL;
fz_stroke_state *stroke = NULL;
fz_device *dev = NULL;
fz_display_list *strike_list = NULL;
int i, n;
- fz_point *qp = quadpoints(doc, annot->obj, &n);
+ fz_point *qp = quadpoints(ctx, doc, annot->obj, &n);
if (!qp || n <= 0)
return;
@@ -1501,7 +1488,7 @@ void pdf_set_markup_appearance(pdf_document *doc, pdf_annot *annot, float color[
if (stroke)
{
// assert(path)
- fz_stroke_path(dev, path, stroke, page_ctm, fz_device_rgb(ctx), color, alpha);
+ fz_stroke_path(ctx, dev, path, stroke, page_ctm, fz_device_rgb(ctx), color, alpha);
fz_drop_stroke_state(ctx, stroke);
stroke = NULL;
fz_drop_path(ctx, path);
@@ -1519,16 +1506,16 @@ void pdf_set_markup_appearance(pdf_document *doc, pdf_annot *annot, float color[
if (stroke)
{
- fz_stroke_path(dev, path, stroke, page_ctm, fz_device_rgb(ctx), color, alpha);
+ fz_stroke_path(ctx, dev, path, stroke, page_ctm, fz_device_rgb(ctx), color, alpha);
}
fz_transform_rect(&rect, page_ctm);
- pdf_set_annot_appearance(doc, annot, &rect, strike_list);
+ pdf_set_annot_appearance(ctx, doc, annot, &rect, strike_list);
}
fz_always(ctx)
{
fz_free(ctx, qp);
- fz_drop_device(dev);
+ fz_drop_device(ctx, dev);
fz_drop_stroke_state(ctx, stroke);
fz_drop_path(ctx, path);
fz_drop_display_list(ctx, strike_list);
@@ -1539,28 +1526,27 @@ void pdf_set_markup_appearance(pdf_document *doc, pdf_annot *annot, float color[
}
}
-static fz_colorspace *pdf_to_color(pdf_document *doc, pdf_obj *col, float color[4])
+static fz_colorspace *pdf_to_color(fz_context *ctx, pdf_document *doc, pdf_obj *col, float color[4])
{
fz_colorspace *cs;
- int i, ncol = pdf_array_len(col);
+ int i, ncol = pdf_array_len(ctx, col);
switch (ncol)
{
- case 1: cs = fz_device_gray(doc->ctx); break;
- case 3: cs = fz_device_rgb(doc->ctx); break;
- case 4: cs = fz_device_cmyk(doc->ctx); break;
+ case 1: cs = fz_device_gray(ctx); break;
+ case 3: cs = fz_device_rgb(ctx); break;
+ case 4: cs = fz_device_cmyk(ctx); break;
default: return NULL;
}
for (i = 0; i < ncol; i++)
- color[i] = pdf_to_real(pdf_array_get(col, i));
+ color[i] = pdf_to_real(ctx, pdf_array_get(ctx, col, i));
return cs;
}
-void pdf_update_ink_appearance(pdf_document *doc, pdf_annot *annot)
+void pdf_update_ink_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *annot)
{
- fz_context *ctx = doc->ctx;
const fz_matrix *page_ctm = &annot->page->ctm;
fz_path *path = NULL;
fz_stroke_state *stroke = NULL;
@@ -1582,7 +1568,7 @@ void pdf_update_ink_appearance(pdf_document *doc, pdf_annot *annot)
int n, m, i, j;
int empty = 1;
- cs = pdf_to_color(doc, pdf_dict_gets(annot->obj, "C"), color);
+ cs = pdf_to_color(ctx, doc, pdf_dict_gets(ctx, annot->obj, "C"), color);
if (!cs)
{
cs = fz_device_rgb(ctx);
@@ -1591,13 +1577,13 @@ void pdf_update_ink_appearance(pdf_document *doc, pdf_annot *annot)
color[2] = 0.0f;
}
- width = pdf_to_real(pdf_dict_gets(pdf_dict_gets(annot->obj, "BS"), "W"));
+ width = pdf_to_real(ctx, pdf_dict_gets(ctx, pdf_dict_gets(ctx, annot->obj, "BS"), "W"));
if (width == 0.0f)
width = 1.0f;
- list = pdf_dict_gets(annot->obj, "InkList");
+ list = pdf_dict_gets(ctx, annot->obj, "InkList");
- n = pdf_array_len(list);
+ n = pdf_array_len(ctx, list);
strike_list = fz_new_display_list(ctx);
dev = fz_new_list_device(ctx, strike_list);
@@ -1610,14 +1596,14 @@ void pdf_update_ink_appearance(pdf_document *doc, pdf_annot *annot)
for (i = 0; i < n; i ++)
{
fz_point pt_last;
- pdf_obj *arc = pdf_array_get(list, i);
- m = pdf_array_len(arc);
+ pdf_obj *arc = pdf_array_get(ctx, list, i);
+ m = pdf_array_len(ctx, arc);
for (j = 0; j < m-1; j += 2)
{
fz_point pt;
- pt.x = pdf_to_real(pdf_array_get(arc, j));
- pt.y = pdf_to_real(pdf_array_get(arc, j+1));
+ pt.x = pdf_to_real(ctx, pdf_array_get(ctx, arc, j));
+ pt.y = pdf_to_real(ctx, pdf_array_get(ctx, arc, j+1));
if (i == 0 && j == 0)
{
@@ -1639,7 +1625,7 @@ void pdf_update_ink_appearance(pdf_document *doc, pdf_annot *annot)
fz_lineto(ctx, path, pt_last.x, pt_last.y);
}
- fz_stroke_path(dev, path, stroke, page_ctm, cs, color, 1.0f);
+ fz_stroke_path(ctx, dev, path, stroke, page_ctm, cs, color, 1.0f);
fz_expand_rect(&rect, width);
/*
@@ -1657,12 +1643,12 @@ void pdf_update_ink_appearance(pdf_document *doc, pdf_annot *annot)
fz_transform_rect(&rect, page_ctm);
- pdf_set_annot_appearance(doc, annot, &rect, strike_list);
+ pdf_set_annot_appearance(ctx, doc, annot, &rect, strike_list);
}
fz_always(ctx)
{
fz_drop_colorspace(ctx, cs);
- fz_drop_device(dev);
+ fz_drop_device(ctx, dev);
fz_drop_stroke_state(ctx, stroke);
fz_drop_path(ctx, path);
fz_drop_display_list(ctx, strike_list);
@@ -1847,12 +1833,12 @@ static void draw_speech_bubble(fz_context *ctx, fz_path *path)
fz_closepath(ctx, path);
}
-void pdf_update_text_annot_appearance(pdf_document *doc, pdf_annot *annot)
+void pdf_update_text_annot_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *annot)
{
static float white[3] = {1.0, 1.0, 1.0};
static float yellow[3] = {1.0, 1.0, 0.0};
static float black[3] = {0.0, 0.0, 0.0};
- fz_context *ctx = doc->ctx;
+
const fz_matrix *page_ctm = &annot->page->ctm;
fz_display_list *dlist = NULL;
fz_device *dev = NULL;
@@ -1871,7 +1857,7 @@ void pdf_update_text_annot_appearance(pdf_document *doc, pdf_annot *annot)
fz_rect bounds;
fz_matrix tm;
- pdf_to_rect(ctx, pdf_dict_gets(annot->obj, "Rect"), &rect);
+ pdf_to_rect(ctx, pdf_dict_gets(ctx, annot->obj, "Rect"), &rect);
dlist = fz_new_display_list(ctx);
dev = fz_new_list_device(ctx, dlist);
stroke = fz_new_stroke_state(ctx);
@@ -1885,18 +1871,18 @@ void pdf_update_text_annot_appearance(pdf_document *doc, pdf_annot *annot)
center_rect_within_rect(&bounds, &rect, &tm);
fz_concat(&tm, &tm, page_ctm);
cs = fz_device_rgb(ctx);
- fz_fill_path(dev, path, 0, &tm, cs, yellow, 1.0f);
- fz_stroke_path(dev, path, stroke, &tm, cs, black, 1.0f);
+ fz_fill_path(ctx, dev, path, 0, &tm, cs, yellow, 1.0f);
+ fz_stroke_path(ctx, dev, path, stroke, &tm, cs, black, 1.0f);
fz_drop_path(ctx, path);
path = NULL;
path = fz_new_path(ctx);
draw_speech_bubble(ctx, path);
- fz_fill_path(dev, path, 0, &tm, cs, white, 1.0f);
- fz_stroke_path(dev, path, stroke, &tm, cs, black, 1.0f);
+ fz_fill_path(ctx, dev, path, 0, &tm, cs, white, 1.0f);
+ fz_stroke_path(ctx, dev, path, stroke, &tm, cs, black, 1.0f);
fz_transform_rect(&rect, page_ctm);
- pdf_set_annot_appearance(doc, annot, &rect, dlist);
+ pdf_set_annot_appearance(ctx, doc, annot, &rect, dlist);
/* Drop the cached xobject from the annotation structure to
* force a redraw on next pdf_update_page call */
@@ -1905,7 +1891,7 @@ void pdf_update_text_annot_appearance(pdf_document *doc, pdf_annot *annot)
}
fz_always(ctx)
{
- fz_drop_device(dev);
+ fz_drop_device(ctx, dev);
fz_drop_display_list(ctx, dlist);
fz_drop_stroke_state(ctx, stroke);
fz_drop_path(ctx, path);
@@ -1917,12 +1903,11 @@ void pdf_update_text_annot_appearance(pdf_document *doc, pdf_annot *annot)
}
}
-void pdf_update_free_text_annot_appearance(pdf_document *doc, pdf_annot *annot)
+void pdf_update_free_text_annot_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *annot)
{
- fz_context *ctx = doc->ctx;
const fz_matrix *page_ctm = &annot->page->ctm;
pdf_obj *obj = annot->obj;
- pdf_obj *dr = pdf_dict_getp(annot->page->me, "Resources");
+ pdf_obj *dr = pdf_dict_getp(ctx, annot->page->me, "Resources");
fz_display_list *dlist = NULL;
fz_device *dev = NULL;
font_info font_rec;
@@ -1941,18 +1926,18 @@ void pdf_update_free_text_annot_appearance(pdf_document *doc, pdf_annot *annot)
fz_var(cs);
fz_try(ctx)
{
- char *contents = pdf_to_str_buf(pdf_dict_gets(obj, "Contents"));
- char *da = pdf_to_str_buf(pdf_dict_gets(obj, "DA"));
+ char *contents = pdf_to_str_buf(ctx, pdf_dict_gets(ctx, obj, "Contents"));
+ char *da = pdf_to_str_buf(ctx, pdf_dict_gets(ctx, obj, "DA"));
fz_rect rect = annot->rect;
fz_point pos;
- get_font_info(doc, dr, da, &font_rec);
+ get_font_info(ctx, doc, dr, da, &font_rec);
switch (font_rec.da_rec.col_size)
{
- default: cs = fz_device_gray(doc->ctx); break;
- case 3: cs = fz_device_rgb(doc->ctx); break;
- case 4: cs = fz_device_cmyk(doc->ctx); break;
+ default: cs = fz_device_gray(ctx); break;
+ case 3: cs = fz_device_rgb(ctx); break;
+ case 4: cs = fz_device_cmyk(ctx); break;
}
/* Adjust for the descender */
@@ -1963,14 +1948,14 @@ void pdf_update_free_text_annot_appearance(pdf_document *doc, pdf_annot *annot)
dlist = fz_new_display_list(ctx);
dev = fz_new_list_device(ctx, dlist);
- fz_fill_text(dev, text, page_ctm, cs, font_rec.da_rec.col, 1.0f);
+ fz_fill_text(ctx, dev, text, page_ctm, cs, font_rec.da_rec.col, 1.0f);
fz_transform_rect(&rect, page_ctm);
- pdf_set_annot_appearance(doc, annot, &rect, dlist);
+ pdf_set_annot_appearance(ctx, doc, annot, &rect, dlist);
}
fz_always(ctx)
{
- fz_drop_device(dev);
+ fz_drop_device(ctx, dev);
fz_drop_display_list(ctx, dlist);
font_info_fin(ctx, &font_rec);
fz_drop_text(ctx, text);
@@ -2042,17 +2027,16 @@ static void draw_logo(fz_context *ctx, fz_path *path)
fz_closepath(ctx, path);
};
-static void insert_signature_appearance_layers(pdf_document *doc, pdf_annot *annot)
+static void insert_signature_appearance_layers(fz_context *ctx, pdf_document *doc, pdf_annot *annot)
{
- fz_context *ctx = doc->ctx;
- pdf_obj *ap = pdf_dict_getp(annot->obj, "AP/N");
+ pdf_obj *ap = pdf_dict_getp(ctx, annot->obj, "AP/N");
pdf_obj *main_ap = NULL;
pdf_obj *frm = NULL;
pdf_obj *n0 = NULL;
fz_rect bbox;
fz_buffer *fzbuf = NULL;
- pdf_to_rect(ctx, pdf_dict_gets(ap, "BBox"), &bbox);
+ pdf_to_rect(ctx, pdf_dict_gets(ctx, ap, "BBox"), &bbox);
fz_var(main_ap);
fz_var(frm);
@@ -2060,41 +2044,41 @@ static void insert_signature_appearance_layers(pdf_document *doc, pdf_annot *ann
fz_var(fzbuf);
fz_try(ctx)
{
- main_ap = pdf_new_xobject(doc, &bbox, &fz_identity);
- frm = pdf_new_xobject(doc, &bbox, &fz_identity);
- n0 = pdf_new_xobject(doc, &bbox, &fz_identity);
+ main_ap = pdf_new_xobject(ctx, doc, &bbox, &fz_identity);
+ frm = pdf_new_xobject(ctx, doc, &bbox, &fz_identity);
+ n0 = pdf_new_xobject(ctx, doc, &bbox, &fz_identity);
- pdf_dict_putp(main_ap, "Resources/XObject/FRM", frm);
+ pdf_dict_putp(ctx, main_ap, "Resources/XObject/FRM", frm);
fzbuf = fz_new_buffer(ctx, 8);
fz_buffer_printf(ctx, fzbuf, "/FRM Do");
- pdf_update_stream(doc, pdf_to_num(main_ap), fzbuf);
- pdf_dict_puts_drop(main_ap, "Length", pdf_new_int(doc, fzbuf->len));
+ pdf_update_stream(ctx, doc, pdf_to_num(ctx, main_ap), fzbuf);
+ pdf_dict_puts_drop(ctx, main_ap, "Length", pdf_new_int(ctx, doc, fzbuf->len));
fz_drop_buffer(ctx, fzbuf);
fzbuf = NULL;
- pdf_dict_putp(frm, "Resources/XObject/n0", n0);
- pdf_dict_putp(frm, "Resources/XObject/n2", ap);
+ pdf_dict_putp(ctx, frm, "Resources/XObject/n0", n0);
+ pdf_dict_putp(ctx, frm, "Resources/XObject/n2", ap);
fzbuf = fz_new_buffer(ctx, 8);
fz_buffer_printf(ctx, fzbuf, "q 1 0 0 1 0 0 cm /n0 Do Q q 1 0 0 1 0 0 cm /n2 Do Q");
- pdf_update_stream(doc, pdf_to_num(frm), fzbuf);
- pdf_dict_puts_drop(frm, "Length", pdf_new_int(doc, fzbuf->len));
+ pdf_update_stream(ctx, doc, pdf_to_num(ctx, frm), fzbuf);
+ pdf_dict_puts_drop(ctx, frm, "Length", pdf_new_int(ctx, doc, fzbuf->len));
fz_drop_buffer(ctx, fzbuf);
fzbuf = NULL;
fzbuf = fz_new_buffer(ctx, 8);
fz_buffer_printf(ctx, fzbuf, "%% DSBlank");
- pdf_update_stream(doc, pdf_to_num(n0), fzbuf);
- pdf_dict_puts_drop(n0, "Length", pdf_new_int(doc, fzbuf->len));
+ pdf_update_stream(ctx, doc, pdf_to_num(ctx, n0), fzbuf);
+ pdf_dict_puts_drop(ctx, n0, "Length", pdf_new_int(ctx, doc, fzbuf->len));
fz_drop_buffer(ctx, fzbuf);
fzbuf = NULL;
- pdf_dict_putp(annot->obj, "AP/N", main_ap);
+ pdf_dict_putp(ctx, annot->obj, "AP/N", main_ap);
}
fz_always(ctx)
{
- pdf_drop_obj(main_ap);
- pdf_drop_obj(frm);
- pdf_drop_obj(n0);
+ pdf_drop_obj(ctx, main_ap);
+ pdf_drop_obj(ctx, frm);
+ pdf_drop_obj(ctx, n0);
}
fz_catch(ctx)
{
@@ -2106,12 +2090,11 @@ static void insert_signature_appearance_layers(pdf_document *doc, pdf_annot *ann
/* MuPDF blue */
static float logo_color[3] = {(float)0x25/(float)0xFF, (float)0x72/(float)0xFF, (float)0xAC/(float)0xFF};
-void pdf_set_signature_appearance(pdf_document *doc, pdf_annot *annot, char *name, char *dn, char *date)
+void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *annot, char *name, char *dn, char *date)
{
- fz_context *ctx = doc->ctx;
const fz_matrix *page_ctm = &annot->page->ctm;
pdf_obj *obj = annot->obj;
- pdf_obj *dr = pdf_dict_getp(pdf_trailer(doc), "Root/AcroForm/DR");
+ pdf_obj *dr = pdf_dict_getp(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/DR");
fz_display_list *dlist = NULL;
fz_device *dev = NULL;
font_info font_rec;
@@ -2121,7 +2104,7 @@ void pdf_set_signature_appearance(pdf_document *doc, pdf_annot *annot, char *nam
fz_buffer *fzbuf = NULL;
if (!dr)
- pdf_dict_putp_drop(pdf_trailer(doc), "Root/AcroForm/DR", pdf_new_dict(doc, 1));
+ pdf_dict_putp_drop(ctx, pdf_trailer(ctx, doc), "Root/AcroForm/DR", pdf_new_dict(ctx, doc, 1));
memset(&font_rec, 0, sizeof(font_rec));
@@ -2133,7 +2116,7 @@ void pdf_set_signature_appearance(pdf_document *doc, pdf_annot *annot, char *nam
fz_var(fzbuf);
fz_try(ctx)
{
- char *da = pdf_to_str_buf(pdf_dict_gets(obj, "DA"));
+ char *da = pdf_to_str_buf(ctx, pdf_dict_gets(ctx, obj, "DA"));
fz_rect rect = annot->rect;
fz_rect logo_bounds;
fz_matrix logo_tm;
@@ -2148,11 +2131,11 @@ void pdf_set_signature_appearance(pdf_document *doc, pdf_annot *annot, char *nam
center_rect_within_rect(&logo_bounds, &rect, &logo_tm);
fz_concat(&logo_tm, &logo_tm, page_ctm);
cs = fz_device_rgb(ctx);
- fz_fill_path(dev, path, 0, &logo_tm, cs, logo_color, 1.0f);
+ fz_fill_path(ctx, dev, path, 0, &logo_tm, cs, logo_color, 1.0f);
fz_drop_colorspace(ctx, cs);
cs = NULL;
- get_font_info(doc, dr, da, &font_rec);
+ get_font_info(ctx, doc, dr, da, &font_rec);
switch (font_rec.da_rec.col_size)
{
@@ -2164,7 +2147,7 @@ void pdf_set_signature_appearance(pdf_document *doc, pdf_annot *annot, char *nam
/* Display the name in the left-hand half of the form field */
rect.x1 = (rect.x0 + rect.x1)/2.0f;
text = fit_text(ctx, &font_rec, name, &rect);
- fz_fill_text(dev, text, page_ctm, cs, font_rec.da_rec.col, 1.0f);
+ fz_fill_text(ctx, dev, text, page_ctm, cs, font_rec.da_rec.col, 1.0f);
fz_drop_text(ctx, text);
text = NULL;
@@ -2178,22 +2161,22 @@ void pdf_set_signature_appearance(pdf_document *doc, pdf_annot *annot, char *nam
rect = annot->rect;
rect.x0 = (rect.x0 + rect.x1)/2.0f;
text = fit_text(ctx, &font_rec, (char *)bufstr, &rect);
- fz_fill_text(dev, text, page_ctm, cs, font_rec.da_rec.col, 1.0f);
+ fz_fill_text(ctx, dev, text, page_ctm, cs, font_rec.da_rec.col, 1.0f);
rect = annot->rect;
fz_transform_rect(&rect, page_ctm);
- pdf_set_annot_appearance(doc, annot, &rect, dlist);
+ pdf_set_annot_appearance(ctx, doc, annot, &rect, dlist);
/* Drop the cached xobject from the annotation structure to
* force a redraw on next pdf_update_page call */
pdf_drop_xobject(ctx, annot->ap);
annot->ap = NULL;
- insert_signature_appearance_layers(doc, annot);
+ insert_signature_appearance_layers(ctx, doc, annot);
}
fz_always(ctx)
{
- fz_drop_device(dev);
+ fz_drop_device(ctx, dev);
fz_drop_display_list(ctx, dlist);
font_info_fin(ctx, &font_rec);
fz_drop_path(ctx, path);
@@ -2207,29 +2190,27 @@ void pdf_set_signature_appearance(pdf_document *doc, pdf_annot *annot, char *nam
}
}
-void pdf_update_appearance(pdf_document *doc, pdf_annot *annot)
+void pdf_update_appearance(fz_context *ctx, pdf_document *doc, pdf_annot *annot)
{
pdf_obj *obj = annot->obj;
- if (!pdf_dict_gets(obj, "AP") || pdf_obj_is_dirty(obj))
+ if (!pdf_dict_gets(ctx, obj, "AP") || pdf_obj_is_dirty(ctx, obj))
{
- fz_annot_type type = pdf_annot_obj_type(obj);
+ fz_annot_type type = pdf_annot_obj_type(ctx, obj);
switch (type)
{
case FZ_ANNOT_WIDGET:
- switch (pdf_field_type(doc, obj))
+ switch (pdf_field_type(ctx, doc, obj))
{
case PDF_WIDGET_TYPE_TEXT:
{
#if 0
- pdf_obj *formatting = pdf_dict_getp(obj, "AA/F");
+ pdf_obj *formatting = pdf_dict_getp(ctx, obj, "AA/F");
if (formatting && doc->js)
{
/* Apply formatting */
pdf_js_event e;
- fz_context *ctx = doc->ctx;
-
e.target = obj;
- e.value = pdf_field_value(doc, obj);
+ e.value = pdf_field_value(ctx, doc, obj);
fz_try(ctx)
{
pdf_js_setup_event(doc->js, &e);
@@ -2242,47 +2223,47 @@ void pdf_update_appearance(pdf_document *doc, pdf_annot *annot)
{
fz_rethrow(ctx);
}
- execute_action(doc, obj, formatting);
+ execute_action(ctx, doc, obj, formatting);
/* Update appearance from JS event.value */
- pdf_update_text_appearance(doc, obj, pdf_js_get_event(doc->js)->value);
+ pdf_update_text_appearance(ctx, doc, obj, pdf_js_get_event(doc->js)->value);
}
else
#endif
{
/* Update appearance from field value */
- pdf_update_text_appearance(doc, obj, NULL);
+ pdf_update_text_appearance(ctx, doc, obj, NULL);
}
}
break;
case PDF_WIDGET_TYPE_PUSHBUTTON:
- pdf_update_pushbutton_appearance(doc, obj);
+ pdf_update_pushbutton_appearance(ctx, doc, obj);
break;
case PDF_WIDGET_TYPE_LISTBOX:
case PDF_WIDGET_TYPE_COMBOBOX:
/* Treating listbox and combobox identically for now,
* and the behaviour is most appropriate for a combobox */
- pdf_update_combobox_appearance(doc, obj);
+ pdf_update_combobox_appearance(ctx, doc, obj);
break;
}
break;
case FZ_ANNOT_TEXT:
- pdf_update_text_annot_appearance(doc, annot);
+ pdf_update_text_annot_appearance(ctx, doc, annot);
break;
case FZ_ANNOT_FREETEXT:
- pdf_update_free_text_annot_appearance(doc, annot);
+ pdf_update_free_text_annot_appearance(ctx, doc, annot);
break;
case FZ_ANNOT_STRIKEOUT:
case FZ_ANNOT_UNDERLINE:
case FZ_ANNOT_HIGHLIGHT:
- pdf_update_text_markup_appearance(doc, annot, type);
+ pdf_update_text_markup_appearance(ctx, doc, annot, type);
break;
case FZ_ANNOT_INK:
- pdf_update_ink_appearance(doc, annot);
+ pdf_update_ink_appearance(ctx, doc, annot);
break;
default:
break;
}
- pdf_clean_obj(obj);
+ pdf_clean_obj(ctx, obj);
}
}