174 |
* @see #setState(int) |
* @see #setState(int) |
175 |
*/ |
*/ |
176 |
public static final int SELECT_ONE_FROM_TOP = 104; |
public static final int SELECT_ONE_FROM_TOP = 104; |
177 |
// |
|
178 |
// /** |
/** |
179 |
// * While threads are working, we call {@link XMapPane#updateFinalImage()} |
* While threads are working, we call {@link XMapPane#updateFinalImage()} |
180 |
// * regularly and repaint(). This {@link Timer} is stopped when all renderers |
* regularly and repaint(). This {@link Timer} is stopped when all renderers |
181 |
// * have finished. |
* have finished. |
182 |
// */ |
*/ |
183 |
// final private Timer repainterTimer; |
final private Timer repainterTimer; |
184 |
// |
|
185 |
// /** |
/** |
186 |
// * While the {@link #bgExecuter} and {@link #localExecuter} are rendering, |
* While the {@link #bgExecuter} and {@link #localExecuter} are rendering, |
187 |
// * the {@link #repainterTimer} is regularly updating the {@link #finalImage} |
* the {@link #repainterTimer} is regularly updating the {@link #finalImage} |
188 |
// * with previews. |
* with previews. |
189 |
// */ |
*/ |
190 |
// public static final long REPEATING_REPAINT_DELAY = 500; |
public static final long REPEATING_REPAINT_DELAY = 500; |
191 |
// |
|
192 |
// /** |
/** |
193 |
// * The initial delay in milliseconds until the {@link #finalImage} is updated the first time. |
* The initial delay in milliseconds until the {@link #finalImage} is updated the first time. |
194 |
// */ |
*/ |
195 |
// public static final long INITIAL_REPAINT_DELAY = 333; |
public static final long INITIAL_REPAINT_DELAY = 1000; |
196 |
|
|
197 |
protected RenderingExecutor bgExecuter; |
protected RenderingExecutor bgExecuter; |
198 |
|
|
415 |
|
|
416 |
}); |
}); |
417 |
|
|
418 |
// repainterTimer = new Timer((int) REPEATING_REPAINT_DELAY, |
repainterTimer = new Timer((int) REPEATING_REPAINT_DELAY, |
419 |
// new ActionListener() { |
new ActionListener() { |
|
// |
|
|
// @Override |
|
|
// public void actionPerformed(ActionEvent e) { |
|
|
// updateFinalImage(); |
|
|
// XMapPane.this.repaint(); |
|
|
// } |
|
|
// }); |
|
|
// repainterTimer.setInitialDelay(300); |
|
|
// repainterTimer.setRepeats(true); |
|
420 |
|
|
421 |
startRenderThreadsTimer = new Timer(200, new ActionListener() { |
@Override |
422 |
|
public void actionPerformed(ActionEvent e) { |
423 |
|
updateFinalImage(); |
424 |
|
XMapPane.this.repaint(); |
425 |
|
} |
426 |
|
}); |
427 |
|
repainterTimer.setInitialDelay(300); |
428 |
|
repainterTimer.setRepeats(true); |
429 |
|
|
430 |
|
startRenderThreadsTimer = new Timer(100, new ActionListener() { |
431 |
|
|
432 |
@Override |
@Override |
433 |
public void actionPerformed(ActionEvent e) { |
public void actionPerformed(ActionEvent e) { |
434 |
synchronized (requestStartRendering) { |
synchronized (requestStartRendering) { |
435 |
if (requestStartRendering && isValid()) |
if (requestStartRendering && isWellDefined()) { |
436 |
startRendering(); |
|
437 |
requestStartRendering = false; |
if (localExecuter.isRunning()){ |
438 |
|
localExecuter.cancelTask(); |
439 |
|
} else { |
440 |
|
requestStartRendering = false; |
441 |
|
startRendering(); |
442 |
|
} |
443 |
|
} |
444 |
} |
} |
445 |
} |
} |
446 |
}); |
}); |
626 |
setCursor(WAIT_CURSOR); |
setCursor(WAIT_CURSOR); |
627 |
return; |
return; |
628 |
} else { |
} else { |
629 |
// // Allow one last rendering |
// Allow one last rendering |
630 |
// if (repainterTimer.isRunning()) { |
if (repainterTimer.isRunning()) { |
631 |
// repainterTimer.stop(); |
repainterTimer.stop(); |
632 |
// updateFinalImage(); |
updateFinalImage(); |
633 |
// repaint(); |
repaint(); |
634 |
// } |
} |
635 |
} |
} |
636 |
|
|
637 |
// wenn manueller Cursor gesetzt ist, dann diesen verwenden (unabhaengig |
// wenn manueller Cursor gesetzt ist, dann diesen verwenden (unabhaengig |
1115 |
|
|
1116 |
public static final int NONE = -123; |
public static final int NONE = -123; |
1117 |
|
|
1118 |
private RenderingExecutor localExecuter; |
private RenderingExecutor localExecuter = new RenderingExecutor(this, 150l); |
1119 |
|
|
1120 |
private BufferedImage finalImage; |
private BufferedImage finalImage; |
1121 |
|
|
1202 |
if (localExecuter != null) |
if (localExecuter != null) |
1203 |
localExecuter.cancelTask(); |
localExecuter.cancelTask(); |
1204 |
requestStartRendering = true; |
requestStartRendering = true; |
1205 |
|
|
1206 |
} |
} |
1207 |
|
|
1208 |
/** |
/** |
1353 |
finalG.setBackground(getMapBackgroundColor()); |
finalG.setBackground(getMapBackgroundColor()); |
1354 |
|
|
1355 |
// Render the two map images first, into the preFinalImage |
// Render the two map images first, into the preFinalImage |
1356 |
|
if (bgExecuter != null) |
1357 |
{ |
{ |
1358 |
final Graphics2D preFinalG = (Graphics2D) getPreFinalImage() |
final Graphics2D preFinalG = (Graphics2D) getPreFinalImage() |
1359 |
.getGraphics(); |
.getGraphics(); |
1365 |
// // Draw the local layers image |
// // Draw the local layers image |
1366 |
preFinalG.drawImage(getLocalImage(), 0, 0, null); |
preFinalG.drawImage(getLocalImage(), 0, 0, null); |
1367 |
preFinalG.dispose(); |
preFinalG.dispose(); |
1368 |
|
} else { |
1369 |
|
preFinalImage = getLocalImage(); |
1370 |
} |
} |
1371 |
|
|
1372 |
finalG.drawImage(getPreFinalImage(), imageOrigin.x, imageOrigin.y, |
finalG.drawImage(getPreFinalImage(), imageOrigin.x, imageOrigin.y, |
1426 |
if (!isWellDefined()) |
if (!isWellDefined()) |
1427 |
return; |
return; |
1428 |
|
|
1429 |
if (bgExecuter != null) |
if (bgExecuter != null){ |
1430 |
// Stop all renderers |
// Stop all renderers |
1431 |
bgExecuter.cancelTask(); |
bgExecuter.cancelTask(); |
1432 |
|
} |
1433 |
|
|
1434 |
if (localExecuter != null) |
if (localExecuter != null){ |
1435 |
localExecuter.cancelTask(); |
localExecuter.cancelTask(); |
1436 |
|
} |
1437 |
|
|
1438 |
Rectangle curPaintArea = getVisibleRect(); |
Rectangle curPaintArea = getVisibleRect(); |
1439 |
|
|
1448 |
LOGGER.debug("starting bg renderer:"); |
LOGGER.debug("starting bg renderer:"); |
1449 |
// /* System.out.println("rendering"); */ |
// /* System.out.println("rendering"); */ |
1450 |
final GTRenderer createGTRenderer = GTUtil.createGTRenderer( |
final GTRenderer createGTRenderer = GTUtil.createGTRenderer( |
1451 |
localContext, getRendererHints()); |
bgContext, getRendererHints()); |
1452 |
createGTRenderer.setJava2DHints(getJava2dHints()); |
createGTRenderer.setJava2DHints(getJava2dHints()); |
1453 |
bgExecuter.submit(getBgContext().getAreaOfInterest(), curPaintArea, |
bgExecuter.submit(getBgContext().getAreaOfInterest(), curPaintArea, |
1454 |
(Graphics2D) getBgImage().getGraphics(), createGTRenderer); |
(Graphics2D) getBgImage().getGraphics(), createGTRenderer); |
1455 |
} |
} |
1456 |
|
|
1457 |
if (getContext() != null) { |
if (getContext() != null) { |
1458 |
localExecuter = new RenderingExecutor(this, 150l); |
// localExecuter = new RenderingExecutor(this, 150l); |
1459 |
LOGGER.debug("starting local renderer:"); |
LOGGER.debug("starting local renderer:"); |
1460 |
final GTRenderer createGTRenderer = GTUtil.createGTRenderer( |
final GTRenderer createGTRenderer = GTUtil.createGTRenderer( |
1461 |
localContext, getRendererHints()); |
localContext, getRendererHints()); |
1534 |
* @see MapPaneListener#onRenderingStopped(org.geotools.swing.event.MapPaneEvent) |
* @see MapPaneListener#onRenderingStopped(org.geotools.swing.event.MapPaneEvent) |
1535 |
*/ |
*/ |
1536 |
public void onRenderingCompleted() { |
public void onRenderingCompleted() { |
1537 |
|
repainterTimer.stop(); |
1538 |
updateFinalImage(); |
updateFinalImage(); |
1539 |
repaint(); |
repaint(); |
1540 |
} |
} |
1547 |
* @see MapPaneListener#onRenderingStopped(org.geotools.swing.event.MapPaneEvent) |
* @see MapPaneListener#onRenderingStopped(org.geotools.swing.event.MapPaneEvent) |
1548 |
*/ |
*/ |
1549 |
public void onRenderingCancelled() { |
public void onRenderingCancelled() { |
1550 |
|
repainterTimer.stop(); |
1551 |
LOGGER.debug("Rendering cancelled"); |
LOGGER.debug("Rendering cancelled"); |
1552 |
} |
} |
1553 |
|
|
1562 |
* @see MapPaneListener#onRenderingStopped(org.geotools.swing.event.MapPaneEvent) |
* @see MapPaneListener#onRenderingStopped(org.geotools.swing.event.MapPaneEvent) |
1563 |
*/ |
*/ |
1564 |
public void onRenderingFailed(Exception renderingError) { |
public void onRenderingFailed(Exception renderingError) { |
1565 |
|
repainterTimer.stop(); |
1566 |
LOGGER.warn("Rendering failed", renderingError); |
LOGGER.warn("Rendering failed", renderingError); |
1567 |
updateFinalImage(); |
updateFinalImage(); |
1568 |
repaint(); |
repaint(); |
1569 |
|
|
1570 |
} |
} |
1571 |
|
|
|
/** |
|
|
* Called when a rendering request has been rejected. This will be common, |
|
|
* such as when the user pauses during drag-resizing fo the map pane. The |
|
|
* base implementation does nothing. It is provided for sub-classes to |
|
|
* override if required. |
|
|
*/ |
|
|
public void onRenderingRejected() { |
|
|
LOGGER.warn("Rendering rejected"); |
|
|
repaint(); |
|
|
} |
|
1572 |
|
|
1573 |
@Override |
@Override |
1574 |
public void propertyChange(final PropertyChangeEvent evt) { |
public void propertyChange(final PropertyChangeEvent evt) { |
1935 |
if (isDisposed()) |
if (isDisposed()) |
1936 |
return; |
return; |
1937 |
|
|
1938 |
|
|
1939 |
setPainting(false); |
setPainting(false); |
1940 |
|
|
1941 |
disposed = true; |
disposed = true; |
1942 |
|
|
1943 |
if (bgExecuter != null) { |
if (bgExecuter != null) { |
1944 |
bgExecuter.cancelTask(); |
bgExecuter.cancelTask(); |
1945 |
|
bgExecuter.dispose(); |
1946 |
} |
} |
1947 |
|
|
1948 |
if (localExecuter != null) { |
if (localExecuter != null) { |
1949 |
localExecuter.cancelTask(); |
localExecuter.cancelTask(); |
1950 |
|
localExecuter.dispose(); |
1951 |
} |
} |
1952 |
|
|
1953 |
startRenderThreadsTimer.stop(); |
startRenderThreadsTimer.stop(); |