public static FrameBufferController Create(FrameBuffer frameBuffer, Model model) { FrameBufferController frameBufferController = new FrameBufferController(frameBuffer, model); model.frameBufferModel.AddObserver(frameBufferController); model.mapViewDimension.AddObserver(frameBufferController); model.mapViewPosition.AddObserver(frameBufferController); model.displayModel.AddObserver(frameBufferController); return(frameBufferController); }
protected internal override void DoWork() { long startTime = System.DateTime.Now.Ticks; this.redrawNeeded = false; FrameBuffer frameBuffer = this.mapView.FrameBuffer; IBitmap bitmap = frameBuffer.DrawingBitmap; if (bitmap != null) { this.drawingCanvas.Bitmap = bitmap; MapPosition mapPosition = this.mapViewPosition.MapPosition; Dimension canvasDimension = this.drawingCanvas.Dimension; int tileSize = this.mapView.Model.displayModel.TileSize; BoundingBox boundingBox = MapPositionUtil.GetBoundingBox(mapPosition, canvasDimension, tileSize); Point topLeftPoint = MapPositionUtil.GetTopLeftPoint(mapPosition, canvasDimension, tileSize); foreach (Layer layer in this.layers) { if (layer.Visible) { layer.Draw(boundingBox, mapPosition.ZoomLevel, this.drawingCanvas, topLeftPoint); } } if (!mapViewPosition.AnimationInProgress()) { // this causes a lot of flickering when an animation // is in progress frameBuffer.FrameFinished(mapPosition); this.mapView.Repaint(); } else { // make sure that we redraw at the end this.redrawNeeded = true; } } long elapsedMilliseconds = (System.DateTime.Now.Ticks - startTime) / 10000; long timeSleep = MILLISECONDS_PER_FRAME - elapsedMilliseconds; if (timeSleep > 1 && !Interrupted) { System.Threading.Tasks.Task.Delay((int)timeSleep); } }
private FrameBufferController(FrameBuffer frameBuffer, Model model) { this.frameBuffer = frameBuffer; this.model = model; }