Index: src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java =================================================================== --- src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java (revision 13657) +++ src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java (working copy) @@ -61,6 +61,9 @@ /** Preference: minimum space (displayed way length) to display segment numbers */ protected int segmentNumberSpace; + /** Performs slow operations by default. Can be disabled when fast partial rendering is required */ + protected boolean doSlowOperations; + /** *
Creates an abstract paint visitor
* @@ -240,4 +243,13 @@ } } } + + /** + * Sets whether slow operations such as text rendering must be performed (true by default). + * @param enable whether slow operations such as text rendering must be performed + * @since xxx + */ + public final void enableSlowOperations(boolean enable) { + doSlowOperations = enable; + } } Index: src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java =================================================================== --- src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java (revision 13657) +++ src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java (working copy) @@ -557,7 +557,7 @@ * @param bs The text and it's alignment. */ public void drawBoxText(Node n, BoxTextElement bs) { - if (!isShowNames() || bs == null) + if (!isShowNames() || bs == null || !doSlowOperations) return; MapViewPoint p = mapState.getPointFor(n); @@ -1090,7 +1090,7 @@ * @since 11722 */ public void drawText(OsmPrimitive osm, TextLabel text, PositionForAreaStrategy labelPositionStrategy) { - if (!isShowNames()) { + if (!isShowNames() || !doSlowOperations) { return; } String name = text.getString(osm); Index: src/org/openstreetmap/josm/gui/MapMover.java =================================================================== --- src/org/openstreetmap/josm/gui/MapMover.java (revision 13657) +++ src/org/openstreetmap/josm/gui/MapMover.java (working copy) @@ -18,12 +18,13 @@ import org.openstreetmap.gui.jmapviewer.JMapViewer; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.mapmode.SelectAction; -import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent; -import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener; import org.openstreetmap.josm.data.coor.EastNorth; import org.openstreetmap.josm.data.preferences.BooleanProperty; import org.openstreetmap.josm.gui.MapViewState.MapViewPoint; +import org.openstreetmap.josm.gui.layer.Layer; import org.openstreetmap.josm.spi.preferences.Config; +import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent; +import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener; import org.openstreetmap.josm.tools.Destroyable; import org.openstreetmap.josm.tools.Pair; import org.openstreetmap.josm.tools.Shortcut; @@ -157,7 +158,12 @@ registeredShortcuts.add(new Pair<>(action, shortcut)); } - private boolean movementInProgress() { + /** + * Determines if a map move is in progress. + * @return {@code true} if a map move is in progress + * @since xxx + */ + public boolean movementInProgress() { return mousePosMoveStart != null; } @@ -237,6 +243,7 @@ } nc.resetCursor(this); mousePosMoveStart = null; + MainApplication.getLayerManager().getLayers().forEach(Layer::invalidate); } /** Index: src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java =================================================================== --- src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java (revision 13657) +++ src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java (working copy) @@ -63,24 +63,24 @@ import org.openstreetmap.josm.data.osm.DataIntegrityProblemException; import org.openstreetmap.josm.data.osm.DataSelectionListener; import org.openstreetmap.josm.data.osm.DataSet; -import org.openstreetmap.josm.data.osm.DownloadPolicy; -import org.openstreetmap.josm.data.osm.UploadPolicy; import org.openstreetmap.josm.data.osm.DataSetMerger; import org.openstreetmap.josm.data.osm.DatasetConsistencyTest; +import org.openstreetmap.josm.data.osm.DownloadPolicy; import org.openstreetmap.josm.data.osm.HighlightUpdateListener; import org.openstreetmap.josm.data.osm.IPrimitive; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.OsmPrimitiveComparator; import org.openstreetmap.josm.data.osm.Relation; +import org.openstreetmap.josm.data.osm.UploadPolicy; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent; import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter; import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter.Listener; import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor; import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor; +import org.openstreetmap.josm.data.osm.visitor.paint.AbstractMapRenderer; import org.openstreetmap.josm.data.osm.visitor.paint.MapRendererFactory; -import org.openstreetmap.josm.data.osm.visitor.paint.Rendering; import org.openstreetmap.josm.data.osm.visitor.paint.relations.MultipolygonCache; import org.openstreetmap.josm.data.preferences.IntegerProperty; import org.openstreetmap.josm.data.preferences.NamedColorProperty; @@ -490,7 +490,8 @@ g.fill(a); } - Rendering painter = MapRendererFactory.getInstance().createActiveRenderer(g, mv, inactive); + AbstractMapRenderer painter = MapRendererFactory.getInstance().createActiveRenderer(g, mv, inactive); + painter.enableSlowOperations(mv.getMapMover() == null || !mv.getMapMover().movementInProgress()); painter.render(data, virtual, box); MainApplication.getMap().conflictDialog.paintConflicts(g, mv); }