10 use Glib qw(TRUE FALSE);
15 my ($class, $args) = @_;
19 load_image_set('img/throttle%d.svg', 13, 100)
22 load_image_set('img/fuel%d.svg', 8, 60)
24 car_images => load_image_dir('img/SCXCars', 100),
26 load_image_set('img/semaphore%d.svg', 5, 200)
28 builder => Gtk2::Builder->new,
29 semaphore_win => Gtk2::Window->new('popup'),
30 semaphore_img => Gtk2::Image->new,
35 $self->{builder}->add_from_file('slotcarman.glade');
37 $self->{builder}->connect_signals(undef);
39 my $pixbuf = $self->{semaphore_images}->[0];
40 $self->{semaphore_img}->set_from_pixbuf($pixbuf);
41 $self->{semaphore_img}->show;
42 $self->{semaphore_win}->add($self->{semaphore_img});
43 $self->{semaphore_win}->set_type_hint('splashscreen');
44 $self->{semaphore_win}->set_position('center-on-parent');
45 $self->{semaphore_win}->set_transient_for(
46 $self->{builder}->get_object('slotcarman')
55 my $window = $self->{builder}->get_object('slotcarman');
56 $window->signal_connect(delete_event => \&delete_event);
60 sub delete_event { Gtk2->main_quit; }
62 sub get_object { return shift->{builder}->get_object(@_); }
65 my ($pattern, $limit, $height) = @_;
68 for my $i (0..$limit) {
69 my $file = sprintf($pattern, $i);
71 my $dummy = Gtk2::Gdk::Pixbuf->new_from_file($file);
72 my $width = $dummy->get_width * $height / $dummy->get_height;
73 push @rv, Gtk2::Gdk::Pixbuf->new_from_file_at_scale(
74 $file, $width, $height, TRUE
81 my ($dir, $height) = @_;
84 for my $file (<$dir/*>) {
85 $file = Encode::decode('utf-8', $file);
93 my $dummy = Gtk2::Gdk::Pixbuf->new_from_file($file)
96 my $width = $dummy->get_width * $height / $dummy->get_height;
97 $rv{$name} = Gtk2::Gdk::Pixbuf->new_from_file_at_scale(
98 $file, $width, $height, TRUE
105 my ($self, $row, $val) = @_;
108 $val = 13 if !defined $val;
110 my $image = $self->get_object("image_throttle$row");
111 $image->set_from_pixbuf($self->{throttle_images}->[$val]);
115 my ($self, $row, $val) = @_;
118 $val = 0 if !defined $val;
120 my $image = $self->get_object("image_fuel$row");
121 $image->set_from_pixbuf($self->{fuel_images}->[$val]);
125 my ($self, $row, $name) = @_;
128 my $pixbuf = $self->{car_images}->{$name};
130 print "No car image for $name.\n";
134 my $image = $self->get_object("image_car$row");
135 $image->set_from_pixbuf($pixbuf);
139 my ($self, $row, $text) = @_;
142 my $label = $self->get_object("label_lap$row")
143 or die "Can't get label_lap$row";
144 $label->set_markup('<span font_desc="24" weight="bold">'.$text.'</span>');
148 my ($self, $row, $text) = @_;
151 my $label = $self->get_object("label_laptime$row")
152 or die "Can't get label_laptime$row";
153 $label->set_markup('<span font_desc="18" weight="bold">'.$text.'</span>');
157 my ($self, $row, $text) = @_;
160 my $label = $self->get_object("label_avg_lap$row")
161 or die "Can't get label_avg_lap$row";
162 $label->set_markup('<span font_desc="22" weight="bold">'.$text.'</span>');
166 my ($self, $row, $text, $global) = @_;
169 my $label = $self->get_object("label_best_lap$row")
170 or die "Can't get label_best_lap$row";
173 $global = ' foreground="#e00000"';
178 $label->set_markup('<span font_desc="18" weight="bold"'.$global.'>'
183 my ($self, $row, $text) = @_;
186 my $label = $self->get_object("label_name$row")
187 or die "Can't get label_lap$row";
188 $label->set_markup('<span font_desc="18" weight="bold">'.$text.'</span>');
192 my ($self, $row) = @_;
193 $self->set_laptime($row, 'PIT');
197 my ($self, $row) = @_;
198 $self->set_laptime($row, 'GO!');
202 my ($self, $num) = @_;
204 my $win = $self->{semaphore_win};
206 my $img = $self->{semaphore_img};
207 my $pixbuf = $self->{semaphore_images}->[$num];
208 $img->set_from_pixbuf($pixbuf);
216 my ($self, $text) = @_;
218 my $label = $self->get_object("label_lap_global")
219 or die "Can't get label_lap_global";
220 $label->set_markup('<span font_desc="18" weight="bold">'.$text.'</span>');
224 my ($self, $text) = @_;
226 my $label = $self->get_object("label_time_global")
227 or die "Can't get label_time_global";
228 $label->set_markup('<span font_desc="18" weight="bold">'.$text.'</span>');
232 my ($self, $time, $who) = @_;
235 $text .= ' by ' . $who
238 my $label = $self->get_object("label_best_lap_global")
239 or die "Can't get label_best_lap_global";
240 $label->set_markup('<span font_desc="18" weight="bold">'.$text.'</span>');