From 0790140618e92d3d10582d58b688e8d09917b370 Mon Sep 17 00:00:00 2001 From: ribet Date: Thu, 30 Aug 2007 15:39:35 +0000 Subject: Amélioration de la gestion de la callback en cours de déplacement. Gestion de l'interruption corrigée. --- src/MTools/Comp/MInertie.pm | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'src/MTools/Comp/MInertie.pm') diff --git a/src/MTools/Comp/MInertie.pm b/src/MTools/Comp/MInertie.pm index 9b820a0..2faa1b9 100644 --- a/src/MTools/Comp/MInertie.pm +++ b/src/MTools/Comp/MInertie.pm @@ -25,8 +25,7 @@ use MTools::MTimer; use vars qw /@ISA/; -BEGIN -{ +BEGIN { @ISA = qw /MTools::MObjet/; } @@ -50,7 +49,7 @@ sub new { $self -> recordProperty ('target', $target); $self -> recordProperty ('-visible', 1); $self -> recordProperty ('rate', 0.85); - $self -> recordProperty ('inertie_callback', 'translate'); + $self -> recordProperty ('inertie_callback', [$target, 'translate']); $self -> recordEvent ($msg_stopped); $self -> mconfigure (%options); @@ -63,6 +62,8 @@ sub new { $self -> {__t} = 0; $self -> {__vx} = 0; $self -> {__vy} = 0; + + $self -> {__isRunning} = 0; $self -> {__msg_stopped} = $msg_stopped; @@ -77,12 +78,15 @@ sub new { sub interrupt { my ($self) = @_; - $self -> {timer_inertie} -> stop (); + if ($self -> {__isRunning}) { + $self -> {__isRunning} = 0; + $self -> {timer_inertie} -> stop (); + $self -> notify ($self -> {__msg_stopped}); + } } sub target_pressed { my ($self, $x, $y, $t) = @_; - $self -> interrupt (); $self -> {__old_x} = 0; $self -> {__old_y} = 0; $self -> {__old_t} = 0; @@ -93,8 +97,7 @@ sub target_pressed { sub target_moved { my ($self, $x, $y, $t) = @_; - if (!defined $t) - { + if (!defined $t) { $t = Time::HiRes::gettimeofday(); } $self -> {__old_x} = $self -> {__x}; @@ -107,21 +110,19 @@ sub target_moved { sub target_released { my ($self, $x, $y, $t) = @_; - if (!defined $t) - { + if (!defined $t) { $t = Time::HiRes::gettimeofday(); } my $dt = $self -> {__t} - $self -> {__old_t}; my $dx = $self -> {__x} - $self -> {__old_x}; my $dy = $self -> {__y} - $self -> {__old_y}; - if ($dt && $self -> mget ('-visible')) - { + if ($dt && $self -> mget ('-visible')) { $self -> {__vx} = ($dx * 1000) / ($dt * 60); $self -> {__vy} = ($dy * 1000) / ($dt * 60); + $self -> {__isRunning} = 1; $self -> {timer_inertie} -> start(); } - else - { + else { $self -> notify ($self -> {__msg_stopped}); } $self -> {__old_x} = 0; @@ -137,17 +138,16 @@ sub inertie { my $rate = $self -> mget ('rate'); $self -> {__vx} *= $rate; $self -> {__vy} *= $rate; - if ((abs $self -> {__vx} <= 2) and (abs $self -> {__vy} <= 2)) - { - $self -> notify ($self -> {__msg_stopped}); - $self -> {timer_inertie} -> stop(); + if ((abs $self -> {__vx} <= 2) and (abs $self -> {__vy} <= 2)) { + $self -> interrupt (); return; } my $dx = $self -> {__vx}; my $dy = $self -> {__vy}; my $target = $self -> mget ('target'); my $callback = $self -> mget ('inertie_callback'); - $target -> $callback ($dx, $dy); + executer ($callback, $dx, $dy); +# $target -> $callback ($dx, $dy); } 1; -- cgit v1.1