First things first, I hope you’re doing great. Now, I’m doing a game with GTK in C, I’m trying to resize the Box where the board is and I’m not sure of if what I should be resizing is the box it is in or the table of the buttons itself.
I want the resize it so its user-friendly, keep in mind I’m a noob with GTK.
#include<gtk/gtk.h>
#include<stdio.h>
#include<stdlib.h>
void boton_click (GtkWidget * widget, gpointer info);
void salida (Gtkdget * widget, gpointer info);
gboolean cierra_ventana (GtkWidget * widget, GdkEvent * event, gpointer info);
int
main (int argc, char *argv[])
{
GtkWidget *ventana, *cajavertjugador1, *namejugador1, *imageplayer1,
*framejugador1, *labeljugador1, *cajavertjugador2, *namejugador2,
*imageplayer2, *framejugador2, *labeljugador2, *cajaH, *cajaboton,
*separador, *separadorvjug1, *separadorvjug2, *cajatablero, *boton,
*botoncancel, *tabla, *tablero[20][20];
int i, j;
gchar *arch1 = "troll.jpg";
gchar *arch2 = "challenge.jpg";
//***********************************1.-Initialize Enviroment
gtk_init (&argc, &argv);
//***************************************2.-Create Widgets and attributes
imageplayer1 = gtk_image_new_from_file (arch1);
imageplayer2 = gtk_image_new_from_file (arch2);
tabla = gtk_table_new (20, 20, TRUE);
ventana = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (ventana), "Pente");
cajaH = gtk_hbox_new (FALSE, 25);
cajavertjugador1 = gtk_vbox_new (FALSE, 0);
cajatablero = gtk_hbox_new (TRUE, 500);
cajavertjugador2 = gtk_vbox_new (TRUE, 5);
cajaboton = gtk_hbox_new (TRUE, 5);
boton = gtk_button_new_with_label ("Ok");
botoncancel = gtk_button_new_with_label ("Cancel");
separador = gtk_hseparator_new ();
separadorvjug1 = gtk_vseparator_new ();
separadorvjug2 = gtk_vseparator_new ();
framejugador1 = gtk_frame_new ("Fichas Comidas");
namejugador1 = gtk_label_new ("Variable Nombre Jugador1");
labeljugador1 = gtk_label_new ("Aqui Imagenes de Las Fichas Comidas\n");
gtk_label_set_justify (GTK_LABEL (labeljugador1), GTK_JUSTIFY_LEFT);
framejugador2 = gtk_frame_new ("Fichas Comidas");
namejugador2 = gtk_label_new ("Variable Nombre Jugador2");
labeljugador2 = gtk_label_new ("Aqui Imagenes de Las Fichas Comidas\n");
gtk_label_set_justify (GTK_LABEL (labeljugador1), GTK_JUSTIFY_LEFT);
for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
tablero[i][j] = gtk_button_new ();
}
}
//**********************************3.Register Function Calls
g_signal_connect (G_OBJECT (ventana), "delete_event",
G_CALLBACK (cierra_ventana), NULL);
g_signal_connect (G_OBJECT (ventana), "destroy", G_CALLBACK (salida), NULL);
//***********************************4.-Hierarchy of Elements
gtk_container_add (GTK_CONTAINER (ventana), cajaH);
gtk_container_add (GTK_CONTAINER (cajaH), cajavertjugador1);
gtk_container_add (GTK_CONTAINER (cajaH), separadorvjug1);
gtk_container_add (GTK_CONTAINER (cajavertjugador1), namejugador1);
gtk_container_add (GTK_CONTAINER (cajavertjugador1), imageplayer1);
gtk_container_add (GTK_CONTAINER (framejugador1), labeljugador1);
gtk_container_add (GTK_CONTAINER (cajavertjugador1), framejugador1);
gtk_container_add (GTK_CONTAINER (cajatablero), tabla);
gtk_container_set_focus_vadjustment (GTK_CONTAINER (cajatablero),
GTK_ADJUSTMENT (50));
gtk_container_add (GTK_CONTAINER (cajaH), cajatablero);
gtk_container_add (GTK_CONTAINER (cajaH), separadorvjug2);
gtk_container_add (GTK_CONTAINER (cajavertjugador2), namejugador2);
gtk_container_add (GTK_CONTAINER (cajavertjugador2), imageplayer2);
gtk_container_add (GTK_CONTAINER (framejugador2), labeljugador2);
gtk_container_add (GTK_CONTAINER (cajavertjugador2), framejugador2);
gtk_container_add (GTK_CONTAINER (cajaH), cajavertjugador2);
for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
gtk_table_attach_defaults (GTK_TABLE (tabla), tablero[i][j], i,
i + 1, j, j + 1);
}
}
//****************************5.Show the Widddgggeetss
gtk_widget_show_all (ventana);
//****************************6.Process Signals and Events
gtk_main ();
return 1;
}//main
gboolean
cierra_ventana (GtkWidget * widget, GdkEvent * event, gpointer info)
{
return FALSE;
}
void
salida (GtkWidget * widget, gpointer info)
{
gtk_main_quit ();
}
It is not very clear what you are trying to say, if you mean that the table which you have added buttons to does not appear to be expanded to fit between the separators then it is due to the fact that when creating
cajaHyou have specified spacing as 25 pixel. Try changing it to lesser different value or 0 and see if you get what you wanted. As you are using default packing for table & usinggtk_container_addpacking will expand & fit.Also as you are using
GtkHBox&GtkVBoxgtk_box_pack_start>k_box_pack_endwill give you a greater control on layout then usinggtk_container_add. See this question for information.When using
gtk_container_set_focus_vadjustmentyou need to create a newGtkAdjustmentusinggtk_adjustment_new. Typecasting 50 asGTK_ADJUSTMENTis not the way to do it!Hope this helps!