[prev in list] [next in list] [prev in thread] [next in thread]
List: gtk-app-devel
Subject: Re: Lucky B.C.'s reply to GtkDrawingArea "width" and "height" <properties>
From: "Lucky B.C" <lblackc13 () gmail ! com>
Date: 2018-03-07 10:07:43
Message-ID: CAN9t-Md283Fr1KnpRjSVxSjBbFfywALLqgSGS=ue84F2AhtmGw () mail ! gmail ! com
[Download RAW message or body]
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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic