diff options
Diffstat (limited to 'src/MTools/Transform/MRotation.pm')
-rw-r--r-- | src/MTools/Transform/MRotation.pm | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/MTools/Transform/MRotation.pm b/src/MTools/Transform/MRotation.pm new file mode 100644 index 0000000..16b405a --- /dev/null +++ b/src/MTools/Transform/MRotation.pm @@ -0,0 +1,76 @@ +package MTools::Transform::MRotation; +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU LGPL Libray General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, +# or refer to http://www.gnu.org/copyleft/lgpl.html +# +################################################################## + +use strict; +use MTools; +use MTools::MObjet; + +use vars qw /@ISA/; + +BEGIN +{ + @ISA = qw /MTools::MObjet/; +} + +use Tk; + +sub new { + my ($class, $target, $angle, $x, $y) = @_; + my $self = new MTools::MObjet (); + bless $self, $class; + + if (!defined $x) {$x = 0;} + if (!defined $y) {$y = 0;} + if (!defined $angle) {$angle = 0;} + + $self -> recordProperty ('-visible', 0); + $self -> recordProperty ('target', $target); + $self -> recordProperty ('angle', $angle); + $self -> recordProperty ('x', $x); + $self -> recordProperty ('y', $y); + $self -> plisten ('-visible', sub { + my ($src, $key, $val) = @_; + if ($val == 0) + { + $self -> __rotate (0); + } + else + { + $self -> __rotate ($self -> mget ('angle')); + } + }); + $self -> plisten ('angle', sub { + my ($src, $key, $val) = @_; + $self -> __rotate ($val); + }); + $self -> {__current_angle} = 0; + $self -> __rotate ($angle); + return $self; +} + +sub __rotate { + my ($self, $angle) = @_; + my $new_angle = $angle - $self -> {__current_angle}; + $self -> {__current_angle} = $angle; + my $target = $self -> mget ('target'); + my $x = $self -> mget ('x'); + my $y = $self -> mget ('y'); + $target -> rotate ($new_angle, 1, $x, $y); +} + +1; |