a couple of Gnome2::Canvas problems
- From: zentara <zentara zentara net>
- To: gtk-perl-list gnome org
- Subject: a couple of Gnome2::Canvas problems
- Date: Mon, 11 Jul 2005 12:58:18 -0400
Hi,
I'm trying to make a simple gauge with the Gnome2::Canvas.
It all works well, except when I destroy the meter. I get an error
nomeCanvas-CRITICAL **: file gnome-canvas.c: line 3698 (gnome_canvas_request_redraw): assertion
`GNOME_IS_CANVAS (canvas)' failed during global destruction.
I have found through trial and error, that I get this repeated twice, but have found
that I can reduce it to 1 by putting a "$canvas->destroy;" in my delete_event subroutine.
Additionally, I can stop the error by NOT updating the $text->set(text => $value);
in the update_meter sub.
So that is my main question, how do I stop this annoying error message, when I update
the Canvas Text widget?
As a bonus question :-), how do I prevent the $gauge circle from being seen
at the bottom, when you drag the main window to a bigger size? I only want
an "ARC" , but Ellipse dosn't seem to have limit points available to set. I tried to
limit the size of the $canvas, but the circle will still show. Am I forced to mask it with
something?
Thanks.
#Simple Meter
################################################################
#!/usr/bin/perl
use warnings;
use strict;
use Glib qw/TRUE FALSE/;
use Gtk2 '-init';
use Gnome2::Canvas;
use constant PI => 3.1415926;
use Tie::Watch;
my $width = 200;
my $height = 100;
my $value = 0;
my $max = 100;
my $min = 0;
my $watch = Tie::Watch->new(
-variable => \$value,
-shadow => 0,
-store => \&update_meter,
);
my $window = Gtk2::Window->new;
$window->signal_connect( 'destroy' => \&delete_event );
$window->set_default_size( $width, $height );
my $canvas = Gnome2::Canvas->new_aa();
$canvas->set_scroll_region( 0, 0, $width, $height ); #to get upper left corner
$canvas->set_size_request( $width, $height ); #useless?
$window->add($canvas);
$window->show_all;
my $root = $canvas->root();
my $text = Gnome2::Canvas::Item->new(
$root, 'Gnome2::Canvas::Text',
x => $width / 2,
y => $height * .50,
fill_color => 'yellow',
font => 'Sans 14',
anchor => 'GTK_ANCHOR_CENTER',
text => $value
);
my $box = Gnome2::Canvas::Item->new(
$root, 'Gnome2::Canvas::Rect',
x1 => 0,
y1 => 0,
x2 => $width,
y2 => $height,
fill_color => 'black',
outline_color => 'black'
);
my $hub = Gnome2::Canvas::Item->new(
$root, "Gnome2::Canvas::Ellipse",
x1 => $width / 2 - 8,
y1 => ( $height * .80 ) - 8,
x2 => $width / 2 + 8,
y2 => ( $height * .80 ) + 8,
fill_color => 'white',
outline_color => 'black'
);
my $gauge = Gnome2::Canvas::Item->new(
$root, "Gnome2::Canvas::Ellipse",
x1 => $width / 2 - 80,
y1 => ( $height * .80 ) - 80,
x2 => $width / 2 + 80,
y2 => ( $height * .80 ) + 80,
outline_color => 'white',
fill_color => 'steelblue'
);
my $floor = Gnome2::Canvas::Item->new(
$root, 'Gnome2::Canvas::Rect',
x1 => 0,
y1 => $height * .80,
x2 => $width,
y2 => $height,
fill_color => 'black',
);
my $needle = Gnome2::Canvas::Item->new(
$root, "Gnome2::Canvas::Line",
points => [ $width / 2, ( $height * .80 ), $width / 2, 10 ],
width_units => 5,
fill_color => 'hotpink',
last_arrowhead => 1,
arrow_shape_b => 20
);
$box->lower_to_bottom;
$needle->raise_to_top;
$hub->raise_to_top;
$text->raise($gauge);
my $toggle = 1;
my $count = 0;
Glib::Timeout->add (50,
sub {
$count += $toggle;
$value = $count;
return TRUE;
}
);
Gtk2->main;
###########################################################3
sub delete_event {
$watch->Unwatch;
$canvas->destroy;
Gtk2->main_quit;
return 0;
}
###########################################################3
sub update_meter {
if ( $value <= $min ) { $toggle = 1 }
if ( $value >= $max ) { $toggle = -1 }
my $pos = $value * PI/$max;
my $x = $width/2 - $height * .80 * ( cos( $pos ) );
my $y = $height * .80 - $height * .80 * ( sin( $pos ) ) ;
$needle->set( points => [ $width / 2, ( $height * .80 ), $x, $y ], );
$text->set(text => $value); #causes error message on exit
return $value;
}
############################################################
__END__
--
I'm not really a human, but I play one on earth.
http://zentara.net/japh.html
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]