Exemple #1
0
        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);
        }
Exemple #2
0
 public virtual Cell GetCell(Point at)
 {
     return(_source.GetCell(at));
 }