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

Reply via email to