From df1e51d9dee9479cb1949faebde0c4334f4bcd6a Mon Sep 17 00:00:00 2001 From: Ivica Ico Bukvic <ico@vt.edu> Date: Sun, 31 Aug 2014 02:26:30 -0400 Subject: [PATCH] *fixed incosistent displace of Jonathan's matrix transformed scalars *added getscroll after redrawing gop and scalars that have been changed via properties dialog in case their xy positions changed --- pd/src/g_graph.c | 6 ++++++ pd/src/g_readwrite.c | 2 ++ pd/src/g_scalar.c | 17 ++++++++++++++++- pd/src/pd.tk | 14 +++++++++++--- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/pd/src/g_graph.c b/pd/src/g_graph.c index ea1406cd1..bb8b98d1b 100644 --- a/pd/src/g_graph.c +++ b/pd/src/g_graph.c @@ -1052,6 +1052,9 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis) tag, x1, y1, x2, y2); if (glist_isselected(parent_glist, gr)) gobj_select(gr, parent_glist, 1); + // here we check for changes in scrollbar because of legacy + // objects that can fall outside gop window, e.g. scalars + canvas_getscroll(glist_getcanvas(x->gl_owner)); //fprintf(stderr,"******************graph_vis SELECT\n"); } else @@ -1063,6 +1066,9 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis) glist_eraseiofor(parent_glist, &x->gl_obj, tag); for (g = x->gl_list; g; g = g->g_next) gobj_vis(g, x, 0); + // here we check for changes in scrollbar because of legacy + // objects that can fall outside gop window, e.g. scalars + canvas_getscroll(glist_getcanvas(x->gl_owner)); } } diff --git a/pd/src/g_readwrite.c b/pd/src/g_readwrite.c index f485fbf27..c02fddfc3 100644 --- a/pd/src/g_readwrite.c +++ b/pd/src/g_readwrite.c @@ -354,6 +354,8 @@ void canvas_dataproperties(t_canvas *x, t_scalar *sc, t_binbuf *b) } else newone->g_next = x->gl_list, x->gl_list = newone; } + // here we check for changes in scrollbar due to potential repositioning + canvas_getscroll(x); didit: ; } diff --git a/pd/src/g_scalar.c b/pd/src/g_scalar.c index ab8315f15..e650e03e1 100644 --- a/pd/src/g_scalar.c +++ b/pd/src/g_scalar.c @@ -473,14 +473,29 @@ void scalar_select(t_gobj *z, t_glist *owner, int state) glist_getcanvas(owner), x); sys_vgui(".x%lx.c addtag scalar_selected withtag {.scalar%lx}\n", glist_getcanvas(owner), x->sc_vec); + if (x->sc_selected != glist_getcanvas(owner)) + { + // we are inside gop + sys_vgui(".x%lx.c addtag scalarGOP withtag blankscalar%lx\n", + glist_getcanvas(owner), x); + sys_vgui(".x%lx.c addtag scalarGOP withtag {.scalar%lx}\n", + glist_getcanvas(owner), x->sc_vec); + } } else { - x->sc_selected = 0; sys_vgui(".x%lx.c dtag blankscalar%lx selected\n", glist_getcanvas(owner), x); sys_vgui(".x%lx.c dtag .scalar%lx scalar_selected\n", glist_getcanvas(owner), x->sc_vec); + if (x->sc_selected != glist_getcanvas(owner)) + { + sys_vgui(".x%lx.c dtag blankscalar%lx scalarGOP\n", + glist_getcanvas(owner), x); + sys_vgui(".x%lx.c dtag .scalar%lx scalarGOP\n", + glist_getcanvas(owner), x->sc_vec); + } + x->sc_selected = 0; } //sys_vgui("pdtk_select_all_gop_widgets .x%lx %lx %d\n", // glist_getcanvas(owner), owner, state); diff --git a/pd/src/pd.tk b/pd/src/pd.tk index 3f5df1d78..5944eaeec 100644 --- a/pd/src/pd.tk +++ b/pd/src/pd.tk @@ -8157,18 +8157,26 @@ proc pdtk_canvas_update_sticky_tip {w} { } # move normal selected items and add (dx, dy) to selected scalars' matrices proc pdtk_canvas_displace_withtag {w dx dy} { + #puts stderr "pdtk_canvas_displace_withtag $dx $dy" $w move selected $dx $dy - foreach item [$w find withtag scalar_selected] { + foreach item [$w find withtag {scalar_selected&&!scalarGOP}] { set matrix [lindex [$w itemconfigure $item -matrix] 4] #puts stderr "A:$matrix" set newx [expr {[lindex $matrix 2 0] + $dx}] set newy [expr {[lindex $matrix 2 1] + $dy}] - #set newx [expr {[lindex $matrix 2 0] + ($dx * [expr 1.0-[lindex $matrix 0 0]])}] - #set newy [expr {[lindex $matrix 2 1] + ($dy * [expr 1.0-[lindex $matrix 1 1]])}] set matrix [lreplace $matrix 2 2 [list $newx $newy]] #puts stderr "B:$matrix" $w itemconfigure $item -matrix $matrix } + foreach item [$w find withtag {scalar_selected&&scalarGOP}] { + set matrix [lindex [$w itemconfigure $item -matrix] 4] + #puts stderr "C:$matrix" + set newx [expr {[lindex $matrix 2 0] + ($dx * [expr 1.0-[lindex $matrix 0 0]])}] + set newy [expr {[lindex $matrix 2 1] + ($dy * [expr 1.0-[lindex $matrix 1 1]])}] + set matrix [lreplace $matrix 2 2 [list $newx $newy]] + #puts stderr "D:$matrix" + $w itemconfigure $item -matrix $matrix + } } # move activewidth to toggle on editmode? -- GitLab