--- deliantra/Deliantra-Client/DC/UI.pm 2009/01/11 22:15:23 1.475 +++ deliantra/Deliantra-Client/DC/UI.pm 2009/01/11 23:45:52 1.476 @@ -3728,27 +3728,7 @@ @_, ); - if ($self->{anim} && $self->{animspeed}) { - DC::weaken (my $widget = $self); - - $self->{animspeed} = List::Util::max 0.05, $self->{animspeed}; - $self->{timer} = EV::periodic_ns 0, $self->{animspeed}, undef, sub { - return unless $::CONN; - - my $w = $widget - or return; - - ++$w->{frame}; - $w->update_face; - - # somehow, $widget can go away - $w->update; - $w->update_timer; - }; - - $self->update_face; - $self->update_timer; - } + $self->update_anim; $self } @@ -3784,6 +3764,34 @@ } } +sub update_anim { + my ($self) = @_; + + if ($self->{anim} && $self->{animspeed}) { + DC::weaken (my $widget = $self); + + $self->{animspeed} = List::Util::max 0.05, $self->{animspeed}; + $self->{timer} = EV::periodic_ns 0, $self->{animspeed}, undef, sub { + return unless $::CONN; + + my $w = $widget + or return; + + ++$w->{frame}; + $w->update_face; + + # somehow, $widget can go away + $w->update; + $w->update_timer; + }; + + $self->update_face; + $self->update_timer; + } else { + delete $self->{timer}; + } +} + sub size_request { my ($self) = @_; @@ -3812,6 +3820,27 @@ $self->SUPER::update; } +sub set_face { + my ($self, $face) = @_; + + $self->{face} = $face; + $self->reconfigure; +} + +sub set_anim { + my ($self, $anim) = @_; + + $self->{anim} = $anim; + $self->update_anim; +} + +sub set_animspeed { + my ($self, $animspeed) = @_; + + $self->{animspeed} = $animspeed; + $self->update_anim; +} + sub invoke_visibility_change { my ($self) = @_;