1 #ifndef PDFAPP_H
2 #define PDFAPP_H
3 
4 #include "mupdf/fitz.h"
5 #include "mupdf/pdf.h"
6 
7 #include <time.h>
8 
9 /*
10  * Utility object for handling a pdf application / view
11  * Takes care of PDF loading and displaying and navigation,
12  * uses a number of callbacks to the GUI app.
13  */
14 
15 /* 25% .. 1600% */
16 #define MINRES 18
17 #define MAXRES 1152
18 
19 typedef struct pdfapp_s pdfapp_t;
20 
21 enum { ARROW, HAND, WAIT, CARET };
22 
23 enum { DISCARD, SAVE, CANCEL };
24 
25 enum { QUERY_NO, QUERY_YES };
26 
27 extern void winwarn(pdfapp_t*, char *s);
28 extern void winerror(pdfapp_t*, char *s);
29 extern void wintitle(pdfapp_t*, char *title);
30 extern void winresize(pdfapp_t*, int w, int h);
31 extern void winrepaint(pdfapp_t*);
32 extern void winrepaintsearch(pdfapp_t*);
33 extern char *winpassword(pdfapp_t*, char *filename);
34 extern char *wintextinput(pdfapp_t*, char *inittext, int retry);
35 extern int winchoiceinput(pdfapp_t*, int nopts, const char *opts[], int *nvals, const char *vals[]);
36 extern void winopenuri(pdfapp_t*, char *s);
37 extern void wincursor(pdfapp_t*, int curs);
38 extern void windocopy(pdfapp_t*);
39 extern void windrawstring(pdfapp_t*, int x, int y, char *s);
40 extern void winclose(pdfapp_t*);
41 extern void winhelp(pdfapp_t*);
42 extern void winfullscreen(pdfapp_t*, int state);
43 extern int winsavequery(pdfapp_t*);
44 extern int winquery(pdfapp_t*, const char*);
45 extern int wingetcertpath(pdfapp_t *, char *buf, int len);
46 extern int wingetsavepath(pdfapp_t*, char *buf, int len);
47 extern void winalert(pdfapp_t *, pdf_alert_event *alert);
48 extern void winprint(pdfapp_t *);
49 extern void winadvancetimer(pdfapp_t *, float duration);
50 extern void winreplacefile(pdfapp_t *, char *source, char *target);
51 extern void wincopyfile(pdfapp_t *, char *source, char *target);
52 extern void winreloadpage(pdfapp_t *);
53 
54 struct pdfapp_s
55 {
56 	/* current document params */
57 	fz_document *doc;
58 	char *docpath;
59 	char *doctitle;
60 	fz_outline *outline;
61 	int outline_deferred;
62 
63 	float layout_w;
64 	float layout_h;
65 	float layout_em;
66 	char *layout_css;
67 	int layout_use_doc_css;
68 
69 	int pagecount;
70 
71 	/* current view params */
72 	float default_resolution;
73 	float resolution;
74 	int rotate;
75 	fz_pixmap *image;
76 	int imgw, imgh;
77 	int grayscale;
78 	fz_colorspace *colorspace;
79 	int invert;
80 	int tint, tint_white;
81 	int useicc;
82 	int useseparations;
83 	int aalevel;
84 
85 	/* presentation mode */
86 	int presentation_mode;
87 	int transitions_enabled;
88 	fz_pixmap *old_image;
89 	fz_pixmap *new_image;
90 	clock_t start_time;
91 	int in_transit;
92 	float duration;
93 	fz_transition transition;
94 
95 	/* current page params */
96 	int pageno;
97 	fz_page *page;
98 	fz_rect page_bbox;
99 	fz_display_list *page_list;
100 	fz_display_list *annotations_list;
101 	fz_stext_page *page_text;
102 	fz_link *page_links;
103 	int errored;
104 	int incomplete;
105 
106 	/* separations */
107 	fz_separations *seps;
108 
109 	/* snapback history */
110 	int hist[256];
111 	int histlen;
112 	int marks[10];
113 
114 	/* window system sizes */
115 	int winw, winh;
116 	int scrw, scrh;
117 	int shrinkwrap;
118 	int fullscreen;
119 
120 	/* event handling state */
121 	char number[256];
122 	int numberlen;
123 
124 	int ispanning;
125 	int panx, pany;
126 
127 	int iscopying;
128 	int selx, sely;
129 	/* TODO - While sely keeps track of the relative change in
130 	 * cursor position between two ticks/events, beyondy shall keep
131 	 * track of the relative change in cursor position from the
132 	 * point where the user hits a scrolling limit. This is ugly.
133 	 * Used in pdfapp.c:pdfapp_onmouse.
134 	 */
135 	int beyondy;
136 	fz_rect selr;
137 
138 	int nowaitcursor;
139 
140 	/* search state */
141 	int issearching;
142 	int searchdir;
143 	char search[512];
144 	int searchpage;
145 	fz_quad hit_bbox[512];
146 	int hit_count;
147 
148 	/* client context storage */
149 	void *userdata;
150 
151 	fz_context *ctx;
152 #ifdef HAVE_CURL
153 	fz_stream *stream;
154 #endif
155 };
156 
157 void pdfapp_init(fz_context *ctx, pdfapp_t *app);
158 void pdfapp_setresolution(pdfapp_t *app, int res);
159 void pdfapp_open(pdfapp_t *app, char *filename, int reload);
160 void pdfapp_open_progressive(pdfapp_t *app, char *filename, int reload, int kbps);
161 void pdfapp_close(pdfapp_t *app);
162 int pdfapp_preclose(pdfapp_t *app);
163 void pdfapp_reloadfile(pdfapp_t *app);
164 
165 char *pdfapp_version(pdfapp_t *app);
166 char *pdfapp_usage(pdfapp_t *app);
167 
168 void pdfapp_onkey(pdfapp_t *app, int c, int modifiers);
169 void pdfapp_onmouse(pdfapp_t *app, int x, int y, int btn, int modifiers, int state);
170 void pdfapp_oncopy(pdfapp_t *app, unsigned short *ucsbuf, int ucslen);
171 void pdfapp_onresize(pdfapp_t *app, int w, int h);
172 void pdfapp_gotopage(pdfapp_t *app, int number);
173 void pdfapp_reloadpage(pdfapp_t *app);
174 void pdfapp_autozoom_horizontal(pdfapp_t *app);
175 void pdfapp_autozoom_vertical(pdfapp_t *app);
176 void pdfapp_autozoom(pdfapp_t *app);
177 
178 void pdfapp_invert(pdfapp_t *app, fz_rect rect);
179 void pdfapp_inverthit(pdfapp_t *app);
180 
181 void pdfapp_postblit(pdfapp_t *app);
182 
183 void pdfapp_warn(pdfapp_t *app, const char *fmt, ...);
184 void pdfapp_error(pdfapp_t *app, char *msg);
185 
186 #endif
187