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
    int x1=text_xpix(&x->x_gui.x_obj, glist);
    int y1=text_ypix(&x->x_gui.x_obj, glist);

28
29
30
31
32
33
34
35
    //sys_vgui(".x%lx.c create prect %d %d %d %d -fill #%6.6x -stroke #%6.6x "
    //    "-tags {%lxRECT x%lx text iemgui}\n",
    //    canvas, x1, y1, x1+x->x_vis_w, y1+x->x_vis_h,
    //    x->x_gui.x_bcol, x->x_gui.x_bcol, x, x);
    //sys_vgui(".x%lx.c create prect %d %d %d %d -stroke #%6.6x "
    //    "-tags {%lxBASE x%lx text iemgui}\n",
    //    canvas, x1, y1, x1+x->x_gui.x_w, y1+x->x_gui.x_h,
    //    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
40
41
    gui_vmess("gui_text_create_gobj", "xxsiii", canvas,
        x, "iemgui", x1, y1, glist_istoplevel(canvas));
    gui_vmess("gui_create_mycanvas", "xxsiiiiii", canvas,
        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
53
    iemgui_base_draw_move(&x->x_gui);

54
55
56
57
    //sys_vgui(".x%lx.c coords %lxRECT %d %d %d %d\n",
    //    canvas, x, x1, y1, x1+x->x_vis_w, y1+x->x_vis_h);
    //sys_vgui(".x%lx.c coords %lxBASE %d %d %d %d\n",
    //    canvas, x, x1, y1, x1+x->x_gui.x_w, y1+x->x_gui.x_h);
58
59
    gui_vmess("gui_mycanvas_coords", "xxiiii",
        canvas, x,
60
        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
61
62
63
64
65
}

void my_canvas_draw_config(t_my_canvas* x, t_glist* glist)
{
    t_canvas *canvas=glist_getcanvas(glist);
66
67
68
    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);
69
    char bcol[8]; sprintf(bcol, "#%6.6x", x->x_gui.x_bcol);
70
71
72
73
    //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;
74
75
    gui_vmess("gui_update_mycanvas", "xxsi",
        canvas, x, bcol, isselected);
Miller Puckette's avatar
Miller Puckette committed
76
77
78
79
80
}

void my_canvas_draw_select(t_my_canvas* x, t_glist* glist)
{
    t_canvas *canvas=glist_getcanvas(glist);
81
82
    if (x->x_gui.x_glist != glist_getcanvas(glist)) return;
    char bcol[8]; sprintf(bcol, "#%6.6x", x->x_gui.x_bcol);
83
84
85
    //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);
86
87
    gui_vmess("gui_mycanvas_select_color", "xxs",
        canvas, x,
88
        x->x_gui.x_selected == canvas && x->x_gui.x_glist == canvas ?
Jonathan Wilkes's avatar
Jonathan Wilkes committed
89
            "blue" : bcol); 
90
91
}

92
static void my_canvas__clickhook(t_scalehandle *sh, int newstate)
93
{
Ivica Bukvic's avatar
Ivica Bukvic committed
94
    t_my_canvas *x = (t_my_canvas *)(sh->h_master);
95
    if (sh->h_dragon && newstate == 0 && sh->h_scale)
Miller Puckette's avatar
Miller Puckette committed
96
    {
Ivica Bukvic's avatar
Ivica Bukvic committed
97
98
99
        canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x);
        if (sh->h_dragx || sh->h_dragy)
        {
100
101
            x->x_vis_w += sh->h_dragx;
            x->x_vis_h += sh->h_dragy;
Ivica Bukvic's avatar
Ivica Bukvic committed
102
103
            canvas_dirty(x->x_gui.x_glist, 1);
        }
104
105
106
107
108
109
110
111
112
113
114
115
        // 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
116
117
118
        if (glist_isvisible(x->x_gui.x_glist))
        {
            my_canvas_draw_move(x, x->x_gui.x_glist);
119
            scalehandle_unclick_scale(sh);
Ivica Bukvic's avatar
Ivica Bukvic committed
120
        }
Miller Puckette's avatar
Miller Puckette committed
121
    }
122
    iemgui__clickhook3(sh,newstate);
123
124
}

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

        int properties = gfxstub_haveproperties((void *)x);
        if (properties)
        {
140
141
            int new_w = x->x_vis_w + sh->h_dragx;
            int new_h = x->x_vis_h + sh->h_dragy;
142
143
144
            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
145
146
147
            int min = (new_w < new_h ? new_w : new_h);
            if (min <= x->x_gui.x_w)
            {
148
                properties_set_field_int(properties,"dim.w_ent",min);
Ivica Bukvic's avatar
Ivica Bukvic committed
149
150
151
            }
        }
    }
152
    scalehandle_dragon_label(sh,f1,f2);
Miller Puckette's avatar
Miller Puckette committed
153
154
155
156
}

void my_canvas_draw(t_my_canvas *x, t_glist *glist, int mode)
{
157
158
159
160
    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
161
162
163
164
}

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

Ivica Bukvic's avatar
Ivica Bukvic committed
165
166
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
167
168
169
170
171
{
    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);
172
    if (!glist_istoplevel(glist) || !glist->gl_edit)
Ivica Bukvic's avatar
Ivica Bukvic committed
173
174
    {
        //if we are trying to calculate visibility of a widget inside a GOP
175
        //or are calculating getrect during runtime
Ivica Bukvic's avatar
Ivica Bukvic committed
176
177
178
179
180
181
182
183
184
        *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
185
186
187
188
189
190
191
192
}

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);
193
194
195
196
197
198
    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
199
200
201
202
203
}

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

    iemgui_properties(&x->x_gui, srl);
Miller Puckette's avatar
Miller Puckette committed
208
    sprintf(buf, "pdtk_iemgui_dialog %%s |cnv| \
Miller Puckette's avatar
Miller Puckette committed
209
210
211
            ------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
212
213
            {%s} {%s} \
            {%s} %d %d \
Miller Puckette's avatar
Miller Puckette committed
214
215
216
217
218
219
220
            %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,
221
            x->x_gui.x_font_style, x->x_gui.x_fontsize,
Miller Puckette's avatar
Miller Puckette committed
222
            0xffffff & x->x_gui.x_bcol, -1/*no frontcolor*/, 0xffffff & x->x_gui.x_lcol);
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
252
253
    //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
254
255
256
257
}

static void my_canvas_get_pos(t_my_canvas *x)
{
258
    if(iemgui_has_snd(&x->x_gui) && x->x_gui.x_snd->s_thing)
Miller Puckette's avatar
Miller Puckette committed
259
260
261
262
263
264
265
266
267
    {
        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)
{
268
    //printf("cnv_dialog: selected=%d\n",x->x_gui.x_selected);
Ivica Bukvic's avatar
Ivica Bukvic committed
269
    canvas_apply_setundo(x->x_gui.x_glist, (t_gobj *)x);
270
    //printf("cnv_dialog: selected=%d\n",x->x_gui.x_selected);
271
272
273
274
    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);
275
    iemgui_dialog(&x->x_gui, argc, argv);
276
    x->x_gui.x_loadinit = 0;
277
    iemgui_draw_config(&x->x_gui);
278
    iemgui_shouldvis(&x->x_gui, IEM_GUI_DRAW_MODE_MOVE);
279
    scalehandle_draw(&x->x_gui);
280
    scrollbar_update(x->x_gui.x_glist);
Miller Puckette's avatar
Miller Puckette committed
281
282
283
284
285
286
287
288
289
290
}

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;
291
    iemgui_size(&x->x_gui);
Miller Puckette's avatar
Miller Puckette committed
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
}

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;
309
    if(glist_isvisible(x->x_gui.x_glist)) iemgui_draw_move(&x->x_gui);
Miller Puckette's avatar
Miller Puckette committed
310
311
312
313
314
315
316
}

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
317
    int ldx=20, ldy=12, i=0;
Miller Puckette's avatar
Miller Puckette committed
318
319
    int fs=14;

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

    if(((argc >= 10)&&(argc <= 13))
       &&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)&&IS_A_FLOAT(argv,2))
    {
326
327
328
        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
329
    }
Ivica Bukvic's avatar
Ivica Bukvic committed
330
331
    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
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
    {
        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. */
352
        iemgui_getfloatsym(argv+i+3);
Miller Puckette's avatar
Miller Puckette committed
353
        x->x_gui.x_labelbindex = i+4;
354
355
        ldx = atom_getintarg(i+4, argc, argv);
        ldy = atom_getintarg(i+5, argc, argv);
356
        iem_inttofstyle(&x->x_gui, atom_getintarg(i+6, argc, argv));
357
358
359
        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
360
361
362
    }
    if((argc == 13)&&IS_A_FLOAT(argv,i+10))
    {
363
        iem_inttosymargs(&x->x_gui, atom_getintarg(i+10, argc, argv));
Miller Puckette's avatar
Miller Puckette committed
364
365
366
    }
    x->x_gui.x_draw = (t_iemfunptr)my_canvas_draw;
    x->x_gui.x_glist = (t_glist *)canvas_getcurrent();
367
    x->x_gui.x_h = x->x_gui.x_w = a;
Miller Puckette's avatar
Miller Puckette committed
368
369
    x->x_vis_w = w;
    x->x_vis_h = h;
370
371
    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
372
373
374
375
376
377
378
379
380
381
        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);
382

383
384
    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
385
    x->x_gui.x_obj.te_iemgui = 1;
386

387
388
389
    x->x_gui.legacy_x = 0;
    x->x_gui.legacy_y = 2;

Miller Puckette's avatar
Miller Puckette committed
390
391
392
393
394
    return (x);
}

static void my_canvas_ff(t_my_canvas *x)
{
395
    if(iemgui_has_rcv(&x->x_gui))
Miller Puckette's avatar
Miller Puckette committed
396
397
        pd_unbind(&x->x_gui.x_obj.ob_pd, x->x_gui.x_rcv);
    gfxstub_deleteforkey(x);
398

399
400
    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
401
402
403
404
405
}

void g_mycanvas_setup(void)
{
    my_canvas_class = class_new(gensym("cnv"), (t_newmethod)my_canvas_new,
Ivica Bukvic's avatar
Ivica Bukvic committed
406
407
408
409
410
411
412
        (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);
413
    iemgui_class_addmethods(my_canvas_class);
Ivica Bukvic's avatar
Ivica Bukvic committed
414
415
416
417
    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
418

419
    wb_init(&my_canvas_widgetbehavior,my_canvas_getrect,0);
Miller Puckette's avatar
Miller Puckette committed
420
421
422
423
424
    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);
}