Yes folks, my secret is out! I've been developing a screen saver for the competition. "Huh?" I hear you all say. Well, I've been really busy of late, so didn't want to make a big fuss about it and then not deliver. Luckily, after several weeks of my C# screen saver sounding more like an F natural (groan), I managed to kick the little baby into touch in time to catch the voting form being put up.
Before I go any further, may I just give a big thanks to Chris, firstly for grabbing onto such a great idea for a CP competition, and secondly for building the final .exe on his machine to save me from those Beta 2 blues (oh, they just keep coming!).
Here's a rundown of the main features of the screensaver:
- Downloads data in a separate thread so as not to block user interface
- Detects if a user is offline
- Will retry after five minutes should the connection to the server fail
- Hair raising graphics
- Customisable animation speed for users with slower machines etc.
Installation is as easy as pie:
- Copy CP Screensaver.scr into your Windows system folder.
- Copy the Images folder as a sub-folder of your Windows system folder.
- Select the CP Screensaver from your Display properties.
Done like a dinner!
How it works
Check back soon! Major areas to be covered will be:
- Double buffering
- Alpha blending (the fade effect)
- State management
- Multiple monitor support (presuming it actually works as I intended, see below).
Unfortunately, I don't run a multi-monitor system, which means that, whilst I have added support for multiple monitors (not particularly efficient support, granted), I have been unable to test the saver on such a configuration. If you have been able to try the saver out with multiple monitors, I'd be interested to hear your successes/failures in the comments section at the bottom of the article.
The screensaver certainly has some way to go in the future but I simply don't have time to do anything with it just yet; here is a list of stuff I plan to do, off the top of my head:
- Subtly animated background with alpha blending on lights of lift platform
- Caching of local data so if the user isn't connected they can still see a list of posts etc. from the last time the saver managed to connect.
- Better handling of really high and really low resolutions (maybe utilise extra space somehow?)
- Better multiple monitor support
- Some bits of optimisations (there are a few loop invariants that need sorting out, but nothing that's too big of a problem)
Okay - so I hope you enjoy what is already here. The code isn't in the neatest of forms by any means because I used this project as a learn-C#-as-you go, so there may be the odd rough edge here and there, though on the whole it's pretty reasonable.