Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Wynn
purr-data
Commits
558876b3
Commit
558876b3
authored
Apr 04, 2011
by
Ivica Bukvic
Committed by
Hans-Christoph Steiner
Nov 02, 2011
Browse files
Pd-0.42.5-extended-l2ork-dev-20110403.tar.bz2
parent
98bc8bd8
Changes
20
Hide whitespace changes
Inline
Side-by-side
src/g_all_guis.h
View file @
558876b3
...
@@ -124,6 +124,9 @@
...
@@ -124,6 +124,9 @@
#define SCALEHANDLE_WIDTH 5
#define SCALEHANDLE_WIDTH 5
#define SCALEHANDLE_HEIGHT 5
#define SCALEHANDLE_HEIGHT 5
#define LABELHANDLE_WIDTH 5
#define LABELHANDLE_HEIGHT 5
typedef
struct
_iem_fstyle_flags
typedef
struct
_iem_fstyle_flags
{
{
unsigned
int
x_font_style
:
6
;
unsigned
int
x_font_style
:
6
;
...
@@ -166,6 +169,7 @@ typedef struct _scalehandle
...
@@ -166,6 +169,7 @@ typedef struct _scalehandle
t_pd
h_pd
;
t_pd
h_pd
;
t_gobj
*
h_master
;
t_gobj
*
h_master
;
t_symbol
*
h_bindsym
;
t_symbol
*
h_bindsym
;
int
h_scale
;
char
h_pathname
[
64
];
char
h_pathname
[
64
];
char
h_outlinetag
[
64
];
char
h_outlinetag
[
64
];
int
h_dragon
;
int
h_dragon
;
...
@@ -204,6 +208,10 @@ typedef struct _iemgui
...
@@ -204,6 +208,10 @@ typedef struct _iemgui
int
scale_offset_x
;
int
scale_offset_x
;
int
scale_offset_y
;
int
scale_offset_y
;
int
scale_vis
;
int
scale_vis
;
t_pd
*
x_lhandle
;
int
label_offset_x
;
int
label_offset_y
;
int
label_vis
;
}
t_iemgui
;
}
t_iemgui
;
typedef
struct
_iemguidummy
typedef
struct
_iemguidummy
...
...
src/g_bang.c
View file @
558876b3
...
@@ -53,6 +53,9 @@ void bng_draw_new(t_bng *x, t_glist *glist)
...
@@ -53,6 +53,9 @@ void bng_draw_new(t_bng *x, t_glist *glist)
t_scalehandle
*
sh
=
(
t_scalehandle
*
)
x
->
x_gui
.
x_handle
;
t_scalehandle
*
sh
=
(
t_scalehandle
*
)
x
->
x_gui
.
x_handle
;
sprintf
(
sh
->
h_pathname
,
".x%x.h%x"
,
(
int
)
canvas
,
(
int
)
sh
);
sprintf
(
sh
->
h_pathname
,
".x%x.h%x"
,
(
int
)
canvas
,
(
int
)
sh
);
t_scalehandle
*
lh
=
(
t_scalehandle
*
)
x
->
x_gui
.
x_lhandle
;
sprintf
(
lh
->
h_pathname
,
".x%x.h%x"
,
(
int
)
canvas
,
(
int
)
lh
);
//if (glist_isvisible(canvas)) {
//if (glist_isvisible(canvas)) {
t_gobj
*
y
=
(
t_gobj
*
)
x
;
t_gobj
*
y
=
(
t_gobj
*
)
x
;
...
@@ -152,6 +155,8 @@ void bng_draw_erase(t_bng* x, t_glist* glist)
...
@@ -152,6 +155,8 @@ void bng_draw_erase(t_bng* x, t_glist* glist)
if
(
x
->
x_gui
.
x_fsf
.
x_selected
)
{
if
(
x
->
x_gui
.
x_fsf
.
x_selected
)
{
t_scalehandle
*
sh
=
(
t_scalehandle
*
)(
x
->
x_gui
.
x_handle
);
t_scalehandle
*
sh
=
(
t_scalehandle
*
)(
x
->
x_gui
.
x_handle
);
sys_vgui
(
"destroy %s
\n
"
,
sh
->
h_pathname
);
sys_vgui
(
"destroy %s
\n
"
,
sh
->
h_pathname
);
t_scalehandle
*
lh
=
(
t_scalehandle
*
)(
x
->
x_gui
.
x_lhandle
);
sys_vgui
(
"destroy %s
\n
"
,
lh
->
h_pathname
);
}
}
/*
/*
sys_vgui(".x%lx.c delete %lxBASE\n", canvas, x);
sys_vgui(".x%lx.c delete %lxBASE\n", canvas, x);
...
@@ -224,6 +229,7 @@ void bng_draw_select(t_bng* x, t_glist* glist)
...
@@ -224,6 +229,7 @@ void bng_draw_select(t_bng* x, t_glist* glist)
{
{
t_canvas
*
canvas
=
glist_getcanvas
(
glist
);
t_canvas
*
canvas
=
glist_getcanvas
(
glist
);
t_scalehandle
*
sh
=
(
t_scalehandle
*
)(
x
->
x_gui
.
x_handle
);
t_scalehandle
*
sh
=
(
t_scalehandle
*
)(
x
->
x_gui
.
x_handle
);
t_scalehandle
*
lh
=
(
t_scalehandle
*
)(
x
->
x_gui
.
x_lhandle
);
if
(
glist_isvisible
(
canvas
))
{
if
(
glist_isvisible
(
canvas
))
{
...
@@ -239,8 +245,8 @@ void bng_draw_select(t_bng* x, t_glist* glist)
...
@@ -239,8 +245,8 @@ void bng_draw_select(t_bng* x, t_glist* glist)
sys_vgui
(
"canvas %s -width %d -height %d -bg $select_color -bd 0 -cursor bottom_right_corner
\n
"
,
sys_vgui
(
"canvas %s -width %d -height %d -bg $select_color -bd 0 -cursor bottom_right_corner
\n
"
,
sh
->
h_pathname
,
SCALEHANDLE_WIDTH
,
SCALEHANDLE_HEIGHT
);
sh
->
h_pathname
,
SCALEHANDLE_WIDTH
,
SCALEHANDLE_HEIGHT
);
sys_vgui
(
".x%x.c create window %d %d -anchor nw -width %d -height %d -window %s -tags {%lxSCALE %lxBNG}
\n
"
,
sys_vgui
(
".x%x.c create window %d %d -anchor nw -width %d -height %d -window %s -tags {%lxSCALE %lxBNG}
\n
"
,
canvas
,
x
->
x_gui
.
x_obj
.
te_xpix
+
x
->
x_gui
.
x_w
-
SCALEHANDLE_WIDTH
,
canvas
,
x
->
x_gui
.
x_obj
.
te_xpix
+
x
->
x_gui
.
x_w
-
SCALEHANDLE_WIDTH
-
1
,
x
->
x_gui
.
x_obj
.
te_ypix
+
x
->
x_gui
.
x_h
-
SCALEHANDLE_HEIGHT
,
x
->
x_gui
.
x_obj
.
te_ypix
+
x
->
x_gui
.
x_h
-
SCALEHANDLE_HEIGHT
-
1
,
SCALEHANDLE_WIDTH
,
SCALEHANDLE_HEIGHT
,
SCALEHANDLE_WIDTH
,
SCALEHANDLE_HEIGHT
,
sh
->
h_pathname
,
x
,
x
);
sh
->
h_pathname
,
x
,
x
);
sys_vgui
(
"bind %s <Button> {pd [concat %s _click 1 %%x %%y
\\
;]}
\n
"
,
sys_vgui
(
"bind %s <Button> {pd [concat %s _click 1 %%x %%y
\\
;]}
\n
"
,
...
@@ -251,6 +257,27 @@ void bng_draw_select(t_bng* x, t_glist* glist)
...
@@ -251,6 +257,27 @@ void bng_draw_select(t_bng* x, t_glist* glist)
sh
->
h_pathname
,
sh
->
h_bindsym
->
s_name
);
sh
->
h_pathname
,
sh
->
h_bindsym
->
s_name
);
x
->
x_gui
.
scale_vis
=
1
;
x
->
x_gui
.
scale_vis
=
1
;
if
(
strcmp
(
x
->
x_gui
.
x_lab
->
s_name
,
"empty"
)
!=
0
)
{
if
(
x
->
x_gui
.
label_vis
)
sys_vgui
(
"destroy %s
\n
"
,
lh
->
h_pathname
);
sys_vgui
(
"canvas %s -width %d -height %d -bg $select_color -bd 0 -cursor crosshair
\n
"
,
lh
->
h_pathname
,
LABELHANDLE_WIDTH
,
LABELHANDLE_HEIGHT
);
sys_vgui
(
".x%x.c create window %d %d -anchor nw -width %d -height %d -window %s -tags {%lxLABEL %lxBNG}
\n
"
,
canvas
,
x
->
x_gui
.
x_obj
.
te_xpix
+
x
->
x_gui
.
x_ldx
-
LABELHANDLE_WIDTH
,
x
->
x_gui
.
x_obj
.
te_ypix
+
x
->
x_gui
.
x_ldy
-
LABELHANDLE_HEIGHT
,
LABELHANDLE_WIDTH
,
LABELHANDLE_HEIGHT
,
lh
->
h_pathname
,
x
,
x
);
sys_vgui
(
"bind %s <Button> {pd [concat %s _click 1 %%x %%y
\\
;]}
\n
"
,
lh
->
h_pathname
,
lh
->
h_bindsym
->
s_name
);
sys_vgui
(
"bind %s <ButtonRelease> {pd [concat %s _click 0 0 0
\\
;]}
\n
"
,
lh
->
h_pathname
,
lh
->
h_bindsym
->
s_name
);
sys_vgui
(
"bind %s <Motion> {pd [concat %s _motion %%x %%y
\\
;]}
\n
"
,
lh
->
h_pathname
,
lh
->
h_bindsym
->
s_name
);
x
->
x_gui
.
label_vis
=
1
;
}
sys_vgui
(
".x%lx.c addtag selected withtag %lxBNG
\n
"
,
canvas
,
x
);
sys_vgui
(
".x%lx.c addtag selected withtag %lxBNG
\n
"
,
canvas
,
x
);
}
}
else
else
...
@@ -261,6 +288,8 @@ void bng_draw_select(t_bng* x, t_glist* glist)
...
@@ -261,6 +288,8 @@ void bng_draw_select(t_bng* x, t_glist* glist)
sys_vgui
(
".x%lx.c dtag %lxBNG selected
\n
"
,
canvas
,
x
);
sys_vgui
(
".x%lx.c dtag %lxBNG selected
\n
"
,
canvas
,
x
);
sys_vgui
(
"destroy %s
\n
"
,
sh
->
h_pathname
);
sys_vgui
(
"destroy %s
\n
"
,
sh
->
h_pathname
);
x
->
x_gui
.
scale_vis
=
0
;
x
->
x_gui
.
scale_vis
=
0
;
sys_vgui
(
"destroy %s
\n
"
,
lh
->
h_pathname
);
x
->
x_gui
.
label_vis
=
0
;
}
}
}
}
}
}
...
@@ -270,11 +299,17 @@ static void bng__clickhook(t_scalehandle *sh, t_floatarg f, t_floatarg xxx, t_fl
...
@@ -270,11 +299,17 @@ static void bng__clickhook(t_scalehandle *sh, t_floatarg f, t_floatarg xxx, t_fl
t_bng
*
x
=
(
t_bng
*
)(
sh
->
h_master
);
t_bng
*
x
=
(
t_bng
*
)(
sh
->
h_master
);
if
(
xxx
)
x
->
x_gui
.
scale_offset_x
=
xxx
;
if
(
xxx
)
{
if
(
yyy
)
x
->
x_gui
.
scale_offset_y
=
yyy
;
x
->
x_gui
.
scale_offset_x
=
xxx
;
x
->
x_gui
.
label_offset_x
=
xxx
;
}
if
(
yyy
)
{
x
->
x_gui
.
scale_offset_y
=
yyy
;
x
->
x_gui
.
label_offset_y
=
yyy
;
}
int
newstate
=
(
int
)
f
;
int
newstate
=
(
int
)
f
;
if
(
sh
->
h_dragon
&&
newstate
==
0
)
if
(
sh
->
h_dragon
&&
newstate
==
0
&&
sh
->
h_scale
)
{
{
/* done dragging */
/* done dragging */
...
@@ -316,7 +351,7 @@ static void bng__clickhook(t_scalehandle *sh, t_floatarg f, t_floatarg xxx, t_fl
...
@@ -316,7 +351,7 @@ static void bng__clickhook(t_scalehandle *sh, t_floatarg f, t_floatarg xxx, t_fl
sys_vgui
(
"pdtk_canvas_getscroll .x%lx.c
\n
"
,
x
->
x_gui
.
x_glist
);
sys_vgui
(
"pdtk_canvas_getscroll .x%lx.c
\n
"
,
x
->
x_gui
.
x_glist
);
}
}
}
}
else
if
(
!
sh
->
h_dragon
&&
newstate
)
else
if
(
!
sh
->
h_dragon
&&
newstate
&&
sh
->
h_scale
)
{
{
/* dragging */
/* dragging */
if
(
glist_isvisible
(
x
->
x_gui
.
x_glist
))
if
(
glist_isvisible
(
x
->
x_gui
.
x_glist
))
...
@@ -332,13 +367,59 @@ static void bng__clickhook(t_scalehandle *sh, t_floatarg f, t_floatarg xxx, t_fl
...
@@ -332,13 +367,59 @@ static void bng__clickhook(t_scalehandle *sh, t_floatarg f, t_floatarg xxx, t_fl
sh
->
h_dragx
=
0
;
sh
->
h_dragx
=
0
;
sh
->
h_dragy
=
0
;
sh
->
h_dragy
=
0
;
}
}
else
if
(
sh
->
h_dragon
&&
newstate
==
0
&&
!
sh
->
h_scale
)
{
/* done dragging */
/* first set up the undo apply */
canvas_apply_setundo
(
x
->
x_gui
.
x_glist
,
(
t_gobj
*
)
x
);
if
(
sh
->
h_dragx
||
sh
->
h_dragy
)
{
x
->
x_gui
.
x_ldx
=
x
->
x_gui
.
x_ldx
+
sh
->
h_dragx
-
x
->
x_gui
.
label_offset_x
;
x
->
x_gui
.
x_ldy
=
x
->
x_gui
.
x_ldy
+
sh
->
h_dragy
-
x
->
x_gui
.
label_offset_y
;
canvas_dirty
(
x
->
x_gui
.
x_glist
,
1
);
}
int
properties
=
gfxstub_haveproperties
((
void
*
)
x
);
if
(
properties
)
{
sys_vgui
(
".gfxstub%lx.dim.w_ent delete 0 end
\n
"
,
properties
);
sys_vgui
(
".gfxstub%lx.dim.w_ent insert 0 %d
\n
"
,
properties
,
x
->
x_gui
.
x_w
);
//sys_vgui(".gfxstub%lx.dim.h_ent delete 0 end\n", properties);
//sys_vgui(".gfxstub%lx.dim.h_ent insert 0 %d\n", properties, x->x_gui.x_h);
}
if
(
glist_isvisible
(
x
->
x_gui
.
x_glist
))
{
sys_vgui
(
".x%x.c delete %s
\n
"
,
x
->
x_gui
.
x_glist
,
sh
->
h_outlinetag
);
bng_draw_move
(
x
,
x
->
x_gui
.
x_glist
);
sys_vgui
(
"destroy %s
\n
"
,
sh
->
h_pathname
);
iemgui_select
((
t_gobj
*
)
x
,
x
->
x_gui
.
x_glist
,
1
);
canvas_fixlinesfor
(
x
->
x_gui
.
x_glist
,
(
t_text
*
)
x
);
sys_vgui
(
"pdtk_canvas_getscroll .x%lx.c
\n
"
,
x
->
x_gui
.
x_glist
);
}
}
else
if
(
!
sh
->
h_dragon
&&
newstate
&&
!
sh
->
h_scale
)
{
/* dragging */
if
(
glist_isvisible
(
x
->
x_gui
.
x_glist
))
{
sys_vgui
(
"lower %s
\n
"
,
sh
->
h_pathname
);
t_scalehandle
*
othersh
=
(
t_scalehandle
*
)
x
->
x_gui
.
x_handle
;
sys_vgui
(
"lower .x%x.h%x
\n
"
,
(
int
)
glist_getcanvas
(
x
->
x_gui
.
x_glist
),
(
int
)
othersh
);
}
sh
->
h_dragx
=
0
;
sh
->
h_dragy
=
0
;
}
sh
->
h_dragon
=
newstate
;
sh
->
h_dragon
=
newstate
;
}
}
static
void
bng__motionhook
(
t_scalehandle
*
sh
,
static
void
bng__motionhook
(
t_scalehandle
*
sh
,
t_floatarg
f1
,
t_floatarg
f2
)
t_floatarg
f1
,
t_floatarg
f2
)
{
{
if
(
sh
->
h_dragon
)
if
(
sh
->
h_dragon
&&
sh
->
h_scale
)
{
{
t_bng
*
x
=
(
t_bng
*
)(
sh
->
h_master
);
t_bng
*
x
=
(
t_bng
*
)(
sh
->
h_master
);
int
dx
=
(
int
)
f1
,
dy
=
(
int
)
f2
;
int
dx
=
(
int
)
f1
,
dy
=
(
int
)
f2
;
...
@@ -380,6 +461,38 @@ static void bng__motionhook(t_scalehandle *sh,
...
@@ -380,6 +461,38 @@ static void bng__motionhook(t_scalehandle *sh,
//sys_vgui(".gfxstub%lx.dim.h_ent insert 0 %d\n", properties, new_h);
//sys_vgui(".gfxstub%lx.dim.h_ent insert 0 %d\n", properties, new_h);
}
}
}
}
if
(
sh
->
h_dragon
&&
!
sh
->
h_scale
)
{
t_bng
*
x
=
(
t_bng
*
)(
sh
->
h_master
);
int
dx
=
(
int
)
f1
,
dy
=
(
int
)
f2
;
int
newx
,
newy
;
newx
=
x
->
x_gui
.
x_obj
.
te_xpix
+
x
->
x_gui
.
x_w
-
x
->
x_gui
.
scale_offset_x
+
dx
;
newy
=
x
->
x_gui
.
x_obj
.
te_ypix
+
x
->
x_gui
.
x_h
-
x
->
x_gui
.
scale_offset_y
+
dy
;
sh
->
h_dragx
=
dx
;
sh
->
h_dragy
=
dy
;
int
properties
=
gfxstub_haveproperties
((
void
*
)
x
);
if
(
properties
)
{
int
new_x
=
x
->
x_gui
.
x_ldx
-
x
->
x_gui
.
label_offset_x
+
sh
->
h_dragx
;
int
new_y
=
x
->
x_gui
.
x_ldy
-
x
->
x_gui
.
label_offset_y
+
sh
->
h_dragy
;
sys_vgui
(
".gfxstub%lx.label.xy.x_entry delete 0 end
\n
"
,
properties
);
sys_vgui
(
".gfxstub%lx.label.xy.x_entry insert 0 %d
\n
"
,
properties
,
new_x
);
sys_vgui
(
".gfxstub%lx.label.xy.y_entry delete 0 end
\n
"
,
properties
);
sys_vgui
(
".gfxstub%lx.label.xy.y_entry insert 0 %d
\n
"
,
properties
,
new_y
);
}
if
(
glist_isvisible
(
x
->
x_gui
.
x_glist
))
{
int
xpos
=
text_xpix
(
&
x
->
x_gui
.
x_obj
,
x
->
x_gui
.
x_glist
);
int
ypos
=
text_ypix
(
&
x
->
x_gui
.
x_obj
,
x
->
x_gui
.
x_glist
);
t_canvas
*
canvas
=
glist_getcanvas
(
x
->
x_gui
.
x_glist
);
sys_vgui
(
".x%lx.c coords %lxLABEL %d %d
\n
"
,
canvas
,
x
,
xpos
+
x
->
x_gui
.
x_ldx
+
sh
->
h_dragx
-
x
->
x_gui
.
label_offset_x
,
ypos
+
x
->
x_gui
.
x_ldy
+
sh
->
h_dragy
-
x
->
x_gui
.
label_offset_y
);
}
}
}
}
void
bng_draw
(
t_bng
*
x
,
t_glist
*
glist
,
int
mode
)
void
bng_draw
(
t_bng
*
x
,
t_glist
*
glist
,
int
mode
)
...
@@ -742,10 +855,26 @@ static void *bng_new(t_symbol *s, int argc, t_atom *argv)
...
@@ -742,10 +855,26 @@ static void *bng_new(t_symbol *s, int argc, t_atom *argv)
pd_bind
(
x
->
x_gui
.
x_handle
,
sh
->
h_bindsym
=
gensym
(
buf
));
pd_bind
(
x
->
x_gui
.
x_handle
,
sh
->
h_bindsym
=
gensym
(
buf
));
sprintf
(
sh
->
h_outlinetag
,
"h%x"
,
(
int
)
sh
);
sprintf
(
sh
->
h_outlinetag
,
"h%x"
,
(
int
)
sh
);
sh
->
h_dragon
=
0
;
sh
->
h_dragon
=
0
;
sh
->
h_scale
=
1
;
x
->
x_gui
.
scale_offset_x
=
0
;
x
->
x_gui
.
scale_offset_x
=
0
;
x
->
x_gui
.
scale_offset_y
=
0
;
x
->
x_gui
.
scale_offset_y
=
0
;
x
->
x_gui
.
scale_vis
=
0
;
x
->
x_gui
.
scale_vis
=
0
;
/* label handle init */
t_scalehandle
*
lh
;
char
lhbuf
[
64
];
x
->
x_gui
.
x_lhandle
=
pd_new
(
scalehandle_class
);
lh
=
(
t_scalehandle
*
)
x
->
x_gui
.
x_lhandle
;
lh
->
h_master
=
(
t_gobj
*
)
x
;
sprintf
(
lhbuf
,
"_h%x"
,
(
int
)
lh
);
pd_bind
(
x
->
x_gui
.
x_lhandle
,
lh
->
h_bindsym
=
gensym
(
lhbuf
));
sprintf
(
lh
->
h_outlinetag
,
"h%x"
,
(
int
)
lh
);
lh
->
h_dragon
=
0
;
lh
->
h_scale
=
0
;
x
->
x_gui
.
label_offset_x
=
0
;
x
->
x_gui
.
label_offset_y
=
0
;
x
->
x_gui
.
label_vis
=
0
;
return
(
x
);
return
(
x
);
}
}
...
@@ -764,6 +893,13 @@ static void bng_ff(t_bng *x)
...
@@ -764,6 +893,13 @@ static void bng_ff(t_bng *x)
pd_unbind
(
x
->
x_gui
.
x_handle
,
((
t_scalehandle
*
)
x
->
x_gui
.
x_handle
)
->
h_bindsym
);
pd_unbind
(
x
->
x_gui
.
x_handle
,
((
t_scalehandle
*
)
x
->
x_gui
.
x_handle
)
->
h_bindsym
);
pd_free
(
x
->
x_gui
.
x_handle
);
pd_free
(
x
->
x_gui
.
x_handle
);
}
}
/* label handle deconstructor */
if
(
x
->
x_gui
.
x_lhandle
)
{
pd_unbind
(
x
->
x_gui
.
x_lhandle
,
((
t_scalehandle
*
)
x
->
x_gui
.
x_lhandle
)
->
h_bindsym
);
pd_free
(
x
->
x_gui
.
x_lhandle
);
}
}
}
void
g_bang_setup
(
void
)
void
g_bang_setup
(
void
)
...
...
src/g_canvas.c
View file @
558876b3
...
@@ -367,11 +367,39 @@ void glist_init(t_glist *x)
...
@@ -367,11 +367,39 @@ void glist_init(t_glist *x)
}
}
/* make a new glist. It will either be a "root" canvas or else
/* make a new glist. It will either be a "root" canvas or else
it appears as a "text" object in another window (canvas_getcurr
n
et()
it appears as a "text" object in another window (canvas_getcurre
n
t()
tells us which.) */
tells us which.) */
t_canvas
*
canvas_new
(
void
*
dummy
,
t_symbol
*
sel
,
int
argc
,
t_atom
*
argv
)
t_canvas
*
canvas_new
(
void
*
dummy
,
t_symbol
*
sel
,
int
argc
,
t_atom
*
argv
)
{
{
/* first alloc one byte or redundant memory to prevent creation of objects with the same "name"
which leads to double-action invoked from every single action and eventually possible crashes
we keep a list of these redundant allocations and destroy them when pd quits */
//if (x->gl_owner && x->gl_env) {
t_redundant_mem
*
new_rm
=
(
t_redundant_mem
*
)
t_getbytes
(
sizeof
(
*
new_rm
));
new_rm
->
rm_what
=
(
int
)
getbytes
(
1
);
if
(
rm_start
==
NULL
)
{
//fprintf(stderr,"first allocation\n");
rm_start
=
new_rm
;
rm_end
=
new_rm
;
}
else
if
(
rm_start
==
rm_end
)
{
//fprintf(stderr,"second allocation\n");
rm_end
=
new_rm
;
rm_start
->
rm_next
=
rm_end
;
}
else
{
//fprintf(stderr,"allocation\n");
rm_end
->
rm_next
=
new_rm
;
rm_end
=
new_rm
;
}
//}
t_canvas
*
x
=
(
t_canvas
*
)
pd_new
(
canvas_class
);
t_canvas
*
x
=
(
t_canvas
*
)
pd_new
(
canvas_class
);
/* now that we've created a new canvas, add canvas info to the new_rm */
new_rm
->
rm_canvas
=
x
;
t_canvas
*
owner
=
canvas_getcurrent
();
t_canvas
*
owner
=
canvas_getcurrent
();
t_symbol
*
s
=
&
s_
;
t_symbol
*
s
=
&
s_
;
int
vis
=
0
,
width
=
GLIST_DEFCANVASWIDTH
,
height
=
GLIST_DEFCANVASHEIGHT
;
int
vis
=
0
,
width
=
GLIST_DEFCANVASWIDTH
,
height
=
GLIST_DEFCANVASHEIGHT
;
...
@@ -463,6 +491,7 @@ t_canvas *canvas_new(void *dummy, t_symbol *sel, int argc, t_atom *argv)
...
@@ -463,6 +491,7 @@ t_canvas *canvas_new(void *dummy, t_symbol *sel, int argc, t_atom *argv)
x
->
gl_edit
=
!
strncmp
(
x
->
gl_name
->
s_name
,
"Untitled"
,
8
);
x
->
gl_edit
=
!
strncmp
(
x
->
gl_name
->
s_name
,
"Untitled"
,
8
);
x
->
gl_font
=
sys_nearestfontsize
(
font
);
x
->
gl_font
=
sys_nearestfontsize
(
font
);
pd_pushsym
(
&
x
->
gl_pd
);
pd_pushsym
(
&
x
->
gl_pd
);
return
(
x
);
return
(
x
);
}
}
...
...
src/g_canvas.h
View file @
558876b3
...
@@ -40,6 +40,20 @@ in future releases. The public (stable) API is in m_pd.h. */
...
@@ -40,6 +40,20 @@ in future releases. The public (stable) API is in m_pd.h. */
extern
"C"
{
extern
"C"
{
#endif
#endif
/* redundant struct queue for maintaining a list of redundantly
allocated memory chunks to avoid double-entry bug. these are
instantiated inside canvas_new since the bug only affects new
canvases/abstractions rather than individual objects. the queue
is destructed in m_glob.c quit call (when pd exits) */
typedef
struct
_redundant_mem
{
int
rm_what
;
t_canvas
*
rm_canvas
;
struct
_redundant_mem
*
rm_next
;
}
t_redundant_mem
;
t_redundant_mem
*
rm_start
;
t_redundant_mem
*
rm_end
;
/* --------------------- geometry ---------------------------- */
/* --------------------- geometry ---------------------------- */
#define IOWIDTH 7
/* width of an inlet/outlet in pixels */
#define IOWIDTH 7
/* width of an inlet/outlet in pixels */
...
...
src/g_editor.c
View file @
558876b3
...
@@ -2313,23 +2313,24 @@ static void canvas_doregion(t_canvas *x, int xpos, int ypos, int doit)
...
@@ -2313,23 +2313,24 @@ static void canvas_doregion(t_canvas *x, int xpos, int ypos, int doit)
x
->
gl_editor
->
e_ywas
,
xpos
,
ypos
);
x
->
gl_editor
->
e_ywas
,
xpos
,
ypos
);
}
}
/*
static void canvas_mouseup_gop(t_canvas *x, t_gobj *g) {
static void canvas_mouseup_gop(t_canvas *x, t_gobj *g) {
/
*
simulate clearing and recreating object
*/
/
/
simulate clearing and recreating object
gobj_activate(g, x, 1);
gobj_activate(g, x, 1);
t_object *ob = pd_checkobject(&g->g_pd);
t_object *ob = pd_checkobject(&g->g_pd);
t_rtext *yyyy = glist_findrtext(x, (t_text *)&ob->ob_g);
t_rtext *yyyy = glist_findrtext(x, (t_text *)&ob->ob_g);
/
*
copy current text
*/
/
/
copy current text
char *buf;
char *buf;
int bufsize;
int bufsize;
rtext_gettext(yyyy, &buf, &bufsize);
rtext_gettext(yyyy, &buf, &bufsize);
//fprintf(stderr, ">%s<\n", buf);
//fprintf(stderr, ">%s<\n", buf);
rtext_key(yyyy, 127, NULL);
rtext_key(yyyy, 127, NULL);
/
*
recreate object with no args
*/
/
/
recreate object with no args
glist_deselect(x, g);
glist_deselect(x, g);
/
*
object was recreated, so now it is latest in the queue
*/
/
/
object was recreated, so now it is latest in the queue
t_gobj *z = x->gl_list;
t_gobj *z = x->gl_list;
while (z->g_next) {
while (z->g_next) {
...
@@ -2341,7 +2342,7 @@ static void canvas_mouseup_gop(t_canvas *x, t_gobj *g) {
...
@@ -2341,7 +2342,7 @@ static void canvas_mouseup_gop(t_canvas *x, t_gobj *g) {
ob = pd_checkobject(&g->g_pd);
ob = pd_checkobject(&g->g_pd);
yyyy = glist_findrtext(x, (t_text *)&ob->ob_g);
yyyy = glist_findrtext(x, (t_text *)&ob->ob_g);
/
*
redo the old text
*/
/
/
redo the old text
int i;
int i;
for (i = 0; i < bufsize; i++) {
for (i = 0; i < bufsize; i++) {
rtext_key(yyyy, (int)buf[i], NULL);
rtext_key(yyyy, (int)buf[i], NULL);
...
@@ -2349,6 +2350,7 @@ static void canvas_mouseup_gop(t_canvas *x, t_gobj *g) {
...
@@ -2349,6 +2350,7 @@ static void canvas_mouseup_gop(t_canvas *x, t_gobj *g) {
gobj_activate(z, x, 1);
gobj_activate(z, x, 1);
x->gl_editor->e_textdirty = 1;
x->gl_editor->e_textdirty = 1;
}
}
*/
void
canvas_mouseup
(
t_canvas
*
x
,
void
canvas_mouseup
(
t_canvas
*
x
,
t_floatarg
fxpos
,
t_floatarg
fypos
,
t_floatarg
fwhich
)
t_floatarg
fxpos
,
t_floatarg
fypos
,
t_floatarg
fwhich
)
...
@@ -2397,21 +2399,23 @@ void canvas_mouseup(t_canvas *x,
...
@@ -2397,21 +2399,23 @@ void canvas_mouseup(t_canvas *x,
}
}
/* OK, activate it */
/* OK, activate it */
/* but before we do, check if this is GOP and adjust accordingly */
/*
// but before we do, check if this is GOP and adjust accordingly
//fprintf(stderr,"activate...");
//fprintf(stderr,"activate...");
if (pd_class(&g->g_pd) == canvas_class &&
if (pd_class(&g->g_pd) == canvas_class &&
((t_glist *)g)->gl_isgraph &&
((t_glist *)g)->gl_isgraph &&
canvas_isabstraction((t_glist *)g))
canvas_isabstraction((t_glist *)g))
{
{
//fprintf(stderr,"gop...");
//fprintf(stderr,"gop...");
/
*
if mouse has not moved AND this object does not have its text hidden (otherwise we only translate the selection)
*/
/
/
if mouse has not moved AND this object does not have its text hidden (otherwise we only translate the selection)
if (!(((t_glist *)g)->gl_hidetext) && !x->gl_editor->e_lastmoved) {
if (!(((t_glist *)g)->gl_hidetext) && !x->gl_editor->e_lastmoved) {
//fprintf(stderr,"yes\n");
//fprintf(stderr,"yes\n");
canvas_mouseup_gop(x, x->gl_editor->e_selection->sel_what);
canvas_mouseup_gop(x, x->gl_editor->e_selection->sel_what);
}
}
//else fprintf(stderr,"no\n");
//else fprintf(stderr,"no\n");
}
}
/* else if it is a regular object */
// else if it is a regular object
*/
else
{
else
{
//fprintf(stderr,"reg_obj\n");
//fprintf(stderr,"reg_obj\n");
gobj_activate
(
x
->
gl_editor
->
e_selection
->
sel_what
,
x
,
1
);
gobj_activate
(
x
->
gl_editor
->
e_selection
->
sel_what
,
x
,
1
);
...
@@ -3029,11 +3033,11 @@ static t_binbuf *canvas_docopy(t_canvas *x)
...
@@ -3029,11 +3033,11 @@ static t_binbuf *canvas_docopy(t_canvas *x)
t_linetraverser
t
;
t_linetraverser
t
;
t_outconnect
*
oc
;
t_outconnect
*
oc
;
t_binbuf
*
b
=
binbuf_new
();
t_binbuf
*
b
=
binbuf_new
();
int
c
=
0
;
//
int c = 0;
for
(
y
=
x
->
gl_list
;
y
;
y
=
y
->
g_next
)
for
(
y
=
x
->
gl_list
;
y
;
y
=
y
->
g_next
)
{
{
if
(
glist_isselected
(
x
,
y
))
{
if
(
glist_isselected
(
x
,
y
))
{
c
++
;
//
c++;
//fprintf(stderr, "saving object num %d\n", c);
//fprintf(stderr, "saving object num %d\n", c);
//fprintf(stderr, "saving object >.x%lx<\n", (t_int)y);
//fprintf(stderr, "saving object >.x%lx<\n", (t_int)y);
/* introduce redundant comment to avoid recreation of old abstractions
/* introduce redundant comment to avoid recreation of old abstractions
...
@@ -3042,28 +3046,28 @@ static t_binbuf *canvas_docopy(t_canvas *x)
...
@@ -3042,28 +3046,28 @@ static t_binbuf *canvas_docopy(t_canvas *x)
is yet another bug in tcl/tk which means that canvas tries to do some
is yet another bug in tcl/tk which means that canvas tries to do some
kind of caching behind the curtains resulting in objects not always
kind of caching behind the curtains resulting in objects not always
having unique ids, contrary to tcl/tk's canvas man page */
having unique ids, contrary to tcl/tk's canvas man page */
if
(
c
==
1
)
{
/*
if (c==1) {
binbuf_addv(b, "ssiis;", gensym("#X"), gensym("text"),
binbuf_addv(b, "ssiis;", gensym("#X"), gensym("text"),
(int)((t_text *)y)->te_xpix-30, (int)((t_text *)y)->te_ypix-30, gensym("tcltksucks"));
(int)((t_text *)y)->te_xpix-30, (int)((t_text *)y)->te_ypix-30, gensym("tcltksucks"));
}
}
*/
gobj_save
(
y
,
b
);
gobj_save
(
y
,
b
);
}
}
}
}
//fprintf(stderr,"done saving objects\n");
//fprintf(stderr,"done saving objects\n");
linetraverser_start
(
&
t
,
x
);
linetraverser_start
(
&
t
,
x
);
c
=
0
;
//
c = 0;
while
(
oc
=
linetraverser_next
(
&
t
))
while
(
oc
=
linetraverser_next
(
&
t
))
{
{
if
(
glist_isselected
(
x
,
&
t
.
tr_ob
->
ob_g
)
if
(
glist_isselected
(
x
,
&
t
.
tr_ob
->
ob_g
)
&&
glist_isselected
(
x
,
&
t
.
tr_ob2
->
ob_g
))
&&
glist_isselected
(
x
,
&
t
.
tr_ob2
->
ob_g
))
{
{
//fprintf(stderr, "lines need to be copied\n");
//fprintf(stderr, "lines need to be copied\n");
c
=
1
;
//
c = 1;
binbuf_addv
(
b
,
"ssiiii;"
,
gensym
(
"#X"
),
gensym
(
"connect"
),
binbuf_addv
(
b
,
"ssiiii;"
,
gensym
(
"#X"
),
gensym
(
"connect"
),
//
glist_selectionindex(x, &t.tr_ob->ob_g, 1), t.tr_outno,
glist_selectionindex
(
x
,
&
t
.
tr_ob
->
ob_g
,
1
),
t
.
tr_outno
,
//
glist_selectionindex(x, &t.tr_ob2->ob_g, 1), t.tr_inno);
glist_selectionindex
(
x
,
&
t
.
tr_ob2
->
ob_g
,
1
),
t
.
tr_inno
);
glist_selectionindex
(
x
,
&
t
.
tr_ob
->
ob_g
,
1
)
+
1
,
t
.
tr_outno
,
//
glist_selectionindex(x, &t.tr_ob->ob_g, 1)+1, t.tr_outno,
glist_selectionindex
(
x
,
&
t
.
tr_ob2
->
ob_g
,
1
)
+
1
,
t
.
tr_inno
);
//
glist_selectionindex(x, &t.tr_ob2->ob_g, 1)+1, t.tr_inno);
}
}
}