eBookReaderSwitch/platform/x11/pdfapp.h

185 lines
4.6 KiB
C

#ifndef PDFAPP_H
#define PDFAPP_H
#include "mupdf/fitz.h"
#include "mupdf/pdf.h"
#include <time.h>
/*
* Utility object for handling a pdf application / view
* Takes care of PDF loading and displaying and navigation,
* uses a number of callbacks to the GUI app.
*/
/* 25% .. 1600% */
#define MINRES 18
#define MAXRES 1152
typedef struct pdfapp_s pdfapp_t;
enum { ARROW, HAND, WAIT, CARET };
enum { DISCARD, SAVE, CANCEL };
enum { QUERY_NO, QUERY_YES };
extern void winwarn(pdfapp_t*, char *s);
extern void winerror(pdfapp_t*, char *s);
extern void wintitle(pdfapp_t*, char *title);
extern void winresize(pdfapp_t*, int w, int h);
extern void winrepaint(pdfapp_t*);
extern void winrepaintsearch(pdfapp_t*);
extern char *winpassword(pdfapp_t*, char *filename);
extern char *wintextinput(pdfapp_t*, char *inittext, int retry);
extern int winchoiceinput(pdfapp_t*, int nopts, const char *opts[], int *nvals, const char *vals[]);
extern void winopenuri(pdfapp_t*, char *s);
extern void wincursor(pdfapp_t*, int curs);
extern void windocopy(pdfapp_t*);
extern void windrawrect(pdfapp_t*, int x0, int y0, int x1, int y1);
extern void windrawstring(pdfapp_t*, int x, int y, char *s);
extern void winclose(pdfapp_t*);
extern void winhelp(pdfapp_t*);
extern void winfullscreen(pdfapp_t*, int state);
extern int winsavequery(pdfapp_t*);
extern int winquery(pdfapp_t*, const char*);
extern int wingetcertpath(char *buf, int len);
extern int wingetsavepath(pdfapp_t*, char *buf, int len);
extern void winalert(pdfapp_t *, pdf_alert_event *alert);
extern void winprint(pdfapp_t *);
extern void winadvancetimer(pdfapp_t *, float duration);
extern void winreplacefile(char *source, char *target);
extern void wincopyfile(char *source, char *target);
extern void winreloadpage(pdfapp_t *);
struct pdfapp_s
{
/* current document params */
fz_document *doc;
char *docpath;
char *doctitle;
fz_outline *outline;
int outline_deferred;
float layout_w;
float layout_h;
float layout_em;
char *layout_css;
int layout_use_doc_css;
int pagecount;
/* current view params */
float default_resolution;
float resolution;
int rotate;
fz_pixmap *image;
int imgw, imgh;
int grayscale;
fz_colorspace *colorspace;
int invert;
int tint, tint_white;
int useicc;
int useseparations;
int aalevel;
/* presentation mode */
int presentation_mode;
int transitions_enabled;
fz_pixmap *old_image;
fz_pixmap *new_image;
clock_t start_time;
int in_transit;
float duration;
fz_transition transition;
/* current page params */
int pageno;
fz_page *page;
fz_rect page_bbox;
fz_display_list *page_list;
fz_display_list *annotations_list;
fz_stext_page *page_text;
fz_link *page_links;
int errored;
int incomplete;
/* separations */
fz_separations *seps;
/* snapback history */
int hist[256];
int histlen;
int marks[10];
/* window system sizes */
int winw, winh;
int scrw, scrh;
int shrinkwrap;
int fullscreen;
/* event handling state */
char number[256];
int numberlen;
int ispanning;
int panx, pany;
int iscopying;
int selx, sely;
/* TODO - While sely keeps track of the relative change in
* cursor position between two ticks/events, beyondy shall keep
* track of the relative change in cursor position from the
* point where the user hits a scrolling limit. This is ugly.
* Used in pdfapp.c:pdfapp_onmouse.
*/
int beyondy;
fz_rect selr;
int nowaitcursor;
/* search state */
int issearching;
int searchdir;
char search[512];
int searchpage;
fz_quad hit_bbox[512];
int hit_count;
/* client context storage */
void *userdata;
fz_context *ctx;
#ifdef HAVE_CURL
fz_stream *stream;
#endif
};
void pdfapp_init(fz_context *ctx, pdfapp_t *app);
void pdfapp_setresolution(pdfapp_t *app, int res);
void pdfapp_open(pdfapp_t *app, char *filename, int reload);
void pdfapp_open_progressive(pdfapp_t *app, char *filename, int reload, int kbps);
void pdfapp_close(pdfapp_t *app);
int pdfapp_preclose(pdfapp_t *app);
void pdfapp_reloadfile(pdfapp_t *app);
char *pdfapp_version(pdfapp_t *app);
char *pdfapp_usage(pdfapp_t *app);
void pdfapp_onkey(pdfapp_t *app, int c, int modifiers);
void pdfapp_onmouse(pdfapp_t *app, int x, int y, int btn, int modifiers, int state);
void pdfapp_oncopy(pdfapp_t *app, unsigned short *ucsbuf, int ucslen);
void pdfapp_onresize(pdfapp_t *app, int w, int h);
void pdfapp_gotopage(pdfapp_t *app, int number);
void pdfapp_reloadpage(pdfapp_t *app);
void pdfapp_autozoom_horizontal(pdfapp_t *app);
void pdfapp_autozoom_vertical(pdfapp_t *app);
void pdfapp_autozoom(pdfapp_t *app);
void pdfapp_invert(pdfapp_t *app, fz_rect rect);
void pdfapp_inverthit(pdfapp_t *app);
void pdfapp_postblit(pdfapp_t *app);
#endif