1 package HTML5TV::Slides;
11 use Data::Dump qw/dump/;
15 my $current_slide = shift || die "need current slide coderef!";
19 current_slide => $current_slide,
28 $self->{current_slide}->( shift );
39 my $current_slide = $self->current_slide($t);
41 my $dt = $t - $self->{last_t};
43 if ( $self->{last_slide} == $current_slide ) {
46 $self->progress_bar( $t, $length, @subtitles );
52 $self->{last_slide} = $current_slide;
53 warn "slide change $current_slide\n";
57 my $n_a = $1 if $a =~ m{(\d+)};
58 my $n_b = $1 if $b =~ m{(\d+)};
59 $n_a <=> $n_b || $a cmp $b
60 } glob("media/_editing/s/1/*")
63 if ( ! $self->{width} || ! $self->{height} ) {
64 my $slide = SDL::Surface->new( -name => $slide_paths[0] );
65 $self->{width} = $slide->width;
66 $self->{height} = $slide->height;
69 my @factors = ( qw/ 4 4 4 4 1 2 2 4 4 4 4 / );
71 my ( $x, $y ) = ( 0, 0 );
73 my $background = SDL::Color->new( -r => 0, -g => 0, -b => 0 );
74 my $overlay_color = SDL::Color->new( -r => 0xff, -g => 0xff, -b => 0x88 );
76 foreach my $i ( 0 .. $#factors ) {
78 my $factor = $factors[$i] || die "no factor $i in ",dump @factors;
80 my $to = SDL::Rect->new(
81 -width => $self->{width} / $factor,
82 -height => $self->{height} / $factor,
87 my $pos = $self->current_slide($t) + $i - 5;
88 my $path = $slide_paths[ $pos ];
90 if ( $pos < 0 || ! $path ) {
92 $self->{app}->fill( $to, $background ) if $self->{app};
96 $path =~ s{/s/[124]/(\D*(\d+))}{/s/$factor/$1};
99 my $slide = SDL::Surface->new( -name => $path );
101 my $subtitle_text = $nr;
102 foreach my $s ( @subtitles ) {
103 if ( $s->[2] =~ m/\[(\d+)\]/ && $1 == $nr ) {
104 $subtitle_text = $s->[2];
109 my $font = SDL::Tool::Font->new(
111 -ttfont => 'media/slides.ttf', # FIXME
112 -size => 40 / $factor,
116 $font->print( $slide, 4, 4, $subtitle_text );
117 $font->print( $slide, 4, 6, $subtitle_text );
118 $font->print( $slide, 6, 4, $subtitle_text );
119 $font->print( $slide, 6, 6, $subtitle_text );
120 $font->print( $slide, 5, 5, $subtitle_text );
122 SDL::Tool::Font->new(
124 -ttfont => 'media/slides.ttf', # FIXME
125 -size => 40 / $factor,
126 -fg => $overlay_color,
128 )->print( $slide, 5, 5, $subtitle_text );
130 my $rect = SDL::Rect->new(
131 -width => $slide->width(),
132 -height => $slide->height(),
137 # warn "$x $y $path\n";
139 if ( ! $self->{app} ) {
141 $self->{app} = SDL::App->new(
142 -width => $self->{width},
143 -height => ( $self->{height} * 2 ) + 20,
150 $slide->blit( $rect, $self->{app}, $to );
154 $self->{app}->update( $to ) if $self->{app};
156 $x += $self->{width} / $factor;
158 if ( $x >= $self->{width} ) {
160 $y += $self->{height} / $factor;
166 $self->progress_bar( $t, $length, @subtitles );
176 return unless $self->{app};
179 my $w_1s = $self->{width} / $length;
182 my $y_bar = int( $self->{height} / 4 ) + 1;
184 my $bar_back = SDL::Color->new( -r => 0, -g => 0, -b => 0 );
185 my $rect = SDL::Rect->new(
186 -width => $self->{width},
192 $self->{app}->fill( $rect, $bar_back );
193 # $self->{app}->update( $rect );
195 my $col_slide = SDL::Color->new( -r => 0xcc, -g => 0xcc, -b => 0x00 );
196 my $col_subtitle = SDL::Color->new( -r => 0xcc, -g => 0x00, -b => 0x00 );
197 my $col_pos = SDL::Color->new( -r => 0xff, -g => 0xff, -b => 0xff );
200 foreach my $s ( @subtitles ) {
202 next unless defined $s->[0];
204 my $s_x = int( $s->[0] * $w_1s + 0.9 );
205 my $s_w = int( abs( $s->[1] - $s->[0] ) * $w_1s );
206 $s_w = 1 if $s_w < 1;
208 # warn "$s_x $s_w ", $s->[2];
210 my $rect = SDL::Rect->new(
216 $self->{app}->fill( $rect, $s->[2] =~ m/\[\d+\]/ ? $col_slide : $col_subtitle );
217 # $self->{app}->update( $rect );
220 my $rect_pos = SDL::Rect->new(
223 -x => int( $t * $w_1s - $bar_h / 2 ),
226 $self->{app}->fill( $rect_pos, $col_pos );
227 # $self->{app}->update( $rect );