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

Reply via email to