From b185a9da6ca58723a7e993df59baf0fd8ca13e05 Mon Sep 17 00:00:00 2001 From: Ivica Ico Bukvic <ico@vt.edu> Date: Wed, 20 Aug 2014 16:58:00 -0400 Subject: [PATCH] *updated icludes for 3rd party externals --- externals/build/include/g_all_guis.h | 428 ++++++++++++--------------- externals/build/include/g_canvas.h | 336 ++++++++++++++++----- externals/build/include/m_imp.h | 4 +- externals/build/include/m_pd.h | 174 ++++++++--- externals/build/include/s_stuff.h | 163 ++++++++-- 5 files changed, 716 insertions(+), 389 deletions(-) diff --git a/externals/build/include/g_all_guis.h b/externals/build/include/g_all_guis.h index 2bc38f12d..9f8dd9659 100644 --- a/externals/build/include/g_all_guis.h +++ b/externals/build/include/g_all_guis.h @@ -3,245 +3,170 @@ * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ /* g_7_guis.h written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */ - -#define IEM_GUI_COLNR_WHITE 0 -#define IEM_GUI_COLNR_ML_GREY 1 -#define IEM_GUI_COLNR_D_GREY 2 -#define IEM_GUI_COLNR_L_RED 3 -#define IEM_GUI_COLNR_L_ORANGE 4 -#define IEM_GUI_COLNR_L_YELLOW 5 -#define IEM_GUI_COLNR_L_GREEN 6 -#define IEM_GUI_COLNR_L_CYAN 7 -#define IEM_GUI_COLNR_L_BLUE 8 -#define IEM_GUI_COLNR_L_MAGENTA 9 - -#define IEM_GUI_COLNR_LL_GREY 10 -#define IEM_GUI_COLNR_M_GREY 11 -#define IEM_GUI_COLNR_DD_GREY 12 -#define IEM_GUI_COLNR_RED 13 -#define IEM_GUI_COLNR_ORANGE 14 -#define IEM_GUI_COLNR_YELLOW 15 -#define IEM_GUI_COLNR_GREEN 16 -#define IEM_GUI_COLNR_CYAN 17 -#define IEM_GUI_COLNR_BLUE 18 -#define IEM_GUI_COLNR_MAGENTA 19 - -#define IEM_GUI_COLNR_L_GREY 20 -#define IEM_GUI_COLNR_MD_GREY 21 -#define IEM_GUI_COLNR_BLACK 22 -#define IEM_GUI_COLNR_D_RED 23 -#define IEM_GUI_COLNR_D_ORANGE 24 -#define IEM_GUI_COLNR_D_YELLOW 25 -#define IEM_GUI_COLNR_D_GREEN 26 -#define IEM_GUI_COLNR_D_CYAN 27 -#define IEM_GUI_COLNR_D_BLUE 28 -#define IEM_GUI_COLNR_D_MAGENTA 29 - -#define IEM_GUI_COLOR_SELECTED 255 -#define IEM_GUI_COLOR_NORMAL 0 - -#define IEM_GUI_MAX_COLOR 30 - #define IEM_GUI_DEFAULTSIZE 15 #define IEM_GUI_MINSIZE 8 -#define IEM_GUI_MAXSIZE 1000 #define IEM_SL_DEFAULTSIZE 128 #define IEM_SL_MINSIZE 2 #define IEM_FONT_MINSIZE 4 -#define IEM_BNG_DEFAULTHOLDFLASHTIME 250 -#define IEM_BNG_DEFAULTBREAKFLASHTIME 50 -#define IEM_BNG_MINHOLDFLASHTIME 50 -#define IEM_BNG_MINBREAKFLASHTIME 10 - -#define IEM_VU_DEFAULTSIZE 3 -#define IEM_VU_LARGESMALL 2 -#define IEM_VU_MINSIZE 2 -#define IEM_VU_MAXSIZE 25 -#define IEM_VU_STEPS 40 - -#define IEM_VU_MINDB -99.9 -#define IEM_VU_MAXDB 12.0 -#define IEM_VU_OFFSET 100.0 - -#define IEM_RADIO_MAX 128 - -#define IEM_SYM_UNIQUE_SND 256 -#define IEM_SYM_UNIQUE_RCV 512 -#define IEM_SYM_UNIQUE_LAB 1024 -#define IEM_SYM_UNIQUE_ALL 1792 -#define IEM_FONT_STYLE_ALL 255 - -#define IEM_MAX_SYM_LEN 127 - #define IEM_GUI_DRAW_MODE_UPDATE 0 #define IEM_GUI_DRAW_MODE_MOVE 1 #define IEM_GUI_DRAW_MODE_NEW 2 #define IEM_GUI_DRAW_MODE_SELECT 3 -#define IEM_GUI_DRAW_MODE_ERASE 4 #define IEM_GUI_DRAW_MODE_CONFIG 5 -#define IEM_GUI_DRAW_MODE_IO 6 - -#define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER) #define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT) #define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL) -#define IS_A_DOLLAR(atom,index) ((atom+index)->a_type == A_DOLLAR) -#define IS_A_DOLLSYM(atom,index) ((atom+index)->a_type == A_DOLLSYM) - -#define IEM_FSTYLE_FLAGS_ALL 0x007fffff -#define IEM_INIT_ARGS_ALL 0x01ffffff #define IEM_GUI_OLD_SND_FLAG 1 #define IEM_GUI_OLD_RCV_FLAG 2 -#define IEM_GUI_COLOR_EDITED 16711680 #define IEMGUI_MAX_NUM_LEN 32 -typedef struct _iem_fstyle_flags -{ - unsigned int x_font_style:6; - unsigned int x_rcv_able:1; - unsigned int x_snd_able:1; - unsigned int x_lab_is_unique:1; - unsigned int x_rcv_is_unique:1; - unsigned int x_snd_is_unique:1; - unsigned int x_lab_arg_tail_len:6; - unsigned int x_lab_is_arg_num:6; - unsigned int x_shiftdown:1; - unsigned int x_selected:1; - unsigned int x_finemoved:1; - unsigned int x_put_in2out:1; - unsigned int x_change:1; - unsigned int x_thick:1; - unsigned int x_lin0_log1:1; - unsigned int x_steady:1; - unsigned int dummy:1; -} t_iem_fstyle_flags; - -typedef struct _iem_init_symargs -{ - unsigned int x_loadinit:1; - unsigned int x_rcv_arg_tail_len:6; - unsigned int x_snd_arg_tail_len:6; - unsigned int x_rcv_is_arg_num:6; - unsigned int x_snd_is_arg_num:6; - unsigned int x_scale:1; - unsigned int x_flashed:1; - unsigned int x_locked:1; - unsigned int x_reverse:1; /* bugfix */ - unsigned int dummy:3; -} t_iem_init_symargs; +#define SCALE_NUM_MINWIDTH 1 +#define SCALE_NUM_MINHEIGHT 8 +#define SCALE_GOP_MINWIDTH 12 +#define SCALE_GOP_MINHEIGHT 12 +#define SCALEHANDLE_WIDTH 5 +#define SCALEHANDLE_HEIGHT 5 +#define LABELHANDLE_WIDTH 5 +#define LABELHANDLE_HEIGHT 5 typedef void (*t_iemfunptr)(void *x, t_glist *glist, int mode); -typedef struct _iemgui +struct _scalehandle; +typedef void (*t_clickhandlefn)(struct _scalehandle *sh, int newstate); +typedef void (*t_motionhandlefn)(struct _scalehandle *sh, t_floatarg f1, t_floatarg f2); + +EXTERN t_class *scalehandle_class; + +typedef struct _scalehandle { - t_object x_obj; - t_glist *x_glist; - t_iemfunptr x_draw; - int x_h; - int x_w; - int x_ldx; - int x_ldy; - char x_font[16]; - t_iem_fstyle_flags x_fsf; - int x_fontsize; - t_iem_init_symargs x_isa; - int x_fcol; - int x_bcol; - int x_lcol; - t_symbol *x_snd; /* send symbol */ - t_symbol *x_rcv; /* receive */ - t_symbol *x_lab; /* label */ - t_symbol *x_snd_unexpanded; /* same 3, with '$' unexpanded */ - t_symbol *x_rcv_unexpanded; - t_symbol *x_lab_unexpanded; - int x_binbufindex; /* where in binbuf to find these */ - int x_labelbindex; /* where in binbuf to find label */ -} t_iemgui; + t_pd h_pd; + t_object *h_master; + t_glist *h_glist; // this is the canvas to draw on. Note that when objects are edited, "glist" and "canvas" mean the same. + t_symbol *h_bindsym; + int h_scale; // bool + char h_pathname[37]; // max size for ".x%lx.h%lx" = 5+4*sizeof(long) + char h_outlinetag[18]; // max size for "h%lx" = 2+2*sizeof(long) + int h_dragon; // bool + int h_dragx; + int h_dragy; + int h_offset_x; + int h_offset_y; + int h_vis; // bool + t_clickhandlefn h_clickfn; + t_motionhandlefn h_motionfn; +} t_scalehandle; -typedef struct _iemguidummy +typedef struct _iemgui { - t_iemgui x_gui; - int x_dum1; - int x_dum2; - int x_dum3; -} t_iemguidummy; + t_object x_obj; + t_glist *x_glist; + t_iemfunptr x_draw; //29 /* this should be static */ + int x_h; //unsigned //80 + int x_w; //unsigned //119 + int x_ldx; //33 + int x_ldy; //33 + int x_fontsize;//uns. //41 + int x_fcol;//iemcolor //35 /* foreground */ + int x_bcol;//iemcolor //41 /* background */ + int x_lcol;//iemcolor //21 /* label */ + t_symbol *x_snd; //18 /* send symbol */ + t_symbol *x_rcv; //33 /* receive */ + t_symbol *x_lab; //15 /* label */ + t_symbol *x_snd_unexpanded; //7 /* same 3, with '$' unexpanded */ + t_symbol *x_rcv_unexpanded; //7 + t_symbol *x_lab_unexpanded; //6 + int x_binbufindex; //4 /* where in binbuf to find these (this should be static) */ + int x_labelbindex; //5 /* where in binbuf to find label (this should be static) */ + t_scalehandle *x_handle; //24 + t_scalehandle *x_lhandle; //19 + int x_vis; //bool //64 /* is the object drawn? */ + int x_changed; //bool //30 /* has the value changed so that we need to do graphic update */ + + // grep -w "$1" *.[ch]|wc -l + t_glist *x_selected; // 24 matches + // from t_iem_fstyle_flags + unsigned int x_font_style:6; // 33 matches + unsigned int x_finemoved:1; // 7 matches (sliders and [nbx] only) + unsigned int x_put_in2out:1; // 9 matches + unsigned int x_change:1; // 28 matches // what's this and why is there also a x_changed ? + // from t_iem_init_symargs + unsigned int x_loadinit:1; // 21 matches + unsigned int x_locked:1; // 7 matches ([bng] only) + unsigned int x_reverse:1; // 4 matches (sliders only) + unsigned int dummy:20; +} t_iemgui; typedef struct _bng { t_iemgui x_gui; - int x_flashed; - int x_flashtime_break; - int x_flashtime_hold; + int x_flashed; // bool + int x_flashtime_break; // >= 0 + int x_flashtime_hold; // >= 0 t_clock *x_clock_hld; t_clock *x_clock_brk; t_clock *x_clock_lck; } t_bng; -typedef struct _hslider +typedef struct _slider { t_iemgui x_gui; int x_pos; int x_val; - int x_center; - int x_thick; - int x_lin0_log1; - int x_steady; + int x_center; // is this necessary ? + int x_thick; // bool + int x_lin0_log1; // bool + int x_steady; // bool double x_min; double x_max; double x_k; -} t_hslider; + double x_last; + int x_is_last_float; // bool + int x_orient; // bool: 0=horizontal ([hsl]), 1=vertical ([vsl]) +} t_slider; -typedef struct _hdial +typedef struct _radio { t_iemgui x_gui; - int x_on; - int x_on_old; - int x_change; - int x_number; - t_atom x_at[2]; -} t_hdial; + int x_on; // unsigned < x_number + int x_on_old; /* for use by [hdl] [vdl] */ + int x_change; // bool + int x_number; // unsigned > 0 + int x_drawn; // unsigned < x_number + t_atom x_at[2]; // tmp buffer for outlet_list + int x_orient; // bool: 0=horiz, 1=vert +} t_radio; typedef struct _toggle { t_iemgui x_gui; - float x_on; - float x_nonzero; + t_float x_on; + t_float x_nonzero; } t_toggle; typedef struct _my_canvas { t_iemgui x_gui; - t_atom x_at[3]; - int x_vis_w; - int x_vis_h; + t_atom x_at[2]; // tmp buffer for outlet_list + int x_vis_w; // unsigned + int x_vis_h; // unsigned } t_my_canvas; -typedef struct _vslider -{ - t_iemgui x_gui; - int x_pos; - int x_val; - int x_lin0_log1; - int x_steady; - double x_min; - double x_max; - double x_k; -} t_vslider; - typedef struct _vu { t_iemgui x_gui; - int x_led_size; - int x_peak; - int x_rms; - float x_fp; - float x_fr; - int x_scale; - void *x_out_rms; - void *x_out_peak; + int x_led_size; // unsigned + int x_peak; // 1..40 if visible ; 0 if invisible + int x_rms; // 1..40 if visible ; 0 if invisible + t_float x_fp; // value for outlet 1 + t_float x_fr; // value for outlet 0 + int x_scale; // bool + t_outlet *x_out_rms; // outlet 0 + t_outlet *x_out_peak; // outlet 1 + unsigned int x_updaterms:1; + unsigned int x_updatepeak:1; } t_vu; typedef struct _my_numbox @@ -253,77 +178,106 @@ typedef struct _my_numbox double x_min; double x_max; double x_k; - int x_lin0_log1; + int x_lin0_log1; // bool char x_buf[IEMGUI_MAX_NUM_LEN]; - int x_numwidth; + int x_numwidth; // unsigned + int x_scalewidth; /* temporary value for scalehandle */ + int x_scaleheight; /* temporary value for scalehandle */ + int x_tmpfontsize; /* temporary value for scalehandle */ int x_log_height; + int x_hide_frame; /* 0 default, 1 just arrow, 2, just frame, 3 both */ } t_my_numbox; -typedef struct _vdial -{ - t_iemgui x_gui; - int x_on; - int x_on_old; - int x_change; - int x_number; - t_atom x_at[2]; -} t_vdial; - -#define t_vradio t_vdial -#define t_hradio t_hdial - extern int sys_noloadbang; extern int iemgui_color_hex[]; -extern int iemgui_vu_db2i[]; -extern int iemgui_vu_col[]; -extern char *iemgui_vu_scale_str[]; EXTERN int iemgui_clip_size(int size); EXTERN int iemgui_clip_font(int size); -EXTERN int iemgui_modulo_color(int col); -EXTERN t_symbol *iemgui_unique2dollarzero(t_symbol *s, int unique_num, int and_unique_flag); -EXTERN t_symbol *iemgui_sym2dollararg(t_symbol *s, int nth_arg, int tail_len); -EXTERN t_symbol *iemgui_dollarzero2unique(t_symbol *s, int unique_num); -EXTERN t_symbol *iemgui_dollararg2sym(t_symbol *s, int nth_arg, int tail_len, int pargc, t_atom *pargv); -EXTERN int iemgui_is_dollarzero(t_symbol *s); -EXTERN int iemgui_is_dollararg(t_symbol *s, int *tail_len); -EXTERN void iemgui_fetch_unique(t_iemgui *iemgui); -EXTERN void iemgui_fetch_parent_args(t_iemgui *iemgui, int *pargc, t_atom **pargv); EXTERN void iemgui_verify_snd_ne_rcv(t_iemgui *iemgui); -EXTERN void iemgui_all_unique2dollarzero(t_iemgui *iemgui, t_symbol **srlsym); -EXTERN void iemgui_all_sym2dollararg(t_iemgui *iemgui, t_symbol **srlsym); -EXTERN void iemgui_all_dollarzero2unique(t_iemgui *iemgui, t_symbol **srlsym); -EXTERN t_symbol *iemgui_new_dogetname(t_iemgui *iemgui, int indx, t_atom *argv); +EXTERN t_symbol *iemgui_getfloatsym(t_atom *a); +EXTERN t_symbol *iemgui_getfloatsymarg(int i, int argc, t_atom *argv); EXTERN void iemgui_new_getnames(t_iemgui *iemgui, int indx, t_atom *argv); -EXTERN void iemgui_all_dollararg2sym(t_iemgui *iemgui, t_symbol **srlsym); -EXTERN void iemgui_first_dollararg2sym(t_iemgui *iemgui, t_symbol **srlsym); -EXTERN void iemgui_all_col2save(t_iemgui *iemgui, int *bflcol); EXTERN void iemgui_all_colfromload(t_iemgui *iemgui, int *bflcol); -EXTERN int iemgui_compatible_col(int i); -EXTERN void iemgui_all_dollar2raute(t_symbol **srlsym); -EXTERN void iemgui_all_raute2dollar(t_symbol **srlsym); -EXTERN void iemgui_send(void *x, t_iemgui *iemgui, t_symbol *s); -EXTERN void iemgui_receive(void *x, t_iemgui *iemgui, t_symbol *s); -EXTERN void iemgui_label(void *x, t_iemgui *iemgui, t_symbol *s); -EXTERN void iemgui_label_pos(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av); -EXTERN void iemgui_label_font(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av); -EXTERN void iemgui_size(void *x, t_iemgui *iemgui); -EXTERN void iemgui_delta(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av); -EXTERN void iemgui_pos(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av); -EXTERN void iemgui_color(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av); -EXTERN int iemgui_list(void *x, t_iemgui *iemgui, t_symbol *s, int ac, t_atom *av); +EXTERN void iemgui_send(t_iemgui *x, t_symbol *s); +EXTERN void iemgui_receive(t_iemgui *x, t_symbol *s); +EXTERN void iemgui_label(t_iemgui *x, t_symbol *s); +EXTERN void iemgui_label_pos(t_iemgui *x, t_symbol *s, int ac, t_atom *av); +EXTERN void iemgui_label_font(t_iemgui *x, t_symbol *s, int ac, t_atom *av); +EXTERN void iemgui_label_getrect(t_iemgui x_gui, t_glist *x, int *xp1, int *yp1, int *xp2, int *yp2); +EXTERN void iemgui_shouldvis(t_iemgui *x, int mode); +EXTERN void iemgui_size(t_iemgui *x); +EXTERN void iemgui_delta(t_iemgui *x, t_symbol *s, int ac, t_atom *av); +EXTERN void iemgui_pos(t_iemgui *x, t_symbol *s, int ac, t_atom *av); +EXTERN void iemgui_color(t_iemgui *x, t_symbol *s, int ac, t_atom *av); EXTERN void iemgui_displace(t_gobj *z, t_glist *glist, int dx, int dy); +EXTERN void iemgui_displace_withtag(t_gobj *z, t_glist *glist, int dx, int dy); EXTERN void iemgui_select(t_gobj *z, t_glist *glist, int selected); EXTERN void iemgui_delete(t_gobj *z, t_glist *glist); EXTERN void iemgui_vis(t_gobj *z, t_glist *glist, int vis); -EXTERN void iemgui_save(t_iemgui *iemgui, t_symbol **srl, int *bflcol); -EXTERN void iemgui_properties(t_iemgui *iemgui, t_symbol **srl); -EXTERN int iemgui_dialog(t_iemgui *iemgui, t_symbol **srl, int argc, t_atom *argv); - -EXTERN int canvas_getdollarzero(void); -EXTERN void canvas_getargs(int *argcp, t_atom **argvp); +EXTERN void iemgui_save(t_iemgui *x, t_symbol **srl, int *bflcol); +EXTERN void iemgui_properties(t_iemgui *x, t_symbol **srl); +EXTERN int iemgui_dialog(t_iemgui *x, int argc, t_atom *argv); + +EXTERN void iem_inttosymargs(t_iemgui *x, int n); +EXTERN int iem_symargstoint(t_iemgui *x); +EXTERN void iem_inttofstyle(t_iemgui *x, int n); +EXTERN int iem_fstyletoint(t_iemgui *x); + +EXTERN void canvas_apply_setundo(t_canvas *x, t_gobj *y); + +// scalehandle code, as refactored by Mathieu +EXTERN void scalehandle_bind(t_scalehandle *h); +EXTERN void scalehandle_draw_select(t_scalehandle *h, int px, int py); +EXTERN void scalehandle_draw_select2(t_iemgui *x); +EXTERN void scalehandle_draw_erase(t_scalehandle *h); +EXTERN void scalehandle_draw_erase2(t_iemgui *x); +EXTERN void scalehandle_draw(t_iemgui *x); +EXTERN t_scalehandle *scalehandle_new(t_object *x, t_glist *glist, int scale, t_clickhandlefn chf, t_motionhandlefn mhf); +EXTERN void scalehandle_free(t_scalehandle *h); +EXTERN void properties_set_field_int(long props, const char *gui_field, int value); +EXTERN void scalehandle_dragon_label(t_scalehandle *h, float f1, float f2); +EXTERN void scalehandle_unclick_label(t_scalehandle *h); +EXTERN void scalehandle_click_label(t_scalehandle *h); +EXTERN void scalehandle_click_scale(t_scalehandle *h); +EXTERN void scalehandle_unclick_scale(t_scalehandle *h); +EXTERN void scalehandle_drag_scale(t_scalehandle *h); +EXTERN void iemgui__clickhook3(t_scalehandle *sh, int newstate); + +EXTERN int mini(int a, int b); +EXTERN int maxi(int a, int b); +EXTERN float minf(float a, float b); +EXTERN float maxf(float a, float b); + +// other refactor by Mathieu +EXTERN void iemgui_tag_selected( t_iemgui *x); +EXTERN void iemgui_label_draw_new( t_iemgui *x); +EXTERN void iemgui_label_draw_move( t_iemgui *x); +EXTERN void iemgui_label_draw_config(t_iemgui *x); +EXTERN void iemgui_label_draw_select(t_iemgui *x); +EXTERN void iemgui_io_draw_move(t_iemgui *x); +EXTERN void iemgui_draw_io(t_iemgui *x, int old_sr_flags); +EXTERN void iemgui_base_draw_new(t_iemgui *x); +EXTERN void iemgui_base_draw_move(t_iemgui *x); +EXTERN void iemgui_base_draw_config(t_iemgui *x); +EXTERN void iemgui_draw_new(t_iemgui *x); +EXTERN void iemgui_draw_config(t_iemgui *x); +EXTERN void iemgui_draw_move(t_iemgui *x); +EXTERN void iemgui_draw_erase(t_iemgui *x); +EXTERN void wb_init(t_widgetbehavior *wb, t_getrectfn gr, t_clickfn cl); // rename this to iemgui_wb_init + +extern t_symbol *s_empty; +EXTERN const char *selection_color; + +static inline int iemgui_has_snd (t_iemgui *x) {return x->x_snd!=s_empty;} +static inline int iemgui_has_rcv (t_iemgui *x) {return x->x_rcv!=s_empty;} +EXTERN const char *iemgui_font(t_iemgui *x); +EXTERN const char *iemgui_typeface(t_iemgui *x); + +EXTERN void iemgui_class_addmethods(t_class *c); +EXTERN void scrollbar_update(t_glist *glist); +EXTERN void iemgui_init(t_iemgui *x, t_floatarg f); + +EXTERN void iemgui_out_bang(t_iemgui *x, int o, int chk_putin); +EXTERN void iemgui_out_float(t_iemgui *x, int o, int chk_putin, t_float f); +EXTERN void iemgui_out_list(t_iemgui *x, int o, int chk_putin, t_symbol *s, int argc, t_atom *argv); -EXTERN void iem_inttosymargs(t_iem_init_symargs *symargp, int n); -EXTERN int iem_symargstoint(t_iem_init_symargs *symargp); -EXTERN void iem_inttofstyle(t_iem_fstyle_flags *fstylep, int n); -EXTERN int iem_fstyletoint(t_iem_fstyle_flags *fstylep); diff --git a/externals/build/include/g_canvas.h b/externals/build/include/g_canvas.h index 0433f4a2a..6dde20607 100644 --- a/externals/build/include/g_canvas.h +++ b/externals/build/include/g_canvas.h @@ -7,8 +7,8 @@ functions. "Glists" and "canvases" and "graphs" used to be different structures until being unified in version 0.35. A glist occupies its own window if the "gl_havewindow" flag is set. Its -appearance on its "parent" or "owner" (if it has one) is as a graph if -"gl_isgraph" is set, and otherwise as a text box. +appearance on its "parent", also called "owner", (if it has one) is as a graph +if "gl_isgraph" is set, and otherwise as a text box. A glist is "root" if it has no owner, i.e., a document window. In this case "gl_havewindow" is always set. @@ -36,10 +36,13 @@ glist has its own window, even if miniaturized. /* NOTE: this file describes Pd implementation details which may change in future releases. The public (stable) API is in m_pd.h. */ +#ifndef PD_G_CANVAS_H +#define PD_G_CANVAS_H + #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) extern "C" { #endif - + /* --------------------- geometry ---------------------------- */ #define IOWIDTH 7 /* width of an inlet/outlet in pixels */ #define IOMIDDLE ((IOWIDTH-1)/2) @@ -73,6 +76,22 @@ EXTERN_STRUCT _tscalar; EXTERN_STRUCT _canvasenvironment; #define t_canvasenvironment struct _canvasenvironment +EXTERN_STRUCT _fielddesc; +#define t_fielddesc struct _fielddesc + +// jsarlo +EXTERN_STRUCT _magicGlass; +#define t_magicGlass struct _magicGlass +// end jsarlo + +// undo stuff +EXTERN_STRUCT _undo_action; +#define t_undo_action struct _undo_action + +// preset hub stuff +EXTERN_STRUCT _preset_hub; +#define t_preset_hub struct _preset_hub + typedef struct _selection { t_gobj *sel_what; @@ -105,6 +124,12 @@ typedef struct _editor unsigned int e_lastmoved: 1; /* one if mouse has moved since click */ unsigned int e_textdirty: 1; /* one if e_textedfor has changed */ unsigned int e_selectedline: 1; /* one if a line is selected */ + t_magicGlass *gl_magic_glass; /* magic glass object */ + char canvas_cnct_inlet_tag[4096]; /* tags for currently highlighted nlets */ + char canvas_cnct_outlet_tag[4096]; + t_clock *e_clock; /* clock to filter GUI move messages */ + int e_xnew; /* xpos for next move event */ + int e_ynew; /* ypos, similarly */ } t_editor; #define MA_NONE 0 /* e_onmotion: do nothing on mouse motion */ @@ -113,6 +138,8 @@ typedef struct _editor #define MA_REGION 3 /* selection region */ #define MA_PASSOUT 4 /* send on to e_grab */ #define MA_DRAGTEXT 5 /* drag in text editor to alter selection */ +#define MA_RESIZE 6 /* drag to resize */ +#define MA_SCROLL 7 /* scroll with middle click onto empty canvas */ /* editor structure for "garrays". We don't bother to delete and regenerate this structure when the "garray" becomes invisible or visible, although we @@ -124,12 +151,15 @@ typedef struct _arrayvis t_garray *av_garray; /* owning structure */ } t_arrayvis; +t_garray* array_garray; /* used for sending bangs when + array is changed via gui */ + /* the t_tick structure describes where to draw x and y "ticks" for a glist */ typedef struct _tick /* where to put ticks on x or y axes */ { - float k_point; /* one point to draw a big tick at */ - float k_inc; /* x or y increment per little tick */ + t_float k_point; /* one point to draw a big tick at */ + t_float k_inc; /* x or y increment per little tick */ int k_lperb; /* little ticks per big; 0 if no ticks to draw */ } t_tick; @@ -138,6 +168,8 @@ area of a window. */ +//#include "g_undo.h" + struct _glist { t_object gl_obj; /* header in case we're a glist */ @@ -147,22 +179,24 @@ struct _glist struct _glist *gl_owner; /* parent glist, supercanvas, or 0 if none */ int gl_pixwidth; /* width in pixels (on parent, if a graph) */ int gl_pixheight; - float gl_x1; /* bounding rectangle in our own coordinates */ - float gl_y1; - float gl_x2; - float gl_y2; + t_float gl_x1; /* bounding rectangle in our own coordinates */ + t_float gl_y1; + t_float gl_x2; + t_float gl_y2; int gl_screenx1; /* screen coordinates when toplevel */ int gl_screeny1; int gl_screenx2; int gl_screeny2; + int gl_xmargin; /* origin for GOP rectangle */ + int gl_ymargin; t_tick gl_xtick; /* ticks marking X values */ int gl_nxlabels; /* number of X coordinate labels */ t_symbol **gl_xlabel; /* ... an array to hold them */ - float gl_xlabely; /* ... and their Y coordinates */ + t_float gl_xlabely; /* ... and their Y coordinates */ t_tick gl_ytick; /* same as above for Y ticks and labels */ int gl_nylabels; t_symbol **gl_ylabel; - float gl_ylabelx; + t_float gl_ylabelx; t_editor *gl_editor; /* editor structure when visible */ t_symbol *gl_name; /* symbol bound here */ int gl_font; /* nominal font size in points, e.g., 10 */ @@ -175,13 +209,38 @@ struct _glist unsigned int gl_willvis:1; /* make me visible after loading */ unsigned int gl_edit:1; /* edit mode */ unsigned int gl_isdeleting:1; /* we're inside glist_delete -- hack! */ - unsigned int gl_stretch:1; /* stretch contents on resize */ + unsigned int gl_unloading:1; /* we're inside canvas_free */ + unsigned int gl_goprect:1; /* draw rectangle for graph-on-parent */ unsigned int gl_isgraph:1; /* show as graph on parent */ + unsigned int gl_hidetext:1; /* hide object-name + args when doing graph on parent */ + unsigned int gl_gop_initialized:1; /* used for tagged moving of gop-ed objects to avoid redundant reinit */ + //global preset array pointer + t_preset_hub *gl_phub; + //infinite undo goodies (have to stay here rather than the editor to prevent its obliteration when editor is deleted) + t_undo_action *u_queue; + t_undo_action *u_last; + //dpsaha@vt.edu for the gop dynamic resizing & move handle (refactored by mathieu) + struct _scalehandle *x_handle; + struct _scalehandle *x_mhandle; + t_pd *gl_svg; }; #define gl_gobj gl_obj.te_g #define gl_pd gl_gobj.g_pd +/*-------------------universal preset stuff---------------------*/ +// for the universal preset_node ability (see g_editor.c doconnect/disconnect functions) +// this is where all the classes capable of being controlled via preset should be defined + +// preset objects +t_class *preset_hub_class; +t_class *preset_node_class; + +// special case objects +extern t_class *print_class; +extern t_class *message_class; +/*-----------------end universal preset stuff-------------------*/ + /* a data structure to describe a field in a pure datum */ #define DT_FLOAT 0 @@ -196,13 +255,16 @@ typedef struct _dataslot t_symbol *ds_arraytemplate; /* filled in for arrays only */ } t_dataslot; - -/* T.Grill - changed t_pd member to t_pdobj to avoid name clashed */ typedef struct _template { t_pd t_pdobj; /* header */ struct _gtemplate *t_list; /* list of "struct"/gtemplate objects */ t_symbol *t_sym; /* name */ + int t_transformable; /* counts number of arrays in template + drawn objects that depend on this + template can only be transformed + (scaled/skewed,rotated, etc.) + if this var is 0 */ int t_n; /* number of dataslots (fields) */ t_dataslot *t_vec; /* array of dataslots */ } t_template; @@ -215,7 +277,7 @@ struct _array t_symbol *a_templatesym; /* template for elements */ int a_valid; /* protection against stale pointers into array */ t_gpointer a_gp; /* pointer to scalar or array element we're in */ - t_gstub *a_stub; + t_gstub *a_stub; /* stub for pointing into this array */ }; /* structure for traversing all the connections in a glist */ @@ -237,6 +299,9 @@ typedef struct _linetraverser int tr_nextoutno; } t_linetraverser; +EXTERN int outconnect_visible(t_outconnect *oc); +EXTERN int outconnect_setvisible(t_outconnect *oc, int vis); + /* function types used to define graphical behavior for gobjs, a bit like X widgets. We don't use Pd methods because Pd's typechecking can't specify the types of pointer arguments. Also it's more convenient this way, since @@ -258,6 +323,8 @@ typedef void (*t_visfn)(t_gobj *x, struct _glist *glist, int flag); /* field a mouse click (when not in "edit" mode) */ typedef int (*t_clickfn)(t_gobj *x, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit); + /* and this to displace a gobj using tags: */ +typedef void (*t_displacefnwtag)(t_gobj *x, struct _glist *glist, int dx, int dy); /* ... and later, resizing; getting/setting font or color... */ struct _widgetbehavior @@ -269,6 +336,7 @@ struct _widgetbehavior t_deletefn w_deletefn; t_visfn w_visfn; t_clickfn w_clickfn; + t_displacefnwtag w_displacefnwtag; }; /* -------- behaviors for scalars defined by objects in template --------- */ @@ -282,27 +350,29 @@ doesn't work on array elements... LATER reconsider this */ /* bounding rectangle: */ typedef void (*t_parentgetrectfn)(t_gobj *x, struct _glist *glist, - t_word *data, t_template *tmpl, float basex, float basey, + t_word *data, t_template *tmpl, t_float basex, t_float basey, int *x1, int *y1, int *x2, int *y2); /* displace it */ typedef void (*t_parentdisplacefn)(t_gobj *x, struct _glist *glist, - t_word *data, t_template *tmpl, float basex, float basey, + t_word *data, t_template *tmpl, t_float basex, t_float basey, int dx, int dy); /* change color to show selection */ typedef void (*t_parentselectfn)(t_gobj *x, struct _glist *glist, - t_word *data, t_template *tmpl, float basex, float basey, + t_word *data, t_template *tmpl, t_float basex, t_float basey, int state); /* change appearance to show activation/deactivation: */ typedef void (*t_parentactivatefn)(t_gobj *x, struct _glist *glist, - t_word *data, t_template *tmpl, float basex, float basey, + t_word *data, t_template *tmpl, t_float basex, t_float basey, int state); /* making visible or invisible */ typedef void (*t_parentvisfn)(t_gobj *x, struct _glist *glist, - t_word *data, t_template *tmpl, float basex, float basey, + struct _glist *parentglist, t_scalar *sc, + t_word *data, t_template *tmpl, t_float basex, t_float basey, int flag); /* field a mouse click */ typedef int (*t_parentclickfn)(t_gobj *x, struct _glist *glist, - t_scalar *sc, t_template *tmpl, float basex, float basey, + t_word *data, t_template *tmpl, t_scalar *sc, t_array *ap, + t_float basex, t_float basey, int xpix, int ypix, int shift, int alt, int dbl, int doit); struct _parentwidgetbehavior @@ -323,6 +393,9 @@ struct _parentwidgetbehavior #define CURSOR_EDITMODE_NOTHING 4 #define CURSOR_EDITMODE_CONNECT 5 #define CURSOR_EDITMODE_DISCONNECT 6 +#define CURSOR_EDITMODE_RESIZE 7 +#define CURSOR_EDITMODE_RESIZE_BOTTOM_RIGHT 8 +#define CURSOR_SCROLL 9 EXTERN void canvas_setcursor(t_glist *x, unsigned int cursornum); extern t_canvas *canvas_editing; /* last canvas to start text edting */ @@ -331,6 +404,11 @@ extern t_canvas *canvas_list; /* list of all root canvases */ extern t_class *vinlet_class, *voutlet_class; extern int glist_valid; /* incremented when pointers might be stale */ +#define PLOTSTYLE_POINTS 0 /* plotting styles for arrays */ +#define PLOTSTYLE_POLY 1 +#define PLOTSTYLE_BEZ 2 +#define PLOTSTYLE_BARS 3 + /* ------------------- functions on any gobj ----------------------------- */ EXTERN void gobj_getrect(t_gobj *x, t_glist *owner, int *x1, int *y1, int *x2, int *y2); @@ -344,15 +422,12 @@ EXTERN int gobj_click(t_gobj *x, struct _glist *glist, EXTERN void gobj_save(t_gobj *x, t_binbuf *b); EXTERN void gobj_properties(t_gobj *x, struct _glist *glist); EXTERN void gobj_save(t_gobj *x, t_binbuf *b); -EXTERN void gobj_redraw(t_gobj *gobj, t_glist *glist); +EXTERN int gobj_shouldvis(t_gobj *x, struct _glist *glist); /* -------------------- functions on glists --------------------- */ EXTERN t_glist *glist_new( void); EXTERN void glist_init(t_glist *x); EXTERN void glist_add(t_glist *x, t_gobj *g); -EXTERN void glist_cleanup(t_glist *x); -EXTERN void glist_free(t_glist *x); - EXTERN void glist_clear(t_glist *x); EXTERN t_canvas *glist_getcanvas(t_glist *x); EXTERN int glist_isselected(t_glist *x, t_gobj *y); @@ -372,42 +447,44 @@ EXTERN void glist_sort(t_glist *canvas); EXTERN void glist_read(t_glist *x, t_symbol *filename, t_symbol *format); EXTERN void glist_mergefile(t_glist *x, t_symbol *filename, t_symbol *format); -EXTERN float glist_pixelstox(t_glist *x, float xpix); -EXTERN float glist_pixelstoy(t_glist *x, float ypix); -EXTERN float glist_xtopixels(t_glist *x, float xval); -EXTERN float glist_ytopixels(t_glist *x, float yval); -EXTERN float glist_dpixtodx(t_glist *x, float dxpix); -EXTERN float glist_dpixtody(t_glist *x, float dypix); +EXTERN t_float glist_pixelstox(t_glist *x, t_float xpix); +EXTERN t_float glist_pixelstoy(t_glist *x, t_float ypix); +EXTERN t_float glist_xtopixels(t_glist *x, t_float xval); +EXTERN t_float glist_ytopixels(t_glist *x, t_float yval); +EXTERN t_float glist_dpixtodx(t_glist *x, t_float dxpix); +EXTERN t_float glist_dpixtody(t_glist *x, t_float dypix); -EXTERN void glist_redrawitem(t_glist *owner, t_gobj *gobj); EXTERN void glist_getnextxy(t_glist *gl, int *xval, int *yval); EXTERN void glist_glist(t_glist *g, t_symbol *s, int argc, t_atom *argv); EXTERN t_glist *glist_addglist(t_glist *g, t_symbol *sym, - float x1, float y1, float x2, float y2, - float px1, float py1, float px2, float py2); -EXTERN void glist_arraydialog(t_glist *parent, t_symbol *name, - t_floatarg size, t_floatarg saveit, t_floatarg newgraph); + t_float x1, t_float y1, t_float x2, t_float y2, + t_float px1, t_float py1, t_float px2, t_float py2); +EXTERN void glist_arraydialog(t_glist *parent, t_symbol *s, + int argc, t_atom *argv); EXTERN t_binbuf *glist_writetobinbuf(t_glist *x, int wholething); EXTERN int glist_isgraph(t_glist *x); EXTERN void glist_redraw(t_glist *x); EXTERN void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime, char *tag, int x1, int y1, int x2, int y2); EXTERN void glist_eraseiofor(t_glist *glist, t_object *ob, char *tag); -EXTERN void canvas_create_editor(t_glist *x, int createit); -void canvas_deletelinesforio(t_canvas *x, t_text *text, +EXTERN void canvas_create_editor(t_glist *x); +EXTERN void canvas_destroy_editor(t_glist *x); +EXTERN void canvas_deletelinesforio(t_canvas *x, t_text *text, t_inlet *inp, t_outlet *outp); - +EXTERN int glist_amreloadingabstractions; /* stop GUI changes while reloading */ +EXTERN int canvas_restore_original_position(t_glist *x, t_gobj *y, const char *objtag, int dir); /* -------------------- functions on texts ------------------------- */ -EXTERN void text_setto(t_text *x, t_glist *glist, char *buf, int bufsize); +EXTERN void text_setto(t_text *x, t_glist *glist, char *buf, int bufsize, int pos); EXTERN void text_drawborder(t_text *x, t_glist *glist, char *tag, int width, int height, int firsttime); +EXTERN void text_drawborder_withtag(t_text *x, t_glist *glist, char *tag, + int width, int height, int firsttime); EXTERN void text_eraseborder(t_text *x, t_glist *glist, char *tag); EXTERN int text_xcoord(t_text *x, t_glist *glist); EXTERN int text_ycoord(t_text *x, t_glist *glist); EXTERN int text_xpix(t_text *x, t_glist *glist); EXTERN int text_ypix(t_text *x, t_glist *glist); -EXTERN int text_shouldvis(t_text *x, t_glist *glist); /* -------------------- functions on rtexts ------------------------- */ #define RTEXT_DOWN 1 @@ -415,24 +492,23 @@ EXTERN int text_shouldvis(t_text *x, t_glist *glist); #define RTEXT_DBL 3 #define RTEXT_SHIFT 4 -EXTERN t_rtext *rtext_new(t_glist *glist, t_text *who); -EXTERN t_rtext *glist_findrtext(t_glist *gl, t_text *who); -EXTERN void rtext_draw(t_rtext *x); -EXTERN void rtext_erase(t_rtext *x); -EXTERN t_rtext *rtext_remove(t_rtext *first, t_rtext *x); -EXTERN int rtext_height(t_rtext *x); -EXTERN void rtext_displace(t_rtext *x, int dx, int dy); -EXTERN void rtext_select(t_rtext *x, int state); -EXTERN void rtext_activate(t_rtext *x, int state); -EXTERN void rtext_free(t_rtext *x); -EXTERN void rtext_key(t_rtext *x, int n, t_symbol *s); -EXTERN void rtext_mouse(t_rtext *x, int xval, int yval, int flag); -EXTERN void rtext_retext(t_rtext *x); -EXTERN int rtext_width(t_rtext *x); -EXTERN int rtext_height(t_rtext *x); -EXTERN char *rtext_gettag(t_rtext *x); -EXTERN void rtext_gettext(t_rtext *x, char **buf, int *bufsize); -EXTERN void rtext_getseltext(t_rtext *x, char **buf, int *bufsize); +// number in comment is the number in grep -w|wc +EXTERN t_rtext *rtext_new(t_glist *glist, t_text *who); //5 +EXTERN t_rtext *glist_findrtext(t_glist *gl, t_text *who); //53 +EXTERN void rtext_draw(t_rtext *x); //4 +EXTERN void rtext_erase(t_rtext *x); //4 +EXTERN int rtext_width(t_rtext *x); //9 +EXTERN int rtext_height(t_rtext *x); //9 +EXTERN void rtext_displace(t_rtext *x, int dx, int dy); //3 +EXTERN void rtext_select(t_rtext *x, int state); //4 +EXTERN void rtext_activate(t_rtext *x, int state); //3 +EXTERN void rtext_free(t_rtext *x); //4 +EXTERN void rtext_key(t_rtext *x, int n, t_symbol *s); //6 +EXTERN void rtext_mouse(t_rtext *x, int xval, int yval, int flag); //5 +EXTERN void rtext_retext(t_rtext *x); //5 +EXTERN char *rtext_gettag(t_rtext *x); //47 +EXTERN void rtext_gettext(t_rtext *x, char **buf, int *bufsize); //9 +EXTERN void rtext_getseltext(t_rtext *x, char **buf, int *bufsize); //4 /* -------------------- functions on canvases ------------------------ */ EXTERN t_class *canvas_class; @@ -442,6 +518,7 @@ EXTERN t_symbol *canvas_makebindsym(t_symbol *s); EXTERN void canvas_vistext(t_canvas *x, t_text *y); EXTERN void canvas_fixlinesfor(t_canvas *x, t_text *text); EXTERN void canvas_deletelinesfor(t_canvas *x, t_text *text); +EXTERN void canvas_eraselinesfor(t_canvas *x, t_text *text); EXTERN void canvas_stowconnections(t_canvas *x); EXTERN void canvas_restoreconnections(t_canvas *x); EXTERN void canvas_redraw(t_canvas *x); @@ -450,7 +527,8 @@ EXTERN t_inlet *canvas_addinlet(t_canvas *x, t_pd *who, t_symbol *sym); EXTERN void canvas_rminlet(t_canvas *x, t_inlet *ip); EXTERN t_outlet *canvas_addoutlet(t_canvas *x, t_pd *who, t_symbol *sym); EXTERN void canvas_rmoutlet(t_canvas *x, t_outlet *op); -EXTERN void canvas_redrawallfortemplate(t_canvas *tmpl); +EXTERN void canvas_redrawallfortemplate(t_template *tmpl, int action); +EXTERN void canvas_redrawallfortemplatecanvas(t_canvas *x, int action); EXTERN void canvas_zapallfortemplate(t_canvas *tmpl); EXTERN void canvas_setusedastemplate(t_canvas *x); EXTERN t_canvas *canvas_getcurrent(void); @@ -458,7 +536,7 @@ EXTERN void canvas_setcurrent(t_canvas *x); EXTERN void canvas_unsetcurrent(t_canvas *x); EXTERN t_symbol *canvas_realizedollar(t_canvas *x, t_symbol *s); EXTERN t_canvas *canvas_getrootfor(t_canvas *x); -EXTERN void canvas_dirty(t_canvas *x, t_int n); +EXTERN void canvas_dirty(t_canvas *x, t_floatarg n); EXTERN int canvas_getfont(t_canvas *x); typedef int (*t_canvasapply)(t_canvas *x, t_int x1, t_int x2, t_int x3); @@ -479,7 +557,14 @@ EXTERN void canvas_rename(t_canvas *x, t_symbol *s, t_symbol *dir); EXTERN void canvas_loadbang(t_canvas *x); EXTERN int canvas_hitbox(t_canvas *x, t_gobj *y, int xpos, int ypos, int *x1p, int *y1p, int *x2p, int *y2p); +EXTERN t_gobj *canvas_findhitbox(t_canvas *x, int xpos, int ypos, + int *x1p, int *y1p, int *x2p, int *y2p); EXTERN int canvas_setdeleting(t_canvas *x, int flag); +EXTERN int canvas_hasarray(t_canvas *x); + +/* ---- for parsing @pd_extra and other sys paths in filenames --------------------- */ + +EXTERN void sys_expandpathelems(const char *name, const char *result); typedef void (*t_undofn)(t_canvas *canvas, void *buf, int action); /* a function that does UNDO/REDO */ @@ -491,12 +576,10 @@ EXTERN void canvas_setundo(t_canvas *x, t_undofn undofn, void *buf, EXTERN void canvas_noundo(t_canvas *x); EXTERN int canvas_getindex(t_canvas *x, t_gobj *y); -/* T.Grill - made public for dynamic object creation */ -/* in g_editor.c */ EXTERN void canvas_connect(t_canvas *x, t_floatarg fwhoout, t_floatarg foutno,t_floatarg fwhoin, t_floatarg finno); EXTERN void canvas_disconnect(t_canvas *x, - float index1, float outno, float index2, float inno); + t_float index1, t_float outno, t_float index2, t_float inno); EXTERN int canvas_isconnected (t_canvas *x, t_text *ob1, int n1, t_text *ob2, int n2); EXTERN void canvas_selectinrect(t_canvas *x, int lox, int loy, int hix, int hiy); @@ -515,29 +598,22 @@ EXTERN void linetraverser_start(t_linetraverser *t, t_canvas *x); EXTERN t_outconnect *linetraverser_next(t_linetraverser *t); EXTERN void linetraverser_skipobject(t_linetraverser *t); -/* --------------------- functions on tscalars --------------------- */ - -EXTERN void tscalar_getrect(t_tscalar *x, t_glist *owner, - int *xp1, int *yp1, int *xp2, int *yp2); -EXTERN void tscalar_vis(t_tscalar *x, t_glist *owner, int flag); -EXTERN int tscalar_click(t_tscalar *x, int xpix, int ypix, int shift, - int alt, int dbl, int doit); - /* --------- functions on garrays (graphical arrays) -------------------- */ EXTERN t_template *garray_template(t_garray *x); /* -------------------- arrays --------------------- */ -EXTERN t_garray *graph_array(t_glist *gl, t_symbol *s, t_symbol *tmpl, - t_floatarg f, t_floatarg saveit); +EXTERN t_garray *graph_array(t_glist *gl, t_symbol *s, int argc, t_atom *argv); EXTERN t_array *array_new(t_symbol *templatesym, t_gpointer *parent); -EXTERN void array_resize(t_array *x, t_template *tmpl, int n); +EXTERN void array_resize(t_array *x, int n); EXTERN void array_free(t_array *x); +int array_joc; /* for "jump on click" array inside a graph */ /* --------------------- gpointers and stubs ---------------- */ EXTERN t_gstub *gstub_new(t_glist *gl, t_array *a); EXTERN void gstub_cutoff(t_gstub *gs); EXTERN void gpointer_setglist(t_gpointer *gp, t_glist *glist, t_scalar *x); +EXTERN void gpointer_setarray(t_gpointer *gp, t_array *array, t_word *w); /* --------------------- scalars ------------------------- */ EXTERN void word_init(t_word *wp, t_template *tmpl, t_gpointer *gp); @@ -545,22 +621,28 @@ EXTERN void word_restore(t_word *wp, t_template *tmpl, int argc, t_atom *argv); EXTERN t_scalar *scalar_new(t_glist *owner, t_symbol *templatesym); -EXTERN void scalar_getbasexy(t_scalar *x, float *basex, float *basey); +EXTERN void word_free(t_word *wp, t_template *tmpl); +EXTERN void scalar_getbasexy(t_scalar *x, t_float *basex, t_float *basey); +EXTERN void scalar_redraw(t_scalar *x, t_glist *glist); +EXTERN int template_has_elemtemplate(t_template *t, t_template *tmp); /* ------helper routines for "garrays" and "plots" -------------- */ -EXTERN int array_doclick(t_array *array, t_glist *glist, t_gobj *gobj, +EXTERN int array_doclick(t_array *array, t_glist *glist, t_scalar *sc, t_array *ap, t_symbol *elemtemplatesym, - float linewidth, float xloc, float xinc, float yloc, + t_float linewidth, t_float xloc, t_float xinc, t_float yloc, t_float scalarvis, + t_fielddesc *xfield, t_fielddesc *yfield, t_fielddesc *wfield, int xpix, int ypix, int shift, int alt, int dbl, int doit); EXTERN void array_getcoordinate(t_glist *glist, char *elem, int xonset, int yonset, int wonset, int indx, - float basex, float basey, float xinc, - float *xp, float *yp, float *wp); + t_float basex, t_float basey, t_float xinc, + t_fielddesc *xfielddesc, t_fielddesc *yfielddesc, t_fielddesc *wfielddesc, + t_float *xp1, t_float *xp2, t_float *yp, t_float *wp); EXTERN int array_getfields(t_symbol *elemtemplatesym, t_canvas **elemtemplatecanvasp, t_template **elemtemplatep, int *elemsizep, + t_fielddesc *xfielddesc, t_fielddesc *yfielddesc, t_fielddesc *wfielddesc, int *xonsetp, int *yonsetp, int *wonsetp); /* --------------------- templates ------------------------- */ @@ -580,7 +662,11 @@ EXTERN void template_setsymbol(t_template *x, t_symbol *fieldname, EXTERN t_template *gtemplate_get(t_gtemplate *x); EXTERN t_template *template_findbyname(t_symbol *s); +EXTERN int template_cancreate(t_template *tmp); +EXTERN int template_hasxy(t_template *tmp); EXTERN t_canvas *template_findcanvas(t_template *tmpl); +EXTERN void template_notify(t_template *tmpl, + t_symbol *s, int argc, t_atom *argv); EXTERN t_float template_getfloat(t_template *x, t_symbol *fieldname, t_word *wp, int loud); @@ -590,6 +676,12 @@ EXTERN t_symbol *template_getsymbol(t_template *x, t_symbol *fieldname, t_word *wp, int loud); EXTERN void template_setsymbol(t_template *x, t_symbol *fieldname, t_word *wp, t_symbol *s, int loud); +EXTERN t_float fielddesc_getcoord(t_fielddesc *f, t_template *tmpl, + t_word *wp, int loud); +EXTERN void fielddesc_setcoord(t_fielddesc *f, t_template *tmpl, + t_word *wp, t_float pix, int loud); +EXTERN t_float fielddesc_cvttocoord(t_fielddesc *f, t_float val); +EXTERN t_float fielddesc_cvtfromcoord(t_fielddesc *f, t_float coord); /* ----------------------- guiconnects, g_guiconnect.c --------- */ EXTERN t_guiconnect *guiconnect_new(t_pd *who, t_symbol *sym); @@ -599,6 +691,90 @@ EXTERN void guiconnect_notarget(t_guiconnect *x, double timedelay); EXTERN t_symbol *iemgui_raute2dollar(t_symbol *s); EXTERN t_symbol *iemgui_dollar2raute(t_symbol *s); +/* ---------- infinite undo/redo routines found in g_undo.c ------------ */ + +EXTERN t_undo_action *canvas_undo_init(t_canvas *x); +EXTERN t_undo_action *canvas_undo_add(t_canvas *x, + int type, const char *name, void *data); +EXTERN void canvas_undo_undo(t_canvas *x); +EXTERN void canvas_undo_redo(t_canvas *x); +EXTERN void canvas_undo_rebranch(t_canvas *x); +EXTERN void canvas_undo_check_canvas_pointers(t_canvas *x); +EXTERN void canvas_undo_purge_abstraction_actions(t_canvas *x); +EXTERN void canvas_undo_free(t_canvas *x); + +/* --------- 1. connect ---------- */ + +EXTERN void *canvas_undo_set_connect(t_canvas *x, + int index1, int outno, int index2, int inno); +EXTERN void canvas_undo_connect(t_canvas *x, void *z, int action); + +/* --------- 2. disconnect ------- */ + +EXTERN void *canvas_undo_set_disconnect(t_canvas *x, + int index1, int outno, int index2, int inno); +EXTERN void canvas_undo_disconnect(t_canvas *x, void *z, int action); + +/* --------- 3. cut -------------- */ + +EXTERN void *canvas_undo_set_cut(t_canvas *x, int mode); +EXTERN void canvas_undo_cut(t_canvas *x, void *z, int action); + +/* --------- 4. move ------------- */ + +EXTERN void *canvas_undo_set_move(t_canvas *x, int selected); +EXTERN void canvas_undo_move(t_canvas *x, void *z, int action); + +/* --------- 5. paste ------------ */ + +EXTERN void *canvas_undo_set_paste(t_canvas *x, int offset, int duplicate, int d_offset); +EXTERN void canvas_undo_paste(t_canvas *x, void *z, int action); + +/* --------- 6. apply ------------ */ + +EXTERN void *canvas_undo_set_apply(t_canvas *x, int n); +EXTERN void canvas_undo_apply(t_canvas *x, void *z, int action); + +/* --------- 7. arrange ---------- */ + +EXTERN void *canvas_undo_set_arrange(t_canvas *x, t_gobj *obj, int newindex); +EXTERN void canvas_undo_arrange(t_canvas *x, void *z, int action); + +/* --------- 8. canvas apply ----- */ + +EXTERN void *canvas_undo_set_canvas(t_canvas *x); +EXTERN void canvas_undo_canvas_apply(t_canvas *x, void *z, int action); + +/* --------- 9. create ----------- */ + +EXTERN void canvas_undo_create(t_canvas *x, void *z, int action); +EXTERN void *canvas_undo_set_create(t_canvas *x); + +/* --------- 10. recreate -------- */ + +EXTERN void canvas_undo_recreate(t_canvas *x, void *z, int action); +EXTERN void *canvas_undo_set_recreate(t_canvas *x, t_gobj *y, int old_pos); + +/* --------- 11. font ------------ */ + +EXTERN void canvas_undo_font(t_canvas *x, void *z, int action); +EXTERN void *canvas_undo_set_font(t_canvas *x, int font); + +/* ------------------------------- */ + + +/* ---------- interface to Qt (libQt5) with threads -------------------- */ + +void *qt_thread_main (void *); + +/* ---------- other things added by Mathieu (aug.2014) ----------------- */ + +void canvas_raise_all_cords (t_canvas *x); + +/* --------------------------------------------------------------------- */ + #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) } #endif + +#endif // PD_G_CANVAS_H diff --git a/externals/build/include/m_imp.h b/externals/build/include/m_imp.h index e82d103a0..8e42696bc 100644 --- a/externals/build/include/m_imp.h +++ b/externals/build/include/m_imp.h @@ -25,6 +25,7 @@ typedef void (*t_bangmethod)(t_pd *x); typedef void (*t_pointermethod)(t_pd *x, t_gpointer *gp); typedef void (*t_floatmethod)(t_pd *x, t_float f); typedef void (*t_symbolmethod)(t_pd *x, t_symbol *s); +typedef void (*t_blobmethod)(t_pd *x, t_blob *st); /* MP20061226 blob type */ typedef void (*t_listmethod)(t_pd *x, t_symbol *s, int argc, t_atom *argv); typedef void (*t_anymethod)(t_pd *x, t_symbol *s, int argc, t_atom *argv); @@ -41,6 +42,7 @@ struct _class t_pointermethod c_pointermethod; t_floatmethod c_floatmethod; t_symbolmethod c_symbolmethod; + t_blobmethod c_blobmethod; /* MP20061226 blob type */ t_listmethod c_listmethod; t_anymethod c_anymethod; struct _widgetbehavior *c_wb; /* "gobjs" only */ @@ -77,6 +79,6 @@ EXTERN int obj_sigoutletindex(t_object *x, int m); /* misc */ EXTERN void glob_evalfile(t_pd *ignore, t_symbol *name, t_symbol *dir); EXTERN void glob_initfromgui(void *dummy, t_symbol *s, int argc, t_atom *argv); - +EXTERN void glob_quit(void *dummy); #define __m_imp_h_ #endif /* __m_imp_h_ */ diff --git a/externals/build/include/m_pd.h b/externals/build/include/m_pd.h index 8f22b765f..10acfefad 100644 --- a/externals/build/include/m_pd.h +++ b/externals/build/include/m_pd.h @@ -8,10 +8,13 @@ extern "C" { #endif +#include <stdarg.h> + #define PD_MAJOR_VERSION 0 -#define PD_MINOR_VERSION 40 -#define PD_BUGFIX_VERSION 1 -#define PD_TEST_VERSION "" +#define PD_MINOR_VERSION 42 +#define PD_BUGFIX_VERSION 7 +#define PD_TEST_VERSION "20140813" +#define PDL2ORK /* old name for "MSW" flag -- we have to take it for the sake of many old "nmakefiles" for externs, which will define NT and not MSW */ @@ -25,8 +28,11 @@ extern "C" { #pragma warning( disable : 4305 ) /* uncast const double to float */ #pragma warning( disable : 4244 ) /* uncast float/int conversion etc. */ #pragma warning( disable : 4101 ) /* unused automatic variables */ +/* not using GNU C, __attribute__ means nothing */ +# define __attribute__(x) #endif /* _MSC_VER */ + /* the external storage class is "extern" in UNIX; in MSW it's ugly. */ #ifdef MSW #ifdef PD_INTERNAL @@ -51,15 +57,19 @@ extern "C" { #include <stddef.h> /* just for size_t -- how lame! */ #endif -#define MAXPDSTRING 1000 /* use this for anything you want */ +#define MAXPDSTRING 1000 /* must be >= FILENAME_MAX */ #define MAXPDARG 5 /* max number of args we can typecheck today */ /* signed and unsigned integer types the size of a pointer: */ -/* GG: long is the size of a pointer */ -typedef long t_int; - -typedef float t_float; /* a floating-point number at most the same size */ -typedef float t_floatarg; /* floating-point type for function calls */ +#if !defined(PD_LONGINTTYPE) +#define PD_LONGINTTYPE long +#endif +#if !defined(PD_FLOATTYPE) +#define PD_FLOATTYPE float +#endif +typedef PD_LONGINTTYPE t_int; /* pointer-size integer */ +typedef PD_FLOATTYPE t_float; /* a float type at most the same size */ +typedef PD_FLOATTYPE t_floatarg; /* float type for function calls */ typedef struct _symbol { @@ -102,6 +112,16 @@ typedef struct _gpointer /* pointer to a gobj in a glist */ t_gstub *gp_stub; /* stub which points to glist/array */ } t_gpointer; +#define PD_BLOBS 1 /* MP20070211 Use this to test for blob capability */ +/* MP20061223 blob type: */ +typedef struct _blob /* pointer to a blob */ +{ + unsigned long s_length; /* length of blob in bytes */ + unsigned char *s_data; /* pointer to 1st byte of blob */ +} t_blob; +/* ...MP20061223 blob type */ + + typedef union word { t_float w_float; @@ -110,6 +130,7 @@ typedef union word t_array *w_array; struct _glist *w_list; int w_index; + t_blob *w_blob; /* MP20061223 blob type */ } t_word; typedef enum @@ -125,7 +146,8 @@ typedef enum A_DOLLAR, A_DOLLSYM, A_GIMME, - A_CANT + A_CANT, + A_BLOB /* MP20061223 blob type */ } t_atomtype; #define A_DEFSYMBOL A_DEFSYM /* better name for this */ @@ -170,6 +192,22 @@ typedef struct _scalar /* a graphical object holding data */ { t_gobj sc_gobj; /* header for graphical object */ t_symbol *sc_template; /* template name (LATER replace with pointer) */ + int sc_x1; /* cached bbox... which is already in the */ + int sc_x2; /* GUI. Doing this right would require me */ + int sc_y1; /* to redesign the whole program. Instead */ + int sc_y2; /* please enjoy the duplication of a bbox */ + int sc_bboxcache; /* caching mechanism already in tkpath. */ + t_glist *sc_selected; /* I'm really sorry... I can't figure out + a non-stupid and non-hacky way to make + scalars in a gop patch displace right. + Pd Vanilla just redraws all of the gop + contents-- dumb. Here I keep the owner + glist handy so I can compare it to the + glist in scalar_displace_withtag. Then + if they don't match it's a gop, so the + x/y fields do not need to get updated. + That's dumb, too, but slightly less so + which is another way to say "progress" */ t_word sc_vec[1]; /* indeterminate-length array of words */ } t_scalar; @@ -183,11 +221,12 @@ typedef struct _text /* patchable object - graphical, with text */ short te_ypix; short te_width; /* requested width in chars, 0 if auto */ unsigned int te_type:2; /* from defs below */ + unsigned int te_iemgui:1; /* if this is an iemgui (for nlets color) */ } t_text; #define T_TEXT 0 /* just a textual comment */ #define T_OBJECT 1 /* a MAX style patchable object */ -#define T_MESSAGE 2 /* a MAX stype message */ +#define T_MESSAGE 2 /* a MAX style message */ #define T_ATOM 3 /* a cell to display a number or symbol */ #define te_pd te_g.g_pd @@ -212,6 +251,7 @@ EXTERN t_pd pd_canvasmaker; /* factory for creating canvases */ EXTERN t_symbol s_pointer; EXTERN t_symbol s_float; EXTERN t_symbol s_symbol; +EXTERN t_symbol s_blob; EXTERN t_symbol s_bang; EXTERN t_symbol s_list; EXTERN t_symbol s_anything; @@ -225,7 +265,7 @@ EXTERN t_symbol s_; /* --------- prototypes from the central message system ----------- */ EXTERN void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv); EXTERN void pd_forwardmess(t_pd *x, int argc, t_atom *argv); -EXTERN t_symbol *gensym(char *s); +EXTERN t_symbol *gensym(const char *s); EXTERN t_gotfn getfn(t_pd *x, t_symbol *s); EXTERN t_gotfn zgetfn(t_pd *x, t_symbol *s); EXTERN void nullfn(void); @@ -255,6 +295,7 @@ EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize); #define SETFLOAT(atom, f) ((atom)->a_type = A_FLOAT, (atom)->a_w.w_float = (f)) #define SETSYMBOL(atom, s) ((atom)->a_type = A_SYMBOL, \ (atom)->a_w.w_symbol = (s)) +#define SETBLOB(atom, st) ((atom)->a_type = A_BLOB, (atom)->a_w.w_blob = (st)) /* MP 20061226 blob type */ #define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \ (atom)->a_w.w_index = (n)) #define SETDOLLSYM(atom, s) ((atom)->a_type = A_DOLLSYM, \ @@ -263,6 +304,7 @@ EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize); EXTERN t_float atom_getfloat(t_atom *a); EXTERN t_int atom_getint(t_atom *a); EXTERN t_symbol *atom_getsymbol(t_atom *a); +EXTERN t_blob *atom_getblob(t_atom *a);/* MP 20070108 blob type */ EXTERN t_symbol *atom_gensym(t_atom *a); EXTERN t_float atom_getfloatarg(int which, int argc, t_atom *argv); EXTERN t_int atom_getintarg(int which, int argc, t_atom *argv); @@ -326,6 +368,7 @@ EXTERN void pd_bang(t_pd *x); EXTERN void pd_pointer(t_pd *x, t_gpointer *gp); EXTERN void pd_float(t_pd *x, t_float f); EXTERN void pd_symbol(t_pd *x, t_symbol *s); +EXTERN void pd_blob(t_pd *x, t_blob *st); /* MP 20061226 blob type */ EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv); EXTERN void pd_anything(t_pd *x, t_symbol *s, int argc, t_atom *argv); #define pd_class(x) (*(x)) @@ -350,6 +393,7 @@ EXTERN void outlet_bang(t_outlet *x); EXTERN void outlet_pointer(t_outlet *x, t_gpointer *gp); EXTERN void outlet_float(t_outlet *x, t_float f); EXTERN void outlet_symbol(t_outlet *x, t_symbol *s); +EXTERN void outlet_blob(t_outlet *x, t_blob *st); /* MP 20061226 blob type */ EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv); EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv); EXTERN t_symbol *outlet_getsymbol(t_outlet *x); @@ -368,6 +412,8 @@ EXTERN t_glist *canvas_getcurrent(void); EXTERN void canvas_makefilename(t_glist *c, char *file, char *result,int resultsize); EXTERN t_symbol *canvas_getdir(t_glist *x); +EXTERN char sys_font[]; /* default typeface set in s_main.c */ +EXTERN char sys_fontweight[]; /* default font weight set in s_main.c */ EXTERN int sys_fontwidth(int fontsize); EXTERN int sys_fontheight(int fontsize); EXTERN void canvas_dataproperties(t_glist *x, t_scalar *sc, t_binbuf *b); @@ -404,6 +450,7 @@ EXTERN void class_addbang(t_class *c, t_method fn); EXTERN void class_addpointer(t_class *c, t_method fn); EXTERN void class_doaddfloat(t_class *c, t_method fn); EXTERN void class_addsymbol(t_class *c, t_method fn); +EXTERN void class_addblob(t_class *c, t_method fn);/* MP 20061226 blob type */ EXTERN void class_addlist(t_class *c, t_method fn); EXTERN void class_addanything(t_class *c, t_method fn); EXTERN void class_sethelpsymbol(t_class *c, t_symbol *s); @@ -415,9 +462,15 @@ EXTERN char *class_gethelpname(t_class *c); EXTERN void class_setdrawcommand(t_class *c); EXTERN int class_isdrawcommand(t_class *c); EXTERN void class_domainsignalin(t_class *c, int onset); +EXTERN void class_set_extern_dir(t_symbol *s); #define CLASS_MAINSIGNALIN(c, type, field) \ class_domainsignalin(c, (char *)(&((type *)0)->field) - (char *)0) + /* classtable functions */ +EXTERN t_class *classtable_findbyname(t_symbol *s); +EXTERN int classtable_size(void); +EXTERN void classtable_tovec(int size, t_atom *vec); + /* prototype for functions to save Pd's to a binbuf */ typedef void (*t_savefn)(t_gobj *x, t_binbuf *b); EXTERN void class_setsavefn(t_class *c, t_savefn f); @@ -432,6 +485,7 @@ EXTERN t_propertiesfn class_getpropertiesfn(t_class *c); #define class_addpointer(x, y) class_addpointer((x), (t_method)(y)) #define class_addfloat(x, y) class_doaddfloat((x), (t_method)(y)) #define class_addsymbol(x, y) class_addsymbol((x), (t_method)(y)) +#define class_addblob(x, y) class_addblob((x), (t_method)(y)) /* MP20061226 blob type */ #define class_addlist(x, y) class_addlist((x), (t_method)(y)) #define class_addanything(x, y) class_addanything((x), (t_method)(y)) #endif @@ -440,13 +494,13 @@ EXTERN t_propertiesfn class_getpropertiesfn(t_class *c); EXTERN void post(const char *fmt, ...); EXTERN void startpost(const char *fmt, ...); EXTERN void poststring(const char *s); -EXTERN void postfloat(float f); +EXTERN void postfloat(t_floatarg f); EXTERN void postatom(int argc, t_atom *argv); EXTERN void endpost(void); -EXTERN void error(const char *fmt, ...); -EXTERN void verbose(int level, const char *fmt, ...); -EXTERN void bug(const char *fmt, ...); -EXTERN void pd_error(void *object, const char *fmt, ...); +EXTERN void error(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); +EXTERN void verbose(int level, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); +EXTERN void bug(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); +EXTERN void pd_error(void *object, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); EXTERN void sys_logerror(const char *object, const char *s); EXTERN void sys_unixerror(const char *object); EXTERN void sys_ouch(void); @@ -454,6 +508,7 @@ EXTERN void sys_ouch(void); /* ------------ system interface routines ------------------- */ EXTERN int sys_isreadablefile(const char *name); +EXTERN int sys_isabsolutepath(const char *dir); EXTERN void sys_bashfilename(const char *from, char *to); EXTERN void sys_unbashfilename(const char *from, char *to); EXTERN int open_via_path(const char *name, const char *ext, const char *dir, @@ -471,7 +526,7 @@ EXTERN int sys_trylock(void); /* --------------- signals ----------------------------------- */ -typedef float t_sample; +typedef PD_FLOATTYPE t_sample; #define MAXLOGSIG 32 #define MAXSIGSIZE (1 << MAXLOGSIG) @@ -479,7 +534,7 @@ typedef struct _signal { int s_n; /* number of points in the array */ t_sample *s_vec; /* the array */ - float s_sr; /* sample rate */ + t_float s_sr; /* sample rate */ int s_refcount; /* number of times used */ int s_isborrowed; /* whether we're going to borrow our array */ struct _signal *s_borrowedfrom; /* signal to borrow it from */ @@ -496,24 +551,24 @@ EXTERN t_int *copy_perform(t_int *args); EXTERN void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n); EXTERN void dsp_add_copy(t_sample *in, t_sample *out, int n); -EXTERN void dsp_add_scalarcopy(t_sample *in, t_sample *out, int n); +EXTERN void dsp_add_scalarcopy(t_float *in, t_sample *out, int n); EXTERN void dsp_add_zero(t_sample *out, int n); EXTERN int sys_getblksize(void); -EXTERN float sys_getsr(void); +EXTERN t_float sys_getsr(void); EXTERN int sys_get_inchannels(void); EXTERN int sys_get_outchannels(void); EXTERN void dsp_add(t_perfroutine f, int n, ...); EXTERN void dsp_addv(t_perfroutine f, int n, t_int *vec); -EXTERN void pd_fft(float *buf, int npoints, int inverse); +EXTERN void pd_fft(t_float *buf, int npoints, int inverse); EXTERN int ilog2(int n); -EXTERN void mayer_fht(float *fz, int n); -EXTERN void mayer_fft(int n, float *real, float *imag); -EXTERN void mayer_ifft(int n, float *real, float *imag); -EXTERN void mayer_realfft(int n, float *real); -EXTERN void mayer_realifft(int n, float *real); +EXTERN void mayer_fht(t_sample *fz, int n); +EXTERN void mayer_fft(int n, t_sample *real, t_sample *imag); +EXTERN void mayer_ifft(int n, t_sample *real, t_sample *imag); +EXTERN void mayer_realfft(int n, t_sample *real); +EXTERN void mayer_realifft(int n, t_sample *real); EXTERN float *cos_table; #define LOGCOSTABSIZE 9 @@ -532,13 +587,13 @@ typedef struct _resample t_int downsample; /* downsampling factor */ t_int upsample; /* upsampling factor */ - t_float *s_vec; /* here we hold the resampled data */ + t_sample *s_vec; /* here we hold the resampled data */ int s_n; - t_float *coeffs; /* coefficients for filtering... */ + t_sample *coeffs; /* coefficients for filtering... */ int coefsize; - t_float *buffer; /* buffer for filtering */ + t_sample *buffer; /* buffer for filtering */ int bufsize; } t_resample; @@ -550,18 +605,18 @@ EXTERN void resamplefrom_dsp(t_resample *x, t_sample *in, int insize, int outsiz EXTERN void resampleto_dsp(t_resample *x, t_sample *out, int insize, int outsize, int method); /* ----------------------- utility functions for signals -------------- */ -EXTERN float mtof(float); -EXTERN float ftom(float); -EXTERN float rmstodb(float); -EXTERN float powtodb(float); -EXTERN float dbtorms(float); -EXTERN float dbtopow(float); - -EXTERN float q8_sqrt(float); -EXTERN float q8_rsqrt(float); +EXTERN t_float mtof(t_float); +EXTERN t_float ftom(t_float); +EXTERN t_float rmstodb(t_float); +EXTERN t_float powtodb(t_float); +EXTERN t_float dbtorms(t_float); +EXTERN t_float dbtopow(t_float); + +EXTERN t_float q8_sqrt(t_float); +EXTERN t_float q8_rsqrt(t_float); #ifndef N32 -EXTERN float qsqrt(float); /* old names kept for extern compatibility */ -EXTERN float qrsqrt(float); +EXTERN t_float qsqrt(t_float); /* old names kept for extern compatibility */ +EXTERN t_float qrsqrt(t_float); #endif /* --------------------- data --------------------------------- */ @@ -571,7 +626,8 @@ EXTERN_STRUCT _garray; EXTERN t_class *garray_class; EXTERN int garray_getfloatarray(t_garray *x, int *size, t_float **vec); -EXTERN float garray_get(t_garray *x, t_symbol *s, t_int indx); +EXTERN int garray_getfloatwords(t_garray *x, int *size, t_word **vec); +EXTERN t_float garray_get(t_garray *x, t_symbol *s, t_int indx); EXTERN void garray_redraw(t_garray *x); EXTERN int garray_npoints(t_garray *x); EXTERN char *garray_vec(t_garray *x); @@ -588,8 +644,22 @@ EXTERN int value_setfloat(t_symbol *s, t_float f); /* ------- GUI interface - functions to send strings to TK --------- */ typedef void (*t_guicallbackfn)(t_gobj *client, t_glist *glist); -EXTERN void sys_vgui(char *fmt, ...); -EXTERN void sys_gui(char *s); +#ifdef CHECK_VGUI_ARGS +EXTERN void sys_vgui(const char *fmt, ...) + __attribute__((format(printf,1,2))); +EXTERN void sys_vguid(const char *file, int line, const char *fmt, ...) + __attribute__((format(printf,1,2))); +EXTERN void sys_vvguid(const char *file, int line, const char *fmt, va_list) + __attribute__((format(printf,3,4))); +#else +EXTERN void sys_vgui(const char *fmt, ...); +EXTERN void sys_vguid(const char *file, int line, const char *fmt, ...); +EXTERN void sys_vvguid(const char *file, int line, const char *fmt, va_list); +#endif +EXTERN void sys_gui(const char *s); +#define sys_vgui(args...) sys_vguid(__FILE__,__LINE__,args) +#define sys_gui(s) sys_vguid(__FILE__,__LINE__,"%s",s) + EXTERN void sys_pretendguibytes(int n); EXTERN void sys_queuegui(void *client, t_glist *glist, t_guicallbackfn f); EXTERN void sys_unqueuegui(void *client); @@ -606,7 +676,7 @@ extern t_class *glob_pdobject; /* object to send "pd" messages */ typedef t_class *t_externclass; EXTERN void c_extern(t_externclass *cls, t_newmethod newroutine, - t_method freeroutine, t_symbol *name, size_t size, int tiny, \ + t_method freeroutine, t_symbol *name, size_t size, int tiny, t_atomtype arg1, ...); EXTERN void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...); @@ -616,13 +686,20 @@ EXTERN void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...); #define typedmess pd_typedmess #define vmess pd_vmess +// jsarlo +EXTERN char sys_signal_line_color[8]; +EXTERN char sys_control_line_color[8]; +EXTERN char sys_iolet_select_color[8]; +EXTERN int sys_iolet_select_width; +EXTERN int sys_dropshadow; +// end jsarlo + /* A definition to help gui objects straddle 0.34-0.35 changes. If this is defined, there is a "te_xpix" field in objects, not a "te_xpos" as before: */ #define PD_USE_TE_XPIX - -#ifdef __i386__ +#if defined(__i386__) || defined(__x86_64__) /* a test for NANs and denormals. Should only be necessary on i386. */ #define PD_BADFLOAT(f) ((((*(unsigned int*)&(f))&0x7f800000)==0) || \ (((*(unsigned int*)&(f))&0x7f800000)==0x7f800000)) @@ -634,6 +711,9 @@ defined, there is a "te_xpix" field in objects, not a "te_xpos" as before: */ #define PD_BIGORSMALL(f) 0 #endif + /* get version number at run time */ +EXTERN void sys_getversion(int *major, int *minor, int *bugfix); + #if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) } #endif diff --git a/externals/build/include/s_stuff.h b/externals/build/include/s_stuff.h index 87d6596b8..862b2a44c 100644 --- a/externals/build/include/s_stuff.h +++ b/externals/build/include/s_stuff.h @@ -7,14 +7,18 @@ /* NOTE: this file describes Pd implementation details which may change in future releases. The public (stable) API is in m_pd.h. */ +#ifndef __s_stuff_h_ +#define __s_stuff_h_ + /* in s_path.c */ -typedef struct _namelist +typedef struct _namelist /* element in a linked list of stored strings */ { - struct _namelist *nl_next; - char *nl_string; + struct _namelist *nl_next; /* next in list */ + char *nl_string; /* the string */ } t_namelist; +t_namelist *pd_extrapath; t_namelist *namelist_append(t_namelist *listwas, const char *s, int allowdup); t_namelist *namelist_append_files(t_namelist *listwas, const char *s); void namelist_free(t_namelist *listwas); @@ -24,6 +28,11 @@ extern int sys_usestdpath; extern t_namelist *sys_externlist; extern t_namelist *sys_searchpath; extern t_namelist *sys_helppath; +int sys_open_absolute(const char *name, const char* ext, + char *dirresult, char **nameresult, unsigned int size, int bin, int *fdp); +int sys_trytoopenone(const char *dir, const char *name, const char* ext, + char *dirresult, char **nameresult, unsigned int size, int bin); +t_symbol *sys_decodedialog(t_symbol *s); /* s_file.c */ @@ -38,15 +47,21 @@ extern int sys_verbose; extern int sys_noloadbang; extern int sys_nogui; extern char *sys_guicmd; +#ifdef QTGUI +extern int sys_qtcanvas; +#endif EXTERN int sys_nearestfontsize(int fontsize); EXTERN int sys_hostfontsize(int fontsize); extern int sys_defaultfont; extern t_symbol *sys_libdir; /* library directory for auxilliary files */ +extern t_symbol *sys_guidir; /* directory holding pd_gui, u_pdsend, etc */ /* s_loader.c */ -int sys_load_lib(char *dirname, char *filename); +typedef int (*loader_t)(t_canvas *canvas, char *classname); /* callback type */ +EXTERN int sys_load_lib(t_canvas *canvas, char *filename); +EXTERN void sys_register_loader(loader_t loader); /* s_audio.c */ @@ -63,13 +78,13 @@ extern int sys_inchannels; extern int sys_outchannels; extern int sys_advance_samples; /* scheduler advance in samples */ extern int sys_blocksize; /* audio I/O block size in sample frames */ -extern float sys_dacsr; +extern t_float sys_dacsr; extern int sys_schedadvance; extern int sys_sleepgrain; -void sys_open_audio(int naudioindev, int *audioindev, +void sys_set_audio_settings(int naudioindev, int *audioindev, int nchindev, int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev, - int srate, int advance, int enable); + int srate, int advance, int callback); void sys_reopen_audio( void); void sys_close_audio(void); @@ -78,13 +93,19 @@ int sys_send_dacs(void); void sys_reportidle(void); void sys_set_priority(int higher); void sys_audiobuf(int nbufs); -void sys_getmeters(float *inmax, float *outmax); +void sys_getmeters(t_sample *inmax, t_sample *outmax); void sys_listdevs(void); void sys_setblocksize(int n); +EXTERN void sys_get_audio_devs(char *indevlist, int *nindevs, + char *outdevlist, int *noutdevs, int *canmulti, int *cancallback, + int maxndev, int devdescsize); +EXTERN void sys_get_audio_apis(char *buf); + /* s_midi.c */ #define MAXMIDIINDEV 16 /* max. number of input ports */ #define MAXMIDIOUTDEV 16 /* max. number of output ports */ +extern int sys_midiapi; extern int sys_nmidiin; extern int sys_nmidiout; extern int sys_midiindevlist[]; @@ -92,9 +113,16 @@ extern int sys_midioutdevlist[]; void sys_open_midi(int nmidiin, int *midiinvec, int nmidiout, int *midioutvec, int enable); + +EXTERN void sys_get_midi_apis(char *buf); +EXTERN void sys_get_midi_devs(char *indevlist, int *nindevs, + char *outdevlist, int *noutdevs, + int maxndev, int devdescsize); void sys_get_midi_params(int *pnmidiindev, int *pmidiindev, int *pnmidioutdev, int *pmidioutdev); +void sys_get_midi_apis(char *buf); + void sys_reopen_midi( void); void sys_close_midi( void); EXTERN void sys_putmidimess(int portno, int a, int b, int c); @@ -109,6 +137,22 @@ void midi_getdevs(char *indevlist, int *nindevs, void sys_do_open_midi(int nmidiindev, int *midiindev, int nmidioutdev, int *midioutdev); +#ifdef USEAPI_ALSA +EXTERN void sys_alsa_putmidimess(int portno, int a, int b, int c); +EXTERN void sys_alsa_putmidibyte(int portno, int a); +EXTERN void sys_alsa_poll_midi(void); +EXTERN void sys_alsa_setmiditimediff(double inbuftime, double outbuftime); +EXTERN void sys_alsa_midibytein(int portno, int byte); +EXTERN void sys_alsa_close_midi( void); + + + /* implemented in the system dependent MIDI code (s_midi_pm.c, etc. ) */ +void midi_alsa_getdevs(char *indevlist, int *nindevs, + char *outdevlist, int *noutdevs, int maxndev, int devdescsize); +void sys_alsa_do_open_midi(int nmidiindev, int *midiindev, + int nmidioutdev, int *midioutdev); +#endif + /* m_sched.c */ EXTERN void sys_log_error(int type); #define ERR_NOTHING 0 @@ -116,7 +160,11 @@ EXTERN void sys_log_error(int type); #define ERR_DACSLEPT 2 #define ERR_RESYNC 3 #define ERR_DATALATE 4 -void sched_set_using_dacs(int flag); + +#define SCHED_AUDIO_NONE 0 +#define SCHED_AUDIO_POLL 1 +#define SCHED_AUDIO_CALLBACK 2 +void sched_set_using_audio(int flag); /* s_inter.c */ @@ -145,6 +193,7 @@ void sys_setalarm(int microsec); void sys_setvirtualalarm( void); #endif +#define API_NONE 0 #define API_ALSA 1 #define API_OSS 2 #define API_MMIO 3 @@ -153,14 +202,14 @@ void sys_setvirtualalarm( void); #define API_SGI 6 #ifdef __linux__ -#define API_DEFAULT API_OSS -#define API_DEFSTRING "OSS" +#define API_DEFAULT API_ALSA +#define API_DEFSTRING "ALSA" #endif #ifdef MSW #define API_DEFAULT API_MMIO #define API_DEFSTRING "MMIO" #endif -#ifdef MACOSX +#ifdef __APPLE__ #define API_DEFAULT API_PORTAUDIO #define API_DEFSTRING "portaudio" #endif @@ -176,15 +225,21 @@ void sys_setvirtualalarm( void); #define DEFMIDIDEV 0 #define DEFAULTSRATE 44100 -#ifdef MSW -#define DEFAULTADVANCE 70 -#else +#ifdef _WIN32 +#define DEFAULTADVANCE 100 +#endif +#ifdef __linux__ #define DEFAULTADVANCE 50 #endif +#ifdef __APPLE__ +#define DEFAULTADVANCE 20 +#endif + +typedef void (*t_audiocallback)(void); int pa_open_audio(int inchans, int outchans, int rate, t_sample *soundin, t_sample *soundout, int framesperbuf, int nbuffers, - int indeviceno, int outdeviceno); + int indeviceno, int outdeviceno, t_audiocallback callback); void pa_close_audio(void); int pa_send_dacs(void); void sys_reportidle(void); @@ -195,7 +250,7 @@ void pa_getdevs(char *indevlist, int *nindevs, int oss_open_audio(int naudioindev, int *audioindev, int nchindev, int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev, - int *choutdev, int rate); /* IOhannes */ + int *choutdev, int rate); void oss_close_audio(void); int oss_send_dacs(void); void oss_reportidle(void); @@ -222,7 +277,7 @@ void jack_getdevs(char *indevlist, int *nindevs, int maxndev, int devdescsize); void jack_listdevs(void); -void mmio_open_audio(int naudioindev, int *audioindev, +int mmio_open_audio(int naudioindev, int *audioindev, int nchindev, int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev, int rate); void mmio_close_audio( void); @@ -233,6 +288,7 @@ void mmio_getdevs(char *indevlist, int *nindevs, int maxndev, int devdescsize); void sys_listmididevs(void); +void sys_set_midi_api(int whichapi); void sys_set_audio_api(int whichapi); void sys_get_audio_apis(char *buf); extern int sys_audioapi; @@ -245,20 +301,18 @@ void linux_alsa_devname(char *devname); void sys_get_audio_params( int *pnaudioindev, int *paudioindev, int *chindev, int *pnaudiooutdev, int *paudiooutdev, int *choutdev, - int *prate, int *padvance); + int *prate, int *padvance, int *callback); void sys_save_audio_params( int naudioindev, int *audioindev, int *chindev, int naudiooutdev, int *audiooutdev, int *choutdev, - int rate, int advance); + int rate, int advance, int callback); /* s_file.c */ typedef void (*t_printhook)(const char *s); extern t_printhook sys_printhook; /* set this to override printing */ extern int sys_printtostderr; -#ifdef MSW -#define vsnprintf _vsnprintf /* jsarlo -- alias this name for msw */ -#endif +extern int sys_k12_mode; /* jsarlo { */ @@ -272,7 +326,7 @@ EXTERN int* get_sys_main_advance(void ) ; EXTERN double* get_sys_time_per_dsp_tick(void ) ; EXTERN int* get_sys_schedblocksize(void ) ; EXTERN double* get_sys_time(void ) ; -EXTERN float* get_sys_dacsr(void ) ; +EXTERN t_float* get_sys_dacsr(void ) ; EXTERN int* get_sys_sleepgrain(void ) ; EXTERN int* get_sys_schedadvance(void ) ; @@ -298,3 +352,64 @@ EXTERN void inmidi_polyaftertouch(int portno, int pitch, int value); /* } jsarlo */ +extern t_widgetbehavior text_widgetbehavior; + +/* in x_list.c */ + /* List element for storage. Keep an atom and, in case it's a pointer, + an associated 'gpointer' to protect against stale pointers. */ +typedef struct _listelem +{ + t_atom l_a; + t_gpointer l_p; +} t_listelem; + +struct _alist +{ + t_pd l_pd; /* object to point inlets to */ + int l_n; /* number of items */ + int l_npointer; /* number of pointers */ + t_listelem *l_vec; /* pointer to items */ +}; + +#ifndef t_alist +#define t_alist struct _alist +#endif + +#if 0 /* probably won't use this version... */ +#ifdef HAVE_ALLOCA +#define LIST_ALLOCA(x, n) ( \ + (x).l_n = (n), \ + (x).l_vec = (t_listelem *)((n) < LIST_NGETBYTE ? \ + alloca((n) * sizeof(t_listelem)) : getbytes((n) * sizeof(t_listelem)))) \ +#define LIST_FREEA(x) ( \ + ((x).l_n < LIST_NGETBYTE || + (freebytes((x).l_vec, (x).l_n * sizeof(t_listelem)), 0))) + +#else +#define LIST_ALLOCA(x, n) ( \ + (x).l_n = (n), \ + (x).l_vec = (t_listelem *)getbytes((n) * sizeof(t_listelem))) +#define LIST_FREEA(x) (freebytes((x).l_vec, (x).l_n * sizeof(t_listelem))) +#endif +#endif + +#if HAVE_ALLOCA +#define XL_ATOMS_ALLOCA(x, n) ((x) = (t_atom *)((n) < LIST_NGETBYTE ? \ + alloca((n) * sizeof(t_atom)) : getbytes((n) * sizeof(t_atom)))) +#define XL_ATOMS_FREEA(x, n) ( \ + ((n) < LIST_NGETBYTE || (freebytes((x), (n) * sizeof(t_atom)), 0))) +#else +#define XL_ATOMS_ALLOCA(x, n) ((x) = (t_atom *)getbytes((n) * sizeof(t_atom))) +#define XL_ATOMS_FREEA(x, n) (freebytes((x), (n) * sizeof(t_atom))) +#endif + +EXTERN void atoms_copy(int argc, t_atom *from, t_atom *to); +EXTERN t_class *alist_class; +EXTERN void alist_init(t_alist *x); +EXTERN void alist_clear(t_alist *x); +EXTERN void alist_list(t_alist *x, t_symbol *s, int argc, t_atom *argv); +EXTERN void alist_anything(t_alist *x, t_symbol *s, int argc, t_atom *argv); +EXTERN void alist_toatoms(t_alist *x, t_atom *to); +EXTERN void alist_clone(t_alist *x, t_alist *y); + +#endif /* __s_stuff_h_ */ -- GitLab