public void decrementRefCount() { int c = this.refCount.decrementAndGet(); if (c <= 0) { try { if (this.isDone()) { get().destroy(); } else { cancel(true); } } catch (Exception e) { // just cleaning up } } }
private List<List<List<ShapePaintContainer>>> createWayLists() { List<List<List<ShapePaintContainer>>> result = new ArrayList<>(LAYERS); int levels = this.renderTheme.getLevels(); for (byte i = LAYERS - 1; i >= 0; --i) { List<List<ShapePaintContainer>> innerWayList = new ArrayList<>(levels); for (int j = levels - 1; j >= 0; --j) { innerWayList.add(new ArrayList<ShapePaintContainer>(0)); } result.add(innerWayList); } return result; }
/** * Sets the scale stroke factor for the given zoom level. * * @param zoomLevel the zoom level for which the scale stroke factor should be set. */ private void setScaleStrokeWidth(byte zoomLevel) { int zoomLevelDiff = Math.max(zoomLevel - STROKE_MIN_ZOOM_LEVEL, 0); this.renderTheme.scaleStrokeWidth((float) Math.pow(STROKE_INCREASE, zoomLevelDiff), this.rendererJob.tile.zoomLevel); }
@Test public void validRenderThemeTest() throws XmlPullParserException, IOException { XmlRenderTheme xmlRenderTheme = new ExternalRenderTheme(new File(RESOURCE_FOLDER, "test-render-theme.xml")); RenderTheme renderTheme = RenderThemeHandler .getRenderTheme(GRAPHIC_FACTORY, new DisplayModel(), xmlRenderTheme); Assert.assertEquals(3, renderTheme.getLevels()); renderTheme.scaleStrokeWidth(12.34f, (byte) 12); renderTheme.scaleTextSize(56.78f, (byte) 12); // RenderCallback renderCallback = new DummyRenderCallback(); // List<Tag> closedWayTags = Arrays.asList(new Tag("amenity", "parking")); // List<Tag> linearWayTags = Arrays.asList(new Tag("highway", "primary"), new Tag("oneway", "yes")); // List<Tag> nodeTags = Arrays.asList(new Tag("place", "city"), new Tag("highway", "turning_circle")); for (byte zoomLevel = 0; zoomLevel < 25; ++zoomLevel) { // renderTheme.matchClosedWay(renderCallback, closedWayTags, zoomLevel, 256); // renderTheme.matchLinearWay(renderCallback, linearWayTags, zoomLevel); // renderTheme.matchNode(renderCallback, nodeTags, zoomLevel); } renderTheme.destroy(); } }
renderContext.renderTheme.matchHillShadings(this, renderContext); bitmap = this.graphicFactory.createTileBitmap(rendererJob.tile.tileSize, rendererJob.hasAlpha); bitmap.setTimestamp(rendererJob.mapDataStore.getDataTimestamp(rendererJob.tile)); renderContext.canvasRasterer.setCanvasBitmap(bitmap); if (!rendererJob.hasAlpha && rendererJob.displayModel.getBackgroundColor() != renderContext.renderTheme.getMapBackground()) { renderContext.canvasRasterer.fill(renderContext.renderTheme.getMapBackground()); if (!rendererJob.labelsOnly && renderContext.renderTheme.hasMapBackgroundOutside()) { renderContext.canvasRasterer.fillOutsideAreas(renderContext.renderTheme.getMapBackgroundOutside(), insideArea); } else { renderContext.canvasRasterer.fillOutsideAreas(Color.TRANSPARENT, insideArea);
public RenderContext(RendererJob rendererJob, CanvasRasterer canvasRasterer) throws InterruptedException, ExecutionException { this.rendererJob = rendererJob; this.labels = new LinkedList<>(); this.canvasRasterer = canvasRasterer; this.renderTheme = rendererJob.renderThemeFuture.get(); this.renderTheme.scaleTextSize(rendererJob.textScale, rendererJob.tile.zoomLevel); this.ways = createWayLists(); setScaleStrokeWidth(this.rendererJob.tile.zoomLevel); }
/** * @return a new {@code RenderTheme} instance. */ public RenderTheme build() { return new RenderTheme(this); }
/** * Draws a bitmap just with outside colour, used for bitmaps outside of map area. * * @param renderContext the RenderContext * @return bitmap drawn in single colour. */ private TileBitmap createBackgroundBitmap(RenderContext renderContext) { TileBitmap bitmap = this.graphicFactory.createTileBitmap(renderContext.rendererJob.tile.tileSize, renderContext.rendererJob.hasAlpha); renderContext.canvasRasterer.setCanvasBitmap(bitmap); if (!renderContext.rendererJob.hasAlpha) { renderContext.canvasRasterer.fill(renderContext.renderTheme.getMapBackgroundOutside()); } return bitmap; }
private void endElement() { qName = pullParser.getName(); this.elementStack.pop(); if (ELEMENT_NAME_RULE.equals(qName)) { this.ruleStack.pop(); if (this.ruleStack.empty()) { if (isVisible(this.currentRule)) { this.renderTheme.addRule(this.currentRule); } } else { this.currentRule = this.ruleStack.peek(); } } else if ("stylemenu".equals(qName)) { // when we are finished parsing the menu part of the file, we can get the // categories to render from the initiator. This allows the creating action // to select which of the menu options to choose if (null != this.xmlRenderTheme.getMenuCallback()) { // if there is no callback, there is no menu, so the categories will be null this.categories = this.xmlRenderTheme.getMenuCallback().getCategories(this.renderThemeStyleMenu); } return; } }
this.renderTheme.addHillShadings(hillshading);
renderContext.renderTheme.matchHillShadings(this, renderContext); bitmap = this.graphicFactory.createTileBitmap(rendererJob.tile.tileSize, rendererJob.hasAlpha); bitmap.setTimestamp(rendererJob.mapDataStore.getDataTimestamp(rendererJob.tile)); renderContext.canvasRasterer.setCanvasBitmap(bitmap); if (!rendererJob.hasAlpha && rendererJob.displayModel.getBackgroundColor() != renderContext.renderTheme.getMapBackground()) { renderContext.canvasRasterer.fill(renderContext.renderTheme.getMapBackground()); if (!rendererJob.labelsOnly && renderContext.renderTheme.hasMapBackgroundOutside()) { renderContext.canvasRasterer.fillOutsideAreas(renderContext.renderTheme.getMapBackgroundOutside(), insideArea); } else { renderContext.canvasRasterer.fillOutsideAreas(Color.TRANSPARENT, insideArea);
public RenderContext(RendererJob rendererJob, CanvasRasterer canvasRasterer) throws InterruptedException, ExecutionException { this.rendererJob = rendererJob; this.labels = new LinkedList<>(); this.canvasRasterer = canvasRasterer; this.renderTheme = rendererJob.renderThemeFuture.get(); this.renderTheme.scaleTextSize(rendererJob.textScale, rendererJob.tile.zoomLevel); this.ways = createWayLists(); setScaleStrokeWidth(this.rendererJob.tile.zoomLevel); }
/** * @return a new {@code RenderTheme} instance. */ public RenderTheme build() { return new RenderTheme(this); }
/** * Draws a bitmap just with outside colour, used for bitmaps outside of map area. * * @param renderContext the RenderContext * @return bitmap drawn in single colour. */ private TileBitmap createBackgroundBitmap(RenderContext renderContext) { TileBitmap bitmap = this.graphicFactory.createTileBitmap(renderContext.rendererJob.tile.tileSize, renderContext.rendererJob.hasAlpha); renderContext.canvasRasterer.setCanvasBitmap(bitmap); if (!renderContext.rendererJob.hasAlpha) { renderContext.canvasRasterer.fill(renderContext.renderTheme.getMapBackgroundOutside()); } return bitmap; }
private void endElement() { qName = pullParser.getName(); this.elementStack.pop(); if (ELEMENT_NAME_RULE.equals(qName)) { this.ruleStack.pop(); if (this.ruleStack.empty()) { if (isVisible(this.currentRule)) { this.renderTheme.addRule(this.currentRule); } } else { this.currentRule = this.ruleStack.peek(); } } else if ("stylemenu".equals(qName)) { // when we are finished parsing the menu part of the file, we can get the // categories to render from the initiator. This allows the creating action // to select which of the menu options to choose if (null != this.xmlRenderTheme.getMenuCallback()) { // if there is no callback, there is no menu, so the categories will be null this.categories = this.xmlRenderTheme.getMenuCallback().getCategories(this.renderThemeStyleMenu); } return; } }
Hillshading hillshading = new Hillshading(minZoom, maxZoom, magnitude, layer, always, hillShadingLevel, this.graphicFactory); renderTheme.addHillShadings(hillshading); } else { throw new XmlPullParserException("unknown element: " + qName);
renderContext.renderTheme.matchHillShadings(this, renderContext); bitmap = this.graphicFactory.createTileBitmap(rendererJob.tile.tileSize, rendererJob.hasAlpha); bitmap.setTimestamp(rendererJob.mapDataStore.getDataTimestamp(rendererJob.tile)); renderContext.canvasRasterer.setCanvasBitmap(bitmap); if (!rendererJob.hasAlpha && rendererJob.displayModel.getBackgroundColor() != renderContext.renderTheme.getMapBackground()) { renderContext.canvasRasterer.fill(renderContext.renderTheme.getMapBackground()); if (!rendererJob.labelsOnly && renderContext.renderTheme.hasMapBackgroundOutside()) { renderContext.canvasRasterer.fillOutsideAreas(renderContext.renderTheme.getMapBackgroundOutside(), insideArea); } else { renderContext.canvasRasterer.fillOutsideAreas(Color.TRANSPARENT, insideArea);
private List<List<List<ShapePaintContainer>>> createWayLists() { List<List<List<ShapePaintContainer>>> result = new ArrayList<>(LAYERS); int levels = this.renderTheme.getLevels(); for (byte i = LAYERS - 1; i >= 0; --i) { List<List<ShapePaintContainer>> innerWayList = new ArrayList<>(levels); for (int j = levels - 1; j >= 0; --j) { innerWayList.add(new ArrayList<ShapePaintContainer>(0)); } result.add(innerWayList); } return result; }