/* * This is part of Geomajas, a GIS framework, http://www.geomajas.org/. * * Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium. * * The program is available in open source according to the GNU Affero * General Public License. All contributions in this program are covered * by the Geomajas Contributors License Agreement. For full licensing * details, see LICENSE.txt in the project root. */ package org.geomajas.gwt2.example.client.sample.general; import org.geomajas.geometry.Bbox; import org.geomajas.geometry.Coordinate; import org.geomajas.gwt2.client.gfx.CanvasContainer; import org.geomajas.gwt2.client.gfx.CanvasRect; import org.geomajas.gwt2.client.gfx.CanvasShape; import org.geomajas.gwt2.client.map.ViewPort; import org.geomajas.gwt2.client.map.layer.Layer; import org.geomajas.gwt2.client.map.render.LayerRenderer; import org.geomajas.gwt2.client.map.render.RenderingInfo; import java.util.ArrayList; import java.util.List; /** * Renders bounds on HTML5 canvas. * * @author Jan De Moerloose * */ public class CanvasBoundsRenderer implements LayerRenderer { private Layer layer; private CanvasContainer canvasContainer; private ViewPort viewPort; private List<CanvasShape> shapes = new ArrayList<CanvasShape>(); private List<Double> scales = new ArrayList<Double>(); private boolean enabled; private double opacity = 1.0; public CanvasBoundsRenderer(Layer layer, ViewPort viewPort, CanvasContainer canvasContainer) { this.layer = layer; this.viewPort = viewPort; this.canvasContainer = canvasContainer; } @Override public void render(RenderingInfo renderingInfo) { if (isEnabled()) { double scale = renderingInfo.getView().getResolution(); CanvasShape shape = getBounds(renderingInfo); canvasContainer.addShape(shape); shapes.add(shape); scales.add(scale); if (shapes.size() > 20) { canvasContainer.removeShape(shapes.remove(0)); scales.remove(0); } } } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } private CanvasShape getBounds(RenderingInfo renderingInfo) { Coordinate center = renderingInfo.getView().getPosition(); double resolution = renderingInfo.getView().getResolution(); double width = viewPort.getMapWidth() * resolution; double height = viewPort.getMapHeight() * resolution; Bbox bounds = new Bbox(center.getX() - 0.5 * width, center.getY() - 0.5 * height, width, height); CanvasRect rect = new CanvasRect(bounds); rect.setFillStyle("rgba(255,255,255,0)"); rect.setStrokeStyle("rgba(0,0,0,255)"); rect.setStrokeWidthPixels(1); return rect; } @Override public Layer getLayer() { return layer; } @Override public void setOpacity(double opacity) { this.opacity = opacity; canvasContainer.setOpacity(opacity); } @Override public double getOpacity() { return opacity; } }