Hi. Yes, I could do it that way, and I might have to if I can't figure
out what's wrong with the multi-drawing-area approach. It shouldn't be
required though, and there are complexities to using a single drawing
area - for example selecting dates that are quite disperse ( I'd have
to project each day's graph to have them all render side-side-side
without large gaps in between ).

Dan

On Wed, Oct 11, 2017 at 8:30 AM,  <cecas...@aol.com> wrote:
>
> You might be able to just use one drawing area. Then you don't have to worry
> about creating and destroying drawing areas, surfaces and contexts. When you
> want to redraw, just "paint" the drawing area background and start drawing.
> This approach works well for most drawings.
>
> Test out the following and see if it is close. Just a grid in one or four
> panes with one drawing area.
>
> Eric
>
> #!/usr/bin/perl
> use strict;
> use diagnostics;
> use warnings;
> use Gtk3 '-init';
> use Glib qw(TRUE FALSE);
>
> my $window = Gtk3::Window->new();
> $window->signal_connect('delete_event' => sub { Gtk3->main_quit; });
> $window->set_default_size(800, 400);
> $window->set_border_width(10);
> $window->set_title("Graphs");
>
> #Number of graphs. Either 1 or 4. Changed by the two buttons.
> my $graphs = 1;
>
> my $da = Gtk3::DrawingArea->new();
> $da->set_vexpand(TRUE);
> $da->set_hexpand(TRUE);
> $da->signal_connect('draw' => \&draw_graph);
>
> my $single_button = Gtk3::Button->new( 'graph 1 date' );
> $single_button->signal_connect('clicked' => \&single_button_clicked, $da);
>
> my $multiple_button = Gtk3::Button->new( 'graph 4 dates' );
> $multiple_button->signal_connect('clicked' => \&multiple_button_clicked,
> $da);
>
> my $grid1 = Gtk3::Grid->new();
> $grid1->set_row_spacing(10);
> $grid1->attach($da, 0, 0, 4, 4);
> $grid1->attach($single_button, 1, 5, 1, 1);
> $grid1->attach($multiple_button, 2, 5, 1, 1);
>
> $window->add($grid1);
>
> $window->show_all();
> Gtk3->main;
>
> sub draw_graph
> {
>   my ($widget, $cr, $data) = @_;
>   my $width = $widget->get_allocated_width();
>   my $height = $widget->get_allocated_height();
>   #Some drawing variables.
>   my $x = 0;
>   my $y = 0;
>   my $graph_width = $width / $graphs;
>   my $vertical_width = $graph_width / 24;
>   my $horizontal_width = $height / 4;
>
>   #Paint background.
>   $cr->set_source_rgb(0, 0, 0);
>   $cr->paint;
>
>   #Vertical lines.
>   $cr->set_source_rgb(0, 0, 1);
>   $cr->set_line_width(1);
>   for (my $i=0; $i < $graphs; $i++)
>     {
>       for (my $j = 0; $j < 24; $j++)
>         {
>           $x = $i * $graph_width + $j * $vertical_width;
>           $cr->move_to($x, 0);
>           $cr->line_to($x, $height);
>           $cr->stroke();
>         }
>     }
>
>   #24 numbers.
>   $cr->set_source_rgb(1, 1, 1);
>   for (my $i=0; $i < $graphs; $i++)
>     {
>       for (my $j = 0; $j < 24; $j++)
>         {
>           $x = $i * $graph_width + $j * $vertical_width;
>           $cr->move_to($x + 5, $height - 10);
>           $cr->show_text ($j);
>         }
>     }
>
>   #Horizontal lines.
>   $cr->set_source_rgb(0, 0, 1);
>   for (my $i=0; $i < $graphs; $i++)
>     {
>       for (my $j = 1; $j < 4; $j++)
>         {
>           $y = $j * $horizontal_width;
>           $cr->move_to(0, $y);
>           $cr->line_to($width, $y);
>           $cr->stroke();
>         }
>     }
>
>   #4 numbers.
>   $cr->set_source_rgb(1, 1, 1);
>   for (my $i=0; $i < $graphs; $i++)
>     {
>       for (my $j = 0; $j < 4; $j++)
>         {
>           $y = $j * $horizontal_width;
>           $cr->move_to(5, $y + 20);
>           $cr->show_text (2000 - $j * 500);
>         }
>     }
>
>
>   #Draw graph blocks.
>   $cr->set_source_rgb(0, 1, 1);
>   $cr->set_line_width(10);
>   $cr->rectangle(0, 0, $width, $height);
>   $cr->stroke();
>   $cr->set_line_width(5);
>   for (my $i=1; $i < $graphs; $i++)
>     {
>       $x = $i * $graph_width;
>       $cr->move_to($x, 0);
>       $cr->line_to($x, $height);
>       $cr->stroke();
>     }
>
>   return FALSE;
> }
> sub single_button_clicked
> {
>   my ($widget, $da) = @_;
>   $graphs = 1;
>   $da->queue_draw();
> }
> sub multiple_button_clicked
> {
>   my ($widget, $da) = @_;
>   $graphs = 4;
>   $da->queue_draw();
> }
>
>
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-perl-list

Reply via email to