Skip to content

Commit

Permalink
add absolute scroll and pages/unit switch
Browse files Browse the repository at this point in the history
  • Loading branch information
fdch committed May 11, 2023
1 parent 6597dcd commit 852dc70
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 25 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Makefile for fd_lib version 0.3 - Tue 28 Mar 2023 07:43:16 PM CEST
# Makefile for fd_lib version 0.3 - Thu 11 May 2023 07:32:07 PM CEST
lib.name=fd_lib
lib.setup.sources = src/$(lib.name).c
class.sources = src/cantor.c src/clifford.c src/colormap.c src/combi.c src/connect.c src/counter.c src/crand.c src/cuadratic.c src/delit.c src/factor.c src/fdm.c src/frand.c src/glistinfo.c src/halton.c src/henon.c src/irlog.c src/irpow.c src/irsqrt.c src/iterate.c src/lor~.c src/lorenz.c src/lornorm.c src/lorsig~.c src/mainpath.c src/mandelbrot.c src/minimax.c src/mtwister.c src/parabola.c src/pmtwister.c src/prandom.c src/randy.c src/reflect.c src/root.c src/scroll.c src/siginfo.c src/sradio.c src/tracks.c
Expand Down
68 changes: 50 additions & 18 deletions help/scroll-help.pd
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
#N canvas 500 50 530 480 12;
#N canvas 1305 174 530 480 12;
#X declare -lib fd_lib;
#X obj 4 4 cnv 15 522 30 empty empty "scroll" 20 15 0 15 -228856 -1
0;
#X obj 4 254 cnv 15 522 20 empty empty arguments: 10 10 0 14 -228856
-1 0;
#X obj 4 314 cnv 15 522 20 empty empty inlets: 10 10 0 14 -228856 -1
0;
#X obj 4 374 cnv 15 522 20 empty empty outlets: 10 10 0 14 -228856
-1 0;
#X obj 4 453 cnv 15 522 20 empty empty version 10 10 0 14 -228856 -1
0;
#X obj 4 4 cnv 15 522 30 empty empty "scroll" 20 15 0 15 #dcdcdc #000000 0;
#X obj 4 254 cnv 15 522 20 empty empty arguments: 10 10 0 14 #dcdcdc #000000 0;
#X obj 4 314 cnv 15 522 20 empty empty inlets: 10 10 0 14 #dcdcdc #000000 0;
#X obj 4 374 cnv 15 522 20 empty empty outlets: 10 10 0 14 #dcdcdc #000000 0;
#X obj 4 453 cnv 15 522 20 empty empty version 10 10 0 14 #dcdcdc #000000 0;
#X obj 380 8 declare -lib fd_lib;
#N canvas 0 22 450 300 meta 0;
#X restore 438 423 pd meta;
Expand Down Expand Up @@ -52,8 +47,6 @@
#X connect 10 0 1 0;
#X restore 379 115 pd current;
#X text 363 93 If no argument:;
#X text 20 42 Scrolls in step-sizes the X-axis or Y-axis on a given
(or the current) canvas., f 42;
#N canvas 705 333 450 300 noscroll 0;
#X obj 99 130 scroll;
#X msg 86 62 xaxis 200;
Expand All @@ -64,8 +57,7 @@
#X restore 379 141 pd noscroll;
#N canvas 0 22 450 300 init 0;
#X obj 42 16 loadbang;
#X msg 42 41 \; pd-canvas-1 vis 0 \; pd-canvas-2 vis 0 \; pd-current
vis 0 \; pd-noscroll vis 0 \;;
#X msg 42 41 \; pd-canvas-1 vis 0 \; pd-canvas-2 vis 0 \; pd-current vis 0 \; pd-noscroll vis 0 \;;
#X connect 0 0 1 0;
#X restore 381 35 pd init;
#X msg 101 135 \; msg xaxis -10;
Expand All @@ -74,19 +66,27 @@ vis 0 \; pd-noscroll vis 0 \;;
#X msg 172 96 \; msg yaxis 10;
#X msg 167 172 \; msg yaxis -10;
#X text 324 190 The canvases:;
#N canvas 0 22 450 300 messages 0;
#N canvas 0 22 662 551 messages 0;
#X msg 185 149 symbol pd-canvas-2;
#X msg 217 184 symbol pd-canvas-1;
#X msg 241 222 symbol fake;
#X text 179 124 Change canvas to scroll in:;
#X obj 75 254 s msg;
#X obj 62 450 s msg;
#X msg 67 80 xaxis \$1;
#X msg 144 78 yaxis \$1;
#X msg 66 49 10;
#X msg 99 49 -10;
#X msg 145 48 10;
#X msg 178 48 -10;
#X text 64 25 Scroll the canvas:;
#X floatatom 286 281 5 0 0 0 - - - 0;
#X msg 286 305 xpos \$1;
#X msg 367 315 ypos \$1;
#X floatatom 370 288 5 0 0 0 - - - 0;
#X text 330 262 normalized scroll (0-1);
#X obj 288 377 tgl 20 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
#X msg 288 402 pages \$1;
#X text 366 399 set to page-based scrolling \; defaults to units;
#X connect 0 0 4 0;
#X connect 1 0 4 0;
#X connect 2 0 4 0;
Expand All @@ -96,7 +96,39 @@ vis 0 \; pd-noscroll vis 0 \;;
#X connect 8 0 5 0;
#X connect 9 0 6 0;
#X connect 10 0 6 0;
#X connect 12 0 13 0;
#X connect 13 0 4 0;
#X connect 14 0 4 0;
#X connect 15 0 14 0;
#X connect 17 0 18 0;
#X connect 18 0 4 0;
#X restore 378 75 pd messages;
#X text 60 284 1: symbol: pd-canvas name;
#X text 60 340 1: see pd-messages;
#X connect 19 0 11 0;
#N canvas 735 429 450 300 units 0;
#X obj 65 49 tgl 20 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
#X obj 65 99 s msg;
#X text 152 42 0 = units (default) small increments;
#X text 152 74 1 = pages \, entire scrollable screen;
#X msg 65 74 page \$1;
#X connect 0 0 4 0;
#X connect 4 0 1 0;
#X restore 378 168 pd units;
#N canvas 1342 517 450 300 pos 0;
#X obj 44 36 hsl 170 20 0 127 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
#X obj 42 62 / 127;
#X obj 42 112 s msg;
#X obj 235 218 / 127;
#X msg 235 243 ypos \$1;
#X obj 235 268 s msg;
#X obj 231 33 vsl 20 170 0 127 0 0 empty empty empty 0 -9 0 12 #fcfcfc #000000 #000000 0 1;
#X msg 42 87 xpos \$1;
#X connect 0 0 1 0;
#X connect 1 0 7 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 6 0 3 0;
#X connect 7 0 2 0;
#X restore 464 75 pd pos;
#X text 20 42 Scrolls in steps or absoulte position the X-axis or Y-axis on a given (or the current) canvas., f 42;
#X connect 18 0 11 0;
42 changes: 36 additions & 6 deletions src/scroll.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,42 +12,68 @@ You should have received a copy of the GNU General Public License along with thi
*/

#include "fdLib.h"
#include "s_stuff.h"

typedef struct scroll {
t_object x_obj;
t_symbol *x_sym;
t_canvas *canvas;
t_float x_page;
} t_scroll;


static void setcanvassym_scroll(t_scroll *x, t_symbol *s)
{
t_canvas *canvas;
if (!(canvas = (t_canvas *)pd_findbyclass(s, canvas_class)))
pd_error(x, "%s: No such canvas", s->s_name);
else
x->canvas = canvas;

}

static void scroll_page(t_scroll *x, t_float f)
{
x->x_page = (int)f > 0 ? 1 : 0;
}

static void scroll_symbol(t_scroll *x, t_symbol *s)
{
setcanvassym_scroll(x, s);
}

static void scroll_moveto(t_scroll *x, int d, float f)
{
if (!sys_havegui())return;
if (!(glist_isvisible(x->canvas))) canvas_vis(x->canvas, 1);
float t = f > 1 ? 1 : f < 0 ? 0 : (float) f;
sys_vgui(".x%lx.c %sview moveto %f \n", x->canvas, d == 0 ? "x" : "y", t);
}

static void scroll_xaxis(t_scroll *x, t_float f)
static void scroll_xmoveto(t_scroll *x, t_float f)
{
scroll_moveto(x, 0, (float) f);
}

static void scroll_ymoveto(t_scroll *x, t_float f)
{
scroll_moveto(x, 1, 1 - (float) f );
}

static void scroll_scroll(t_scroll *x, int d, int f)
{
if (!sys_havegui())return;
if (!(glist_isvisible(x->canvas))) canvas_vis(x->canvas, 1);
sys_vgui(".x%lx.c xview scroll %d units \n", x->canvas, (int)f);
sys_vgui(".x%lx.c %sview scroll %d %s \n", x->canvas, d == 0 ? "x" : "y", (int)f, x->x_page == 1 ? "pages" : "units");
}

static void scroll_xaxis(t_scroll *x, t_float f)
{
scroll_scroll(x, 0, (int)f);
}


static void scroll_yaxis(t_scroll *x, t_float f)
{
if (!(glist_isvisible(x->canvas))) canvas_vis(x->canvas, 1);
sys_vgui(".x%lx.c yview scroll [expr {- (%d)}] units \n", x->canvas, (int)f);
scroll_scroll(x, 1, (int)f * -1);
}

static t_class *scroll_class;
Expand All @@ -61,6 +87,7 @@ static void *scroll_new(t_symbol *s)
x->canvas = canvas_getcurrent();
} else
setcanvassym_scroll(x, s);
x->x_page = 0; // default to units
return(x);
}

Expand All @@ -70,4 +97,7 @@ void scroll_setup()
class_addsymbol(scroll_class, scroll_symbol);
class_addmethod(scroll_class, (t_method)scroll_xaxis, gensym("xaxis"), A_FLOAT, 0);
class_addmethod(scroll_class, (t_method)scroll_yaxis, gensym("yaxis"), A_FLOAT, 0);
class_addmethod(scroll_class, (t_method)scroll_xmoveto, gensym("xpos"), A_FLOAT, 0);
class_addmethod(scroll_class, (t_method)scroll_ymoveto, gensym("ypos"), A_FLOAT, 0);
class_addmethod(scroll_class, (t_method)scroll_page, gensym("page"), A_FLOAT, 0);
}

0 comments on commit 852dc70

Please sign in to comment.