… | |
… | |
75 | sub refresh { |
75 | sub refresh { |
76 | my ($self, $timestamp) = @_; |
76 | my ($self, $timestamp) = @_; |
77 | my $timer = $self->{time} + $self->{start} - $timestamp; |
77 | my $timer = $self->{time} + $self->{start} - $timestamp; |
78 | $self->{widget}->set_text ($self->{format}->($timer)); |
78 | $self->{widget}->set_text ($self->{format}->($timer)); |
79 | |
79 | |
80 | warn "Timer $timer\n"; |
|
|
81 | $timer - int $timer; |
80 | $timer - int $timer; |
82 | } |
81 | } |
83 | |
82 | |
84 | sub set_time { |
83 | sub set_time { |
85 | my ($self, $time) = @_; |
84 | my ($self, $time) = @_; |
… | |
… | |
95 | |
94 | |
96 | return if $self->{timeout}; |
95 | return if $self->{timeout}; |
97 | |
96 | |
98 | my $timeout; $timeout = sub { |
97 | my $timeout; $timeout = sub { |
99 | my $next = int ($self->refresh (Time::HiRes::time) * 1000); |
98 | my $next = int ($self->refresh (Time::HiRes::time) * 1000); |
100 | warn "next $next\n"; |
|
|
101 | $self->{timeout} = add Glib::Timeout $next, $timeout; |
99 | $self->{timeout} = add Glib::Timeout $next, $timeout; |
102 | 0; |
100 | 0; |
103 | }; |
101 | }; |
104 | |
102 | |
105 | $timeout->(); |
103 | $timeout->(); |
… | |
… | |
107 | |
105 | |
108 | sub stop { |
106 | sub stop { |
109 | my ($self) = @_; |
107 | my ($self) = @_; |
110 | |
108 | |
111 | remove Glib::Source delete $self->{timeout} if $self->{timeout}; |
109 | remove Glib::Source delete $self->{timeout} if $self->{timeout}; |
|
|
110 | } |
|
|
111 | |
|
|
112 | sub destroy { |
|
|
113 | my ($self) = @_; |
|
|
114 | $self->stop; |
|
|
115 | $self->SUPER::destroy; |
112 | } |
116 | } |
113 | |
117 | |
114 | package game::userpanel; |
118 | package game::userpanel; |
115 | |
119 | |
116 | use base gtk::widget; |
120 | use base gtk::widget; |