aboutsummaryrefslogtreecommitdiff
path: root/src/MTools/Comp
diff options
context:
space:
mode:
Diffstat (limited to 'src/MTools/Comp')
-rw-r--r--src/MTools/Comp/MInertie.pm36
1 files changed, 18 insertions, 18 deletions
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;