summaryrefslogtreecommitdiff
path: root/pdf/pdf_form.c
diff options
context:
space:
mode:
authorPaul Gardiner <paulg.artifex@glidos.net>2013-03-18 10:59:43 +0000
committerRobin Watts <robin.watts@artifex.com>2013-03-18 11:32:55 +0000
commit65d12cd5b97b4b6b43767713917bb422e7e1a834 (patch)
tree4a6096af48082192f87754c75fc3c561ef69528d /pdf/pdf_form.c
parent1b4b5fdfa6b74827631d42efd2a61226125f036b (diff)
downloadmupdf-65d12cd5b97b4b6b43767713917bb422e7e1a834.tar.xz
Auto-generate appearance streams for strikeout, underline, highlight
This fixes bug #693664, and also simplifies app code. The example file attached to the bug produces strange results, but that is because the QuadPoint information is incorrect.
Diffstat (limited to 'pdf/pdf_form.c')
-rw-r--r--pdf/pdf_form.c56
1 files changed, 55 insertions, 1 deletions
diff --git a/pdf/pdf_form.c b/pdf/pdf_form.c
index 118c818f..168e56aa 100644
--- a/pdf/pdf_form.c
+++ b/pdf/pdf_form.c
@@ -3,6 +3,11 @@
#define MATRIX_COEFS (6)
+#define STRIKE_HEIGHT (0.375f)
+#define UNDERLINE_HEIGHT (0.075f)
+#define LINE_THICKNESS (0.07f)
+#define SMALL_FLOAT (0.00001)
+
enum
{
F_Invisible = 1 << (1-1),
@@ -1713,12 +1718,55 @@ static void execute_action(pdf_document *doc, pdf_obj *obj, pdf_obj *a)
}
}
+static void update_text_markup_appearance(pdf_document *doc, pdf_obj *annot, fz_annot_type type)
+{
+ fz_context *ctx = doc->ctx;
+ float color[3];
+ float alpha;
+ float line_height;
+ float line_thickness;
+
+ switch (type)
+ {
+ case FZ_ANNOT_HIGHLIGHT:
+ color[0] = 1.0;
+ color[1] = 1.0;
+ color[2] = 0.0;
+ alpha = 0.5;
+ line_thickness = 1.0;
+ line_height = 0.5;
+ break;
+ case FZ_ANNOT_UNDERLINE:
+ color[0] = 0.0;
+ color[1] = 0.0;
+ color[2] = 1.0;
+ alpha = 1.0;
+ line_thickness = LINE_THICKNESS;
+ line_height = UNDERLINE_HEIGHT;
+ break;
+ case FZ_ANNOT_STRIKEOUT:
+ color[0] = 1.0;
+ color[1] = 0.0;
+ color[2] = 0.0;
+ alpha = 1.0;
+ line_thickness = LINE_THICKNESS;
+ line_height = STRIKE_HEIGHT;
+ break;
+ default:
+ return;
+ }
+
+ pdf_set_markup_obj_appearance(doc, annot, color, alpha, line_thickness, line_height);
+}
+
void pdf_update_appearance(pdf_document *doc, pdf_obj *obj)
{
if (!pdf_dict_gets(obj, "AP") || pdf_dict_gets(obj, "Dirty"))
{
- if (!strcmp(pdf_to_name(pdf_dict_gets(obj, "Subtype")), "Widget"))
+ fz_annot_type type = pdf_annot_obj_type(obj);
+ switch (type)
{
+ case FZ_ANNOT_WIDGET:
switch(pdf_field_type(doc, obj))
{
case FZ_WIDGET_TYPE_TEXT:
@@ -1753,6 +1801,12 @@ void pdf_update_appearance(pdf_document *doc, pdf_obj *obj)
update_combobox_appearance(doc, obj);
break;
}
+ break;
+ case FZ_ANNOT_STRIKEOUT:
+ case FZ_ANNOT_UNDERLINE:
+ case FZ_ANNOT_HIGHLIGHT:
+ update_text_markup_appearance(doc, obj, type);
+ break;
}
pdf_dict_dels(obj, "Dirty");