16 Set 2009



Newsletter 64

Color and Filling

Colored cursors aren't a feature used that often by regular applications, but games certainly make use of it and Winamp is a non-game example. When using Winamp, Gregor Schneider noticed the mouse turned into a black box when he tried to use it and dug into the code to see if he could fix it. In several places were comments noting the need for color support so Gregor had a few hints about where additional code was needed. Fortunately most of the work was straightforward and modifications to the parameters of drawing functions along with using a color surface was enough to get the basic functionality going. However, there were still issues in the lower level code within the Win32 subsystem and much of it was actually commented out. While the cursor was showing, the black box still appears around the cursor.
While Gregor was working on this, Timo Kreuzer decided to look into issues exposed by the Paint application by Benedikt Freisen. While Paint looks and works great on Windows, Timo felt it looked absolutely horrible on ReactOS. One cause was of course the colored cursors so he worked out the issues in the graphics engine. The key function is SetPointerShape, of which there is a Drv version and an Eng version depending on whether the graphics driver supports the function or requires the Windows graphics engine to handle it. Either way, the function receives two bitmaps, the second one which holds the color information for drawing the cursor. This second bitmap was originally ignored in the code but Timo has added the necessary functionality to make it work. Next on the list will be dealing with alphablending.
Another issue Gregor worked on was also exposed by the Paint application. While using it, Gregor noticed his favorite tool the bucket fill did not work. Investigating, he found that the flood fill functionality was incomplete. Most of the code was in place and the entire chain of function calls that make up flood filling was already there, except for the last set that actually did the drawing. Gregor implemented a very simplistic implementation and optimized it until its performance was reasonable for actual usage.

Delay Import

Dynamic Link Libraries are used as a way to share code and functionality between applications without having to duplicate that functionality across every application. This saves on memory as only a single instance of the library needs to be loaded to be used by multiple applications. At the same time, the initial loading of that library can take some time and might even delay the start up of an application. One way to avoid this overhead is to delay the loading of the library until it is actually needed, presumably after the application has started. This is what delay import is for but unfortunately support for it was not implemented in dlltool, so Timo Kreuzer went and added it. The implementation itself was relatively straightforward, though Timo struggled considerably with getting a build environment set up for dlltool. The patch has been submitted back to the original developers so hopefully more people will benefit from it and the mingw x64 team has also expressed an interest in it. Porting should also be fairly simple according to Timo.

Compatibility Database

After languishing for several years, Danny Götte has rewritten both the frontend interface and backend database layout, making it easier to create and edit entries. So far the database looks much better than in the past and since launching it Danny has continued refining it based on feedback from users. The ultimate intent is that the database will also have entries on hardware, replacing the ad-hoc list on the wiki. Thus everyone is invited to test it out and see how well it works. The more entries there are, the easier it will be for people to see what does and does not work with ReactOS.

Website Design Winner

Congratulations to Shek-Yu Leung, also known as numpy on the forum.  His designs evolved over the course of four entries and the last one was decided by the judges to be the best of the lot.  Overall the entries ranged from simple rearrangements of the current layout and style to complete reskins and swapping of color schemes.  There were a few creative layouts that may ultimately serve as inspiration for the final website refresh, but Leung's was one of the few that combined both a visual refresh with some interesting ideas for a new front page layout.  The ReactOS team thanks all participants for their efforts.

News Type: