Hi All,
I have cooked workaround for this problem, it seems to be working in
geotools 2.6.3. For the impatient ones, complete CorrectedPanTool is
below in message body.
The problem seems to be the following code in the JMapPane
<eclipse-javadoc:%E2%98%82=org.geotools/lib%5C/gt-swing-2.6.3.jar%3Corg.geotools.swing%28JMapPane.class%E2%98%83JMapPane>.paintComponent(Graphics
<eclipse-javadoc:%E2%98%82=org.geotools/lib%5C/gt-swing-2.6.3.jar%3Corg.geotools.swing%28JMapPane.class%E2%98%83JMapPane%7EpaintComponent%7ELjava.awt.Graphics;%E2%98%82Graphics>
g):
if (redrawBaseImage) {
if (baseImageMoved) {
afterImageMove(mapAOI, curPaintArea);
baseImageMoved = false;
clearLabelCache = true;
}
if (renderingExecutor.submit(mapAOI, curPaintArea,
baseImageGraphics)) {
MapPaneEvent ev = new MapPaneEvent(this,
MapPaneEvent.Type.RENDERING_STARTED);
publishEvent(ev);
} else {
onRenderingRejected();
}
} else {
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(baseImage, imageOrigin.x, imageOrigin.y,
null);
}
Specifically, if one releases mouse during the drag, baseImageMoved is
remains set to false, so offscreen buffer is rendered, instead of full
map repaint.
So, my workaround is just sets redrawBaseImage to true in the public
void onMouseReleased(MapMouseEvent ev) of my CorrectedPanTool.
Maybe someone will come with more graceful solution for this problem...
Here is the code for CorrectedPanTool, that always redraw JMapPane.
Please note, that it differs from the PanTool only in the
onMouseReleased method.
import java.awt.Cursor;
import java.awt.Point;
import java.awt.Toolkit;
import java.lang.reflect.Field;
import java.util.ResourceBundle;
import javax.swing.ImageIcon;
import org.geotools.swing.JMapPane;
import org.geotools.swing.event.MapMouseEvent;
import org.geotools.swing.tool.CursorTool;
import org.geotools.swing.tool.PanTool;
public class CorrectedPanTool extends CursorTool {
private static final ResourceBundle stringRes = ResourceBundle
.getBundle("org/geotools/swing/Text");
/** Tool name */
public static final String TOOL_NAME =
stringRes.getString("tool_name_pan");
/** Tool tip text */
public static final String TOOL_TIP =
stringRes.getString("tool_tip_pan");
/** Cursor */
public static final String CURSOR_IMAGE =
"/org/geotools/swing/icons/mActionPan.png";
/** Cursor hotspot coordinates */
public static final Point CURSOR_HOTSPOT = new Point(15, 15);
/** Icon for the control */
public static final String ICON_IMAGE =
"/org/geotools/swing/icons/mActionPan.png";
private Cursor cursor;
private Point panePos;
boolean panning;
public CorrectedPanTool(JMapPane mapPane) {
setMapPane(mapPane);
Toolkit tk = Toolkit.getDefaultToolkit();
ImageIcon imgIcon = new
ImageIcon(PanTool.class.getResource(CURSOR_IMAGE));
cursor = tk.createCustomCursor(imgIcon.getImage(), CURSOR_HOTSPOT,
TOOL_NAME);
panning = false;
}
/**
* Respond to a mouse button press event from the map mapPane. This
may signal
* the start of a mouse drag. Records the event's window position.
*
* @param ev
* the mouse event
*/
@Override
public void onMousePressed(MapMouseEvent ev) {
panePos = ev.getPoint();
panning = true;
}
/**
* Respond to a mouse dragged event. Calls
* {...@link org.geotools.swing.JMapPane#moveImage()}
*
* @param ev
* the mouse event
*/
@Override
public void onMouseDragged(MapMouseEvent ev) {
if (panning) {
Point pos = ev.getPoint();
if (!pos.equals(panePos)) {
getMapPane().moveImage(pos.x - panePos.x, pos.y - panePos.y);
panePos = pos;
}
}
}
/**
* If this button release is the end of a mouse dragged event,
requests the
* map mapPane to repaint the display
*
* @param ev
* the mouse event
*/
@Override
public void onMouseReleased(MapMouseEvent ev) {
panning = false;
Field[] fs =
getMapPane().getClass().getSuperclass().getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
if (fs[i].getName().equals("redrawBaseImage")) {
try {
fs[i].setAccessible(true);
fs[i].setBoolean(getMapPane(), Boolean.TRUE);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
break;
}
}
getMapPane().repaint();
}
/**
* Get the mouse cursor for this tool
*/
@Override
public Cursor getCursor() {
return cursor;
}
/**
* Returns false to indicate that this tool does not draw a box on
the map
* display when the mouse is being dragged
*/
@Override
public boolean drawDragBox() {
return false;
}
}
Sincerely,
Sergey
On 8/26/2010 8:09 PM, Fred Lehodey wrote:
Hi Sergey,
Just to complete your question:
this happens when you release the mouse button during the drag.....
If you stop the drag before, there is no problem.....
Is what I noticed...
Fred.
On Thu, Aug 26, 2010 at 1:34 PM, LSA <[email protected]
<mailto:[email protected]>> wrote:
Hi!
I tried Quickstart demo (with geotools 2.6.5), and it is possible to
notice, that sometimes map is repainted after dragging with Pan tool,
while sometimes - it is not.
I have the following issue in the geotools 2.6.3, maybe some could
give
me an idea how to fix it?
Thanks,
Sergey
------------------------------------------------------------------------------
Sell apps to millions through the Intel(R) Atom(Tm) Developer Program
Be part of this innovative community and reach millions of netbook
users
worldwide. Take advantage of special opportunities to increase
revenue and
speed time-to-market. Join now, and jumpstart your future.
http://p.sf.net/sfu/intel-atom-d2d
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
------------------------------------------------------------------------------
Sell apps to millions through the Intel(R) Atom(Tm) Developer Program
Be part of this innovative community and reach millions of netbook users
worldwide. Take advantage of special opportunities to increase revenue and
speed time-to-market. Join now, and jumpstart your future.
http://p.sf.net/sfu/intel-atom-d2d
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3.
Spend less time writing and rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users