g_mycanvas.c 15.1 KB
Newer Older
Miller Puckette's avatar
Miller Puckette committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* Copyright (c) 1997-1999 Miller Puckette.
 * For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */

/* g_7_guis.c written by Thomas Musil (c) IEM KUG Graz Austria 2000-2001 */
/* thanks to Miller Puckette, Guenther Geiger and Krzystof Czaja */

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "m_pd.h"
#include "g_canvas.h"
#include "g_all_guis.h"
#include <math.h>

16
17
18
extern int gfxstub_haveproperties(void *key);
void my_canvas_draw_select(t_my_canvas* x, t_glist* glist);

Miller Puckette's avatar
Miller Puckette committed
19
t_widgetbehavior my_canvas_widgetbehavior;
20
/*static*/ t_class *my_canvas_class;
Miller Puckette's avatar
Miller Puckette committed
21
22
23
24

void my_canvas_draw_new(t_my_canvas *x, t_glist *glist)
{
    t_canvas *canvas=glist_getcanvas(glist);
25
26
27
28
    int x1=text_xpix(&x->x_gui.x_obj, glist);
    int y1=text_ypix(&x->x_gui.x_obj, glist);

    sys_vgui(".x%lx.c create prect %d %d %d %d -fill #%6.6x -stroke #%6.6x "
29
        "-tags {%lxRECT x%lx text iemgui}\n",
30
        canvas, x1, y1, x1+x->x_vis_w, y1+x->x_vis_h,
31
        x->x_gui.x_bcol, x->x_gui.x_bcol, x, x);
32
    sys_vgui(".x%lx.c create prect %d %d %d %d -stroke #%6.6x "
33
        "-tags {%lxBASE x%lx text iemgui}\n",
34
        canvas, x1, y1, x1+x->x_gui.x_w, y1+x->x_gui.x_h,
35
        x->x_gui.x_bcol, x, x);
Jonathan Wilkes's avatar
Jonathan Wilkes committed
36
37
    char colorbuf[MAXPDSTRING];
    sprintf(colorbuf, "#%6.6x", x->x_gui.x_bcol);
38
39
    gui_vmess("gui_text_create_gobj", "sssiii", canvas_tag(canvas),
        gobj_tag(x), "iemgui", x1, y1, glist_istoplevel(canvas));
40
41
    gui_vmess("gui_create_mycanvas", "sssiiiiii", canvas_tag(canvas),
        gobj_tag(x), colorbuf, x1, y1, x1+x->x_vis_w, y1+x->x_vis_h,
Jonathan Wilkes's avatar
Jonathan Wilkes committed
42
        x1+x->x_gui.x_w, y1+x->x_gui.x_h);
Miller Puckette's avatar
Miller Puckette committed
43
44
45
46
}

void my_canvas_draw_move(t_my_canvas *x, t_glist *glist)
{
47
48
    t_canvas *canvas=glist_getcanvas(glist);
    if (!glist_isvisible(canvas)) return;
49
50
    int x1=text_xpix(&x->x_gui.x_obj, glist);
    int y1=text_ypix(&x->x_gui.x_obj, glist);
Miller Puckette's avatar
Miller Puckette committed
51

52
    sys_vgui(".x%lx.c coords %lxRECT %d %d %d %d\n",
53
        canvas, x, x1, y1, x1+x->x_vis_w, y1+x->x_vis_h);
54
    sys_vgui(".x%lx.c coords %lxBASE %d %d %d %d\n",
55
        canvas, x, x1, y1, x1+x->x_gui.x_w, y1+x->x_gui.x_h);
56
    gui_vmess("gui_mycanvas_coords", "ssiiii",
57
        canvas_tag(canvas), gobj_tag(x),
58
        x->x_vis_w, x->x_vis_h, x->x_gui.x_w, x->x_gui.x_h);
Miller Puckette's avatar
Miller Puckette committed
59
60
61
62
63
}

void my_canvas_draw_config(t_my_canvas* x, t_glist* glist)
{
    t_canvas *canvas=glist_getcanvas(glist);
64
65
66
    int isselected;
    //sys_vgui(".x%lx.c itemconfigure %lxRECT -fill #%6.6x -stroke #%6.6x\n",
    //         canvas, x, x->x_gui.x_bcol, x->x_gui.x_bcol);
67
    char bcol[8]; sprintf(bcol, "#%6.6x", x->x_gui.x_bcol);
68
69
70
71
72
    //sys_vgui(".x%lx.c itemconfigure %lxBASE -stroke %s\n", canvas, x,
    //    x->x_gui.x_selected == canvas && x->x_gui.x_glist == canvas ?
    //    "$pd_colors(selection)" : bcol);
    isselected = x->x_gui.x_selected == canvas && x->x_gui.x_glist == canvas;
    gui_vmess("gui_update_mycanvas", "sssi",
73
        canvas_tag(canvas), gobj_tag(x), bcol, isselected);
Miller Puckette's avatar
Miller Puckette committed
74
75
76
77
78
}

void my_canvas_draw_select(t_my_canvas* x, t_glist* glist)
{
    t_canvas *canvas=glist_getcanvas(glist);
79
80
81
    if (x->x_gui.x_glist != glist_getcanvas(glist)) return;
    char bcol[8]; sprintf(bcol, "#%6.6x", x->x_gui.x_bcol);
    sys_vgui(".x%lx.c itemconfigure %lxBASE -stroke %s\n", canvas, x,
82
        x->x_gui.x_selected == canvas && x->x_gui.x_glist == canvas ?
83
        "$pd_colors(selection)" : bcol);
84
85
86
    gui_vmess("gui_mycanvas_select_color", "sss",
        canvas_tag(canvas), gobj_tag(x),
        x->x_gui.x_selected == canvas && x->x_gui.x_glist == canvas ?
Jonathan Wilkes's avatar
Jonathan Wilkes committed
87
            "blue" : bcol); 
88
89
}

90
static void my_canvas__clickhook(t_scalehandle *sh, int newstate)
91
{
Ivica Bukvic's avatar
Ivica Bukvic committed
92
    t_my_canvas *x = (t_my_canvas *)(sh->h_master);
93
    if (sh->h_dragon && newstate == 0 && sh->h_scale)
Miller Puckette's avatar
Miller Puckette committed
94
    {
Ivica Bukvic's avatar
Ivica Bukvic committed
95
96
97
        canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x);
        if (sh->h_dragx || sh->h_dragy)
        {
98
99
            x->x_vis_w += sh->h_dragx;
            x->x_vis_h += sh->h_dragy;
Ivica Bukvic's avatar
Ivica Bukvic committed
100
101
            canvas_dirty(x->x_gui.x_glist, 1);
        }
102
103
104
105
106
107
108
109
110
111
112
113
        // if select area is larger tahn the visible arae
        // make select area match that of the dragged one
        // so that we don't have to go into properties to 
        // manually adjust this
        if (x->x_vis_w < x->x_gui.x_w)
            x->x_gui.x_w = x->x_vis_w;
        if (x->x_vis_h < x->x_gui.x_h)
            x->x_gui.x_h = x->x_vis_h;
        if (x->x_gui.x_w < x->x_gui.x_h)
            x->x_gui.x_h = x->x_gui.x_w;
        else
            x->x_gui.x_w = x->x_gui.x_h;
Ivica Bukvic's avatar
Ivica Bukvic committed
114
115
116
        if (glist_isvisible(x->x_gui.x_glist))
        {
            my_canvas_draw_move(x, x->x_gui.x_glist);
117
            scalehandle_unclick_scale(sh);
Ivica Bukvic's avatar
Ivica Bukvic committed
118
        }
Miller Puckette's avatar
Miller Puckette committed
119
    }
120
    iemgui__clickhook3(sh,newstate);
121
122
}

123
static void my_canvas__motionhook(t_scalehandle *sh, t_floatarg f1, t_floatarg f2)
124
{
125
    if (sh->h_dragon && sh->h_scale)
126
    {
Ivica Bukvic's avatar
Ivica Bukvic committed
127
128
        t_my_canvas *x = (t_my_canvas *)(sh->h_master);
        int dx = (int)f1, dy = (int)f2;
129
130
        dx = maxi(dx,1-x->x_vis_w);
        dy = maxi(dy,1-x->x_vis_h);        
Ivica Bukvic's avatar
Ivica Bukvic committed
131
132
        sh->h_dragx = dx;
        sh->h_dragy = dy;
133
        scalehandle_drag_scale(sh);
Ivica Bukvic's avatar
Ivica Bukvic committed
134
135
136
137

        int properties = gfxstub_haveproperties((void *)x);
        if (properties)
        {
138
139
            int new_w = x->x_vis_w + sh->h_dragx;
            int new_h = x->x_vis_h + sh->h_dragy;
140
141
142
            properties_set_field_int(properties,"rng.min_ent",new_w);
            properties_set_field_int(properties,"rng.max_ent",new_h);

Ivica Bukvic's avatar
Ivica Bukvic committed
143
144
145
            int min = (new_w < new_h ? new_w : new_h);
            if (min <= x->x_gui.x_w)
            {
146
                properties_set_field_int(properties,"dim.w_ent",min);
Ivica Bukvic's avatar
Ivica Bukvic committed
147
148
149
            }
        }
    }
150
    scalehandle_dragon_label(sh,f1,f2);
Miller Puckette's avatar
Miller Puckette committed
151
152
153
154
}

void my_canvas_draw(t_my_canvas *x, t_glist *glist, int mode)
{
155
156
157
158
    if(mode == IEM_GUI_DRAW_MODE_MOVE)        my_canvas_draw_move(x, glist);
    else if(mode == IEM_GUI_DRAW_MODE_NEW)    my_canvas_draw_new(x, glist);
    else if(mode == IEM_GUI_DRAW_MODE_SELECT) my_canvas_draw_select(x, glist);
    else if(mode == IEM_GUI_DRAW_MODE_CONFIG) my_canvas_draw_config(x, glist);
Miller Puckette's avatar
Miller Puckette committed
159
160
161
162
}

/* ------------------------ cnv widgetbehaviour----------------------------- */

Ivica Bukvic's avatar
Ivica Bukvic committed
163
164
static void my_canvas_getrect(t_gobj *z, t_glist *glist,
    int *xp1, int *yp1, int *xp2, int *yp2)
Miller Puckette's avatar
Miller Puckette committed
165
166
167
168
169
{
    t_my_canvas *x = (t_my_canvas *)z;
    
    *xp1 = text_xpix(&x->x_gui.x_obj, glist);
    *yp1 = text_ypix(&x->x_gui.x_obj, glist);
170
    if (!glist_istoplevel(glist) || !glist->gl_edit)
Ivica Bukvic's avatar
Ivica Bukvic committed
171
172
    {
        //if we are trying to calculate visibility of a widget inside a GOP
173
        //or are calculating getrect during runtime
Ivica Bukvic's avatar
Ivica Bukvic committed
174
175
176
177
178
179
180
181
182
        *xp2 = *xp1 + x->x_vis_w;
        *yp2 = *yp1 + x->x_vis_h;
    }
    else
    {
        *xp2 = *xp1 + x->x_gui.x_w;
        *yp2 = *yp1 + x->x_gui.x_h;
    }
    iemgui_label_getrect(x->x_gui, glist, xp1, yp1, xp2, yp2);
Miller Puckette's avatar
Miller Puckette committed
183
184
185
186
187
188
189
190
}

static void my_canvas_save(t_gobj *z, t_binbuf *b)
{
    t_my_canvas *x = (t_my_canvas *)z;
    int bflcol[3];
    t_symbol *srl[3];
    iemgui_save(&x->x_gui, srl, bflcol);
191
192
193
194
195
196
    binbuf_addv(b, "ssiisiiisssiiiiiii;", gensym("#X"),gensym("obj"),
        (int)x->x_gui.x_obj.te_xpix, (int)x->x_gui.x_obj.te_ypix,
        gensym("cnv"), x->x_gui.x_w, x->x_vis_w, x->x_vis_h,
        srl[0], srl[1], srl[2], x->x_gui.x_ldx, x->x_gui.x_ldy,
        iem_fstyletoint(&x->x_gui), x->x_gui.x_fontsize,
        bflcol[0], bflcol[2], iem_symargstoint(&x->x_gui));
Miller Puckette's avatar
Miller Puckette committed
197
198
199
200
201
}

static void my_canvas_properties(t_gobj *z, t_glist *owner)
{
    t_my_canvas *x = (t_my_canvas *)z;
202
    char buf[800], *gfx_tag;
Miller Puckette's avatar
Miller Puckette committed
203
204
205
    t_symbol *srl[3];

    iemgui_properties(&x->x_gui, srl);
Miller Puckette's avatar
Miller Puckette committed
206
    sprintf(buf, "pdtk_iemgui_dialog %%s |cnv| \
Miller Puckette's avatar
Miller Puckette committed
207
208
209
            ------selectable_dimensions(pix):------ %d %d size: 0.0 0.0 empty \
            ------visible_rectangle(pix)(pix):------ %d width: %d height: %d \
            %d empty empty %d %d empty %d \
Ivica Ico Bukvic's avatar
Ivica Ico Bukvic committed
210
211
            {%s} {%s} \
            {%s} %d %d \
Miller Puckette's avatar
Miller Puckette committed
212
213
214
215
216
217
218
            %d %d \
            %d %d %d\n",
            x->x_gui.x_w, 1,
            x->x_vis_w, x->x_vis_h, 0,/*no_schedule*/
            -1, -1, -1, -1,/*no linlog, no init, no multi*/
            srl[0]->s_name, srl[1]->s_name,
            srl[2]->s_name, x->x_gui.x_ldx, x->x_gui.x_ldy,
219
            x->x_gui.x_font_style, x->x_gui.x_fontsize,
Miller Puckette's avatar
Miller Puckette committed
220
            0xffffff & x->x_gui.x_bcol, -1/*no frontcolor*/, 0xffffff & x->x_gui.x_lcol);
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
    //gfxstub_new(&x->x_gui.x_obj.ob_pd, x, buf);

    gfx_tag = gfxstub_new2(&x->x_gui.x_obj.ob_pd, x);
    /* todo: send along the x/y of the object here so we can
       create the window in the right place */

    gui_start_vmess("gui_iemgui_dialog", "s", gfx_tag);
    gui_start_array();

    gui_s("type");           gui_s("cnv");
    gui_s("selection-size"); gui_i(x->x_gui.x_w);
    gui_s("visible-width");  gui_i(x->x_vis_w);
    gui_s("visible-height"); gui_i(x->x_vis_h);
    gui_s("minimum-size");   gui_i(IEM_GUI_MINSIZE);

    gui_s("range-schedule"); // no idea what this is...
    gui_i(0);

    gui_s("send-symbol"); gui_s(srl[0]->s_name);
    gui_s("receive-symbol"); gui_s(srl[1]->s_name);
    gui_s("label"); gui_s(srl[2]->s_name);
    gui_s("x-offset"); gui_i(x->x_gui.x_ldx);
    gui_s("y-offset");  gui_i(x->x_gui.x_ldy);
    gui_s("font-style"); gui_i(x->x_gui.x_font_style);
    gui_s("font-size"); gui_i(x->x_gui.x_fontsize);
    gui_s("background-color"); gui_i(0xffffff & x->x_gui.x_bcol);
    gui_s("foreground-color"); gui_i(0xffffff & x->x_gui.x_fcol);
    gui_s("label-color"); gui_i(0xffffff & x->x_gui.x_lcol);
    
    gui_end_array();
    gui_end_vmess();
Miller Puckette's avatar
Miller Puckette committed
252
253
254
255
}

static void my_canvas_get_pos(t_my_canvas *x)
{
256
    if(iemgui_has_snd(&x->x_gui) && x->x_gui.x_snd->s_thing)
Miller Puckette's avatar
Miller Puckette committed
257
258
259
260
261
262
263
264
265
    {
        x->x_at[0].a_w.w_float = text_xpix(&x->x_gui.x_obj, x->x_gui.x_glist);
        x->x_at[1].a_w.w_float = text_ypix(&x->x_gui.x_obj, x->x_gui.x_glist);
        pd_list(x->x_gui.x_snd->s_thing, &s_list, 2, x->x_at);
    }
}

static void my_canvas_dialog(t_my_canvas *x, t_symbol *s, int argc, t_atom *argv)
{
266
    //printf("cnv_dialog: selected=%d\n",x->x_gui.x_selected);
Ivica Bukvic's avatar
Ivica Bukvic committed
267
    canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x);
268
    //printf("cnv_dialog: selected=%d\n",x->x_gui.x_selected);
269
270
271
272
    x->x_gui.x_h =
    x->x_gui.x_w = maxi(atom_getintarg(0, argc, argv),1);
    x->x_vis_w = maxi(atom_getintarg(2, argc, argv),1);
    x->x_vis_h = maxi(atom_getintarg(3, argc, argv),1);
273
    post("FUCK OFF ASSHOLE!");
274
    iemgui_dialog(&x->x_gui, argc, argv);
275
    x->x_gui.x_loadinit = 0;
276
    iemgui_draw_config(&x->x_gui);
277
    iemgui_shouldvis(&x->x_gui, IEM_GUI_DRAW_MODE_MOVE);
278
    scalehandle_draw(&x->x_gui);
279
    scrollbar_update(x->x_gui.x_glist);
Miller Puckette's avatar
Miller Puckette committed
280
281
282
283
284
285
286
287
288
289
}

static void my_canvas_size(t_my_canvas *x, t_symbol *s, int ac, t_atom *av)
{
    int i = (int)atom_getintarg(0, ac, av);

    if(i < 1)
        i = 1;
    x->x_gui.x_w = i;
    x->x_gui.x_h = i;
290
    iemgui_size(&x->x_gui);
Miller Puckette's avatar
Miller Puckette committed
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
}

static void my_canvas_vis_size(t_my_canvas *x, t_symbol *s, int ac, t_atom *av)
{
    int i;

    i = (int)atom_getintarg(0, ac, av);
    if(i < 1)
        i = 1;
    x->x_vis_w = i;
    if(ac > 1)
    {
        i = (int)atom_getintarg(1, ac, av);
        if(i < 1)
            i = 1;
    }
    x->x_vis_h = i;
308
    if(glist_isvisible(x->x_gui.x_glist)) iemgui_draw_move(&x->x_gui);
Miller Puckette's avatar
Miller Puckette committed
309
310
311
312
313
314
315
}

static void *my_canvas_new(t_symbol *s, int argc, t_atom *argv)
{
    t_my_canvas *x = (t_my_canvas *)pd_new(my_canvas_class);
    int bflcol[]={-233017, -1, -66577};
    int a=IEM_GUI_DEFAULTSIZE, w=100, h=60;
Mathieu L Bouchard's avatar
Mathieu L Bouchard committed
316
    int ldx=20, ldy=12, i=0;
Miller Puckette's avatar
Miller Puckette committed
317
318
    int fs=14;

319
320
    iem_inttosymargs(&x->x_gui, 0);
    iem_inttofstyle(&x->x_gui, 0);
Miller Puckette's avatar
Miller Puckette committed
321
322
323
324

    if(((argc >= 10)&&(argc <= 13))
       &&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,2))
    {
325
326
327
        a = maxi(atom_getintarg(0, argc, argv),1);
        w = maxi(atom_getintarg(1, argc, argv),1);
        h = maxi(atom_getintarg(2, argc, argv),1);
Miller Puckette's avatar
Miller Puckette committed
328
    }
Ivica Bukvic's avatar
Ivica Bukvic committed
329
330
    if((argc >= 12) && (IS_A_SYMBOL(argv,3) || IS_A_FLOAT(argv,3)) &&
        (IS_A_SYMBOL(argv,4) || IS_A_FLOAT(argv,4)))
Miller Puckette's avatar
Miller Puckette committed
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
    {
        i = 2;
        iemgui_new_getnames(&x->x_gui, 3, argv);
    }
    else if((argc == 11)&&(IS_A_SYMBOL(argv,3)||IS_A_FLOAT(argv,3)))
    {
        i = 1;
        iemgui_new_getnames(&x->x_gui, 3, argv);
    }
    else iemgui_new_getnames(&x->x_gui, 3, 0);

    if(((argc >= 10)&&(argc <= 13))
       &&(IS_A_SYMBOL(argv,i+3)||IS_A_FLOAT(argv,i+3))&&IS_A_FLOAT(argv,i+4)
       &&IS_A_FLOAT(argv,i+5)&&IS_A_FLOAT(argv,i+6)
       &&IS_A_FLOAT(argv,i+7)&&IS_A_FLOAT(argv,i+8)
       &&IS_A_FLOAT(argv,i+9))
    {
            /* disastrously, the "label" sits in a different part of the
            message.  So we have to track its location separately (in
            the slot x_labelbindex) and initialize it specially here. */
351
        iemgui_getfloatsym(argv+i+3);
Miller Puckette's avatar
Miller Puckette committed
352
        x->x_gui.x_labelbindex = i+4;
353
354
        ldx = atom_getintarg(i+4, argc, argv);
        ldy = atom_getintarg(i+5, argc, argv);
355
        iem_inttofstyle(&x->x_gui, atom_getintarg(i+6, argc, argv));
356
357
358
        fs = atom_getintarg(i+7, argc, argv);
        bflcol[0] = atom_getintarg(i+8, argc, argv);
        bflcol[2] = atom_getintarg(i+9, argc, argv);
Miller Puckette's avatar
Miller Puckette committed
359
360
361
    }
    if((argc == 13)&&IS_A_FLOAT(argv,i+10))
    {
362
        iem_inttosymargs(&x->x_gui, atom_getintarg(i+10, argc, argv));
Miller Puckette's avatar
Miller Puckette committed
363
364
365
    }
    x->x_gui.x_draw = (t_iemfunptr)my_canvas_draw;
    x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
366
    x->x_gui.x_h = x->x_gui.x_w = a;
Miller Puckette's avatar
Miller Puckette committed
367
368
    x->x_vis_w = w;
    x->x_vis_h = h;
369
370
    if (x->x_gui.x_font_style<0 || x->x_gui.x_font_style>2) x->x_gui.x_font_style=0;
    if (iemgui_has_rcv(&x->x_gui))
Miller Puckette's avatar
Miller Puckette committed
371
372
373
374
375
376
377
378
379
380
        pd_bind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
    x->x_gui.x_ldx = ldx;
    x->x_gui.x_ldy = ldy;
    if(fs < 4)
        fs = 4;
    x->x_gui.x_fontsize = fs;
    iemgui_all_colfromload(&x->x_gui, bflcol);
    x->x_at[0].a_type = A_FLOAT;
    x->x_at[1].a_type = A_FLOAT;
    iemgui_verify_snd_ne_rcv(&x->x_gui);
381

382
383
    x->x_gui. x_handle = scalehandle_new((t_object *)x,x->x_gui.x_glist,1,my_canvas__clickhook,my_canvas__motionhook);
    x->x_gui.x_lhandle = scalehandle_new((t_object *)x,x->x_gui.x_glist,0,my_canvas__clickhook,my_canvas__motionhook);
Ivica Bukvic's avatar
Ivica Bukvic committed
384
    x->x_gui.x_obj.te_iemgui = 1;
385

Miller Puckette's avatar
Miller Puckette committed
386
387
388
389
390
    return (x);
}

static void my_canvas_ff(t_my_canvas *x)
{
391
    if(iemgui_has_rcv(&x->x_gui))
Miller Puckette's avatar
Miller Puckette committed
392
393
        pd_unbind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
    gfxstub_deleteforkey(x);
394

395
396
    if (x->x_gui. x_handle) scalehandle_free(x->x_gui. x_handle);
    if (x->x_gui.x_lhandle) scalehandle_free(x->x_gui.x_lhandle);
Miller Puckette's avatar
Miller Puckette committed
397
398
399
400
401
}

void g_mycanvas_setup(void)
{
    my_canvas_class = class_new(gensym("cnv"), (t_newmethod)my_canvas_new,
Ivica Bukvic's avatar
Ivica Bukvic committed
402
403
404
405
406
407
408
        (t_method)my_canvas_ff, sizeof(t_my_canvas), CLASS_NOINLET, A_GIMME, 0);
    class_addcreator((t_newmethod)my_canvas_new,
        gensym("my_canvas"), A_GIMME, 0);
    class_addmethod(my_canvas_class, (t_method)my_canvas_dialog,
        gensym("dialog"), A_GIMME, 0);
    class_addmethod(my_canvas_class, (t_method)my_canvas_size,
        gensym("size"), A_GIMME, 0);
409
    iemgui_class_addmethods(my_canvas_class);
Ivica Bukvic's avatar
Ivica Bukvic committed
410
411
412
413
    class_addmethod(my_canvas_class, (t_method)my_canvas_vis_size,
        gensym("vis_size"), A_GIMME, 0);
    class_addmethod(my_canvas_class, (t_method)my_canvas_get_pos,
        gensym("get_pos"), 0);
Miller Puckette's avatar
Miller Puckette committed
414

415
    wb_init(&my_canvas_widgetbehavior,my_canvas_getrect,0);
Miller Puckette's avatar
Miller Puckette committed
416
417
418
419
420
    class_setwidget(my_canvas_class, &my_canvas_widgetbehavior);
    class_sethelpsymbol(my_canvas_class, gensym("my_canvas"));
    class_setsavefn(my_canvas_class, my_canvas_save);
    class_setpropertiesfn(my_canvas_class, my_canvas_properties);
}