diff options
author | Pascal Rigaux <pixel@mandriva.com> | 2003-08-01 20:48:32 +0000 |
---|---|---|
committer | Pascal Rigaux <pixel@mandriva.com> | 2003-08-01 20:48:32 +0000 |
commit | 0b3d57562f0ef60c905e16559f46fe64174a6839 (patch) | |
tree | f0329fcb5a739434572dc577a1bd4a3a75b0b558 | |
parent | 77b45e03e0c9a231bcceb551b199162464c25f9f (diff) | |
download | drakx-0b3d57562f0ef60c905e16559f46fe64174a6839.tar drakx-0b3d57562f0ef60c905e16559f46fe64174a6839.tar.gz drakx-0b3d57562f0ef60c905e16559f46fe64174a6839.tar.bz2 drakx-0b3d57562f0ef60c905e16559f46fe64174a6839.tar.xz drakx-0b3d57562f0ef60c905e16559f46fe64174a6839.zip |
=> do as Chris Picton suggested
Chris Picton said (nearly one year ago :-/) :
I have found the need for many low res screen resolutions for such
thingas as movie playing, xmame, etc.
The method XFdrake uses to enable modes is to enumerate each mode in the
XF86Config file. For example (a newly created file):
Subsection "Display"
Depth 24
Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480"
EndSubsection
It would be better (at least under XFree 4, which automatically provides
resoltions from the monitor, if it is capable), to not limit the modes
provided to the user
If I use instead, the following:
Subsection "Display"
Depth 24
Virtual 1280 960
EndSubsection
My maximum mode is exactly the same as before, but I have many more low
resolution modes.
-rw-r--r-- | perl-install/Xconfig/parse.pm | 2 | ||||
-rw-r--r-- | perl-install/Xconfig/xfree3.pm | 24 | ||||
-rw-r--r-- | perl-install/Xconfig/xfree4.pm | 15 | ||||
-rw-r--r-- | perl-install/Xconfig/xfreeX.pm | 28 |
4 files changed, 36 insertions, 33 deletions
diff --git a/perl-install/Xconfig/parse.pm b/perl-install/Xconfig/parse.pm index ea1054835..6de7d8959 100644 --- a/perl-install/Xconfig/parse.pm +++ b/perl-install/Xconfig/parse.pm @@ -133,7 +133,7 @@ my %kind_names = ( Keyboard => [ qw(Protocol Driver XkbModel XkbLayout XkbDisable) ], Monitor => [ qw(Identifier VendorName ModelName HorizSync VertRefresh) ], Device => [ qw(Identifier VendorName BoardName Chipset Driver VideoRam Screen BusID DPMS power_saver) ], - Display => [ qw(Depth Modes) ], # Subsection in Device + Display => [ qw(Depth Modes Virtual) ], # Subsection in Device Screen => [ qw(Identifier Driver Device Monitor DefaultColorDepth) ], InputDevice => [ qw(Identifier Driver Protocol Device Type Mode XkbModel XkbLayout XkbDisable Emulate3Buttons Emulate3Timeout) ], WacomCursor => [ qw(Port) ], #-\ diff --git a/perl-install/Xconfig/xfree3.pm b/perl-install/Xconfig/xfree3.pm index 8f61fe55a..2c753f148 100644 --- a/perl-install/Xconfig/xfree3.pm +++ b/perl-install/Xconfig/xfree3.pm @@ -85,6 +85,30 @@ sub set_wacoms { sub depths { 8, 15, 16, 24, 32 } +sub set_resolution { + my ($raw_X, $resolution, $o_Screen_) = @_; + + foreach my $Screen ($o_Screen_ ? $o_Screen_ : $raw_X->get_screens) { + $Screen ||= $raw_X->get_default_screen or internal_error('no screen'); + + $Screen->{DefaultColorDepth} = { val => $resolution->{Depth} }; + $Screen->{Display} = [ map { + my $modes = do { + if ($raw_X->is_fbdev($Screen)) { + '"default"'; + } else { + my @Modes = grep { + if_(m/(\d+)x(\d+)/, + $1 <= $resolution->{X} && (!$resolution->{Y} || $2 <= $resolution->{Y})); + } reverse @Xconfig::xfreeX::resolutions; + join(" ", map { qq("$_") } @Modes); + } + }; + { l => { Depth => { val => $_ }, Modes => { val => $modes } } }; + } $raw_X->depths ]; + } +} + sub get_device_section_fields { qw(VendorName BoardName Chipset VideoRam); #-); } diff --git a/perl-install/Xconfig/xfree4.pm b/perl-install/Xconfig/xfree4.pm index a6b1e424d..5c2d23286 100644 --- a/perl-install/Xconfig/xfree4.pm +++ b/perl-install/Xconfig/xfree4.pm @@ -84,13 +84,16 @@ sub set_wacoms { sub depths { 8, 15, 16, 24 } sub set_resolution { - my ($raw_X, $resolution, $Screen) = @_; - - $resolution = +{ %$resolution }; - #- XFree4 doesn't like depth 32, silently replacing it with 24 - $resolution->{Depth} = 24 if $resolution->{Depth} eq '32'; + my ($raw_X, $resolution, $o_Screen_) = @_; + + foreach my $Screen ($o_Screen_ ? $o_Screen_ : $raw_X->get_screens) { + $Screen ||= $raw_X->get_default_screen or internal_error('no screen'); - $raw_X->SUPER::set_resolution($resolution, $Screen); + $Screen->{DefaultColorDepth} = { val => $resolution->{Depth} eq '32' ? 24 : $resolution->{Depth} }; + $Screen->{Display} = [ map { + { l => { Depth => { val => $_ }, Virtual => { val => join(' ', @$resolution{'X', 'Y'}) } } }; + } $raw_X->depths ]; + } } sub get_device_section_fields { diff --git a/perl-install/Xconfig/xfreeX.pm b/perl-install/Xconfig/xfreeX.pm index deb69823c..b6223a7fa 100644 --- a/perl-install/Xconfig/xfreeX.pm +++ b/perl-install/Xconfig/xfreeX.pm @@ -172,35 +172,11 @@ sub get_resolution { my $depth = val($Screen->{DefaultColorDepth}); my $Display = find { !$depth || val($_->{l}{Depth}) eq $depth } @{$Screen->{Display} || []} or return {}; - val($Display->{l}{Modes}) =~ /(\d+)x(\d+)/ or return {}; + $Display->{l}{Virtual} && val($Display->{l}{Virtual}) =~ /(\d+)\s+(\d+)/ or + val($Display->{l}{Modes}) =~ /(\d+)x(\d+)/ or return {}; { X => $1, Y => $2, Depth => val($Display->{l}{Depth}) }; } -sub set_resolution { - my ($raw_X, $resolution, $o_Screen_) = @_; - - foreach my $Screen ($o_Screen_ ? $o_Screen_ : $raw_X->get_screens) { - $Screen ||= $raw_X->get_default_screen or internal_error('no screen'); - - $Screen->{DefaultColorDepth} = { val => $resolution->{Depth} }; - $Screen->{Display} = [ map { - my $modes = do { - if ($raw_X->is_fbdev($Screen)) { - '"default"'; - } else { - my @Modes = grep { - if_(m/(\d+)x(\d+)/, - $1 <= $resolution->{X} && (!$resolution->{Y} || $2 <= $resolution->{Y})); - } reverse our @resolutions; - join(" ", map { qq("$_") } @Modes); - } - }; - { l => { Depth => { val => $_ }, Modes => { val => $modes } } }; - } $raw_X->depths ]; - } -} - - #-############################################################################## #- common to xfree3 and xfree4 #-############################################################################## |