Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Minor
-
Resolution: Won't Fix
-
Affects Version/s: 2.1.M0
-
Fix Version/s: None
-
Component/s: unsupported
-
Labels:None
Description
The magnifier shows geometries decimated for a lesser scale at a bigger scale without recomputing the decimation. That is, the magnifier does not shows the true countries boundaries, but the decimated one.
This is caused by the AffineTransform modified by the magnifier. MapPane manage 2 AffineTransforms:
- A device-dependent one ('deviceToText'), usually the identity
transform for widgets, something more complicated for printers.
- The zoom transform ('textToMap').
Current magnifier's implementation updates temporarily the device-dependent transform. In other words, it work as if the output device had a different pixel size. This is probably not a good approach.
A more correct approach would probably be to update the zoom transform. Unfortunately, updating this transform have a cost: it may invalidate the cache in many RenderedLayers. I.e. rendering a widget with a magnifier will requires frequent switches between the normal zoom and the magnified zoom. Updating the device-dependent transform was an unsatisfying trick for avoiding this costly context switching.
The right approach is probably to use two Renderers: one for the normal zoom, and one for the magnifier. Each renderer will have its own cache at different zoom level. Of course, the underlying geometries will be shared. I think that this approach will not be very difficult to implement.