Files
gimp/plug-ins/perl/examples/gap-vcr
1999-12-10 23:21:51 +00:00

117 lines
2.4 KiB
Perl
Executable File

#!/usr/bin/perl
use Gimp::Feature qw(perl-5.005 gtk-1.2);
use Gimp ('__','N_');
use Gimp::Fu;
use Gtk;
$VERSION=0.1;
# possible TODO
# - improve last/first frame finding
# - implement autoplay
my $image;
my $f; # current frame adjustment
my $s; # slider
sub drawable {
($image->get_layers)[0];
}
sub get_index {
(($image->get_filename) =~ /(\d+)\.[^\.]+$/g)[0];
}
sub upd {
$f->set_value(get_index);
Gimp->displays_flush;
}
sub create_main {
my $w = new Gtk::Window;
$w->set_title("VCR Console -- ". $image->get_filename);
$w->signal_connect("destroy",sub {main_quit Gtk});
my $v = new Gtk::VBox (0,5);
$w->add ($v);
my $h = new Gtk::HBox (1,0);
$v->add($h);
my $current = get_index;
drawable->gap_last; my $last = get_index;
drawable->gap_first; my $first = get_index;
drawable->gap_goto($current);
$f = new Gtk::Adjustment $current, $first, $last+1, 1, 10, 1;
$f->signal_connect(value_changed => sub {
my $n = $_[0]->value;
if ($n != get_index) {
drawable->gap_goto($n);
upd;
}
});
$s = new Gtk::HScale $f;
$s->set_update_policy('delayed');
$s->set_digits(0);
$s->set_value_pos('left');
$s->grab_focus;
$v->add($s);
$w->set_focus($s);
$h->add(Gtk::Object::new Gtk::Button
label => '|<<',
can_focus => 0,
signal::clicked => sub {
drawable->gap_first; upd;
});
$h->add(Gtk::Object::new Gtk::Button
label => '<',
can_focus => 0,
signal::clicked => sub {
drawable->gap_prev; upd;
});
$h->add(Gtk::Object::new Gtk::Button
label => '>',
can_focus => 0,
signal::clicked => sub {
drawable->gap_next; upd;
});
$h->add(Gtk::Object::new Gtk::Button
label => '>>|',
can_focus => 0,
signal::clicked => sub {
drawable->gap_last; upd;
});
show_all $w;
}
register "plug_in_gap_vcr_console",
"Gap VCR Console",
"This plug-in provides a basic vcr-type gap control panel for the image",
"Marc Lehmann",
"Marc Lehmann",
$VERSION,
N_"<Image>/Video/VCR Console...",
"*",
[],
[],
['gimp-1.1'],
sub {
$image = $_[0];
Gimp::gtk_init;
create_main;
main Gtk;
();
};
exit main;