1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
#include <X11/Intrinsic.h>
#define POINTER_NORMAL 0
#define POINTER_BUSY 1
#define POINTER_PICK 2
#define RUBBER_NEW 3
#define RUBBER_MOVE 4
#define RUBBER_X1 5
#define RUBBER_Y1 6
#define RUBBER_X2 7
#define RUBBER_Y2 8
#define POINTER_COUNT 9
extern Cursor ptrs[];
/* ----------------------------------------------------------------------- */
typedef void (*viewer_pick_cb)(int x, int y, unsigned char *pix,
XtPointer data);
struct ida_viewer {
/* x11 stuff */
Widget widget;
GC wgc;
XtIntervalId timer;
/* image data */
struct ida_image img;
struct ida_image undo;
char *file;
/* view data */
int zoom;
unsigned int scrwidth, scrheight;
XImage *ximage;
void *ximage_shm;
unsigned char *rgb_line;
unsigned char *dither_line;
unsigned char *preview_line;
/* marked rectangle */
struct ida_rect current;
int marked,state;
int last_x,last_y;
unsigned long mask;
/* pixel picker */
viewer_pick_cb pick_cb;
XtPointer pick_data;
/* workproc state */
XtWorkProcId wproc;
unsigned int line;
unsigned int steps;
/* image loader */
unsigned int load_line;
void (*load_read)(unsigned char *dst, unsigned int line,
void *data);
void (*load_done)(void *data);
void *load_data;
/* image operation */
struct ida_image op_src;
struct ida_rect op_rect;
unsigned int op_line;
unsigned int op_preview;
void (*op_work)(struct ida_image *src, struct ida_rect *rect,
unsigned char *dst, int line,
void *data);
void (*op_done)(void *data);
void *op_data;
};
/* ----------------------------------------------------------------------- */
Pixmap image_to_pixmap(struct ida_image *img);
/* ----------------------------------------------------------------------- */
struct ida_viewer* viewer_init(Widget widget);
int viewer_loader_start(struct ida_viewer *ida, struct ida_loader *loader,
FILE *fp, char *filename, unsigned int page);
int viewer_loadimage(struct ida_viewer *ida, char *filename, unsigned int page);
int viewer_setimage(struct ida_viewer *ida, struct ida_image *img, char *name);
void viewer_autozoom(struct ida_viewer *ida);
void viewer_setzoom(struct ida_viewer *ida, int zoom);
int viewer_i2s(int zoom, int val);
int viewer_undo(struct ida_viewer *ida);
int viewer_start_op(struct ida_viewer *ida, struct ida_op *op, void *parm);
int viewer_start_preview(struct ida_viewer *ida, struct ida_op *op,
void *parm);
int viewer_cancel_preview(struct ida_viewer *ida);
void viewer_pick(struct ida_viewer *ida, viewer_pick_cb cb, XtPointer data);
void viewer_unpick(struct ida_viewer *ida);
|