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