Update of /cvsroot/pure-data/externals/tkwidgets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6801
Modified Files: text.c Added Files: frosch.gif photo-help.pd photo.c volga.gif Log Message: got a quick working example pretty much straight from ggee's image.c; I need to get the shared dylib working before working on a new objectclass
--- NEW FILE: frosch.gif --- (This appears to be a binary file; contents omitted.)
--- NEW FILE: volga.gif --- (This appears to be a binary file; contents omitted.)
--- NEW FILE: photo.c --- /* [photo] object for dislaying images in a patch
Copyright (C) 2002-2004 Guenter Geiger Copyright (C) 2007 Hans-Christoph Steiner hans@at.or.at
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
This is part of the tkwidgets library for Pd.
*/
#include "shared/tkwidgets.h"
/* ------------------------ photo ----------------------------- */
static t_class *photo_class;
typedef struct _photo { t_object x_obj; t_glist* x_glist; t_symbol* receive_name; int x_width; int x_height; t_symbol* filename; } t_photo;
static char *photo_tk_options[] = { "activeimage", "disabledimage", "gamma", "image", "state" };
/* widget helper functions */
void photo_drawme(t_photo *x, t_glist *glist, int firsttime) { if (firsttime) { char fname[MAXPDSTRING]; canvas_makefilename(glist_getcanvas(x->x_glist), x->filename->s_name, fname, MAXPDSTRING);
sys_vgui("image create photo img%x -file {%s}\n", x, fname); sys_vgui(".x%x.c create image %d %d -image img%x -anchor nw -tags %xS\n", glist_getcanvas(glist),text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),x,x);
/* TODO callback from gui sys_vgui("photo_size logo"); */ } else { sys_vgui(".x%x.c coords %xS %d %d\n", glist_getcanvas(glist), x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist)); } }
void photo_erase(t_photo* x,t_glist* glist) { int n; sys_vgui(".x%x.c delete %xS\n", glist_getcanvas(glist), x);
}
/* ------------------------ photo widgetbehaviour----------------------------- */
static void photo_getrect(t_gobj *z, t_glist *glist, int *xp1, int *yp1, int *xp2, int *yp2) { t_photo* x = (t_photo*)z;
*xp1 = text_xpix(&x->x_obj, glist); *yp1 = text_ypix(&x->x_obj, glist); *xp2 = text_xpix(&x->x_obj, glist) + x->x_width; *yp2 = text_ypix(&x->x_obj, glist) + x->x_height; }
static void photo_displace(t_gobj *z, t_glist *glist, int dx, int dy) { t_photo *x = (t_photo *)z; x->x_obj.te_xpix += dx; x->x_obj.te_ypix += dy; sys_vgui(".x%x.c coords %xSEL %d %d %d %d\n", glist_getcanvas(glist), x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist), text_xpix(&x->x_obj, glist) + x->x_width, text_ypix(&x->x_obj, glist) + x->x_height);
photo_drawme(x, glist, 0); canvas_fixlinesfor(glist_getcanvas(glist),(t_text*) x); }
static void photo_select(t_gobj *z, t_glist *glist, int state) { t_photo *x = (t_photo *)z; if (state) { sys_vgui(".x%x.c create rectangle \ %d %d %d %d -tags %xSEL -outline blue\n", glist_getcanvas(glist), text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist), text_xpix(&x->x_obj, glist) + x->x_width, text_ypix(&x->x_obj, glist) + x->x_height, x); } else { sys_vgui(".x%x.c delete %xSEL\n", glist_getcanvas(glist), x); } }
static void photo_activate(t_gobj *z, t_glist *glist, int state) { /* t_text *x = (t_text *)z; t_rtext *y = glist_findrtext(glist, x); if (z->g_pd != gatom_class) rtext_activate(y, state);*/ }
static void photo_delete(t_gobj *z, t_glist *glist) { t_text *x = (t_text *)z; canvas_deletelinesfor(glist_getcanvas(glist), x); }
static void photo_vis(t_gobj *z, t_glist *glist, int vis) { t_photo* s = (t_photo*)z; if (vis) photo_drawme(s, glist, 1); else photo_erase(s,glist); }
/* can we use the normal text save function ?? */
static void photo_save(t_gobj *z, t_binbuf *b) { t_photo *x = (t_photo *)z; binbuf_addv(b, "ssiiss;", gensym("#X"), gensym("obj"), x->x_obj.te_xpix, x->x_obj.te_ypix, atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)), x->filename); }
void photo_size(t_photo* x,t_floatarg w,t_floatarg h) { x->x_width = w; x->x_height = h; }
void photo_open(t_photo* x, t_symbol* fname) { x->filename = fname; photo_erase(x, x->x_glist); photo_drawme(x, x->x_glist, 1); }
static void photo_free(t_photo *x) { pd_unbind(&x->x_obj.ob_pd, x->receive_name); }
static void *photo_new(t_symbol* s) { t_photo *x = (t_photo *)pd_new(photo_class);
x->x_glist = (t_glist*) canvas_getcurrent();
x->x_width = 15; x->x_height = 15;
x->x_glist = canvas_getcurrent();
x->filename = s; outlet_new(&x->x_obj, &s_float); return (x); }
static t_widgetbehavior photo_widgetbehavior = { w_getrectfn: photo_getrect, w_displacefn: photo_displace, w_selectfn: photo_select, w_activatefn: photo_activate, w_deletefn: photo_delete, w_visfn: photo_vis, w_clickfn: NULL, };
void photo_setup(void) { photo_class = class_new(gensym("photo"), (t_newmethod)photo_new, (t_method)photo_free, sizeof(t_photo), 0, A_DEFSYM,0);
class_addmethod(photo_class, (t_method)photo_size, gensym("size"), A_FLOAT, A_FLOAT, 0);
/* class_addmethod(photo_class, (t_method)photo_color, gensym("color"), A_SYMBOL, 0); */
class_addmethod(photo_class, (t_method)photo_open, gensym("open"), A_SYMBOL, 0); class_setwidget(photo_class, &photo_widgetbehavior); class_setsavefn(photo_class, &photo_save); }
Index: text.c =================================================================== RCS file: /cvsroot/pure-data/externals/tkwidgets/text.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** text.c 14 Nov 2007 02:53:03 -0000 1.1 --- text.c 14 Nov 2007 03:51:35 -0000 1.2 *************** *** 46,50 **** t_glist* x_glist;
! t_symbol* x_receive_name;
int x_height; --- 46,50 ---- t_glist* x_glist;
! t_symbol* receive_name;
int x_height; *************** *** 77,81 **** static t_class *textwidget_class;
! static char *tk_options[] = { "autoseparators", "background", --- 77,81 ---- static t_class *textwidget_class;
! static char *textwidget_tk_options[] = { "autoseparators", "background", *************** *** 309,313 **** bind_button_events(x); sys_vgui("bind %s <KeyRelease> {+pd %s keyup %%N \;} \n", ! x->text_id, x->x_receive_name->s_name); }
--- 309,313 ---- bind_button_events(x); sys_vgui("bind %s <KeyRelease> {+pd %s keyup %%N \;} \n", ! x->text_id, x->receive_name->s_name); }
*************** *** 428,436 **** sys_vgui("raise %s\n", x->handle_id); sys_vgui("bind %s <Button> {pd [concat %s resize_click 1 \;]}\n", ! x->handle_id, x->x_receive_name->s_name); sys_vgui("bind %s <ButtonRelease> {pd [concat %s resize_click 0 \;]}\n", ! x->handle_id, x->x_receive_name->s_name); sys_vgui("bind %s <Motion> {pd [concat %s resize_motion %%x %%y \;]}\n", ! x->handle_id, x->x_receive_name->s_name); } } --- 428,436 ---- sys_vgui("raise %s\n", x->handle_id); sys_vgui("bind %s <Button> {pd [concat %s resize_click 1 \;]}\n", ! x->handle_id, x->receive_name->s_name); sys_vgui("bind %s <ButtonRelease> {pd [concat %s resize_click 0 \;]}\n", ! x->handle_id, x->receive_name->s_name); sys_vgui("bind %s <Motion> {pd [concat %s resize_motion %%x %%y \;]}\n", ! x->handle_id, x->receive_name->s_name); } } *************** *** 552,556 **** sys_vgui("pd [concat %s output [string map {"," "\\," ";" "\\;"} \ [%s get 0.0 end]] \;]\n", ! x->x_receive_name->s_name, x->text_id); }
--- 552,556 ---- sys_vgui("pd [concat %s output [string map {"," "\\," ";" "\\;"} \ [%s get 0.0 end]] \;]\n", ! x->receive_name->s_name, x->text_id); }
*************** *** 719,723 **** static void textwidget_free(t_textwidget *x) { ! pd_unbind(&x->x_obj.ob_pd, x->x_receive_name); }
--- 719,723 ---- static void textwidget_free(t_textwidget *x) { ! pd_unbind(&x->x_obj.ob_pd, x->receive_name); }
*************** *** 755,770 ****
sprintf(buf,"#%s", x->tcl_namespace); ! x->x_receive_name = gensym(buf); ! pd_bind(&x->x_obj.ob_pd, x->x_receive_name);
x->x_glist = canvas_getcurrent(); set_tk_widget_ids(x, x->x_glist); ! int i; ! int option_argc = sizeof(tk_options)/sizeof(char *); post("total options: %d", option_argc); for(i = 0; i < option_argc; i++) { ! post("option %d: %s", i, tk_options[i]); }
--- 755,770 ----
sprintf(buf,"#%s", x->tcl_namespace); ! x->receive_name = gensym(buf); ! pd_bind(&x->x_obj.ob_pd, x->receive_name);
x->x_glist = canvas_getcurrent(); set_tk_widget_ids(x, x->x_glist); ! int i; ! int option_argc = sizeof(textwidget_tk_options)/sizeof(char *); post("total options: %d", option_argc); for(i = 0; i < option_argc; i++) { ! post("option %d: %s", i, textwidget_tk_options[i]); }
--- NEW FILE: photo-help.pd --- #N canvas 140 178 568 628 10; #X text 19 18 Incorporate images. This is instantiated with; #X msg 86 132 open $1; #X obj 86 88 bng 15 250 50 0 empty empty empty 0 -6 0 10 -4034 -1 -1 ; #X obj 86 109 openpanel; #X obj 66 555 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144 -1 -1; #X msg 265 152 size $1 $2; #X obj 265 129 pack 0 0; #X obj 313 106 hsl 128 15 0 127 0 0 empty empty y 7 7 0 10 -203904 -1 -1 0 1; #X obj 263 88 hsl 128 15 0 127 0 0 empty empty x 7 7 0 10 -204800 -1 -1 0 1; #X obj 309 337 photo frosch.gif; #X obj 101 336 photo volga.gif; #X text 19 34 [photo volga.gif]; #X text 17 57 [photo] works with .gif , .ppm , and .pgm image formats only.; #X connect 1 0 10 0; #X connect 2 0 3 0; #X connect 3 0 1 0; #X connect 5 0 10 0; #X connect 6 0 5 0; #X connect 7 0 6 1; #X connect 8 0 6 0; #X connect 10 0 4 0;