diff options
Diffstat (limited to 'perl-install/standalone/draksplash2')
-rw-r--r-- | perl-install/standalone/draksplash2 | 306 |
1 files changed, 0 insertions, 306 deletions
diff --git a/perl-install/standalone/draksplash2 b/perl-install/standalone/draksplash2 deleted file mode 100644 index 4c17bdd08..000000000 --- a/perl-install/standalone/draksplash2 +++ /dev/null @@ -1,306 +0,0 @@ -#!/usr/bin/perl - -#- convert in.png -colors 128 -treedepth 6 -dither out.gif - -use strict; - -use lib '/usr/lib/libDrakX'; -use Getopt::Long; -use ugtk2 qw(:all); -use Gtk2::Gdk::Keysyms; -use MDK::Common; -use Image::Magick; -use bootsplash qw(:drawing); - - -my $kernel_size = 1500; #- in KiB -my $initrd_size = 130; #- in KiB - -my $lilo_block_size = 50; #- in KiB -my $isolinux_block_size = 64; #- in KiB - -my @modes = ( - { Vesa => 0x101, X => 640, Y => 480 }, - { Vesa => 0x103, X => 800, Y => 600 }, - { Vesa => 0x105, X => 1024, Y => 768 }, - { Vesa => 0x107, X => 1280, Y => 1024 }, -); - -my (%image_size, $kernel_and_initrd_size); -my ($progress_rect, $progress_color) = ([], {}); -my ($timer_pos, $timer_bg, $timer_fg) = ({}, {}, {}); -my ($entry_rect, $entry_selected_color, $entry_color) = ([], {}, {}); -my $isolinux_mode; - -my $magick = Image::Magick->new; - -my ($current_rect, $current_point); -my ($image_area, $image_pixbuf); - -sub move_point { - my ($up_down, $direction) = @_; - my $wanted = $current_point->{$direction} + $up_down; - if (0 <= $wanted && $wanted < $image_size{$direction}) { - $current_point->{$direction} += $up_down; - } - $image_area->queue_draw; -} -sub create_image_area() { - $image_area = Gtk2::DrawingArea->new; - $image_area->can_focus(1); - $image_area->add_events('button-press-mask'); - $image_area->signal_connect(button_press_event => \&image_button_pressed); - $image_area->signal_connect(expose_event => \&image_expose); - gtkmodify_font($image_area, 'Monospace 12'); - - my $keys = { - $Gtk2::Gdk::Keysyms{Down} => sub { move_point( ($_[0] ? 5 : 1), 'Y') }, - $Gtk2::Gdk::Keysyms{Up} => sub { move_point(-($_[0] ? 5 : 1), 'Y') }, - $Gtk2::Gdk::Keysyms{Left} => sub { move_point(-($_[0] ? 5 : 1), 'X') }, - $Gtk2::Gdk::Keysyms{Right} => sub { move_point( ($_[0] ? 5 : 1), 'X') }, - $Gtk2::Gdk::Keysyms{q} => sub { Gtk2->main_quit }, - $Gtk2::Gdk::Keysyms{Escape} => sub { Gtk2->main_quit }, - }; - - $image_area->signal_connect(key_press_event => sub { - my (undef, $event) = @_; - - if (my $f = $keys->{$event->keyval}) { - $f->(member('control-mask', @{$event->state})); - } - 1; - }); - - $image_area->grab_focus; - $image_area->show; - $image_area; -} -sub image_expose { - my ($widget) = @_; - my $window = $widget->window; - $window->draw_pixbuf($widget->style->white_gc, $image_pixbuf, 0, 0, 0, 0, -1, -1, 'none', 0, 0); - - if (!$isolinux_mode) { - { - my $layout = $widget->create_pango_layout('--:--'); - my ($width, $height) = $layout->get_pixel_size; - $window->draw_rectangle(color_index2gc($window, $timer_bg), 1, $timer_pos->{X}, $timer_pos->{Y}, $width, $height); - $window->draw_layout(color_index2gc($window, $timer_fg), $timer_pos->{X}, $timer_pos->{Y}, $layout); - } - my ($x, $y, $w, $h) = rectangle2xywh($entry_rect); - my @std_labels = ('linux', 'failsafe', '2.6.3-7mdk', 'X' x ($w / 8)); - for (my $nb = 0; $nb < int($h / 16); $y += 16, $nb++) { - my $label = shift(@std_labels) || 'label_' . ($nb+1); - my $gc = color_index2gc($window, !$nb ? $entry_selected_color : $entry_color); - my $layout = $widget->create_pango_layout($label); - $window->draw_layout($gc, $x, $y, $layout); - } - } - { - my ($x, $y, $w, $h) = rectangle2xywh($progress_rect); - my $w2 = $w - $w % nb_steps(); - if ($current_rect) { - $window->draw_rectangle(color_index2gc($window, $progress_color), 1, $x, $y, $w2, $h); - $window->draw_rectangle($widget->style->black_gc, 0, $x, $y, $w, $h); - } else { - $window->draw_rectangle(color_index2gc($window, $progress_color), 1, $x, $y, $w, $h); - } - } - 0; -} -sub image_button_pressed { - my (undef, $event) = @_; - - if ($event->button eq '3') { - create_popup()->popup(undef, undef, undef, undef, '3', $event->time); - return 1; - } - - my $point = { X => $event->x, Y => $event->y }; - - if ($current_rect) { - if (!@$current_rect) { - my @corners = ({ X => 0, Y => 0 }, - { X => 0, Y => $image_size{Y} - 1 }, - { X => $image_size{X} - 1, Y => 0 }, - { X => $image_size{X} - 1, Y => $image_size{Y} - 1 }); - @$current_rect = ($corners[farthest($point, @corners)], nearest($point, @corners)); - } - $current_point = nearest($point, @$current_rect); - } elsif ($current_point) { - %$current_point or %$current_point = %$point; - } else { - return; - } - - %$current_point = %$point; - $current_point->{Color} = $magick->Get("index[$point->{X},$point->{Y}]"); - - $image_area->queue_draw; - 1; -} - -sub image_set_file { - my ($file) = @_; - - $image_pixbuf = Gtk2::Gdk::Pixbuf->new_from_file($file); - %image_size = (X => $image_pixbuf->get_width, Y => $image_pixbuf->get_height); - $image_area->set_size_request($image_size{X}, $image_size{Y}); - $image_area->queue_draw; -} - -sub color_index2gc { - my ($window, $color) = @_; - my ($r, $g, $b) = split(',', $magick->Get("colormap[$color->{Color}]")); - my $gc = Gtk2::Gdk::GC->new($window); - - my $gdk_color = Gtk2::Gdk::Color->new($r, $g, $b) or die "bad color for $r,$g,$b"; - $window->get_colormap->rgb_find_color($gdk_color); - $gc->set_rgb_fg_color($gdk_color); - $gc; -} - -sub create_popup() { - my @l = ( - 'Progress bar position' => sub { $current_rect = $progress_rect }, - 'Progress bar color' => sub { $current_point = $progress_color }, - '' => sub {}, - $isolinux_mode ? ( - 'switch to lilo mode' => sub { $isolinux_mode = 0 }, - ) : ( - 'Timer position' => sub { $current_point = $timer_pos }, - 'Timer text color' => sub { $current_point = $timer_fg }, - 'Timer background' => sub { $current_point = $timer_bg }, - '' => sub {}, - 'Entry position' => sub { $current_rect = $entry_rect }, - 'Entry text selected color' => sub { $current_point = $entry_selected_color }, - 'Entry text color' => sub { $current_point = $entry_color }, - '' => sub {}, - 'switch to isolinux mode' => sub { $isolinux_mode = 1 }, - ), - - ); - - my $popup = Gtk2::Menu->new; - foreach (group_by2(@l)) { - my ($descr, $f) = @$_; - gtkappend($popup, - gtksignal_connect(Gtk2::MenuItem->new_with_label($descr), - activate => sub { - $current_rect = $current_point = undef; - $f->(); - })); - } - $popup; -} -sub nb_steps() { - $kernel_and_initrd_size / ($isolinux_mode ? $isolinux_block_size : $lilo_block_size); -} - -sub read_parameters { - my ($file) = @_; - my %h = getVarsFromSh($file); - - $entry_rect->[0]{X} = $h{entry_x}; - $entry_rect->[0]{Y} = $h{entry_y}; - $entry_rect->[1]{X} = $h{entry_x} + $h{entry_w}; - $entry_rect->[1]{Y} = $h{entry_y} + $h{entry_h}; - $entry_color->{Color} = $h{entry_bg} - 64; - $entry_selected_color->{Color} = $h{entry_fg} - 64; - - $timer_pos->{X} = $h{timer_x}; - $timer_pos->{Y} = $h{timer_y}; - $timer_bg->{Color} = $h{timer_bg} - 64; - $timer_fg->{Color} = $h{timer_fg} - 64; - - $progress_color->{Color} = $h{progress_c} - 64; - $progress_rect->[0]{X} = $h{progress_x}; - $progress_rect->[0]{Y} = $h{progress_y}; - $progress_rect->[1]{X} = $h{progress_x} + $h{progress_real_w}; - $progress_rect->[1]{Y} = $h{progress_y} + $h{progress_h}; - - $isolinux_mode = $h{isolinux_mode}; -} - -sub save_parameters { - my ($file) = @_; - my %h; - - $h{mode} = (find { $image_size{X} eq $_->{X} } @modes)->{Vesa}; - $h{clear_h} = $image_size{X}; - $h{clear_w} = $image_size{Y}; - - if (!$isolinux_mode) { - ($h{entry_x}, $h{entry_y}, $h{entry_w}, $h{entry_h}) = rectangle2xywh($entry_rect); - $h{entry_w_chr} = int($h{entry_w} / 8); - $h{entry_h_chr} = int($h{entry_h} / 16); - $h{entry_bg} = $entry_color->{Color} + 64; - $h{entry_fg} = $entry_selected_color->{Color} + 64; - - $h{timer_x} = $timer_pos->{X}; - $h{timer_y} = $timer_pos->{Y}; - $h{timer_bg} = $timer_bg->{Color} + 64; - $h{timer_fg} = $timer_fg->{Color} + 64; - } - - $h{progress_c} = $progress_color->{Color} + 64; - ($h{progress_x}, $h{progress_y}, $h{progress_real_w}, $h{progress_h}) = rectangle2xywh($progress_rect); - $h{progress_w} = int($h{progress_real_w} / nb_steps()); - - $h{isolinux_mode} = $isolinux_mode; - - output($file, map { "$_=$h{$_}\n" } sort keys %h); -} - -# MAIN ######################################################################### -my $usage = <<EOF; -usage: $0 [--kernel <kernel> --initrd <initrd>] [--size <size in KiB>] <image> -(kernel and initrd are used to compute the size of data to load) -EOF - -GetOptions('kernel=s' => \ (my $kernel), - 'initrd=s' => \ (my $initrd), - 'size=s' => \$kernel_and_initrd_size, - 'isolinux' => \ (my $force_isolinux_mode), - ) or die $usage; - -my ($file) = @ARGV; -@ARGV == 1 && -e $file or die $usage; - -if ($kernel_and_initrd_size) { - $kernel and die "give kernel and initrd or size, not both\n"; -} else { - if ($kernel) { - $initrd or die "give both kernel and initrd\n"; - $kernel_size = (-s $kernel) / 1024 or die "bad file $kernel: $!\n"; - $initrd_size = (-s $initrd) / 1024 or die "bad file $initrd: $!\n"; - } - $kernel_and_initrd_size = $kernel_size + $initrd_size; -} - -my $err; -$err = $magick->Read($file) and die $err; - -my $bmp_file_name = $file; -$bmp_file_name =~ s/\.\w\w\w?$//; -$bmp_file_name .= '.bmp'; - -if ($file ne $bmp_file_name || $magick->Get('colors') > 128) { - warn "writing $bmp_file_name\n"; - $err = $magick->Quantize(colors => 128, dither => 'True', treedepth => 6) and die $err; - $err = $magick->Write(filename => "bmp3:$bmp_file_name", compression => 'None') and die $err; -} -read_parameters("$bmp_file_name.parameters"); -$isolinux_mode ||= $force_isolinux_mode; - -my $window_widget = Gtk2::Window->new('toplevel'); -$window_widget->signal_connect(destroy => sub { Gtk2->main_quit }); -gtkadd($window_widget, - gtkpack(Gtk2::VBox->new(0,0), create_image_area())); -image_set_file($bmp_file_name); - -$window_widget->show; -$image_area->window->set_cursor(Gtk2::Gdk::Cursor->new('crosshair')); -Gtk2->main; - -save_parameters("$bmp_file_name.parameters"); |