Questa sezione descrive ciascuno degli oggetti canvas forniti da Gnome, attraverso una tabella di argomenti e una descrizione dei meno ovvii fra questi.
Gli oggetti GnomeCanvasRect e GnomeCanvasEllipse condividono la stessa identica interfaccia, attraverso la classe di base GnomeCanvasRE. La forma viene fornita tramite un contenitore: una coordinata per l'angolo in alto a sinistra (x1, y1) e una per l'angolo in basso a destra (x2, y2). Il rettangolo assume le dimensioni del contenitore, mentre l'ellissi è inscritta a quest'ultimo, tangente alla metà di ciascun lato. I rettangoli e le ellissi possono essere riempiti o meno.
GnomeCanvasRE non si comporta molto bene se riceve le coordinate nell'ordine sbagliato. Questo significa che x2 deve essere maggiore di x1, e y2 maggiore di y1, altrimenti GnomeCanvasRE si ritroverà molto, molto confuso.
Tabella 1. Argomenti di GnomeCanvasRE
Nome
Tipo
Lettura/Scrittura
Descrizione
x1
double
Entrambe
Coordinata dell'estremità sinistra
y1
double
Entrambe
Coordinate dell'estremità superiore
x2
double
Entrambe
Coordinata dell'estremità destra.
y2
double
Entrambe
Coordinata dell'estremità inferiore.
fill_color
gchar*
Sola scrittura
Colore di riempimento; stringa per gdk_color_parse(), oppure NULL per la trasparenza
fill_color_gdk
GdkColor*
Entrambe
Colore di riempimento; specificato come un GdkColor già allocato.
fill_color_rgba
guint32
Entrambe
Colore di riempimento, specificato come un valore a 32 bit che indica i valori di rosso, verde, blu e alpha nei byte 1, 2, 3 e 4. Il valore uguale a 255 è opaco, uguale a 0 è invisibile.
outline_color
gchar*
Sola scrittura
Colore bordo, specificato come stringa per gdk_color_parse, oppure NULL per la trasparenza
outline_color_gdk
GdkColor*
Entrambe
Colore del bordo, specificato come un GdkColor precedentemente allocato.
outline_color_rgba
guint32
Entrambe
Colore del bordo, specificato come un valore a 32 bit che indica i valori di rosso, verde, blue e alpha nei byte 1, 2, 3 e 4. Il valore uguale a 255 è opaco, uguale a 0 è invisibile.
fill_stipple
GdkBitmap*
Entrambe
Stipple da utilizzare durante il disegno del riempimento. Unico per la modalità GDK.
outline_stipple
GdkBitmap*
Entrambe
Stipple da utilizzare durante il disegno del bordo. Unico per la modalità GDK.
width_pixels
guint
Sola scrittura
Spessore del bordo, espresso in pixel (indipendente dallo zoom).
width_units
double
Sola scrittura
Spessore del bordo, espresso in unità canvas. Lo spessore in pixels varia con il fattore di ingrandimento (pixel/unità).
GnomeCanvasLine rappresenta uno o più segmenti di linea uniti per le estremità. È possibile utilizzarli per rappresentare dei poligoni. GnomeCanvasPolygon viene utilizzato per i poligoni con colore di riempimento.
Una linea viene specificata tramite una struttura GnomeCanvasPoints:
typedef struct {
int num_points;
double *coords;
int ref_count;
} GnomeCanvasPoints;
Il campo coords contiene un array di punti, una alternanza di coordinate X e Y. Andrete a riempire il campo coords direttamente, dopo la creazione di una GnomeCanvasPoints attraverso gnome_canvas_points_new(). La struttura deve essere distrutta attraverso gnome_canvas_points_unref().
Le linee possono avere delle punte di freccia alle estremità. Questa forma viene specificata tramite tre parametri, chiamati arbitrariamente A, B e C. Il parametro A (specificato attraverso l'argomento arrow_shape_a) specifica la distanza dalla base della freccia alla punta. B specifica la distanza dalla vetta ad una delle estremità laterali. C specifica la distanza della base dall'altra estremità della linea.
Tabella 2. Argomenti di GnomeCanvasLine
Nome
Tipo
Lettura/Scrittura
Descrizione
points
GnomeCanvasPoints*
Entrambe
Punti sulla linea
fill_color
gchar*
Sola scrittura
Colore di riempimento, rappresentato da una stringa per gdk_color_parse()
fill_color_gdk
GdkColor*
Entrambe
Color di riempimento, specificato da un GdkColor precedentemente allocato.
fill_color_rgba
guint32
Entrambe
Colore di riempimento, specificato come un valore a 32 bit che indica i valori di rosso, verde, blue e alpha nei byte 1, 2, 3 e 4. Il valore uguale a 255 è opaco, uguale a 0 è invisibile.
fill_stipple
GdkBitmap*
Entrambe
Stipple da utilizzare durante il disegno della linea. Unico per la modalità GDK.
width_pixels
guint
Sola scrittura
Spessore della linea, espresso in pixel (indipendente dal fattore di ingrandimento)
width_units
double
Sola scrittura
Spessore della linea, espresso in unità canvas. Lo spessore dei pixel varia con il fattore di ingrandimento (pixel/unità).
cap_style
GdkCapStyle
Entrambe
Stile del Cap (Modalità GDK).
join_style
GdkJoinStyle
Entrambe
Stile dell'unione (Modalità GDK).
line_style
GdkLineStyle
Entrambe
Stile della linea (Modalità GDK).
first_arrowhead
gboolean
Entrambe
Se porre una freccia all'inizio della linea.
last_arrowhead
gboolean
Entrambe
Se porre una freccia alla fine della linea.
smooth
gboolean
Entrambe
Se sfumare la linea utilizzando splines paraboliche.
spline_steps
guint
Entrambe
Numero di segmenti per la visualizzazione delle curve.
GnomeCanvasPolygon rappresenta un poligono riempito da un colore. Può essere riempito oppure rappresentato dal solo bordo. Diversamente da GnomeCanvasRE, un GnomeCanvasPolygon non riempito non è "forato", la porzione trasparente al suo interno è parte dell'oggetto del canvas. Per i poligoni "forati" viene utilizzato l'oggetto GnomeCanvasLine.
Tabella 3. Argomenti di GnomeCanvasPolygon
Nome
Tipo
Lettura/Scrittura
Descrizione
points
GnomeCanvasPoints*
Entrambe
Punti del poligono.
fill_color
gchar*
Sola scrittura
Colore di riempimento, rappresentato da una stringa per gdk_color_parse(), oppure posto uguale a NULL per la trasparenza
fill_color_gdk
GdkColor*
Entrambe
Colore di riempimento, rappresentato da un GdkColor precedentemente allocato.
fill_color_rgba
guint32
Entrambe
Colore di riempimento, specificato come un valore a 32 bit che indica i valori di rosso, verde, blue e alpha nei byte 1, 2, 3 e 4. Il valore uguale a 255 è opaco, uguale a 0 è invisibile.
outline_color
gchar*
Sola scrittura
Colore del bordo, rappresentato da una stringa per gdk_color_parse(), oppure posto uguale a NULL per la trasparenza.
outline_color_gdk
GdkColor*
Entrambe
Colore del bordo, rappresentato da un GdkColor precedentemente allocato.
outline_color_rgba
guint32
Entrambe
Colore del bordo, specificato come un valore a 32 bit che indica i valori di rosso, verde, blue e alpha nei byte 1, 2, 3 e 4. Il valore uguale a 255 è opaco, uguale a 0 è invisibile.
fill_stipple
GdkBitmap*
Entrambe
Stipple da utilizzare durante il disegno del riempimento (Modalità GDK).
outline_stipple
GdkBitmap*
Entrambe
Stipple da utilizzare durante il disegno del bordo (Modalità GDK).
width_pixels
guint
Sola scrittura
Spessore del bordo, espresso in pixel (indipendente dal fatto di ingrandimento)
width_units
double
Sola scrittura
Spessore del bordo, espresso in unità canvas. Lo spessore dei pixel varia con il fattore di ingrandimento (pixels/unità).
GnomeCanvasImage posiziona una immagine sul canvas. A questa passate una GdkImlibImage, caricata tramite le funzioni di Imlib. Se l'immagine ha delle aree trasparenti, queste verranno gestite correttamente (non vengono considerate parte dell'oggetto, e non ricevono eventi). Per utilizzare GnomeCanvasImage con un canvas in modalità GDK, è necessario sfruttare i visual e le colormap di Imlib prima di creare il canvas. Maggiori informazioni sono reperibili nel
la sezione Preparazione del widget GnomeCanvas.
Tabella 4. Argomenti di GnomeCanvasImage
Nome
Tipo
Lettura/Scrittura
Descrizione
image
GdkImlibImage*
Entrambe
GdkImlibImage da visualizzare.
x
double
Entrambe
Coordinate X per il punto di ancoraggio.
y
double
Entrambe
Coordinate Y per il punto di ancoraggio.
anchor
GtkAnchorType
Entrambe
Posizione del punto di ancoraggio.
width
double
Entrambe
Larghezza espressa in unità canvas (l'immagine verrà scalata).
height
double
Entrambe
Altezza espressa in unità canvas (l'immagine verrà scalata).
GnomeCanvasText visualizza una stringa di testo. È possibile specificare le coordinate della stringa come coppia ordinata. Queste coordinate rappresentano il punto di ancoraggio del testo. Ad esempio, se l'argomento "anchor" viene impostato uguale a GTK_ANCHOR_NORTH, le coordinate dell'oggetto testuale rappresentano l'angolo in alto, nel centro, dell'oggetto. Per questo, il testo verrà posizionato centrato rispetto alla posizione X ed esattamente al di sotto della posizione Y. Possibili valori per il punto di ancoraggio sono:
GTK_ANCHOR_CENTER
GTK_ANCHOR_NORTH
GTK_ANCHOR_NORTH_WEST
GTK_ANCHOR_NORTH_EAST
GTK_ANCHOR_SOUTH
GTK_ANCHOR_SOUTH_WEST
GTK_ANCHOR_SOUTH_EAST
GTK_ANCHOR_WEST
GTK_ANCHOR_EAST
Trasformazioni affini per GnomeCanvasText non sono state implementate. Poiché il modello dei font di X Window è limitato e non flessibile, non esiste un buon metodo per ruotare o trasformare in qualunque modo un testo già visualizzato. In modalità antialiased gli oggetti del canvas implementano queste funzioni nell'unico modo possibile: l'intero testo viene disegnato in una GdkPixmap, che a sua volta viene copiata in una GdkImage, quindi tutti i pixel vengono letti individualmente dall'immagine e inseriti in una bitmap sul lato client, copiando successivamente quelli da visualizzare in un buffer temporaneo, sul quale viene utilizzata libart_lgpl per applicare qualunque trasformazione al buffer, copiando successivamente il buffer temporaneo in un buffer RGB del canvas. Infine, il canvas copia il buffer RGB sullo schermo. Non credo sia necessario dire che questa procedura sia più lenta di una lumaca: una bitmap viene trasferita più e più volte attraverso la rete. Per di più, scalare e ruotare i caratteri del testo come bitmap produce una perdita di qualità. Se provate ad utilizzare GnomeCanvasText in modalità antialiased, è molto probabile che noterete questa carenza. Se il vostro canvas risulta molto lento durante l'aggiornamento, sospettate pure degli oggetti testuali.
Sono in progetto alcune migliorie per questo tipo di oggetti, utilizzando una nuova astrazione per i font chiamata GnomeFont. Ad ogni modo, Gnome 1.0 non ha questa possibilità.
Non esiste una soluzione ottimale a questo problema. Se la vostra applicazione lo permette, è possibile incrementare sensibilmente le prestazioni creando oggetti testuali personalizzati che gestiscono le bitmap dei font. Ad ogni modo, se non utilizzate molto frequentemente lo stesso tipo di carattere, questa soluzione risulta comunque carente. Un'altra possibilità è quella di abbandonare i font di X Window e di utilizzare i font Type 1 con una libreria di rasterizzazione chiamata t1lib, ma questo limita il numero di font disponibili e crea la dipendenza da una nuova libreria. È inoltre possibile utilizzare i font True Type utilizzando la libreria FreeType, oppure utilizzare le estensioni Display Postscript di X (XDPS).
Sfortunamente, la soluzione migliore è quella di attendere la creazione di GnomeFont nelle future versioni delle librerie di Gnome.
Tabella 5. Argomenti di GnomeCanvasText
Nome
Tipo
Lettura/Scrittura
Descrizione
text
gchar*
Entrambe
Stringa da visualizzare.
x
double
Entrambe
Coordinate X del punto di ancoraggio.
y
double
Entrambe
Coordinate Y del punto di ancoraggio.
anchor
GtkAnchorType
Entrambe
Posizione del punto di ancoraggio
font
gchar*
Sola scrittura
Nome del carattere da passare a gdk_font_load()
fontset
gchar*
Sola scrittura
Nome del set di caratteri da passare a gdk_fontset_load()
font_gdk
GdkFont*
Entrambe
Carattere per la visualizzazione del testo
justification
GtkJustification
Entrambe
Giustificazione (solo per testo multilinea)
fill_color
gchar*
Sola scrittura
Colore di riempimento sotto forma di stringa per gdk_color_parse(), oppure uguale a NULL per la trasparenza
fill_color_gdk
GdkColor*
Entrambe
Colore di riempimento, specificato da un GdkColor precedentemente allocato.
fill_color_rgba
guint32
Entrambe
Colore di riempimento, specificato come un valore a 32 bit che indicano i valori di rosso, verde, blue e alpha nei byte 1, 2, 3 e 4. Il valore uguale a 255 è opaco, uguale a 0 è invisibile.
fill_stipple
GdkBitmap*
Entrambe
Stipple da utilizzare quando viene disegnato il testo (Modalità GDK)
clip_width
double
Entrambe
Larghezza del rettangolo occupato espresso in unità canvas.
clip_height
double
Entrambe
Altezza del rettangolo occupato espresso in unità canvas.
clip
gboolean
Entrambe
Abilita/Disabilita il clipping.
x_offset
double
Entrambe
Riferimento orizzontale da aggiungere alla posizione X.
y_offset
double
Entrambe
Riferimento verticale da aggiungere alla posizione Y.
L'oggetto GnomeCanvasWidget posiziona un widget sul canvas. L'oggetto canvas simula un widget contenitore, passando le dimensioni di contenimento al widget che si trova al suo interno. È possibile specificare un punto di ancoraggio per l'oggetto widget, in modo simile al GnomeCanvasText.
Tabella 6. Argomenti di GnomeCanvasWidget
Nome
Tipo
Lettura/Scrittura
Descrizione
widget
GtkWidget*
Entrambe
Widget da visualizzare.
x
double
Entrambe
Coordinate X del punto di ancoraggio.
y
double
Entrambe
Coordiante Y del punto di ancoraggio.
anchor
GtkAnchorType
Entrambe
Posizione del punto di ancoraggio.
width
double
Entrambe
Larghezza del widget.
height
double
Entrambe
Altezza del widget.
size_pixels
gboolean
Entrambe
Specifica come interpretare gli argomenti width e height. Se uguale a TRUE, sono espressi in pixel, se uguale a FALSE sono espressi in unità canvas.