C(99) gtk 02 - disporre gli oggetti

16
Disporre gli oggetti * http://corsogtk.chipsy.it/

description

Come disporre gli oggetti nelle GTK, uno sguardo sui principali metodi di disposizione : HBox-VBox Fixed Table

Transcript of C(99) gtk 02 - disporre gli oggetti

Page 1: C(99) gtk   02 - disporre gli oggetti

Disporre gli oggetti

*http://corsogtk.chipsy.it/

Page 2: C(99) gtk   02 - disporre gli oggetti

*

Page 3: C(99) gtk   02 - disporre gli oggetti

*Dato che inserendo tanti oggetti nella finestra uno dopo l’altro quello che otterremo sarebbe una disposizione totalmente insensata e brutta da vedere, son nati per questo vari widget il cui unico scopo è aiutarci a disporre gli elementi :

*I BOX : HBOX e VBOX servono per disporre al loro interno i widget in maniera ordinata e in una delle due direzioni scelte (orizzontale o verticale)

*FIXED, dentro questo elemento possiamo mettere dei widget in delle coordinate precise, possiamo disporli anche uno sopra l’altro, per creare un gioco è il migliore.

Page 4: C(99) gtk   02 - disporre gli oggetti

*

Page 5: C(99) gtk   02 - disporre gli oggetti

*Per creare questi 2 widget dobbiamo usare :

mio_h_oggetto = gtk_hbox_new(gboolean homogeneous, gint spacing);

mio_v_oggetto = gtk_vbox_new(gboolean homogeneous, gint spacing);

Il primo parametro è se vogliamo che gli oggetti al suo interno siano

disposti in maniera omogenea.

Il secondo parametro è lo spazio che deve esserci tra un oggetto e

l’altro.

Dentro questi widget possiamo metterci tutti i widget che vogliamo e

anche altri hbox o vbox.

Volendo si potrebbe benissimo creare una tabella di hbox e vbox, ma

non avrebbe senso visto che esiste già il widget table.

Page 6: C(99) gtk   02 - disporre gli oggetti

Dopo averli creati sicuramente vorremmo inserirci del contenuto dentro. Per fare questo dobbiamo usare le funzioni (identiche in entrambi) :

gtk_box_pack_start(GTK_BOX(HVBOX), widget, espandi, riempi, 0);

gtk_box_pack_end(GTK_BOX(HVBOX), widget, espandi, riempi, 0);

La prima funzione inserisce un widget all’inizio del contenitore, mentre la seconda lo inserisce alla fine.

1. Il primo parametro è il contenitore in cui vogliamo mettere il widget, deve essere fatto il cast a GTK_BOX visto che è il padre dei due fratellini HBOX e VBOX.

2. Il secondo parametro è il widget che vogliamo mettere nel contenitore.

3. Il terzo parametro è un gboolean (TRUE / FALSE) e indica se vogliamo che l’elemento riempia il contenitore in larghezza nelle VBOX e in altezza nelle HBOX

4. Il quarto parametro che funziona solo se il terzo è TRUE, riempie anche nell’altra dimensione

5. Il quinto parametro è quanto spazio deve esserci tra il widget e il contenitore (in ogni dimensione)

Page 7: C(99) gtk   02 - disporre gli oggetti

*In questa immagine il primo bottone è

stato inserito con gli argomenti TRUE,FALSE

gli altri con gli argomenti

TRUE,TRUE

Page 8: C(99) gtk   02 - disporre gli oggetti

*

Page 9: C(99) gtk   02 - disporre gli oggetti

*Questo è il componente che più è consigliato per la realizzazione di giochi in cui abbiamo degli oggetti in movimento.

Per crearlo dobbiamo usare :

contenitore_fixed = gtk_fixed_new();

*E per inserire oggetti al suo interno :

gtk_fixed_put(contenitore_fixed,widget,x,y);

Il primo parametro è il contenitore in cui inserire il widget,

Il secondo il widget da inserire

E il terzo e quarto le coordinate.

Analogamente per spostare un widget :

gtk_fixed_move(contenitore_fixed,widget,x,y);

Page 10: C(99) gtk   02 - disporre gli oggetti

*

Page 11: C(99) gtk   02 - disporre gli oggetti

* Le tabelle, beh non c’è bisogno di spiegare cosa sono, vediamo un po’ come usarle :

Crearle :

tabella = gtk_table_new(righe, colonne, OMOGENEA);

Primo e secondo parametro son il numero di righe e colonne.

Il terzo parametro è se deve essere omogenea, ovvero tutte le righe con la stessa altezza e tutte le colonne con la stessa larghezza.

Per inserire :

gtk_table_attach_defaults(tabella, widget, colonna_a, colonna_b, riga_a, riga_b );

Primo e secondo parametro son contenitore e widget da inserire.

Terzo e quarto parametro tra quali colonne deve stare (si potete mettere un widget che occupa anche più di una colonna)

Quinto e sesto tra quali righe.

Page 12: C(99) gtk   02 - disporre gli oggetti

*Ultima cosa sulle tabelle :

Se vogliamo impostare lo spazio che deve esserci tra una

riga e l’altra usiamo :

gtk_table_set_row_spacings(tabella, 2);

Tra una riga e l’altra :

gtk_table_set_col_spacings(tabella, 2);

Page 13: C(99) gtk   02 - disporre gli oggetti

*

Page 14: C(99) gtk   02 - disporre gli oggetti

*

#include <gtk/gtk.h>

int main(int argc,char *argv[]) {

GtkWidget *win,*hbox,*vbox;

//Inizializzo le GTK

gtk_init (&argc, &argv);

//Creo la finestra

win = gtk_window_new(GTK_WINDOW_TOPLEVEL);

//Creo un vbox

vbox = gtk_vbox_new(TRUE, 20);

//Inserisco dentro il vbox una label, le vedremmo più avanti

gtk_box_pack_start(GTK_BOX(vbox), gtk_label_new("Sopra"), TRUE, TRUE, 0);

//Creo un hbox

hbox = gtk_hbox_new(TRUE, 50);

//Inserisco dentro l'hbox due label, le vedremmo più avanti

gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Sinistra"), TRUE, TRUE, 0);

gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Destra"), TRUE, TRUE, 0);

//Inserisco dentro il vbox, l'hbox

gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);

//Inserisco il vbox dentro la finestra

gtk_container_add(GTK_CONTAINER(win),vbox);

//Mostro la finestra e tutto il suo contenuto

gtk_widget_show_all(win);

//Avvio il loop principale delle GTK

gtk_main ();

return 0;

}

Page 15: C(99) gtk   02 - disporre gli oggetti

*

#include <gtk/gtk.h>

int main(int argc,char *argv[]) {

GtkWidget *win,*tabella;

int i,j;

char s[4][4][2] = {{"7","8","9","+"},{"4","5","6","-"},{"1","2","3","*"},{".","0","%","/"}};

//Inizializzo le GTK

gtk_init (&argc, &argv);

//Creo la finestra

win = gtk_window_new(GTK_WINDOW_TOPLEVEL);

//Creo una tabella 4x4

tabella = gtk_table_new(4, 4, TRUE);

//La riempio con dei label

for (i=0;i<4;i++)

for (j=0;j<4;j++)

gtk_table_attach_defaults(tabella, gtk_button_new_with_label(s[j][i]), i, i+1, j, j+1 );

//Inserisco la tabella dentro la finestra

gtk_container_add(GTK_CONTAINER(win),tabella);

//Mostro la finestra e tutto il suo contenuto

gtk_widget_show_all(win);

//Avvio il loop principale delle GTK

gtk_main ();

return 0;

}

Page 16: C(99) gtk   02 - disporre gli oggetti

*

#include <gtk/gtk.h>

int main(int argc,char *argv[]) {

GtkWidget *win,*fixed;

int i;

//Inizializzo le GTK

gtk_init (&argc, &argv);

//Creo la finestra

win = gtk_window_new(GTK_WINDOW_TOPLEVEL);

//Imposto le dimensione della finestra

gtk_widget_set_size_request (win,640,480);

//Creo un fixed

fixed = gtk_fixed_new();

//Ci metto dei label in posizioni a caso

for (i=0;i<10;i++)

gtk_fixed_put(fixed,gtk_label_new("Ciao!"),rand()%640,rand()%480);

//Inserisco il fixed dentro la finestra

gtk_container_add(GTK_CONTAINER(win),fixed);

//Mostro la finestra e tutto il suo contenuto

gtk_widget_show_all(win);

//Avvio il loop principale delle GTK

gtk_main ();

return 0;

}