vai alla Homepage di Apogeonline

 



Cos'è OpenPress
Glossario
Linux-FAQ
Documenti:

Open Source Definition

GNU General Public License

La cattedrale e il bazaar

Colonizzare la noosfera

Il calderone magico


Libri:

Italian crackdown

Open Sources

MediaMorfosi

GTK+/GNOME
sviluppo applicazioni


Telematica per la pace

Linux HOWTO: Installazione e configurazione

Linux HOWTO: Networking


Risorse
Feedback
vai alla Homepage di Apogeo Editore

Vai alla homepage di OpenPress

GTK+ / Gnome Sviluppo di Applicazioni


Reference per i GnomeCanvasItem standard

Questa sezione descrive ciascuno degli oggetti canvas forniti da Gnome, attraverso una tabella di argomenti e una descrizione dei meno ovvii fra questi.

Oggetti rettangolari ed ellittic

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

NomeTipoLettura/ScritturaDescrizione
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à).

Oggetti lineari

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

NomeTipoLettura/ScritturaDescrizione
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.
arrow_shape_a double Entrambe Lunghezza della freccia.
arrow_shape_b double Entrambe Larghezza degli estremi della freccia.
arrow_shape_c double Entrambe Larghezza della freccia.

Oggetti poligonali

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

NomeTipoLettura/ScritturaDescrizione
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à).

Oggetti immagine

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

NomeTipoLettura/ScritturaDescrizione
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).

Oggetti testuali

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

NomeTipoLettura/ScritturaDescrizione
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.
text_width double Sola lettura Larghezza del testo visualizzato.
text_height double Sola lettura Altezza del testo visualizzato.

Oggetti widget

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

NomeTipoLettura/ScritturaDescrizione
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.

Copyright © 1995-1999 Apogeo srl, Milano