Okay, I see you really want to know how to resize the GtkDrawingArea by GtkSpinButton. Here It's my demo <https://github.com/LuckyBC/Resize_GtkDrawingArea.git> about resizing the GtkDrawingArea by 2 width and height GtkSpinButtons.
On Wed, Mar 7, 2018 at 6:15 AM, Eric Cashon via gtk-app-devel-list < gtk-app-devel-list@gnome.org> wrote: > > > Hi Roger, > > Not sure about your builder question and setting the width and height of > the drawing area there. For drawing lines though it looks like you are > trying to get the width and height of the GtkWindow instead of the drawing > area. The drawing area widget is passed to your "draw" callback so you can > get the width and height there. For updating the drawing with the spin > buttons you would need to send the drawing area to those callbacks and call > gtk_widget_queue_draw(da) to update your drawing. > > Can you put gtk_widget_set_size_request() right after > > drawing1 = gtk_builder_get_object (builder1, "drawing1"); > > in your code? Will that work? > > Eric > > Some test code. > > //gcc -Wall grid_da1.c -o grid_da1 `pkg-config --cflags --libs gtk+-3.0` > > #include<gtk/gtk.h> > > static gint rows=4; > static gint columns=5; > > static void rows_spin_changed(GtkSpinButton *spin_button, GtkWidget *da); > static void columns_spin_changed(GtkSpinButton *spin_button, GtkWidget > *da); > static gboolean draw_lines(GtkWidget *widget, cairo_t *cr, gpointer data); > > int main(int argc, char *argv[]) > { > gtk_init(&argc, &argv); > > GtkWidget *window=gtk_window_new(GTK_WINDOW_TOPLEVEL); > gtk_window_set_default_size(GTK_WINDOW(window), 600, 400); > gtk_window_set_title(GTK_WINDOW(window), "Draw Grid"); > gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); > gtk_container_set_border_width(GTK_CONTAINER(window), 10); > g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); > > GtkWidget *da=gtk_drawing_area_new(); > gtk_widget_set_size_request(da, 600, 600); > g_signal_connect(da, "draw", G_CALLBACK(draw_lines), NULL); > > GtkWidget *view=gtk_viewport_new(NULL, NULL); > gtk_container_add(GTK_CONTAINER(view), da); > GtkWidget *scroll=gtk_scrolled_window_new(NULL, NULL); > gtk_container_add(GTK_CONTAINER(scroll), view); > > GtkAdjustment *adjustment1=gtk_adjustment_new(4, 3, 15, 1, 0, 0); > GtkAdjustment *adjustment2=gtk_adjustment_new(5, 3, 15, 1, 0, 0); > > GtkWidget *rows_spin_label=gtk_label_new("Rows"); > > GtkWidget *rows_spin=gtk_spin_button_new(adjustment1, 1, 0); > g_signal_connect(rows_spin, "value-changed", > G_CALLBACK(rows_spin_changed), da); > > GtkWidget *columns_spin_label=gtk_label_new("Columns"); > > GtkWidget *columns_spin=gtk_spin_button_new(adjustment2, 1, 0); > g_signal_connect(columns_spin, "value-changed", > G_CALLBACK(columns_spin_changed), da); > > GtkWidget *grid=gtk_grid_new(); > gtk_grid_set_row_spacing(GTK_GRID(grid), 8); > gtk_grid_attach(GTK_GRID(grid), rows_spin_label, 0, 0, 1, 1); > gtk_grid_attach(GTK_GRID(grid), rows_spin, 0, 1, 1, 1); > gtk_grid_attach(GTK_GRID(grid), columns_spin_label, 0, 2, 1, 1); > gtk_grid_attach(GTK_GRID(grid), columns_spin, 0, 3, 1, 1); > > GtkWidget *paned1=gtk_paned_new(GTK_ORIENTATION_HORIZONTAL); > gtk_paned_pack1(GTK_PANED(paned1), grid, FALSE, TRUE); > gtk_paned_pack2(GTK_PANED(paned1), scroll, TRUE, TRUE); > gtk_paned_set_position(GTK_PANED(paned1), 200); > > gtk_container_add(GTK_CONTAINER(window), paned1); > > gtk_widget_show_all(window); > > gtk_main(); > > return 0; > } > static void rows_spin_changed(GtkSpinButton *spin_button, GtkWidget *da) > { > rows=gtk_spin_button_get_value_as_int(spin_button); > gtk_widget_queue_draw(da); > } > static void columns_spin_changed(GtkSpinButton *spin_button, GtkWidget > *da) > { > columns=gtk_spin_button_get_value_as_int(spin_button); > gtk_widget_queue_draw(da); > } > static gboolean draw_lines(GtkWidget *da, cairo_t *cr, gpointer data) > { > g_print("Drawing Area Width %i, Height %i\n", > gtk_widget_get_allocated_width(da), > gtk_widget_get_allocated_height(da)); > gint i=0; > gdouble width=(gdouble)gtk_widget_get_allocated_width(da); > gdouble height=(gdouble)gtk_widget_get_allocated_height(da); > gdouble w1=width/10.0; > gdouble h1=height/10.0; > gdouble w2=8.0*w1/(gdouble)columns; > gdouble h2=8.0*h1/(gdouble)rows; > > cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0); > cairo_paint(cr); > > cairo_set_line_width(cr, 3.0); > cairo_set_source_rgba(cr, 0.0, 0.0, 1.0, 1.0); > for(i=0;i<rows+1;i++) > { > cairo_move_to(cr, w1, h1+(gdouble)i*h2); > cairo_line_to(cr, 9.0*w1, h1+(gdouble)i*h2); > cairo_stroke(cr); > } > > cairo_set_source_rgba(cr, 0.0, 1.0, 0.0, 1.0); > for(i=0;i<columns+1;i++) > { > cairo_move_to(cr, w1+(gdouble)i*w2, h1); > cairo_line_to(cr, w1+(gdouble)i*w2, 9.0*h1); > cairo_stroke(cr); > } > > return FALSE; > } > > > > _______________________________________________ > gtk-app-devel-list mailing list > gtk-app-devel-list@gnome.org > https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list > _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list