Rendering any component as an image using SnapshotRenderer
WebCream provides a universal renderer and updater that can be used to support any component. It works by taking a snapshot image and inserting it into the HTML page. If the component is enabled SnapshotRenderer will add a mouse listener to the image that will capture and emulate mouse clicks to the component. If mouse clicks are emulated, it is necessary to register SnapshotUpdater as well. While SnapshotRenderer will work for any component, it is recommended to use it as a last resort or for components that use custom drawing. Every time a page is rendered an image will be generated in the temporary directory so there is a certain performance overhead. By default SnapshotRenderer will be used for all unsupported components, but it can be turned off using html.snapshotRenderer.enable property.
The quality of the generated JPEG image is controlled by snapshotRenderer.quality property in the application properties file. Possible values are between 0.0 (the worst quality but smallest size) and 1.0 (the best quality but no compression). The default is 1.0. The example below sets a quality of 75% to all snapshots rendered in the application:
window.*.snapshotRenderer.quality=0.75
Example
Suppose a Network Management System uses a custom component com.acme.NetworkMap to display a
graphics map of nodes and connections between them. NetworkMap is derived from JPanel and overrides
paint() method to draw itself. When the application is run in WebCream the component will be rendered
blank because it has no children. To see the maps in HTML we are going to register a SnapshotRenderer
as a custom renderer in the application properties file for NetworkMap
as shown below
render.com.acme.NetworkMap=creamtec.webcream.rendering.html.SnapshotRenderer
Now, suppose that the user can click on a node to select it and see its properties. In order to have the same functionality in HTML we need to make sure that the table is enabled and that we have registered SnapshotUpdater to emulate the action
update.com.acme.NetworkMap=creamtec.webcream.gui.SnapshotUpdater