[PD-cvs] pd/src u_object.tk,1.1.2.38,1.1.2.39 g_hslider.c,1.1.1.3.2.2.2.23,1.1.1.3.2.2.2.24

Mathieu Bouchard matju at users.sourceforge.net
Fri May 7 09:15:43 CEST 2004


Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24132

Modified Files:
      Tag: impd_0_37
	u_object.tk g_hslider.c 
Log Message:
fixed some slider bugs


Index: g_hslider.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/g_hslider.c,v
retrieving revision 1.1.1.3.2.2.2.23
retrieving revision 1.1.1.3.2.2.2.24
diff -C2 -d -r1.1.1.3.2.2.2.23 -r1.1.1.3.2.2.2.24
*** g_hslider.c	4 May 2004 07:15:49 -0000	1.1.1.3.2.2.2.23
--- g_hslider.c	7 May 2004 07:15:38 -0000	1.1.1.3.2.2.2.24
***************
*** 44,48 ****
  	pd_upload((t_gobj *)x,glist);
  	sys_mgui((t_iemgui *)x,"slider","draw","");
! 	sys_mgui((t_iemgui *)x,"slider","set","i",x->x_val);
      }
  }
--- 44,48 ----
  	pd_upload((t_gobj *)x,glist);
  	sys_mgui((t_iemgui *)x,"slider","draw","");
! //	sys_mgui((t_iemgui *)x,"slider","set","i",x->x_val);
      }
  }
***************
*** 87,92 ****
  }
  
! static void slider_check_minmax(t_slider *x, double min, double max)
  {
      double diff;
      if(x->x_gui.x_lin0_log1) {
--- 87,93 ----
  }
  
! static void slider_check_minmax(t_slider *x)
  {
+     double min=x->x_min, max=x->x_max;
      double diff;
      if(x->x_gui.x_lin0_log1) {
***************
*** 97,104 ****
      x->x_min = min;
      x->x_max = max;
!     diff = x->x_gui.x_lin0_log1 ? log(x->x_max/x->x_min) : (x->x_max - x->x_min);
      x->x_k = isvert(x) ?
! 	diff/(double)(x->x_gui.x_h - 1) :
! 	diff/(double)(x->x_gui.x_w - 1);
  }
  
--- 98,105 ----
      x->x_min = min;
      x->x_max = max;
!     diff = x->x_gui.x_lin0_log1 ? log(x->x_max/x->x_min) : (x->x_max-x->x_min);
      x->x_k = isvert(x) ?
! 	diff/(double)(x->x_gui.x_h-1) :
! 	diff/(double)(x->x_gui.x_w-1);
  }
  
***************
*** 127,166 ****
  }
  
- static void slider_motion(t_slider *x, t_floatarg dx, t_floatarg dy)
- {
-     int old = x->x_val;
-     int l = isvert(x) ? x->x_gui.x_h : x->x_gui.x_w;
-     int m = (l-1)*100;
-     x->x_pos += (x->x_gui.x_finemoved?1:100)*(int)(isvert(x) ? -dy : dx);
-     x->x_val = x->x_pos;
-     if(x->x_val>m) {x->x_val=m; x->x_pos+=50; x->x_pos-=x->x_pos%100;}
-     if(x->x_val<0) {x->x_val=0; x->x_pos-=50; x->x_pos-=x->x_pos%100;}
-     if(old != x->x_val) {
- 	x->x_gui.x_draw(x, x->x_gui.x_glist, 0);
- 	slider_bang(x);
-     }
- }
- 
  static void slider_size(t_slider *x, t_symbol *s, int ac, t_atom *av)
  {
! if (isvert(x)) {
!     x->x_gui.x_w = iemgui_clip_size((int)atom_getintarg(0, ac, av));
!     if(ac > 1) slider_check_width(x, (int)atom_getintarg(1, ac, av));
! }else{
!     slider_check_width(x, (int)atom_getintarg(0, ac, av));
!     if(ac > 1) x->x_gui.x_h = iemgui_clip_size((int)atom_getintarg(1, ac, av));
! }
      iemgui_size((t_iemgui *)x);
  }
  
! static void slider_range(t_slider *x, t_symbol *s, int ac, t_atom *av)
! {
!     slider_check_minmax(x,
! 	(double)atom_getfloatarg(0, ac, av),
! 	(double)atom_getfloatarg(1, ac, av));
! }
  
! static void slider_lin(t_slider *x) {x->x_gui.x_lin0_log1 = 0; x->x_k = (x->x_max-x->x_min)/(double)((isvert(x)?x->x_gui.x_h:x->x_gui.x_w) - 1);}
! static void slider_log(t_slider *x) {x->x_gui.x_lin0_log1 = 1; slider_check_minmax(x, x->x_min, x->x_max);}
  
  static void slider_init(t_slider *x, t_floatarg f)   {x->x_gui.x_loadinit = !!f;}
--- 128,148 ----
  }
  
  static void slider_size(t_slider *x, t_symbol *s, int ac, t_atom *av)
  {
!     int a = atom_getintarg(0,ac,av);
!     int b = ac>1 ? atom_getintarg(1,ac,av) : 0;
!     if (isvert(x)) {
! 	x->x_gui.x_w = iemgui_clip_size(a); if(ac>1) slider_check_width(x,b);
!     } else {
! 	slider_check_width(x,a); if(ac>1) x->x_gui.x_h = iemgui_clip_size(b);
!     }
      iemgui_size((t_iemgui *)x);
  }
  
! static void slider_range(t_slider *x, t_float min, t_float max)
! {x->x_min = min; x->x_max = max; slider_check_minmax(x);}
  
! static void slider_lin(t_slider *x) {x->x_gui.x_lin0_log1 = 0; x->x_k = (x->x_max-x->x_min)/(double)((isvert(x)?x->x_gui.x_h:x->x_gui.x_w)-1);}
! static void slider_log(t_slider *x) {x->x_gui.x_lin0_log1 = 1; slider_check_minmax(x);}
  
  static void slider_init(t_slider *x, t_floatarg f)   {x->x_gui.x_loadinit = !!f;}
***************
*** 170,189 ****
  {
      slider_set(x, f);
!     if(x->x_gui.x_put_in2out) {
! 	double out = x->x_gui.x_lin0_log1 ?
! 		x->x_min*exp(x->x_k*(double)(x->x_val)*0.01) :
! 		(double)(x->x_val)*0.01*x->x_k + x->x_min;
! 	if (fabs(out) < 1.0e-10) out = 0.0;
! 	outlet_float(x->x_gui.x_obj.ob_outlet, out);
! 	if(x->x_gui.x_snd_able && x->x_gui.x_snd->s_thing)
! 	    pd_float(x->x_gui.x_snd->s_thing, out);
!     }
  }
  
  static void slider_loadbang(t_slider *x)
  {
!     if(!sys_noloadbang && x->x_gui.x_loadinit)
!     {
! 	x->x_gui.x_draw(x, x->x_gui.x_glist, 0);
  	slider_bang(x);
      }
--- 152,163 ----
  {
      slider_set(x, f);
!     if(x->x_gui.x_put_in2out) slider_bang(x);
  }
  
  static void slider_loadbang(t_slider *x)
  {
!     t_iemgui *y = (t_iemgui *)x;
!     if(!sys_noloadbang && y->x_loadinit) {
! 	y->x_draw(x,y->x_glist,0);
  	slider_bang(x);
      }
***************
*** 193,207 ****
  {
      t_iemgui *y = (t_iemgui *)x;
!     int isa=0, lin0_log1=0, v=0, steady=1;
      if(!pd_scanargs(argc,argv,"iiddbiaaaiiiiccci;b",
! 	&y->x_w,&y->x_h,&x->x_min,&x->x_max,&lin0_log1,&isa,&y->x_snd,&y->x_rcv,&y->x_lab,
  	&y->x_ldx,&y->x_ldy,&y->x_font_style,&y->x_fontsize,
  	&y->x_bcol,&y->x_fcol,&y->x_lcol,&v,&steady)) return;
!     iem_inttosymargs(&x->x_gui, isa);
!     y->x_lin0_log1=lin0_log1;
      x->x_pos = x->x_val = y->x_loadinit ? v : 0;
      y->x_steady = steady;
      iemgui_constrain(y);
!     slider_check_minmax(x, x->x_min, x->x_max);
      if (isvert(x)) slider_check_width(x, y->x_h);
      else           slider_check_width(x, y->x_w);
--- 167,182 ----
  {
      t_iemgui *y = (t_iemgui *)x;
!     int isa,v,steady,lilo;
      if(!pd_scanargs(argc,argv,"iiddbiaaaiiiiccci;b",
! 	&y->x_w,&y->x_h,&x->x_min,&x->x_max,&lilo,&isa,
! 	&y->x_snd,&y->x_rcv,&y->x_lab,
  	&y->x_ldx,&y->x_ldy,&y->x_font_style,&y->x_fontsize,
  	&y->x_bcol,&y->x_fcol,&y->x_lcol,&v,&steady)) return;
!     iem_inttosymargs(y,isa);
      x->x_pos = x->x_val = y->x_loadinit ? v : 0;
+     y->x_lin0_log1 = lilo;
      y->x_steady = steady;
      iemgui_constrain(y);
!     slider_check_minmax(x);
      if (isvert(x)) slider_check_width(x, y->x_h);
      else           slider_check_width(x, y->x_w);
***************
*** 246,254 ****
      class_addbang(c,slider_bang);
      class_addfloat(c,slider_float);
-     class_addmethod(c, (t_method)slider_motion, gensym("motion"), A_FLOAT, A_FLOAT, 0);
      class_addmethod(c, (t_method)slider_reload, gensym("reload"), A_GIMME, 0);
      class_addmethod(c, (t_method)slider_loadbang, gensym("loadbang"), 0);
      class_addmethod(c, (t_method)slider_set, gensym("set"), A_FLOAT, 0);
      class_addmethod(c, (t_method)slider_size, gensym("size"), A_GIMME, 0);
      class_addmethod(c, (t_method)slider_log, gensym("log"), 0);
      class_addmethod(c, (t_method)slider_lin, gensym("lin"), 0);
--- 221,229 ----
      class_addbang(c,slider_bang);
      class_addfloat(c,slider_float);
      class_addmethod(c, (t_method)slider_reload, gensym("reload"), A_GIMME, 0);
      class_addmethod(c, (t_method)slider_loadbang, gensym("loadbang"), 0);
      class_addmethod(c, (t_method)slider_set, gensym("set"), A_FLOAT, 0);
      class_addmethod(c, (t_method)slider_size, gensym("size"), A_GIMME, 0);
+     class_addmethod(c, (t_method)slider_range, gensym("range"), A_FLOAT, A_FLOAT, 0);
      class_addmethod(c, (t_method)slider_log, gensym("log"), 0);
      class_addmethod(c, (t_method)slider_lin, gensym("lin"), 0);

Index: u_object.tk
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/u_object.tk,v
retrieving revision 1.1.2.38
retrieving revision 1.1.2.39
diff -C2 -d -r1.1.2.38 -r1.1.2.39
*** u_object.tk	7 May 2004 05:55:50 -0000	1.1.2.38
--- u_object.tk	7 May 2004 07:15:38 -0000	1.1.2.39
***************
*** 522,525 ****
--- 522,529 ----
  	}
  	numbox_draw $self $canvas
+     } elseif {$key==27} {
+         # Escape
+ 	set _($self:val) $_($self:oval)
+         canvas_ungrab $canvas
      } else {
  	puts "numbox_keyevent $key"
***************
*** 674,716 ****
  	set _($self:unclickevent) slider_unclick
  	set _($self:ungrabevent)  slider_ungrab
- 	return
- 	#EXPERIMENTAL: (notches)
- 	if {$orient} {
- 		set thick [clamp [expr $xs/3] 1 5]
- 		set x3 [expr $x1+$xs-$thick/2-2]
- 		set eighth [expr round($ys/8-1)]
- 		set coords [list $x3 $y1 $x3 [expr $y1+$ys]]
- 	} else {
- 		set thick [clamp [expr $ys/3] 1 5]
- 		set y3 [expr $y1+$ys-$thick/2-2]
- 		set eighth [expr $xs/8]
- 		set coords [list $x1 $y3 [expr $x1+$xs] $y3]
- 	}
- 	$canvas create line $coords -dash [list 1 $eighth 1 $eighth] -width $thick -fill [darker $look(sliderbg)]
- }
  
- proc slider_set {self canvas value} {
- 	global _
  	set pos [$canvas coords ${self}BASE]
- 	foreach {x1 y1} [object_xy $self $canvas] {}
- 	set orient [slider_orient $self]
  	set span [expr $_($self:max)-$_($self:min)]
! 	set _($self:value) [expr $value*$span/($orient?$_($self:h):$_($self:w))/100]
  	if {$orient} {
  		set size [expr [lindex $pos 2]-$x1]
! 		set y1 [expr [lindex $pos 3]-($value+50)/100-2]
  		set y2 [expr $y1-2]
  		$canvas coords ${self}KNOB \
! 			[expr $x1+2] $y1 \
! 			[expr $x1+$size-2] $y2
  	} {
  		set size [expr [lindex $pos 3]-$y1]
! 		set x1 [expr $x1+($value+50)/100]
  		set x2 [expr $x1+2]
  		set y2 [expr $y1+$size]
  		$canvas coords ${self}KNOB \
! 			$x1 [expr $y1+2] \
! 			$x2 [expr $y1+$size-2]
  	}
  }
  
--- 678,717 ----
  	set _($self:unclickevent) slider_unclick
  	set _($self:ungrabevent)  slider_ungrab
  
  	set pos [$canvas coords ${self}BASE]
  	set span [expr $_($self:max)-$_($self:min)]
! 	set l [expr $orient?$_($self:h):$_($self:w)]
! 	set value [expr $_($self:val)*$span/($l-1)/100]
! 	set _($self:value) $value
  	if {$orient} {
  		set size [expr [lindex $pos 2]-$x1]
! 		set y1 [expr [lindex $pos 3]-$value*($l-1)/$span-2]
  		set y2 [expr $y1-2]
  		$canvas coords ${self}KNOB \
! 			[expr $x1+2] $y1 [expr $x1+$size-2] $y2
  	} {
  		set size [expr [lindex $pos 3]-$y1]
! 		set x1 [expr $x1+$value*($l-1)/$span]
  		set x2 [expr $x1+2]
  		set y2 [expr $y1+$size]
  		$canvas coords ${self}KNOB \
! 			$x1 [expr $y1+2] $x2 [expr $y1+$size-2]
! 	}
! }
! 
! # not used
! proc slider_draw_notches {self canvas} {
! 	if {$orient} {
! 		set thick [clamp [expr $xs/3] 1 5]
! 		set x3 [expr $x1+$xs-$thick/2-2]
! 		set eighth [expr round($ys/8-1)]
! 		set coords [list $x3 $y1 $x3 [expr $y1+$ys]]
! 	} else {
! 		set thick [clamp [expr $ys/3] 1 5]
! 		set y3 [expr $y1+$ys-$thick/2-2]
! 		set eighth [expr $xs/8]
! 		set coords [list $x1 $y3 [expr $x1+$xs] $y3]
  	}
+ 	$canvas create line $coords -dash [list 1 $eighth 1 $eighth] -width $thick -fill [darker $look(sliderbg)]
  }
  
***************
*** 737,743 ****
  	global _
  	set _($self:clicking) 0
! 	if {$_($self:value)!=$_($self:ovalue)} {
  		canvas_ungrab $canvas
! 		pd "x$self float $_($self:val) ;"
  	}
  }
--- 738,744 ----
  	global _
  	set _($self:clicking) 0
! 	if {[lindex $_($self:first) 1] != $y} {
  		canvas_ungrab $canvas
! 		pd "x$self float $_($self:value) ;"
  	}
  }





More information about the Pd-cvs mailing list