diff options
Diffstat (limited to 'src/include/ui_helper.h')
-rw-r--r-- | src/include/ui_helper.h | 550 |
1 files changed, 550 insertions, 0 deletions
diff --git a/src/include/ui_helper.h b/src/include/ui_helper.h new file mode 100644 index 0000000..73ead16 --- /dev/null +++ b/src/include/ui_helper.h @@ -0,0 +1,550 @@ +#ifndef UI_HELPER_H +#define UI_HELPER_H +#include "timers.h" +#include "xio.h" + +#ifdef SFFE_USING +#include "sffe.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif +#define MAXFILTERS 20 +#define AVRGSIZE 50 +#define NMESSAGES 5 +#define BGCOLOR(uih) uih->palette->index[0] +#define FGCOLOR(uih) uih->palette->index[1] +#define SELCOLOR(uih) uih->palette->index[2] +#define DARKGRAYCOLOR(uih) uih->palette->index[3] +#define LIGHTGRAYCOLOR(uih) uih->palette->index[4] +#define LIGHTGRAYCOLOR2(uih) uih->palette->index[5] +#define NONTRANSPARENTW 1 +#define DRAWBORDER 2 +#define BORDER_PRESSED 4 +#define BORDER_TRANSPARENT 8 +#define BORDER_LIGHT 16 + + struct uih_message { + char *message[NMESSAGES]; + tl_timer *messagetimer[NMESSAGES]; + int messagetype[NMESSAGES]; + struct uih_window *w[NMESSAGES]; + int pid[NMESSAGES]; + int messagestart; + }; + struct uih_line { + int key; + int morph; + int color; + int posmode; + number_t x1, y1, x2, y2; + int mposmode; + number_t mx1, my1, mx2, my2; + struct uih_line *next, *prev; + struct uih_window *w; + }; + struct uih_lines { + struct uih_line *first; + int morphing; + int currkey; + }; + + struct uih_savedcontext { + xio_file file; + int mode; + number_t speedup, maxstep; + number_t xcenter, ycenter; + tl_timer *timer; + tl_timer *synctimer; + struct fractal_context *fcontext; + int clearscreen; + int fastmode, juliamode, fastrotate, autorotate; + number_t rotationspeed; + int firsttime; + int filter[MAXFILTERS]; + int pressed; + int rotatepressed; + int cycling; + int shifted; + int manualpaletteshift; + int direction; + int cyclingspeed; + int zoomactive; + int xtextpos, ytextpos; + int writefailed; + int nonfractalscreen; + int color; + }; +#define MAXLEVEL 10 /*Maximal include level */ + struct uih_playcontext { + xio_file file; + xio_file prevfiles[MAXLEVEL + 1]; + int level; + xio_path directory; + tl_timer *timer; + int waittime; + int playframe; + int timerin; + int frametime, starttime; + int morph; + int morphtimes[2]; + int morphjulia; + int morphjuliatimes[2]; + int morphangle; + int morphangletimes[2]; + vinfo destination; + vinfo source; + number_t srcangle, destangle; + number_t sr, si, dr, di; + int readfailed; + int line; + struct uih_lines lines; + int morphlinetimes[2]; + }; +#define SQR(val) (((double)(val))*(val)) +#define MORPHVALUE(time,len,starttime,endtime) \ + (time)<0?0.0 \ + :(time)>=(len)?1.0 \ + :(time)<(starttime) && (starttime)?(SQR((time)/(double)(starttime))/2*(starttime)/((len)-(starttime)/2-(endtime)/2))\ + :((len)-(time)<(endtime)) && (endtime)?1-(SQR(((len)-(time))/(double)(endtime))/2*(endtime)/((len)-(starttime)/2-(endtime)/2)) \ + :((time)-(starttime)/2)/((double)(len)-(starttime)/2-(endtime)/2) +#ifdef _NEVER_ +#define MORPHVALUE(time,len,starttime,endtime) \ + (((time))/((double)(len))) +#endif +#define DOMORPH(time,len,starttime,endtime,startval,endval) \ + ((startval)+((endval)-(startval))*MORPHVALUE(time,len, starttime,endtime)) + +#define UNDOLEVEL 256 + struct uih_undocontext { + int last; + char *undos[256]; + }; + struct uih_context { + void (*updatemenus) (struct uih_context *, CONST char *); + /*stuff that should be visible from outside */ + number_t speedup, maxstep; /*zooming speed */ + + /* Informations provided to the user interface: */ + CONST char *menuroot; + int display; /*1 when ui wants to display something */ + int save; /*1 if save animation is enabled */ + int play; /*1 if animation replay is active */ + int cycling; /*1 if cycling is enabled */ + int incalculation; /*1 if calulcation is currently in process */ + int flags; + int interrupt; /*set to interrupt current calculation */ + + /*server's callbacks */ + int (*passfunc) (struct uih_context *, int, CONST char *, float); + void (*longwait) (struct uih_context *); + + struct uih_undocontext undo; + /*Filter system state */ + struct image *image; + struct palette *palette; + struct fractal_context *fcontext; /*fractal informations */ + struct queue *queue; + struct filter *uifilter; /*user interface layer */ + struct filter *rotatef; /* Special filters handler by ui_helper: */ + struct filter *zengine; + struct filter *fixedcolor; + /*Julia/filter mechanizm */ + struct filter *subwindow, *julia, *smalliter; + struct filter *filter[MAXFILTERS]; + + /*General status variables */ + double mul; /*speed of last iteration */ + int rotatemode; /*ROTATE_NONE, ROTATE_CONTINUOUS or ROTATE_NONE */ + number_t rotationspeed; /*speed of continuous rotation */ + int fastmode; /*when draw in fast mode */ + int juliamode; + int fastrotate; + int uncomplette; /*1 if image is not complettly caluclated or in animation */ + int dirty; /*1 if image is inexact */ + int inanimation; /*1 if uih_update wants to be called soon */ + int fastanimation; /*1 if animation needs to be fast */ + int palettetype, paletteseed; /*0 for default palette,1,2 for random */ + int clearscreen; /*1 when ui want to clear screen */ + int indofractal; /*1 when caluclation is in the process */ + int xtextpos, ytextpos; /*possitioning of text */ + int color; /*Color of text */ + int recalculatemode; /*informations for user interface */ + int stoppedtimers; /*1 when timers are stopped */ + int nletters; /*Number of letters displayed at screen */ + int letterspersec; /*Number of letters per second user should read */ + char *text[3]; /*Currently displayed text informations: */ + struct uih_window *textwindow[3], *cscreenwindow; + int textpos[3], textcolor[3]; + CONST char *errstring; /*String of last unprocessed error */ + + CONST struct xfont *font; /*Font used by UI */ + struct uih_window *wtop; + int wflipped; + int wdisplayed; + + /*Save variables */ + int todisplayletters; + struct uih_savedcontext *savec; + int viewchanged; /*When to generate setview commands */ + int palettechanged; /*When to generate setpalette commands */ + int displaytext; /*When text was displayed in this frame */ + int nonfractalscreen; + /*waiting variables */ + void (*complettehandler) (void *); /*Handler to be activated when calculation is complette */ + void *handlerdata; + /*replay variables */ + struct uih_playcontext *playc; + int playpos; + CONST char *playstring; + + /*For constant framerate */ + struct timeemulator *emulator; + int emulatedframetime; + int aliasnum; + int fixedstep; + + /*zoom/unzoom */ + number_t speed, step; + number_t xcenter, ycenter; + int xcenterm, ycenterm; + int zoomactive; + + /*drag&drop move */ + int pressed; + number_t oldx, oldy; + int moved; + + /*drag&drop rotate */ + int rotatepressed; + number_t oldangle; + + int ddatalost; + int tbreak; + + int autopilot; /*for uih side of autopilot */ + int autopilotx, autopiloty, autopilotbuttons; + + /*calculation time variables */ + int interruptiblemode; + int starttime, endtime; + int maxtime; + + /*dynamical timeout measuring */ + int times[2][AVRGSIZE]; /*for statistics */ + int timespos, count[2]; + double lastspeed, lasttime; + + /*number_t xsize, ysize; */ + tl_timer *maintimer, *cyclingtimer, *autopilottimer, + *calculatetimer, *doittimer; + tl_group *autopilotgroup; + + /*color cycling values */ + int direction; + int cyclingdirection; + int stopped; + int cyclingspeed; + + /*autopilot internal values */ + int x1, y1, c1; + number_t minsize; + number_t maxsize; + int autopilotversion; + int autime; + int minlong; + int interlevel; + + /*saved palettes */ + struct palette *palette2; + + int paletteshift; + int manualpaletteshift; + + struct uih_message messg; + + /*Used by uih_update to figure out when save undo */ + int lastbuttons; + + int encoding; + + /* performers really don't want text echoed to the screen */ + int inhibittextoutput; + + /* user data */ + void *data; + +#ifdef SFFE_USING + /*User formulas (used in sffe parser) */ + /*sffe *cparser; user define c evaluation formula, not used now, not used yet */ + sffe *parser; /* fractal formula */ + sffe *pinit; +#endif + + }; + typedef void (*uih_getposfunc) (struct uih_context * c, int *x, int *y, + int *width, int *height, void *data); + typedef void (*uih_drawfunc) (struct uih_context * c, void *data); + struct uih_window { + int x, y, width, height; + uih_getposfunc getpos; + uih_drawfunc draw; + struct uih_window *next; + struct uih_window *previous; + int savedline, savedpos; + char *saveddata; + void *data; + int flags; + }; + typedef struct uih_context uih_context; + +#define UIH_SAVEALL 2 +#define UIH_SAVEANIMATION 1 +#define UIH_SAVEPOS 0 + +#define UIH_PALETTEDRAW -2 +#define UIH_FILTERANIMATION -1 +#define UIH_INTERRUPTIBLE 0 +#define UIH_ANIMATION 1 +#define UIH_NEW_IMAGE 2 +#define UIH_UNINTERRUPTIBLE 3 +#define FRAMETIME (1000000/FRAMERATE) + +#define UIH_TEXTTOP 0 +#define UIH_TEXTMIDDLE 1 +#define UIH_TEXTBOTTOM 2 + +#define UIH_TEXTLEFT 0 +#define UIH_TEXTCENTER 1 +#define UIH_TEXTRIGHT 2 + +#define RANDOM_PALETTE_SIZE 1 +#define FULLSCREEN 2 +#define UPDATE_AFTER_PALETTE 4 +#define UPDATE_AFTER_RESIZE 8 +#define PALETTE_ROTATION 16 +#define ASYNC_PALETTE 32 +#define ROTATE_INSIDE_CALCULATION 64 +#define PALETTE_REDISPLAYS 128 +#define SCREENSIZE 256 +#define PIXELSIZE 512 +#define RESOLUTION 1024 + +#define BUTTON1 256 +#define BUTTON2 512 +#define BUTTON3 1024 + +#define ROTATE_NONE 0 +#define ROTATE_MOUSE 1 +#define ROTATE_CONTINUOUS 2 + +#define uih_needrecalculate(context) ((context)->recalculatemode) +#define uih_needdisplay(context) ((context)->display) +#define GETMAX(a,b) ((a)>(b)?(a):(b)) +#define uih_newimage(c) ((c)->display=1,((c)->recalculatemode=GETMAX((c)->recalculatemode,UIH_NEW_IMAGE))) +#define uih_animate_image(c) ((c)->display=1,(c)->recalculatemode=GETMAX((c)->recalculatemode,UIH_ANIMATION)) + +#define uih_updatemenus(uih,c) if(uih->updatemenus!=NULL) uih->updatemenus(uih,c); + + extern CONST struct filteraction *CONST uih_filters[MAXFILTERS]; + extern CONST int uih_nfilters; + + struct uih_context *uih_mkcontext(int flags, struct image *image, + int (*passfunc) (struct uih_context + *, int, + CONST char *, + float), + void (*longwait) (struct uih_context + *), + void (*updatemenus) (struct + uih_context * c, + CONST char *)); + int uih_updateimage(uih_context * c, struct image *img); + void uih_freecontext(uih_context * c); + + + void uih_callcomplette(uih_context * c); +/*palette functions */ + void uih_mkdefaultpalette(uih_context * c); + void uih_mkpalette(uih_context * c); + void uih_savepalette(uih_context * c); + void uih_restorepalette(uih_context * c); + void uih_loadpalette(uih_context * c, struct palette *palette); + +/*autopilot handling */ + void uih_autopilot_on(uih_context * c); + void uih_autopilot_off(uih_context * c); + +/*misc functions */ + int uih_update(uih_context * c, int mousex, int mousey, + int mousebuttons); + CONST char *uih_save(struct uih_context *c, xio_constpath filename); + void uih_tbreak(uih_context * c); + double uih_displayed(uih_context * c); + void uih_do_fractal(uih_context * c); + void uih_prepare_image(uih_context * c); + void uih_interrupt(uih_context * c); + void uih_stopzooming(uih_context * c); + void uih_setspeedup(uih_context * c, number_t speed); + void uih_setmaxstep(uih_context * c, number_t speed); + void uih_setcomplettehandler(uih_context * c, void (h) (void *), + void *d); + void uih_recalculate(struct uih_context *c); + void uih_initstate(struct uih_context *uih); + void uih_screentofractalcoord(uih_context * c, int mousex, int mousey, + number_t * re, number_t * im); + + +/*cycling functions */ + void uih_cycling_off(struct uih_context *c); + void uih_cycling_stop(struct uih_context *c); + void uih_cycling_continue(struct uih_context *c); + void uih_setcycling(struct uih_context *c, int speed); + int uih_cycling_on(struct uih_context *c); + int uih_cycling(struct uih_context *c, int mode); + +/*fractal context manipulation routines */ + void uih_setformula(uih_context * c, int formula); + void uih_setperbutation(uih_context * c, number_t re, number_t im); + void uih_perbutation(uih_context * c, int mousex, int mousey); + void uih_setmaxiter(uih_context * c, int maxiter); + void uih_setbailout(uih_context * c, number_t bailout); + void uih_setincoloringmode(uih_context * c, int mode); + void uih_setoutcoloringmode(uih_context * c, int mode); + void uih_setintcolor(uih_context * c, int mode); + void uih_setouttcolor(uih_context * c, int mode); + void uih_setplane(uih_context * c, int mode); + void uih_setmandelbrot(uih_context * c, int mode, int mousex, + int mousey); + void uih_setfastmode(uih_context * c, int mode); + void uih_setguessing(uih_context * c, int range); + void uih_setperiodicity(uih_context * c, int periodicity); + void uih_display(uih_context * c); + void uih_disablejulia(uih_context * c); + int uih_enablejulia(uih_context * c); + int uih_setjuliamode(uih_context * c, int mode); + void uih_setjuliaseed(uih_context * c, number_t zre, number_t zim); + +/*filter manipulation */ + int uih_enablefilter(uih_context * c, int n); + void uih_disablefilter(uih_context * c, int n); + +/*Animation save routines */ + int uih_save_enable(struct uih_context *uih, xio_file f, int mode); + void uih_save_disable(struct uih_context *uih); + void uih_saveframe(struct uih_context *uih); + void uih_save_possition(struct uih_context *uih, xio_file f, int mode); + + void uih_load(struct uih_context *uih, xio_file f, xio_constpath name); + void uih_loadstr(struct uih_context *uih, CONST char *data); + void uih_playstr(struct uih_context *uih, CONST char *data); + void uih_playupdate(struct uih_context *uih); + void uih_replaydisable(struct uih_context *uih); + void uih_skipframe(struct uih_context *uih); + int uih_replayenable(struct uih_context *uih, xio_file f, + xio_constpath filename, int animroot); + void uih_command(struct uih_context *uih, CONST char *command); + void uih_playtutorial(struct uih_context *c, CONST char *name); + +/* Easy to use functions for handling save/load*/ + void uih_loadfile(struct uih_context *uih, xio_constpath d); + void uih_playfile(struct uih_context *c, xio_constpath d); + void uih_loadexample(struct uih_context *c); + void uih_savepngfile(struct uih_context *c, xio_constpath d); + void uih_saveposfile(struct uih_context *c, xio_constpath d); + char *uih_savepostostr(struct uih_context *c); + void uih_savecfg(struct uih_context *c); + void uih_saveanimfile(struct uih_context *c, xio_constpath d); + void uih_update_lines(uih_context * c); + + +/*timer functions */ + void uih_stoptimers(uih_context * c); + void uih_resumetimers(uih_context * c); + void uih_slowdowntimers(uih_context * c, int time); + +/*text output functions */ + void uih_clearscreen(uih_context * c); + void uih_settextpos(uih_context * c, int x, int y); + void uih_text(uih_context * c, CONST char *text); + void uih_letterspersec(uih_context * c, int n); + +/*image rotation functions */ + int uih_fastrotate(uih_context * c, int mode); + int uih_fastrotateenable(uih_context * c); + void uih_fastrotatedisable(uih_context * c); + void uih_angle(uih_context * c, number_t angle); + void uih_rotatemode(uih_context * c, int mode); + void uih_rotate(uih_context * c, int mode); + void uih_rotationspeed(uih_context * c, number_t speed); + +/*Catalog functions */ + int uih_loadcatalog(uih_context * c, CONST char *name); + void uih_freecatalog(uih_context * c); + + void uih_registermenus(void); + void uih_registermenus_i18n(void); + void uih_registermenudialogs_i18n(void); + void uih_unregistermenus(void); + +/*Windows :)*/ + struct uih_window *uih_registerw(struct uih_context *uih, + uih_getposfunc getpos, + uih_drawfunc draw, void *data, + int flags); + void uih_removew(struct uih_context *uih, struct uih_window *w); + void uih_clearwindows(struct uih_context *uih); + void uih_drawwindows(struct uih_context *uih); + void uih_drawborder(struct uih_context *uih, int x, int y, int width, + int height, int flags); + void uih_setline(struct uih_context *uih, struct uih_window *w, + int color, int x1, int y1, int x2, int y2); + struct uih_window *uih_registerline(struct uih_context *uih, int color, + int x1, int y1, int x2, int y2); + + +/*Messages*/ + void uih_scrollup(uih_context * c); + void uih_clearmessages(uih_context * c); + int uih_message(uih_context * c, CONST char *message); + int uih_error(uih_context * c, CONST char *error); + void uih_rmmessage(uih_context * c, int pid); + void uih_printmessages(uih_context * c); + +/*Constant framerate functions*/ + void uih_emulatetimers(uih_context * c); + void uih_constantframetime(uih_context * c, int time); + void uih_noconstantframetime(uih_context * c); + +/*undo and redo*/ + void uih_saveundo(uih_context * c); + void uih_undo(uih_context * c); + void uih_redo(uih_context * c); + + void uih_setfont(uih_context * c); + +/*animation rendering*/ + int uih_renderanimation(struct uih_context *gc, CONST char *basename, + CONST xio_constpath animation, int width, + int height, float pixelwidth, + float pixelheight, int frametime, int type, + int antialiasing, int slowmode, + int letterspersec, CONST char *catalog, + int motionvectors, int iframedist2); + int uih_renderimage(struct uih_context *gc1, xio_file af, + xio_constpath path, struct image *img, + int antialias, CONST char *catalog, int noise); + + void uih_initmessages(uih_context * c); + void uih_destroymessages(uih_context * c); + void uih_inittext(uih_context * c); + void uih_destroytext(uih_context * c); + + void uih_inhibittextsw(uih_context * c); + int uih_inhibittextselected(uih_context * c); + +#ifdef __cplusplus +} +#endif +#endif |