summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perl-install/Xconfig/resolution_and_depth.pm116
1 files changed, 49 insertions, 67 deletions
diff --git a/perl-install/Xconfig/resolution_and_depth.pm b/perl-install/Xconfig/resolution_and_depth.pm
index df72bc31d..5953f7a4e 100644
--- a/perl-install/Xconfig/resolution_and_depth.pm
+++ b/perl-install/Xconfig/resolution_and_depth.pm
@@ -209,13 +209,14 @@ sub configure_auto_install {
sub choose_gtk {
my ($in, $card, $default_resolution, @resolutions) = @_;
- my ($chosen_x_res, $chosen_y_res, $chosen_Depth) = @$default_resolution{'X', 'Y', 'Depth'};
- $chosen_x_res ||= 640;
+ my $chosen_Depth = $default_resolution->{Depth};
+ my $chosen_res = { X => $default_resolution->{X} || 640, Y => $default_resolution->{Y} };
my %x_res2depth; push @{$x_res2depth{$_->{X}}}, $_->{Depth} foreach @resolutions;
my %depth2x_res; push @{$depth2x_res{$_->{Depth}}}, $_->{X} foreach @resolutions;
require ugtk2;
+ mygtk2->import;
ugtk2->import(qw(:create :helpers :wrappers));
my $W = ugtk2->new(N("Resolution"));
@@ -231,83 +232,64 @@ sub choose_gtk {
%h;
};
- my ($depth_combo, $x_res_combo) = (Gtk2::ComboBox->new_text, Gtk2::ComboBox->new_text);
-
- my $pix_colors = Gtk2::Image->new;
- my $set_chosen_Depth_image = sub {
- $pix_colors->set_from_file(ugtk2::_find_imgfile(
- $chosen_Depth >= 24 ? "colors.png" :
- $chosen_Depth >= 15 ? "colors16.png" : "colors8.png"));
- };
-
- my $set_chosen_Depth = sub {
- $chosen_Depth = $_[0];
- $depth_combo->entry->set_text(translate($depth2text{$chosen_Depth}));
- $set_chosen_Depth_image->();
- };
-
- my $pixmap_mo = Gtk2::Image->new;
- my $set_chosen_resolution = sub {
- $chosen_x_res = $_[0];
- if ($_[1]) {
- $chosen_y_res = $_[1];
- } else {
- #- take one
- my $one = find { $_->{X} eq $chosen_x_res } @resolutions;
- $chosen_y_res = $one->{Y};
- }
- my $image = $monitor_images_x_res{$chosen_x_res} or internal_error("no image for resolution $chosen_x_res");
- $pixmap_mo->set_from_file($image);
- $x_res_combo->entry->set_text($chosen_x_res . "x" . $chosen_y_res);
- };
- $x_res_combo->set_popdown_strings(uniq map { "$_->{X}x$_->{Y}" } sort { $a->{X} <=> $b->{X} } @resolutions);
- $set_chosen_resolution->($chosen_x_res, $chosen_y_res);
+ my $depth_combo = gtknew('ComboBox', width => 220,
+ text_ref => \$chosen_Depth,
+ format => sub { translate($depth2text{$_[0]}) },
+ list => [ ikeys %depth2x_res ],
+ changed => sub {
+ if (!member($chosen_res->{X}, @{$depth2x_res{$chosen_Depth}})) {
+ my $X = max(@{$depth2x_res{$chosen_Depth}});
+ #- take one
+ my $one = find { $_->{X} eq $X } @resolutions;
+ gtkval_modify(\$chosen_res, $one);
+ }
+ });
+ my $res2text = sub { "$_[0]{X}x$_[0]{Y}" };
+ my $res_combo = gtknew('ComboBox',
+ text_ref => \$chosen_res,
+ format => $res2text,
+ list => [ uniq_ { $res2text->($_) } sort { $a->{X} <=> $b->{X} } @resolutions ],
+ changed => sub {
+ if (!member($chosen_Depth, @{$x_res2depth{$chosen_res->{X}}})) {
+ gtkval_modify(\$chosen_Depth, max(@{$x_res2depth{$chosen_res->{X}}}));
+ }
+ });
+ my $pix_colors = gtknew('Image',
+ file_ref => \$chosen_Depth,
+ format => sub {
+ $_[0] >= 24 ? "colors.png" : $_[0] >= 15 ? "colors16.png" : "colors8.png";
+ });
+ my $pixmap_mo = gtknew('Image',
+ file_ref => \$chosen_res,
+ format => sub {
+ $monitor_images_x_res{$_[0]{X}} or internal_error("no image for resolution $chosen_res->{X}");
+ });
my $help_sub = $in->interactive_help_sub_display_id('configureX_resolution');
gtkadd($W->{window},
gtkpack_($W->create_box_with_title(N("Choose the resolution and the color depth"),
if_($card->{BoardName}, "(" . N("Graphics card: %s", $card->{BoardName}) . ")"),
),
- 1, gtkpack2(Gtk2::VBox->new(0,0),
- gtkpack2__(Gtk2::VBox->new(0, 15),
- $pixmap_mo,
- gtkpack2(Gtk2::HBox->new(0,0),
- create_packtable({ col_spacings => 5, row_spacings => 5 },
- [ $x_res_combo, Gtk2::Label->new("") ],
- [ $depth_combo, gtkadd(gtkset_shadow_type(Gtk2::Frame->new, 'etched_out'), $pix_colors) ],
- ),
- ),
- ),
- ),
+ 1, '',
+ 0, $pixmap_mo,
+ 0, gtknew('HBox', children => [
+ 1, '',
+ 0, gtknew('Table', col_spacings => 5, row_spacings => 5,
+ children => [
+ [ $res_combo, gtknew('Label', text => "") ],
+ [ $depth_combo, gtknew('Frame', shadow_type => 'etched_out', child => $pix_colors) ],
+ ]),
+ 1, '',
+ ]),
+ 1, '',
0, gtkadd($W->create_okcancel(N("Ok"), N("Cancel"), '', if_($help_sub, [ N("Help"), $help_sub, 1 ]))),
));
- $depth_combo->set_popdown_strings(map { translate($depth2text{$_}) } ikeys %depth2x_res);
- $depth_combo->entry->set_size_request(220, -1);
- $depth_combo->entry->signal_connect(changed => sub {
- my %txt2depth = reverse %depth2text;
- my $s = $depth_combo->entry->get_text;
- $chosen_Depth = $txt2depth{untranslate($s, keys %txt2depth)};
- $set_chosen_Depth_image->();
-
- if (!member($chosen_x_res, @{$depth2x_res{$chosen_Depth}})) {
- $set_chosen_resolution->(max(@{$depth2x_res{$chosen_Depth}}));
- }
- });
- $x_res_combo->entry->signal_connect(changed => sub {
- $set_chosen_resolution->($1, $2) if $x_res_combo->entry->get_text =~ /(\d+)x(\d+)/;
-
- if (!member($chosen_Depth, @{$x_res2depth{$chosen_x_res}})) {
- $set_chosen_Depth->(max(@{$x_res2depth{$chosen_x_res}}));
- }
- });
- $set_chosen_resolution->($chosen_x_res, $chosen_y_res);
- $set_chosen_Depth->($chosen_Depth);
$W->{ok}->grab_focus;
$W->main or return;
- find { $_->{X} == $chosen_x_res &&
- $_->{Y} == $chosen_y_res &&
+ find { $_->{X} == $chosen_res->{X} &&
+ $_->{Y} == $chosen_res->{Y} &&
$_->{Depth} == $chosen_Depth } @resolutions;
}