Newsgroup: it.comp.os.linux.development
Titolo: Gtk Curve

Qualcuno usa il widget Curve di GTK?  Come si preimposta una curva?
Dovrebbe servire set_vector, ma o non ne capisco la logica o da`
risultati assurdi.
Massimiliano

 risultati assurdi.
se chiami set_vector, il tipo si imposta automaticamente in free, come 
per varie altre operazioni
quindi i passi sono: creare il widget, definire range e gamma se 
necessario, definirne i punti con set_vector usando un vettore di gfloat 
in cui i punti sono coppie sequenziali di x e y: veclen deve essere 2 
volte il numero di punti, cioe' la lunghezza del vettore.
in ultimo definirne il tipo
-- 
Se l'appetito vien mangiando,
Figuriamoci a digiuno...
BW2K+2

 in ultimo definirne il tipo
A questo punto mi chiedo se sono incappato in un bug dei binding per
Ruby.  Il codice qua sotto, invece di risultare in una curva che
connette i punti (0.0,0.0), (0.1,0.1) eccetera, risulta in una sorta
di scaletta, cosi`:
          -----
     -----
-----
@curve = GammaCurve.new
@curve.curve.set_range(0,1,0,1)
@curve.curve.set_vector(10, [
	 		  0.0,0.0
	 		  0.1,0.1,
			  0.2,0.2,
			  0.3,0.3,
			  0.4,0.4
		        ])
Hai idea di dove possa trovare qualcos'altro su GammaCurve?  
gtk.org
ne sa poco nella reference e zero nelle mailing list (ho trovato la
stessa domanda senza risposte).
Massimiliano

 stessa domanda senza risposte).
se non fai un @curve.curve.set_curve_type() dopo il set_vector, il type 
e' free, cioe' slegato, come risulta sulla documentazione di gtk curve
http://developer.gnome.org/doc/API/gtk/gtkcurve.html#GTK-CURVE-SET-VECTOR
perche' gtkcurve e non gammacurve?
 " The GammaCurve widget shows a curve which the user can edit with the 
   mouse just like a GtkCurve widget.                                   "


 perche' gtkcurve e non gammacurve?
Infatti e` GammaCurve che ho finito per usare.  Non fa differenza da
questo punto di vista, l'unica cosa che ha in piu` sono una manciata
di bottoni sulla destra.
Massimiliano

 ...invece di una spline che connette i punti che gli ho dato. :-\
forse ruby passa solo linear o free: hai provato variando tutti i tipi?


 forse ruby passa solo linear o free: hai provato variando tutti i tipi?
No, sono disponibili tutti i tipi, e vanno impostati dopo aver passato
il vettore (come in C, suppongo), perche' set_vector imposta
automaticamente su free.  Il problema e` proprio a monte: invece di
creare una linea che connette punti, set_vector crea una scaletta, e
il povero set_curve_type non puo` far molto. :-(
In C riesci a preimpostarla la curva?  Ovvero, se per esempio dai un
set_vector con (0,0) e (1,1) e poi imposti su CURVE_TYPE_LINEAR, ti
ritrovi poi con una linea da (0,0) a (1,1)?
Massimiliano

 ritrovi poi con una linea da (0,0) a (1,1)?
certo, questo codice funziona:
    GtkWidget* curve = gtk_curve_new();
    gtk_curve_set_range(GTK_CURVE(curve), 0, 1, 0, 1);
    gfloat points[] = {0, 0, 1, 1};
    gtk_curve_set_vector(GTK_CURVE(curve), 2, points );
    gtk_curve_set_curve_type(GTK_CURVE(curve), GTK_CURVE_TYPE_LINEAR);


     gtk_curve_set_curve_type(GTK_CURVE(curve), GTK_CURVE_TYPE_LINEAR);
Uhmmm... strano.  L'ho provato (in C), e ottengo una linea da (0,0) a
(1,0)---stile encefalogramma piatto, per intenderci ;-).  Se invece
imposto points su {0, 0, 0.5, 0.5, 1, 1} e di conseguenza do 3
anziche' 2 in gtk_curve_set_vector, ottengo la linea da (0,0) a (1,1),
come aspettato, anche in Ruby.  Sia in C che in Ruby, pero`, qualunque
sia il numero di punti che inserisco tra (0,0) e (1,1), quella linea
rimane sempre tale e quale.  Boh?
Massimiliano

 rimane sempre tale e quale.  Boh?
per i punti: se tu metti (½,½) , che e' a meta' tra (0,0) e (1,1), e' 
normale che sia piatta
per il resto, vedi tu:
[wo...@blakwolf.land]$ gtk-config --version
1.2.8
[wo...@blakwolf.land]$ rpm -qa | grep gtk+-
gtk+-1.2.8-6.1mdk
gtk+-devel-1.2.8-6.1mdk
[wo...@blakwolf.land]$ ls `locate libgtk.so` -l
lrwxrwxrwx    1 root     root           19 ago  1  2001 
/usr/lib/libgtk.so -> libgtk-1.2.so.0.5.3*
forse e' un problema di versioni, se la tua e' piu' nuova, possiamo 
anche segnalarlo come bug


 anche segnalarlo come bug
Infatti ho una 1.2.10.  Faro` un giro sulle liste @
gtk.org
.
Massimiliano

 Infatti ho una 1.2.10.  Faro` un giro sulle liste @
gtk.org
.
posta il risultato


 posta il risultato
Questo e` stato il mio post pochi giorni dopo il nostro thread.
----- Forwarded message from Massimiliano Mirra -----
Date: Thu, 7 Mar 2002 13:47:57 +0100
From: Massimiliano Mirra <>
To: 
gtk-...@gnome.org
Subject: Bug in GtkCurve?
Message-ID: <2002030713...@prism.localnet>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.3.22i
Status: RO
Content-Length: 1841
Lines: 63
The following code results in a straight line:
gfloat points[] = {0, 0, 0.5, 0.5, 1, 1};
gtk_curve_set_range (GTK_CURVE(curve) 0, 1, 0, 1);
gtk_curve_set_vector (GTK_CURVE(curve), 3, points);
gtk_curve_set_curve_type(GTK_CURVE(curve), GTK_CURVE_TYPE_SPLINE;
Which is what one would expect.  The following different code,
however, still results in a straight line:
gfloat points[] = {0, 0, 0.25, 0.25, 0.5, 0.5, 0.75, 0.5, 0.85, 0.55, 1, 1};
gtk_curve_set_range (GTK_CURVE(curve) 0, 1, 0, 1);
gtk_curve_set_vector (GTK_CURVE(curve), 6, points);
gtk_curve_set_curve_type(GTK_CURVE(curve), GTK_CURVE_TYPE_SPLINE;
Which one would not expect (unless I am missing something).  I cannot
seem to initialize a curve to anything different to a straight line.
Points in the middle seem to be ignored.
I am running GTK 1.2.10 on a Debian Woody.  A person running 1.2.8
reported it works there.  Here is the code that reproduces the problem
on my platform:
#include <gtk/gtk.h>
gint delete_event( GtkWidget *widget,
		   GdkEvent  *event,
		   gpointer   data )
{
 
  gtk_main_quit();
}
int main( int argc,
	  char *argv[] )
{
  GtkWidget *window;
  GtkWidget *curve;
  gfloat points[] = {0, 0, 0.25, 0.25, 0.5, 0.5, 0.75, 0.5, 0.85, 0.55, 1, 1};
 
  gtk_init(&argc, &argv);
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  curve = gtk_curve_new ();
  gtk_signal_connect (GTK_OBJECT (window), "delete_event",
		      GTK_SIGNAL_FUNC (delete_event), NULL);
  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
  gtk_container_add (GTK_CONTAINER (window), curve); 
  gtk_widget_show (curve);
  gtk_widget_show (window);
  gtk_curve_set_range (GTK_CURVE(curve), 0, 1, 0, 1);
  gtk_curve_set_vector (GTK_CURVE(curve), 6, points);
  gtk_curve_set_curve_type(GTK_CURVE(curve), GTK_CURVE_TYPE_SPLINE);
  gtk_main ();
  return(0);
}
----- End forwarded message -----
 
L'ho postata sia in 
gtk-...@gnome.org
 che 
gtk-dev...@gnome.org
.
Responso: zero.  Suppongo che tutti gli sviluppatori siano
pesantemente indaffarati con GTK 2.0
Per cortesia, potresti postarmi il codice con cui riuscivi a
inizializzare una curva?  Mi pare strano che sia stato introdotto un
bug su un widget cosi` poco usato in appena due versioni.  Tra
l'altro, il GIMP che uso richiede >1.2.9 e ho visto che un filtro pare
salvare lo stato di una curva tra una chiamata e l'altra, percio`
comincio a supporre di aver fatto qualche grossolano errore.