… | |
… | |
3673 | ); |
3673 | ); |
3674 | |
3674 | |
3675 | if ($self->{anim} && $self->{animspeed}) { |
3675 | if ($self->{anim} && $self->{animspeed}) { |
3676 | CFPlus::weaken (my $widget = $self); |
3676 | CFPlus::weaken (my $widget = $self); |
3677 | |
3677 | |
3678 | $widget->{animspeed} = List::Util::max 0.05, $widget->{animspeed}; |
3678 | $self->{animspeed} = List::Util::max 0.05, $self->{animspeed}; |
3679 | $widget->{anim_start} = $self->{animspeed} * int EV::now / $self->{animspeed}; |
3679 | $self->{timer} = EV::periodic_ns 0, $self->{animspeed}, undef, sub { |
3680 | $self->{timer} = EV::timer_ns 0, 0, sub { |
|
|
3681 | return unless $::CONN; |
3680 | return unless $::CONN; |
3682 | |
3681 | |
3683 | my $w = $widget |
3682 | my $w = $widget |
3684 | or return; |
3683 | or return; |
3685 | |
3684 | |
… | |
… | |
3701 | sub update_timer { |
3700 | sub update_timer { |
3702 | my ($self) = @_; |
3701 | my ($self) = @_; |
3703 | |
3702 | |
3704 | return unless $self->{timer}; |
3703 | return unless $self->{timer}; |
3705 | |
3704 | |
3706 | $self->{timer}->stop; |
|
|
3707 | if ($self->{visible}) { |
3705 | if ($self->{visible}) { |
3708 | $self->{timer}->set ( |
|
|
3709 | $self->{anim_start} |
|
|
3710 | + $self->{animspeed} |
|
|
3711 | * int 1.5 + (EV::now - $self->{anim_start}) / $self->{animspeed} |
|
|
3712 | ); |
|
|
3713 | $self->{timer}->start; |
3706 | $self->{timer}->start; |
|
|
3707 | } else { |
|
|
3708 | $self->{timer}->stop; |
3714 | } |
3709 | } |
3715 | } |
3710 | } |
3716 | |
3711 | |
3717 | sub update_face { |
3712 | sub update_face { |
3718 | my ($self) = @_; |
3713 | my ($self) = @_; |