pdfapp.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. // Copyright (C) 2004-2025 Artifex Software, Inc.
  2. //
  3. // This file is part of MuPDF.
  4. //
  5. // MuPDF is free software: you can redistribute it and/or modify it under the
  6. // terms of the GNU Affero General Public License as published by the Free
  7. // Software Foundation, either version 3 of the License, or (at your option)
  8. // any later version.
  9. //
  10. // MuPDF is distributed in the hope that it will be useful, but WITHOUT ANY
  11. // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  12. // FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
  13. // details.
  14. //
  15. // You should have received a copy of the GNU Affero General Public License
  16. // along with MuPDF. If not, see <https://www.gnu.org/licenses/agpl-3.0.en.html>
  17. //
  18. // Alternative licensing terms are available from the licensor.
  19. // For commercial licensing, see <https://www.artifex.com/> or contact
  20. // Artifex Software, Inc., 39 Mesa Street, Suite 108A, San Francisco,
  21. // CA 94129, USA, for further information.
  22. #ifndef PDFAPP_H
  23. #define PDFAPP_H
  24. #include "mupdf/fitz.h"
  25. #include "mupdf/pdf.h"
  26. #include <time.h>
  27. /*
  28. * Utility object for handling a pdf application / view
  29. * Takes care of PDF loading and displaying and navigation,
  30. * uses a number of callbacks to the GUI app.
  31. */
  32. /* 25% .. 1600% */
  33. #define MINRES 18
  34. #define MAXRES 1152
  35. typedef struct pdfapp_s pdfapp_t;
  36. enum { ARROW, HAND, WAIT, CARET };
  37. enum { DISCARD, SAVE, CANCEL };
  38. enum { QUERY_NO, QUERY_YES };
  39. extern void winwarn(pdfapp_t*, char *s);
  40. extern void winerror(pdfapp_t*, char *s);
  41. extern void wintitle(pdfapp_t*, char *title);
  42. extern int winisresolutionacceptable(pdfapp_t*, fz_matrix ctm);
  43. extern void winresize(pdfapp_t*, int w, int h);
  44. extern void winrepaint(pdfapp_t*);
  45. extern void winrepaintsearch(pdfapp_t*);
  46. extern char *winpassword(pdfapp_t*, char *filename);
  47. extern char *wintextinput(pdfapp_t*, char *inittext, int retry);
  48. extern int winchoiceinput(pdfapp_t*, int nopts, const char *opts[], int *nvals, const char *vals[]);
  49. extern void winopenuri(pdfapp_t*, char *s);
  50. extern void wincursor(pdfapp_t*, int curs);
  51. extern void windocopy(pdfapp_t*);
  52. extern void windrawstring(pdfapp_t*, int x, int y, char *s);
  53. extern void winclose(pdfapp_t*);
  54. extern void winhelp(pdfapp_t*);
  55. extern void winfullscreen(pdfapp_t*, int state);
  56. extern int winsavequery(pdfapp_t*);
  57. extern int winquery(pdfapp_t*, const char*);
  58. extern int wingetcertpath(pdfapp_t *, char *buf, int len);
  59. extern int wingetsavepath(pdfapp_t*, char *buf, int len);
  60. extern void winalert(pdfapp_t *, pdf_alert_event *alert);
  61. extern void winprint(pdfapp_t *);
  62. extern void winadvancetimer(pdfapp_t *, float duration);
  63. extern void winreplacefile(pdfapp_t *, char *source, char *target);
  64. extern void wincopyfile(pdfapp_t *, char *source, char *target);
  65. extern void winreloadpage(pdfapp_t *);
  66. struct pdfapp_s
  67. {
  68. /* current document params */
  69. fz_document *doc;
  70. char *docpath;
  71. char *doctitle;
  72. fz_outline *outline;
  73. int outline_deferred;
  74. float layout_w;
  75. float layout_h;
  76. float layout_em;
  77. char *layout_css;
  78. int layout_use_doc_css;
  79. int pagecount;
  80. /* current view params */
  81. float default_resolution;
  82. float resolution;
  83. int rotate;
  84. fz_pixmap *image;
  85. int imgw, imgh;
  86. int grayscale;
  87. fz_colorspace *colorspace;
  88. int invert;
  89. int tint, tint_white;
  90. int useicc;
  91. int useseparations;
  92. int aalevel;
  93. /* presentation mode */
  94. int presentation_mode;
  95. int presentation_time_in_seconds;
  96. int transitions_enabled;
  97. fz_pixmap *old_image;
  98. fz_pixmap *new_image;
  99. clock_t start_time;
  100. int in_transit;
  101. float duration;
  102. fz_transition transition;
  103. /* current page params */
  104. int pageno;
  105. fz_page *page;
  106. fz_rect page_bbox;
  107. fz_display_list *page_list;
  108. fz_display_list *annotations_list;
  109. fz_stext_page *page_text;
  110. fz_link *page_links;
  111. int errored;
  112. int incomplete;
  113. /* separations */
  114. fz_separations *seps;
  115. /* snapback history */
  116. int hist[256];
  117. int histlen;
  118. int marks[10];
  119. /* window system sizes */
  120. int winw, winh;
  121. int scrw, scrh;
  122. int shrinkwrap;
  123. int fullscreen;
  124. /* event handling state */
  125. char number[256];
  126. int numberlen;
  127. int ispanning;
  128. int panx, pany;
  129. int iscopying;
  130. int selx, sely;
  131. /* TODO - While sely keeps track of the relative change in
  132. * cursor position between two ticks/events, beyondy shall keep
  133. * track of the relative change in cursor position from the
  134. * point where the user hits a scrolling limit. This is ugly.
  135. * Used in pdfapp.c:pdfapp_onmouse.
  136. */
  137. int beyondy;
  138. fz_rect selr;
  139. int nowaitcursor;
  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. /* client context storage */
  148. void *userdata;
  149. fz_context *ctx;
  150. #ifdef HAVE_CURL
  151. fz_stream *stream;
  152. #endif
  153. };
  154. void pdfapp_init(fz_context *ctx, pdfapp_t *app);
  155. void pdfapp_setresolution(pdfapp_t *app, int res);
  156. void pdfapp_open(pdfapp_t *app, char *filename, int reload);
  157. void pdfapp_open_progressive(pdfapp_t *app, char *filename, int reload, int kbps);
  158. void pdfapp_close(pdfapp_t *app);
  159. int pdfapp_preclose(pdfapp_t *app);
  160. void pdfapp_reloadfile(pdfapp_t *app);
  161. char *pdfapp_version(pdfapp_t *app);
  162. char *pdfapp_usage(pdfapp_t *app);
  163. void pdfapp_onkey(pdfapp_t *app, int c, int modifiers);
  164. void pdfapp_onmouse(pdfapp_t *app, int x, int y, int btn, int modifiers, int state);
  165. void pdfapp_oncopy(pdfapp_t *app, unsigned short *ucsbuf, int ucslen);
  166. void pdfapp_onresize(pdfapp_t *app, int w, int h);
  167. void pdfapp_gotopage(pdfapp_t *app, int number);
  168. void pdfapp_reloadpage(pdfapp_t *app);
  169. void pdfapp_autozoom_horizontal(pdfapp_t *app);
  170. void pdfapp_autozoom_vertical(pdfapp_t *app);
  171. void pdfapp_autozoom(pdfapp_t *app);
  172. void pdfapp_invert(pdfapp_t *app, fz_rect rect);
  173. void pdfapp_inverthit(pdfapp_t *app);
  174. void pdfapp_postblit(pdfapp_t *app);
  175. void pdfapp_warn(pdfapp_t *app, const char *fmt, ...);
  176. void pdfapp_error(pdfapp_t *app, char *msg);
  177. void pdfapp_load_profile(pdfapp_t *app, char *profile_name);
  178. #endif