01: /*
02: * GeoTools - OpenSource mapping toolkit
03: * http://geotools.org
04: * (C) 2003-2006, Geotools Project Managment Committee (PMC)
05: * (C) 2001, Institut de Recherche pour le Développement
06: * (C) 1998, Pêches et Océans Canada
07: *
08: * This library is free software; you can redistribute it and/or
09: * modify it under the terms of the GNU Lesser General Public
10: * License as published by the Free Software Foundation; either
11: * version 2.1 of the License, or (at your option) any later version.
12: *
13: * This library is distributed in the hope that it will be useful,
14: * but WITHOUT ANY WARRANTY; without even the implied warranty of
15: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16: * Lesser General Public License for more details.
17: */
18: package org.geotools.gui.swing;
19:
20: // J2SE dependencies
21: import java.awt.geom.Point2D;
22:
23: /**
24: * An interface for viewers that may be deformed by some artefacts. For example the
25: * {@link org.geotools.gui.swing.ZoomPane} viewer is capable to show a {@linkplain
26: * org.geotools.gui.swing.ZoomPane#setMagnifierVisible magnifying glass} on top of
27: * the usual content. The presence of a magnifying glass deforms the viewer in that
28: * the apparent position of pixels within the glass are moved. The interface allows
29: * for corrections of apparent pixel position in order to get the position we would
30: * have if no deformations existed.
31: *
32: * @since 2.2
33: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/extension/widgets-swing/src/main/java/org/geotools/gui/swing/DeformableViewer.java $
34: * @version $Id: DeformableViewer.java 20883 2006-08-07 13:48:09Z jgarnett $
35: * @author Martin Desruisseaux
36: */
37: public interface DeformableViewer {
38: /**
39: * Corrects a pixel's coordinates for removing the effect of the any kind of deformations.
40: * An example of deformation is the zoom pane's {@linkplain
41: * org.geotools.gui.swing.ZoomPane#setMagnifierVisible magnifying glass}. Without this
42: * method, transformations from pixels to geographic coordinates would not give exact
43: * results for pixels inside the magnifier since the magnifier moves the pixel's apparent
44: * position. Invoking this method will remove any deformation effects using the following
45: * steps:
46: * <ul>
47: * <li>If the pixel's coordinate <code>point</code> is outside deformed areas (for example
48: * outside the magnifier), then this method do nothing.</li>
49: * <li>Otherwise, if the pixel's coordinate is inside some area that has been deformed,
50: * then this method update <code>point</code> in such a way that it contains the
51: * position that the exact same pixel would have in the absence of deformations.</li>
52: * </ul>
53: *
54: * @param point In input, a pixel's coordinate as it appears on the screen.
55: * In output, the coordinate that the same pixel would have if
56: * the deformation wasn't presents.
57: */
58: void correctApparentPixelPosition(Point2D point);
59: }
|