5 #pragma warning( disable : 4244 )
6 #pragma warning( disable : 4305 )
9 /* ------------------------ image ----------------------------- */
11 static t_class
*image_class
;
22 /* widget helper functions */
24 void image_drawme(t_image
*x
, t_glist
*glist
, int firsttime
)
27 char fname
[MAXPDSTRING
];
28 canvas_makefilename(glist_getcanvas(x
->x_glist
), x
->x_fname
->s_name
,
31 sys_vgui("image create photo img%x -file %s\n",x
,fname
);
32 sys_vgui(".x%x.c create image %d %d -image img%x -tags %xS\n",
33 glist_getcanvas(glist
),text_xpix(&x
->x_obj
, glist
), text_ypix(&x
->x_obj
, glist
),x
,x
);
35 /* TODO callback from gui
36 sys_vgui("image_size logo");
40 sys_vgui(".x%x.c coords %xS \
42 glist_getcanvas(glist
), x
,
43 text_xpix(&x
->x_obj
, glist
), text_ypix(&x
->x_obj
, glist
));
49 void image_erase(t_image
* x
,t_glist
* glist
)
52 sys_vgui(".x%x.c delete %xS\n",
53 glist_getcanvas(glist
), x
);
59 /* ------------------------ image widgetbehaviour----------------------------- */
62 static void image_getrect(t_gobj
*z
, t_glist
*glist
,
63 int *xp1
, int *yp1
, int *xp2
, int *yp2
)
66 t_image
* x
= (t_image
*)z
;
71 *xp1
= text_xpix(&x
->x_obj
, glist
);
72 *yp1
= text_ypix(&x
->x_obj
, glist
);
73 *xp2
= text_xpix(&x
->x_obj
, glist
) + width
;
74 *yp2
= text_ypix(&x
->x_obj
, glist
) + height
;
77 static void image_displace(t_gobj
*z
, t_glist
*glist
,
80 t_image
*x
= (t_image
*)z
;
81 x
->x_obj
.te_xpix
+= dx
;
82 x
->x_obj
.te_ypix
+= dy
;
83 sys_vgui(".x%x.c coords %xSEL %d %d %d %d\n",
84 glist_getcanvas(glist
), x
,
85 text_xpix(&x
->x_obj
, glist
), text_ypix(&x
->x_obj
, glist
),
86 text_xpix(&x
->x_obj
, glist
) + x
->x_width
, text_ypix(&x
->x_obj
, glist
) + x
->x_height
);
88 image_drawme(x
, glist
, 0);
89 canvas_fixlinesfor(glist_getcanvas(glist
),(t_text
*) x
);
92 static void image_select(t_gobj
*z
, t_glist
*glist
, int state
)
94 t_image
*x
= (t_image
*)z
;
96 sys_vgui(".x%x.c create rectangle \
97 %d %d %d %d -tags %xSEL -outline blue\n",
98 glist_getcanvas(glist
),
99 text_xpix(&x
->x_obj
, glist
), text_ypix(&x
->x_obj
, glist
),
100 text_xpix(&x
->x_obj
, glist
) + x
->x_width
, text_ypix(&x
->x_obj
, glist
) + x
->x_height
,
104 sys_vgui(".x%x.c delete %xSEL\n",
105 glist_getcanvas(glist
), x
);
113 static void image_activate(t_gobj
*z
, t_glist
*glist
, int state
)
115 /* t_text *x = (t_text *)z;
116 t_rtext *y = glist_findrtext(glist, x);
117 if (z->g_pd != gatom_class) rtext_activate(y, state);*/
120 static void image_delete(t_gobj
*z
, t_glist
*glist
)
122 t_text
*x
= (t_text
*)z
;
123 canvas_deletelinesfor(glist_getcanvas(glist
), x
);
127 static void image_vis(t_gobj
*z
, t_glist
*glist
, int vis
)
129 t_image
* s
= (t_image
*)z
;
131 image_drawme(s
, glist
, 1);
133 image_erase(s
,glist
);
136 /* can we use the normal text save function ?? */
138 static void image_save(t_gobj
*z
, t_binbuf
*b
)
140 t_image
*x
= (t_image
*)z
;
141 binbuf_addv(b
, "ssiiss", gensym("#X"),gensym("obj"),
142 x
->x_obj
.te_xpix
, x
->x_obj
.te_ypix
,
143 gensym("image"),x
->x_fname
);
148 t_widgetbehavior image_widgetbehavior
;
150 void image_size(t_image
* x
,t_floatarg w
,t_floatarg h
) {
155 void image_color(t_image
* x
,t_symbol
* col
)
157 /* outlet_bang(x->x_obj.ob_outlet); only bang if there was a bang ..
158 so color black does the same as bang, but doesn't forward the bang
162 static void image_setwidget(void)
164 image_widgetbehavior
.w_getrectfn
= image_getrect
;
165 image_widgetbehavior
.w_displacefn
= image_displace
;
166 image_widgetbehavior
.w_selectfn
= image_select
;
167 image_widgetbehavior
.w_activatefn
= image_activate
;
168 image_widgetbehavior
.w_deletefn
= image_delete
;
169 image_widgetbehavior
.w_visfn
= image_vis
;
170 #if (PD_VERSION_MINOR > 31)
171 image_widgetbehavior
.w_clickfn
= NULL
;
172 image_widgetbehavior
.w_propertiesfn
= NULL
;
174 #if PD_MINOR_VERSION < 37
175 image_widgetbehavior
.w_savefn
= image_save
;
180 static void *image_new(t_symbol
* fname
)
182 t_image
*x
= (t_image
*)pd_new(image_class
);
184 x
->x_glist
= (t_glist
*) canvas_getcurrent();
190 outlet_new(&x
->x_obj
, &s_float
);
194 void image_setup(void)
196 image_class
= class_new(gensym("image"), (t_newmethod
)image_new
, 0,
197 sizeof(t_image
),0, A_DEFSYM
,0);
200 class_addmethod(image_class, (t_method)image_size, gensym("size"),
201 A_FLOAT, A_FLOAT, 0);
203 class_addmethod(image_class, (t_method)image_color, gensym("color"),
207 class_addmethod(image_class, (t_method)image_open, gensym("open"),
211 class_setwidget(image_class
,&image_widgetbehavior
);
212 #if PD_MINOR_VERSION >= 37
213 class_setsavefn(image_class
,&image_save
);
219 #include "g_canvas.h"
222 #pragma warning( disable : 4244 )
223 #pragma warning( disable : 4305 )
226 /* ------------------------ image ----------------------------- */
228 static t_class
*image_class
;
230 typedef struct _image
239 /* widget helper functions */
241 void image_drawme(t_image
*x
, t_glist
*glist
, int firsttime
)
244 char fname
[MAXPDSTRING
];
245 canvas_makefilename(glist_getcanvas(x
->x_glist
), x
->x_fname
->s_name
,
248 sys_vgui("image create photo img%x -file %s\n",x
,fname
);
249 sys_vgui(".x%x.c create image %d %d -image img%x -tags %xS\n",
250 glist_getcanvas(glist
),text_xpix(&x
->x_obj
, glist
), text_ypix(&x
->x_obj
, glist
),x
,x
);
252 /* TODO callback from gui
253 sys_vgui("image_size logo");
257 sys_vgui(".x%x.c coords %xS \
259 glist_getcanvas(glist
), x
,
260 text_xpix(&x
->x_obj
, glist
), text_ypix(&x
->x_obj
, glist
));
266 void image_erase(t_image
* x
,t_glist
* glist
)
269 sys_vgui(".x%x.c delete %xS\n",
270 glist_getcanvas(glist
), x
);
276 /* ------------------------ image widgetbehaviour----------------------------- */
279 static void image_getrect(t_gobj
*z
, t_glist
*glist
,
280 int *xp1
, int *yp1
, int *xp2
, int *yp2
)
283 t_image
* x
= (t_image
*)z
;
287 height
= x
->x_height
;
288 *xp1
= text_xpix(&x
->x_obj
, glist
);
289 *yp1
= text_ypix(&x
->x_obj
, glist
);
290 *xp2
= text_xpix(&x
->x_obj
, glist
) + width
;
291 *yp2
= text_ypix(&x
->x_obj
, glist
) + height
;
294 static void image_displace(t_gobj
*z
, t_glist
*glist
,
297 t_image
*x
= (t_image
*)z
;
298 x
->x_obj
.te_xpix
+= dx
;
299 x
->x_obj
.te_ypix
+= dy
;
300 sys_vgui(".x%x.c coords %xSEL %d %d %d %d\n",
301 glist_getcanvas(glist
), x
,
302 text_xpix(&x
->x_obj
, glist
), text_ypix(&x
->x_obj
, glist
),
303 text_xpix(&x
->x_obj
, glist
) + x
->x_width
, text_ypix(&x
->x_obj
, glist
) + x
->x_height
);
305 image_drawme(x
, glist
, 0);
306 canvas_fixlinesfor(glist_getcanvas(glist
),(t_text
*) x
);
309 static void image_select(t_gobj
*z
, t_glist
*glist
, int state
)
311 t_image
*x
= (t_image
*)z
;
313 sys_vgui(".x%x.c create rectangle \
314 %d %d %d %d -tags %xSEL -outline blue\n",
315 glist_getcanvas(glist
),
316 text_xpix(&x
->x_obj
, glist
), text_ypix(&x
->x_obj
, glist
),
317 text_xpix(&x
->x_obj
, glist
) + x
->x_width
, text_ypix(&x
->x_obj
, glist
) + x
->x_height
,
321 sys_vgui(".x%x.c delete %xSEL\n",
322 glist_getcanvas(glist
), x
);
330 static void image_activate(t_gobj
*z
, t_glist
*glist
, int state
)
332 /* t_text *x = (t_text *)z;
333 t_rtext *y = glist_findrtext(glist, x);
334 if (z->g_pd != gatom_class) rtext_activate(y, state);*/
337 static void image_delete(t_gobj
*z
, t_glist
*glist
)
339 t_text
*x
= (t_text
*)z
;
340 canvas_deletelinesfor(glist_getcanvas(glist
), x
);
344 static void image_vis(t_gobj
*z
, t_glist
*glist
, int vis
)
346 t_image
* s
= (t_image
*)z
;
348 image_drawme(s
, glist
, 1);
350 image_erase(s
,glist
);
353 /* can we use the normal text save function ?? */
355 static void image_save(t_gobj
*z
, t_binbuf
*b
)
357 t_image
*x
= (t_image
*)z
;
358 binbuf_addv(b
, "ssiiss", gensym("#X"),gensym("obj"),
359 x
->x_obj
.te_xpix
, x
->x_obj
.te_ypix
,
360 gensym("image"),x
->x_fname
);
365 t_widgetbehavior image_widgetbehavior
;
367 void image_size(t_image
* x
,t_floatarg w
,t_floatarg h
) {
372 void image_color(t_image
* x
,t_symbol
* col
)
374 /* outlet_bang(x->x_obj.ob_outlet); only bang if there was a bang ..
375 so color black does the same as bang, but doesn't forward the bang
379 static void image_setwidget(void)
381 image_widgetbehavior
.w_getrectfn
= image_getrect
;
382 image_widgetbehavior
.w_displacefn
= image_displace
;
383 image_widgetbehavior
.w_selectfn
= image_select
;
384 image_widgetbehavior
.w_activatefn
= image_activate
;
385 image_widgetbehavior
.w_deletefn
= image_delete
;
386 image_widgetbehavior
.w_visfn
= image_vis
;
387 #if (PD_VERSION_MINOR > 31)
388 image_widgetbehavior
.w_clickfn
= NULL
;
389 image_widgetbehavior
.w_propertiesfn
= NULL
;
391 #if PD_MINOR_VERSION < 37
392 image_widgetbehavior
.w_savefn
= image_save
;
397 static void *image_new(t_symbol
* fname
)
399 t_image
*x
= (t_image
*)pd_new(image_class
);
401 x
->x_glist
= (t_glist
*) canvas_getcurrent();
407 outlet_new(&x
->x_obj
, &s_float
);
411 void image_setup(void)
413 image_class
= class_new(gensym("image"), (t_newmethod
)image_new
, 0,
414 sizeof(t_image
),0, A_DEFSYM
,0);
417 class_addmethod(image_class, (t_method)image_size, gensym("size"),
418 A_FLOAT, A_FLOAT, 0);
420 class_addmethod(image_class, (t_method)image_color, gensym("color"),
424 class_addmethod(image_class, (t_method)image_open, gensym("open"),
428 class_setwidget(image_class
,&image_widgetbehavior
);
429 #if PD_MINOR_VERSION >= 37
430 class_setsavefn(image_class
,&image_save
);