Hi Larry, this definitely a step into the right direction. :-)
Using the event/display thread to serialize the renderers in the non-interactive mode is a good idea. Your code looks fine but I will think about the consequences (blocking GUI, etc.). Of course I will test it, too. ;-) Regards, Sascha Larry Becker schrieb: > The purpose of this thread is to document a problem with RenderManager > and to propose solutions. > > The good news: > > RenderManager is optimized for the most responsive interactive GUI > experience. It uses multiple threads, image caching, and timed > refresh operations to ensure that the user's perception is that they > never have to wait. IMO JUMP is unrivaled in this respect. > > The bad news: > > The original JUMP design did not including printing support. Saving a > screen image was the only option. Now we have many options supporting > printing, SVG, PDF, and image export. This is great, but all of them > have to work around RenderManager issues to ensure proper results. > Sometimes a long user-specified delay while WMS or server layers > finish rendering is necessary. This looks unprofessional and is > ultimately unreliable. > ---------------------------------------- > > Here is the preferred solution as I see it (call it the "Interactive > Mode Switch" solution): > > Make a modification to the RenderManager class to include a new > property called interactiveMode with associated getters and setters. > The interactiveMode property defaults to true. Printing code and > other routines that need batch oriented rendering will need to bracket > their rendering code with calls to setInteractiveMode(false) and > setInteractiveMode(true). In between the calls, rendering operations > are guaranteed to be done on the same thread and block until they > complete. > > How this is accomplished: > > Again, making modifications only to RenderManager, make the following > changes: > > 1. In createRenderer() if interactiveMode is true, it should > setMaxFeatures for the Renderer to the maximum integer. This will > disable image caching, causing renderers to paint directly to the > graphics context. > > 2. in render() if interactiveMode is true, it should run the Renderer > on the event thread instead of using the ThreadQueue. Also it should > not start a repaint timer. > > These changes effectively eliminate any unsynchronized rendering from > RenderManager. See the attached copy of RenderManager for details. > ----------------------------------------------------- > > For interactive plug-ins like ZoomToSelectedItems that also need to > control rendering order so that the flash operation is synchronized. > For ZoomToSelectedItems, in addition to bracketing rendering code with > sets, it is also necessary to use invokeLater() on the flash() method > so that it will be executed in order with the panel component update. > > I have tested this solution on both OpenJump and SkyJUMP and it seems > to solve the ZoomToSelectedItems flash issue (see attached file for > details). I tested on my usual P4 2.4GHz and also on a 1.5GHz Athlon. > More testing is needed to determine how well it meets the needs of > printing plug-ins. > > This solution has the advantage that JUMP continues to behave exactly > as before until you set the interactiveMode to false. No refactoring > of interactive rendering code is necessary. > > regards, > Larry Becker > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > > > ------------------------------------------------------------------------ > > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel