Re: Dragging a Canvas::Line with the mouse?
- From: zentara <zentara1 sbcglobal net>
- To: gtk-perl-list gnome org
- Subject: Re: Dragging a Canvas::Line with the mouse?
- Date: Thu, 19 Jun 2008 15:37:46 -0400
On Thu, 19 Jun 2008 11:38:42 -0700
walt <w41ter gmail com> wrote:
Hi again,
I need to draw a vertical line on a canvas, to be used as a cursor
that can be moved horizontally in response to a mouse click or a
keystroke.
The only graphics trick I know is to draw the line by XOR'ing it
with the canvas and again a second time to erase it. (That's to
avoid redrawing the whole screen with every move of the cursor.)
Is there a way to do that with gtk-perl?
Is this something like what you want?
#!/usr/bin/perl
use warnings;
use strict;
use Gtk2 '-init';
use Gnome2::Canvas;
my $mw = Gtk2::Window->new;
$mw->signal_connect( destroy => sub { exit } );
my $vbox = Gtk2::VBox->new( 0, 0 );
$mw->add($vbox);
my $canvas = Gnome2::Canvas->new_aa();
my $white = Gtk2::Gdk::Color->new (0xFFFF,0xFFFF,0xFFFF);
$canvas->modify_bg('normal',$white);
$vbox->pack_start( $canvas, 1, 1, 0 );
$canvas->set_size_request( 300, 300 );
$canvas->set_scroll_region( 0, 0, 300, 300 );
my $quit = Gtk2::Button->new("Quit");
$quit->signal_connect( clicked => sub { exit } );
$vbox->pack_start( $quit, 0, 0, 0 );
$mw->show_all();
place_objects_on_canvas();
Gtk2->main();
sub place_objects_on_canvas {
my $root = $canvas->root();
my $line1 = Gnome2::Canvas::Item->new ($root,
'Gnome2::Canvas::Line',
points => [150, 150, 150, 230],
fill_color => '#ff0000',
# fill_color_rgba => 0x3cb37180,
width_units => 6.0,
);
# Make it movable
$line1->signal_connect( "event", \&item_move );
}
# Callback for moving items on the canvas
my ( $dragging, $last_x, $last_y ); # item_move static data
sub item_move {
my ( $item, $event ) = @_;
if ( $event->type eq "button-press" ) {
$item->raise_to_top();
$last_x = $event->x;
$last_y = $event->y;
$dragging = 1;
}
elsif ( $event->type eq "motion-notify" ) {
if ($dragging) {
my $new_x = $event->x;
my $new_y = $event->y;
$item->move( $new_x - $last_x, $new_y - $last_y );
$last_x = $new_x;
$last_y = $new_y;
}
}
elsif ( $event->type eq "button-release" ) {
$dragging = 0;
}
}
__END__
zentara
--
I'm not really a human, but I play one on earth.
http://zentara.net/CandyGram_for_Mongo.html
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]