Fix for bug 264444: ksplashx shows garbage when background image does not properly cover entire screen

Review Request #100520 - Created Feb. 1, 2011 and updated

Information
Ivo Anjo
kde-workspace
264444
Reviewers
kde-baseapps, kde-runtime
*Bump*: Can someone take a look at this? The patch is quite small, and I haven't seen any problems while using it on multiple computers...

The background pixmap/qimage is never initialized, so if for some reason the splashscreen doesn't cover the entire screen, you get garbage. 

That reason can be a ksplashx theme that does not use multiple monitors on a multi-monitor system, or if it picks a background that is smaller than the current resolution (for example the Horos splash 1280x1024 version appears to be 1278x1024).
I tested this by both replacing the background that ksplashx was using with a smaller one, and on two multi-monitor systems (one of which uses a gentoo ksplash screen that only covered one of the monitors).

The splash_image.fill( 0 ) can be changed to another color for debugging purposes, clearly showing the region of the monitor that is not covered by the splashscreen (and where before would be garbage from graphics memory).

To test this:
# Get a ksplashx theme, for example
git clone git://anongit.kde.org/kde-workspace
# Create ksplashx theme directory
mkdir -p `kde4-config --localprefix`/share/apps/ksplash/Themes/
# Copy theme
mv kde-workspace/ksplash/ksplashx/themes/default/ `kde4-config --localprefix`/share/apps/ksplash/Themes/
# Change the wallpaper (copy a smaller wallpaper on top of your screen resolution)
cd `kde4-config --localprefix`/share/apps/ksplash/Themes/
mv default/1024x768/background.png default/1920x1080/background.png
# Run ksplashx
ksplashx default --test

You should see a corrupted screen, similar to the one below, probably with fragments of windows you recently had on your screen.
Ivo Anjo
Ivo Anjo
Ivo Anjo
Review request changed

Change Summary:

Added instructions on how to test, as requested.

Testing Done:

   

I tested this by both replacing the background that ksplashx was using with a smaller one, and on two multi-monitor systems (one of which uses a gentoo ksplash screen that only covered one of the monitors).

   
   

The splash_image.fill( 0 ) can be changed to another color for debugging purposes, clearly showing the region of the monitor that is not covered by the splashscreen (and where before would be garbage from graphics memory).

  +
  +

To test this:

  +
  +

Get a ksplashx theme, for example

  +
  +

git clone git://anongit.kde.org/kde-workspace

  +
  +

Create ksplashx theme directory

  +
  +

mkdir -p kde4-config --localprefix/share/apps/ksplash/Themes/

  +
  +

Copy theme

  +
  +

mv kde-workspace/ksplash/ksplashx/themes/default/ kde4-config --localprefix/share/apps/ksplash/Themes/

  +
  +

Change the wallpaper (copy a smaller wallpaper on top of your screen resolution)

  +
  +

cd kde4-config --localprefix/share/apps/ksplash/Themes/

  + mv default/1024x768/background.png default/1920x1080/background.png

  +
  +

Run ksplashx

  +
  +

ksplashx default --test

  +
  +

You should see a corrupted screen, similar to the one below, probably with fragments of windows you recently had on your screen.

Oswald Buddenhagen
the root problem is that the image does not cover the background entirely, and therefore *that* should be fixed instead of coming up with workarounds to disguise it. i made some pretty sophisticated cropping/scaling code in kdm/kfrontend/themer/kdmpixmap.cpp (findBestPixmap()). ideally, that code would be transplanted to plasma as well.
  1. Agreed. A full image.fill() only slows down the startup process, so ideally the graphics should be fixed. AT LEAST make sure that only the small uncovered region is cleared by one or two QPainter::fillRect().
  2. nah, the performance impact of that is so small compared to loading the images that it will be hard to measure accurately. i'm more concerned about the correctness of the approach.
  3. I agree that ksplashx should be corrected to have better scaling (plasma, kdm and ksplashx should all use the same scaling).
    As I've said some ksplashx themes have this issue on dual monitors (one monitor shows the splash, other shows garbage). Changing the wallpaper is just a way of triggering this.
    
    While ksplashx isn't changed to reject those older themes, or to scale the background to match the screen size, this patch is needed.
    
    I've tested on 32 and 64bits, on two different computers, and even with a broken theme (I have a friend with a broken gentoo KDE theme and dual-monitors), and had no problems. I really really think this should be fixed, because when this bug appears, it makes KDE look *very* unpolished, and makes me personally cringe.
    
    Finally, in terms of performance I agree with Oswald: this is almost a no-op. Any computer made in the last decades should be able to quickly paint the screen black.
  4. I just installed latest Kubuntu, and got bit by this bug again: the default theme is shipped with a 1278x1024 wallpaper, which ksplash tries to use on a 1280x1024 monitor, and you get two beautiful vertical lines of garbage.
    
    Shouldn't this patch be applied, while ksplash isn't fixed/replaced/etc?
Loading...