protected override void Draw(GameTime gameTime) { if (!IsRedrawRequired()) { return; } _spriteBatch.Begin(); int column = 0; int columnStartPx = 0; while (columnStartPx < _graphics.GraphicsDevice.Viewport.Width) { _columnStartPx[column] = columnStartPx; using (_slate.Lock()) { for (int y = 0; y < _numRowsInView; y++) { _cellCache[y] = _slate.GetCell(new Slate.Core.Point(column, y)); } } var columnWidthPx = _cellCache.Max(MeasureCellWidth); for (int y = 0; y < _numRowsInView; y++) { var cell = _cellCache[y]; DrawCell(columnStartPx, y * _style.CellHeight, columnWidthPx, cell); } column++; columnStartPx += columnWidthPx; } var newVisibleRegion = new Region(Slate.Core.Point.Zero, new Slate.Core.Point(column, _numRowsInView)); if (!newVisibleRegion.Equals(_visibleRegion)) { _visibleRegion = newVisibleRegion; using (_slate.Lock()) { _slate.SetVisibleRegions(new[] { _visibleRegion }); } } _spriteBatch.End(); base.Draw(gameTime); }
public virtual Cell GetCell(Point at) { return(_source.GetCell(at)); }