117 lines
2.4 KiB
Perl
Executable File
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;
|
|
|