Special Effects on the Desktop

Richard Hallas explains how to use David Pilling's SpecialFX desktop enhancement software


Download SpecialFX version 1.05 (27 May 2004)

SpecialFX is a free enhancement utility for the RISC OS operating system, and is compatible with RISC OS 3.5+, RISC OS 4 & Select and RISC OS 5. Click the icon to the right to download it as a Zip archive which can be opened with SparkFS or SparkPlug. The full source code is included in the archive.
Zip


SpecialFX module by David Pilling
SpecialFX Setup utility and documentation by Richard Hallas
The software remains the copyright of its authors but may be distributed freely

The following article is derived from a pair of articles that first appeared in Foundation RISC User magazine.


Overview

SpecialFX is a RISC OS patch which modifies the behaviour of some aspects of the operating system. All of its functions should work correctly on any system running RISC OS 3.7 or later, and it has been tested successfully with the latest versions of RISC OS issued through the Select scheme and on the IYONIX pc. It performs three basic operations:
  1. It allows any programs that use vector graphics in their windows (i.e. drawn items rather than bitmap graphics) to enhance the appearance of those graphics by anti-aliasing them;
  2. It allows all applications that use outline fonts to improve the appearance of text by blending the characters' edges to the underlying screen contents (useful if the text background is multicoloured), rather than using the more traditional 'single-colour background to single-colour foreground' anti-aliasing of RISC OS fonts;
  3. It cures a particular printing problem experienced by users of certain types of printer.

The third of those functions is of least interest to most users, as it is relevant mainly to owners of Calligraph direct-drive laser printers. I will not dwell on it in this article, therefore; if you own a Calligraph printer, or are just interested in what the fix actually does, you may like to read the SpecialFX application's Help file for more details about it. The only point worth mentioning here is that the fix is completely safe; it should have no adverse effects on any printed output, whether or not a Calligraph printer is in use. It also defaults to being turned off.

The two main functions affect only things that are drawn on the screen; they have no effect on printed output.

Requirements

Each of the three functions listed above has its own set of requirements in order to function, so it is worth summarising them briefly. The first is by far the most important.

The anti-aliasing function requires two third party software modules to be loaded: Computer Concepts' GDraw and DitherExtend modules. A third module, GSpriteExtend, is beneficial but not essential. In order to be able to find these modules, certain software from Computer Concepts & MW Software must be installed on your system, and in a place where SpecialFX can locate the modules when it is first launched. Although SpecialFX is able to look for the modules in various places, the recommended method of storing these modules, and ensuring that they're kept up to date, is to have a copy of the ArtWorks Viewer application in the !Boot.Resources directory, where it will be seen during the computer's boot-up process. Users of RISC OS Select and RISC OS 5 should find that a copy of the application is already present there. Anyone who does not have a copy present there should install one; the latest version can be found at MW Software's site.

The second function, font blending, requires that a version of RISC OS from 3.7 onwards is in use, as the background-blending font manager was introduced in that version of RISC OS.

The third function, the printing fix, concerns the use of 'dynamic areas', which were introduced with RISC OS 3.5; the printing bug does not affect users of earlier systems.

Installing SpecialFX

Detailed installation instructions are given later in this article.

Benefits and drawbacks

Before finding out exactly how to use SpecialFX, let's take a look at the benefits it provides, and the minor problems that can become apparent when using its features.

Vector anti-aliasing

When Computer Concepts released ArtWorks, they included within it a software module for drawing vector graphics on the screen. It was, in many ways, almost a direct replacement for Acorn's Draw module, which is built into RISC OS and used by many different applications (most notably Draw itself) for rendering such graphics. (Note that the Draw application is not the same as the Draw module; the application makes use of the module to display its graphics.)

The substantial difference between Computer Concepts' version of the Draw module, which they called GDraw, and Acorn's original is that the Computer Concepts version performs anti-aliasing, shading the edges of lines so that they appear to be smooth. This clearly gave ArtWorks (and Impression, which used the same module) a quality advantage over other applications when displaying vector graphics on the screen.

Clearly it would be nice if some clever software could cause all the applications that normally use the Draw module to draw graphics on the screen to use the GDraw module instead, and thus benefit from the latter software's anti-aliasing facilities. That's what SpecialFX does. Figure 1 consists of two screenshots of the same Draw file (a screen grab of a normal Draw window), showing exactly the same graphic in each. (For the curious, it's a rendition of the emblem of the Wakefield diocese, which I created in Draw for use in a brochure many years ago.) Image (a) on the left shows the graphic as Draw normally displays it, without anti-aliasing. Image (b) on the right is exactly the same graphic with SpecialFX turned on. The improvement in quality that anti-aliasing can produce should be obvious.

Figure 1(a):
Without anti-aliasing
Figure 1(a)   Figure 1(b) Figure 1(b):
With anti-aliasing

Points to note

An anti-aliased Draw window is a great benefit, but there are a few occasions when what you see is not quite what you anticipate; for example, you might see objects which you would expect to be anti-aliased, but which aren't. There are a few points that you should watch out for when using Draw with SpecialFX:

  • Thin lines: because of the way the GDraw module works, lines set to the 'Thin' width are not anti-aliased. In fact, the same is true of other lines of measurable but very narrow width, depending on the viewing scale. Generally you should try to ensure that all the lines in your Draw files have a width of at least 0.25pt; figure 2 shows the improvement you can get when a thin line is changed to be 0.5pt wide. Eliminating thin lines from Draw files is a wise precaution anyway, as thin lines rarely come out well (if at all) on high-resolution printers.
  • Figure 2: The difference between a thin line (above) and one with a 0.5pt width (below); both shapes are otherwise identical   Figure 2

  • Shapes with extraneous borders: this is a related problem to the thin lines issue just discussed. In the case of filled shapes, it's not uncommon to find that, in addition to its fill colour, the shape has (a) a line colour which matches the fill colour, and (b) a line width of 'Thin'. If this is the case, then the coloured 'Thin' line is totally unnecessary; it adds nothing significant to the size of the underlying shape, and the only function it really serves is to disable the GDraw module's ability to anti-alias the edges of the shape! If the shape has a thick line surrounding it (maybe to bolster its size), or the line is of a different colour to the fill, then that's no problem. But if the line is 'Thin' and the same colour as the fill, then strictly it shouldn't be there.

    The solution is very simple for such shapes: just set their line colour to 'None'. Figure 3 shows two almost identical shapes. In both cases the line width is set to 'Thin', but in the upper shape the line colour is black, whereas in the lower shape the line colour has been set to 'None', allowing the anti-aliasing to work.

  • Figure 3: Two virtually identical filled shapes with line width 'Thin'; in the upper shape the surrounding line colour is the same as the fill, whereas in the lower shape the line colour has been set to 'None'   Figure 3

    Background blending

    The RISC OS outline font manager has always been able to anti-alias text, smoothing its edges between two different colours: the foreground and the background. However, any given character normally has a single background colour for the purposes of anti-aliasing, and if text is printed on a very variable background (as can be the case with Web pages in particular), the ability to shade the text to only a single colour can be quite a restriction.

    When Acorn released RISC OS 3.7, it incorporated the so-called background blending font manager: the new facility was an ability to anti-alias text to a changing background, so any given shaded pixel in the plotted character would be shaded between the font colour and the colour of that particular pixel on screen, rather than the font colour and the font's background colour.

    This is best demonstrated by an illustration. Figure 4 shows what text looks like on a very colourful background if regular anti-aliasing is used. Note how the uniform background colour defined for the text (in this instance, white) is totally inappropriate for the very vibrant background on which it actually appears. It causes the edges of all the letters to be given a grey/white halo which makes them hard to read.

    Figure 4: Anti-aliasing can create a halo around text on a variegated background   Figure 4

    Figure 5 shows similar text on an identical background to figure 4. However, in this case, SpecialFX has been used to turn background blending on (the picture is a screenshot of another Draw file). As should be clear, the text is now far more attractive and legible because the anti-aliasing colour for every single shaded pixel in the text is now a shade of the pixel's underlying background colour, rather than a shade between the foreground and background colours of the text itself.

    Figure 5: Background blending shades the character edges between the foreground colour and the background pixels   Figure 5

    Background blending requires more computing power to process than normal anti-aliasing, and hence blended text is a little slower to plot than standard text. However, most users (especially of StrongARM computers) should not notice any discernible performance degradation on their systems even if background blending is used all the time, as SpecialFX allows it to be.

    A few applications (for example, Ovation Pro and Fresco) support the background blending feature of the font manager themselves. Most applications, though, do not, and so SpecialFX allows you to enforce its use in whatever applications you like.

    Points to note

    Again, there are a few small points to bear in mind when enforcing background blending in an application that was not designed to support it.

  • Blotchy text: there is sometimes an unfortunate side-effect when using background-blended text, which can occur if a text string is plotted several times on top of itself. If this happens (and whether it does depends on individual applications), the blended pixels around the letters can build up in intensity until there's an unpleasant, blotchy, largely monochrome mess on the screen! This is unfortunate but hard to avoid (short of rewriting applications to plot their text in a different way).

    One application that suffers from this effect, albeit in a minor way, is Draw itself. If you enter new outline font text in a Draw window when background blending is being enforced, then the whole string will be replotted each time you type in a new character. This causes a blotchy build-up of text as you type in the string. Figure 6 illustrates the problem. Luckily this is only a short-term irritation; once the text has been entered, then it will be plotted correctly in future (just wipe a window or menu over it to replot it and get rid of the blotchiness). The enhanced quality of background-blended text in a Draw window (especially if you're using text to label a colourful illustration etc.) more than makes up for the minor cosmetic glitch when entering the text in the first place.

  • Figure 6: Draw suffers from a minor glitch when entering text, but it's only a temporary nuisance   Figure 6

  • Invisible text background colours: as explained above, when normal anti-aliasing is used, the shading is calculated between a foreground colour and a fixed background colour, and all shaded pixels will be tints between those two colours. By contrast, with blending enabled, the colour that's defined as the text background colour (to which anti-aliasing normally occurs) will be ignored and will never be seen.

    This is only a problem if, for example, you want the text background colour to be visible. Although it's far from advisable, some people occasionally set the text background colour to be quite different to the colour of underlying objects in a Draw window, so that the 'halo' effect is obvious on the screen, and allows the text to stand out more against its background. This is really not a good idea (as it looks ugly and won't appear on a printout anyway), but it's sometimes seen. If background blending is used, the 'halo' will vanish completely, and the text may become very difficult to read. Figure 7 gives an example. Most people will not find this to be a problem, but it's worth being aware of the situation.

  • Figure 7: Although it's a bad idea to do this, the text's anti-aliasing background colour can be used to differentiate it from the background on which it actually appears (above); however, use of background blending will eradicate this effect (below)   Figure 7(a)
    Figure 7(b)

    It's easy enough to duplicate the 'halo' effect in a better way in any case (in Draw at least). Just convert your text to paths and then give the resultant shapes different line and fill colours, preferably using lines that are not 'Thin'. This produces a much nicer, more substantial outline for the text, as can be seen in figure 8.

    Figure 8: A better version of the 'halo' effect can be produced by converting text to paths and then applying separate line and fill colours   Figure 8


    Installation

    It is strongly recommended that anyone who is already using an earlier version of SpecialFX should upgrade to version 1.05, as it fixes various important bugs and improves general stability.

    Installing SpecialFX

    The SpecialFX software is designed to be used on machines running RISC OS 3.5 or later, but to benefit from the full usefulness of the module, at least version 3.7 of RISC OS is required (as it was in this version that the background-blending font manager was introduced). The SpecialFX Setup application also works on any version of RISC OS from RISC OS 3 onwards, but can behave as a Configure plug-in under RISC OS 4 and RISC OS 5.

    The latest version 1.05 of SpecialFX provided here comprises two main components:

    1. The SpecialFX resource application;
    2. The SpecialFX Setup configuration tool.
    There are also two optional applications which will be mentioned below. To install the necessary components, proceed as follows:

    First, on all systems:

  • Open the !Boot.Resources directory on your machine.
  • Next,

    The next step depends on the version of RISC OS you're using:

    RISC OS 5 systems:

    RISC OS Select (version 4.2+) systems:

    RISC OS 4.0x systems:

    RISC OS 3.5/6/7 systems:

    Optional step: altering the Configure icon
    The versions of Configure supplied with RISC OS 4.0x, RISC OS Select and RISC OS 5 all have different sprite styles for the plug-ins. RISC OS 4.0 uses jigsaw-puzzle icons; RISC OS Select uses more refined-looking jigsaw-puzzle icons (with elongated lugs); RISC OS 5 uses icons without jigsaw puzzle borders.

    Unfortunately, there is no way to make a Configure plug-in adapt its Configure icon for the version of Configure currently in use. As supplied, SFXSetup has RISC OS 5-style icons preinstalled.

    So, to make SFXSetup match the appearance of your other plug-ins, as an extra step you can install appropriate icons for your version of RISC OS. Look in the Extras directory; it contains RISC OS 4, RISC OS 4S (i.e. RISC OS Select: 4.2 or later versions) and RISC OS 5 folders. Open the folder relating to the OS installed on your machine and drag the copy of SFXSetup that you find there over the copy that you have already installed on your own hard disc. This will update the sprites inside it to match your system.

     
    Icon
    RISC OS 4
    Icon
    RISC OS Select
    Icon
    RISC OS 5

    Finally, on all systems:

    Note: users of RISC OS 4 and RISC OS 5 systems may also use SpecialFX Setup as a normal application by double-clicking it to launch it; it doesn't have to be installed into Configure.


    Using SpecialFX Setup

    When launched, SpecialFX Setup presents a moderately complex-looking composite window with a scrolling pane.

    The SpecialFX Setup window   SpecialFX Setup

    The behaviour of the application is straightforward, and detailed interactive help is provided, but there are a few subtleties which are worth mentioning here. The three columns of switches in the scrolling pane correspond to the three basic features provided by SpecialFX, governing, from left to right, the Vector anti-aliasing (G flag), Background blending (B flag) and Printing fix (L flag) settings. (Use of the flags with the *SpecialFX command is described in the last section of this article.)

    The first entry in the scrolling window, (Default settings), will always be present and governs the normal behaviour of the SpecialFX module. This behaviour is applied to all applications unless overridden by one of the specific named application settings, listed below the dividing line in the scrolling window. Various preset entries are provided, but you can edit and delete them and add new overrides of your own.

    To add a new entry to the scrolling window, click the Add icon to pop up a menu. From this you can either choose the name of a running application or type in a task name yourself. New entries will inherit the current default settings you've chosen in the window; the only exception to this is if you delete and then reinstate an application entry: when restored, it will remember the settings it had previously.

    The entries in the scrolling pane can be selected by clicking on the application names, and you can highlight several at once by clicking with Adjust. (The Select all and Select none buttons may also be used to alter highlighting quickly.) The Delete button becomes available if at least one entry is highlighted (excluding the default settings, which can't be deleted!).

    The Set button has some slightly non-obvious behaviour which is worth explaining here: its action depends on whether or not any entries are highlighted in the scrolling pane. Whilst clicking Set will always cause settings to be enforced immediately, the subtlety is as follows:

    This behaviour is intended to make it easy to experiment quickly with the behaviour of individual applications. However, the Save button will always enforce and save all entries in the window, regardless of whether or not they're highlighted.

    The Reset button also has a dual function. Clicking it with Select will reset all current settings in the window to their saved states on disc. Clicking with Adjust will reload the 'factory default' settings (i.e. the basic recommended set of overrides).

    However, there is a further subtle but important consideration when resetting the contents of the SpecialFX Setup window. When the application is first launched, it performs two actions:

    1. It reads the SpecialFX settings saved on disc;
    2. It reads the settings which are currently in force in memory, and overrides the ones saved on disc if any have been added or changed in the current session.

    Use of the Reset button involves only the choices files saved on disc; memory overrides will not be taken into account when this button is used. If you want to include them (in other words, to make SpecialFX Setup behave in exactly the same way as it would when first starting up), choose the Refresh option from SpecialFX Setup's main menu.

    The main menu has another couple of useful options. The Show status menu contains two further options, Current task settings and Wimp filters installed, which issue *SpecialFXTasks and *SpecialFXFilters commands, respectively, and display their output in task windows. Finally, the Help option loads SpecialFX's help file into the default text editor.

    The last item to mention is the Always load SpecialFX switch. This switch is not considered part of the SpecialFX settings; it takes action instantly, and installs or removes a small Obey file in the current user's Boot.Tasks directory to determine whether or not the SpecialFX module is loaded during start-up. It is recommended that the option should normally be left turned on.

    A caution about using SpecialFX

    SpecialFX is a patch which makes the operating system do things that application authors cannot reasonably be expected to have anticipated. By using it, you accept that what it does constitutes a 'hack', and that it may not always produce the expected results.

    In other words, you use SpecialFX at your own risk. In reality it doesn't do anything remotely dangerous which could 'harm' your system, and is entirely safe; using it won't cause your hard disc to wipe itself or your monitor to blow up. Nevertheless, by its very nature, it makes applications do things that they weren't designed to do, and in a small number of cases that can cause problems.

    Such problems should all be minor in nature, like the blotchy text-entry in Draw. Another example of background blending going wrong is with WordWorks from Computer Concepts; enforcing background blending with this application can sometimes cause the text in its window to be printed in a funny colour, or vanish completely (because it's appearing in white on a white background).

    That's about the worst problem that can occur with background blending. The vector anti-aliasing feature can also cause other minor problems. It may also very occasionally cause text to vanish, or in a handful of programs it could cause dragging operations to leave a trail of pixels on the screen. These are only minor irritations, but they're clearly not desirable.

    Therefore, SpecialFX has been written in such a way that its features can be turned on and off individually and automatically for particular applications. As distributed here, SpecialFX has already been set up with a number of configuration choices to disable its features for applications that are known to have problems with them (such as the WordWorks example given above), and for applications where they're known to be unnecessary (for example, Ovation Pro already performs its own blending).

    So, in order to be able to make best use of SpecialFX, you need to be aware that problems can occur with it in a small number of cases, and what those problems are likely to be. If text appears blotchy or in a funny colour, suspect SpecialFX's background blending feature. If you see nothing where you would expect to see a vector object, or see trails of pixels during a drag, suspect SpecialFX's GDraw anti-aliasing. It should be stressed that such problems are rare, and all the known cases have already been catered for in the copy of SpecialFX distributed here. But if you should come across other examples, they can be overcome by turning the offending SpecialFX feature off for the application in question.


    Command-line operation

    Most users will prefer to use the SpecialFX Setup application to tinker with SpecialFX's settings. However, the features can also be controlled by issuing *commands directly to the module, as described below.

    SpecialFX commands

    Once SpecialFX is loaded on your system, it provides a number of *commands, the most important of which is SpecialFX. Issuing this command, followed by a selection of letters, will alter the current default settings used by the software.

    Normally, SpecialFX defaults to having vector anti-aliasing and background blending turned on for all applications. The command to set this default is:

    where B means 'turn on Blending' and G means 'turn on GDraw anti-aliasing'. To turn off either of these commands, a tilde character (~) should precede the appropriate flag-letter. So this command: would turn off both features (leaving SpecialFX doing nothing by default).

    A third option, L (and ~L) is available to turn the Low-memory printing fix on and off.

    To summarise the options, the following three flags are available to the *SpecialFX command:

    and preceding any flag-letter with ~ turns the feature off.

    You can specify any or all of the three flags in a single *SpecialFX command.

    Now, issuing the above command will alter the default behaviour of SpecialFX with all applications, but because of problems that may occur with individual programs, as described above, it's necessary to be able to override the default behaviour for particular applications. In order to do this, it's possible to add a 'task name' to the end of a *SpecialFX command to make the command apply to that task only. So, for example:

    would turn off the background blending feature in the Draw application alone, but would not affect its use within other applications. Also, because the G and L flags have not been specified in the above command, their current settings in relation to Draw would not be affected.

    Because SpecialFX defaults to having both vector anti-aliasing and background blending enabled in all applications, it's necessary to disable them in 'problem' applications in this way. However, it would be perfectly feasible to take the reverse approach and disable these features by default for all applications (i.e. the normal operation of RISC OS would not be affected at all). Then, the options could be turned on for individual applications which are known to benefit from them.

    How do you know what name to use to apply settings to a particular application? The answer is that you must look the name up in the Task Manager's Tasks display window, obtained by clicking on the logo icon at the far right of the icon bar (be it an Acorn, a RISC OS 4 cube, a RISC OS cogwheel, a blue jellybean or something else!). In some cases the name is obvious (Draw is just "Draw", for example), but other applications have more complex names. Vantage, for example, is "Cerilica Vantage". In cases like this, where the name consists of two or more words separated by spaces, it's particularly important that quotation marks are used to surround the name in the *SpecialFX command. (For single-word names, the quotes are optional.)

    *SpecialFX commands can be entered directly at any time, either from the command line (press <F12> to get to it, and <Return> alone to return to the desktop from it) or from a task window (press <Ctrl-F12> to open one). Commands can, of course, be included in Obey files, and the Choices file saved by SpecialFX Setup is in fact just an Obey file containing a set of *SpecialFX commands which may be edited by the user.

    Other SpecialFX commands

    Aside from the main command just discussed, SpecialFX provides a few other useful support commands: will list all the application-specific overrides that SpecialFX is currently observing. It displays the default settings and then the value of each of the three flags for every named application that does not follow those defaults. will list any applications that are currently being filtered by SpecialFX; this will be a subset of the applications listed by the *SpecialFXTasks command. In other words, *SpecialFXFilters will list the applications which (a) appear in the list of overrides and (b) are running at present. Programs will only appear here if their SpecialFX settings are different from the general SpecialFX defaults; just because applications are not listed does not mean that they are not benefitting from SpecialFX's features. allows an override to be removed, and requires a task name to be supplied as a parameter. It is effectively the opposite of the SpecialFX command. So, for example, if you have overridden the default SpecialFX behaviour in Draw by issuing a command such as: then entering: would restore the default SpecialFX behaviour in Draw.

    And that's all there is to it! Further information is provided in the SpecialFX application's Help file, which may also be viewed by choosing the Help option of SpecialFX Setup's main menu.