private void DrawData(List <RollColumn> visibleColumns) { // Prevent exceptions with small TAStudio windows if (visibleColumns.Count == 0) { return; } if (QueryItemText != null) { if (HorizontalOrientation) { int startRow = FirstVisibleRow; int range = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1; _renderer.PrepDrawString(_font, _foreColor); int lastVisible = LastVisibleColumnIndex; for (int j = FirstVisibleColumn; j <= lastVisible; j++) { RollColumn col = visibleColumns[j]; int colHeight = GetHColHeight(j); for (int i = 0, f = 0; f < range; i++, f++) { f += _lagFrames[i]; int baseX = RowsToPixels(i) + (col.Rotatable ? CellWidth : 0); int baseY = GetHColTop(j) - _vBar.Value; if (!col.Rotatable) { Bitmap image = null; int bitmapOffsetX = 0; int bitmapOffsetY = 0; QueryItemIcon?.Invoke(f + startRow, col, ref image, ref bitmapOffsetX, ref bitmapOffsetY); if (image != null) { int x = baseX + CellWidthPadding + bitmapOffsetX; int y = baseY + CellHeightPadding + bitmapOffsetY; _renderer.DrawBitmap(image, new Point(x, y)); } } string text; int strOffsetX = 0; int strOffsetY = 0; QueryItemText(f + startRow, col, out text, ref strOffsetX, ref strOffsetY); int textWidth = _renderer.MeasureString(text, _font).Width; if (col.Rotatable) { // Center Text int textX = Math.Max(((colHeight - textWidth) / 2), CellWidthPadding) + strOffsetX; int textY = CellWidthPadding + strOffsetY; var point = new Point(baseX - textY, baseY + textX); _renderer.PrepDrawString(_font, _foreColor, rotate: true); DrawString(text, null, point); _renderer.PrepDrawString(_font, _foreColor, rotate: false); } else { // Center Text int textX = Math.Max(((CellWidth - textWidth) / 2), CellWidthPadding) + strOffsetX; int textY = CellHeightPadding + strOffsetY; var point = new Point(baseX + textX, baseY + textY); DrawString(text, ColumnWidth, point); } } } } else { int startRow = FirstVisibleRow; int range = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1; _renderer.PrepDrawString(_font, _foreColor); int xPadding = CellWidthPadding + 1 - _hBar.Value; for (int i = 0, f = 0; f < range; i++, f++) // Vertical { f += _lagFrames[i]; int lastVisible = LastVisibleColumnIndex; for (int j = FirstVisibleColumn; j <= lastVisible; j++) // Horizontal { RollColumn col = visibleColumns[j]; string text; int strOffsetX = 0; int strOffsetY = 0; Point point = new Point(col.Left.Value + xPadding, RowsToPixels(i) + CellHeightPadding); Bitmap image = null; int bitmapOffsetX = 0; int bitmapOffsetY = 0; QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY); if (image != null) { _renderer.DrawBitmap(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding)); } QueryItemText(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY); bool rePrep = false; if (_selectedItems.Contains(new Cell { Column = visibleColumns[j], RowIndex = f + startRow })) { _renderer.PrepDrawString(_font, SystemColors.HighlightText); rePrep = true; } DrawString(text, col.Width, new Point(point.X + strOffsetX, point.Y + strOffsetY)); if (rePrep) { _renderer.PrepDrawString(_font, _foreColor); } } } } } }
private void DrawData(PaintEventArgs e, List <RollColumn> visibleColumns) { // Prevent exceptions with small TAStudio windows if (visibleColumns.Count == 0) { return; } if (QueryItemText != null) { if (HorizontalOrientation) { int startRow = FirstVisibleRow; int range = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1; _gdi.PrepDrawString(_normalFont, _foreColor); for (int i = 0, f = 0; f < range; i++, f++) { f += _lagFrames[i]; int LastVisible = LastVisibleColumnIndex; for (int j = FirstVisibleColumn; j <= LastVisible; j++) { Bitmap image = null; int x = 0; int y = 0; int bitmapOffsetX = 0; int bitmapOffsetY = 0; QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY); if (image != null) { x = RowsToPixels(i) + CellWidthPadding + bitmapOffsetX; y = (j * CellHeight) + (CellHeightPadding * 2) + bitmapOffsetY; _gdi.DrawBitmap(image, new Point(x, y), true); } string text; int strOffsetX = 0; int strOffsetY = 0; QueryItemText(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY); // Center Text x = RowsToPixels(i) + ((CellWidth - (text.Length * _charSize.Width)) / 2); y = (j * CellHeight) + CellHeightPadding - _vBar.Value; var point = new Point(x + strOffsetX, y + strOffsetY); var rePrep = false; if (j == 1) { if (_selectedItems.Contains(new Cell { Column = visibleColumns[j], RowIndex = i + startRow })) { _gdi.PrepDrawString(_rotatedFont, SystemColors.HighlightText); rePrep = true; } else if (j == 1) { // 1. not sure about this; 2. repreps may be excess, but if we render one column at a time, we do need to change back after rendering the header rePrep = true; _gdi.PrepDrawString(_rotatedFont, _foreColor); } } if (!string.IsNullOrWhiteSpace(text)) { _gdi.DrawString(text, point); } if (rePrep) { _gdi.PrepDrawString(_normalFont, _foreColor); } } } } else { int startRow = FirstVisibleRow; int range = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1; _gdi.PrepDrawString(_normalFont, _foreColor); int xPadding = CellWidthPadding + 1 - _hBar.Value; for (int i = 0, f = 0; f < range; i++, f++) // Vertical { f += _lagFrames[i]; int LastVisible = LastVisibleColumnIndex; for (int j = FirstVisibleColumn; j <= LastVisible; j++) // Horizontal { RollColumn col = visibleColumns[j]; string text; int strOffsetX = 0; int strOffsetY = 0; Point point = new Point(col.Left.Value + xPadding, RowsToPixels(i) + CellHeightPadding); Bitmap image = null; int bitmapOffsetX = 0; int bitmapOffsetY = 0; QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY); if (image != null) { _gdi.DrawBitmap(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding), true); } QueryItemText(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY); bool rePrep = false; if (_selectedItems.Contains(new Cell { Column = visibleColumns[j], RowIndex = f + startRow })) { _gdi.PrepDrawString(_normalFont, SystemColors.HighlightText); rePrep = true; } if (!string.IsNullOrWhiteSpace(text)) { _gdi.DrawString(text, new Point(point.X + strOffsetX, point.Y + strOffsetY)); } if (rePrep) { _gdi.PrepDrawString(_normalFont, _foreColor); } } } } } }
private void DrawData(PaintEventArgs e, List <ListColumn> visibleColumns) { // Prevent exceptions with small windows if (visibleColumns.Count == 0) { return; } if (QueryItemText != null || QueryItemTextAdvanced != null) { int startRow = FirstVisibleRow; int range = Math.Min(LastVisibleRow, ItemCount - 1) - startRow + 1; sBrush = new SolidBrush(CellFontColor); int xPadding = CellWidthPadding + 1 - _hBar.Value; for (int i = 0, f = 0; f < range; i++, f++) // Vertical { //f += _lagFrames[i]; int LastVisible = LastVisibleColumnIndex; for (int j = FirstVisibleColumn; j <= LastVisible; j++) // Horizontal { ListColumn col = visibleColumns[j]; string text = ""; int strOffsetX = 0; int strOffsetY = 0; Point point = new Point(col.Left.Value + xPadding, RowsToPixels(i) + CellHeightPadding); Bitmap image = null; int bitmapOffsetX = 0; int bitmapOffsetY = 0; QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY); if (image != null) { e.Graphics.DrawImage(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding)); } QueryItemText?.Invoke(f + startRow, _columns.IndexOf(visibleColumns[j]), out text); QueryItemTextAdvanced?.Invoke(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY); bool rePrep = false; if (_selectedItems.Contains(new Cell { Column = visibleColumns[j], RowIndex = f + startRow })) { sBrush = new SolidBrush(InvertColor(CellBackgroundHighlightColor)); rePrep = true; } if (!string.IsNullOrWhiteSpace(text)) { ResizeTextToFit(ref text, col.Width.Value, CellFont); e.Graphics.DrawString(text, CellFont, sBrush, (PointF)(new Point(point.X + strOffsetX, point.Y + strOffsetY))); } if (rePrep) { sBrush = new SolidBrush(CellFontColor); } } } } }
private void DrawData(List <RollColumn> visibleColumns, int firstVisibleRow, int lastVisibleRow) { if (QueryItemText == null) { return; } if (!visibleColumns.Any()) { return; } int startRow = firstVisibleRow; int range = Math.Min(lastVisibleRow, RowCount - 1) - startRow + 1; _renderer.PrepDrawString(Font, _foreColor); if (HorizontalOrientation) { for (int j = 0; j < visibleColumns.Count; j++) { RollColumn col = visibleColumns[j]; int colHeight = GetHColHeight(j); for (int i = 0, f = 0; f < range; i++, f++) { f += _lagFrames[i]; int baseX = RowsToPixels(i) + (col.Rotatable ? CellWidth : 0); int baseY = GetHColTop(j) - _vBar.Value; if (!col.Rotatable) { Bitmap image = null; int bitmapOffsetX = 0; int bitmapOffsetY = 0; QueryItemIcon?.Invoke(f + startRow, col, ref image, ref bitmapOffsetX, ref bitmapOffsetY); if (image != null) { int x = baseX + CellWidthPadding + bitmapOffsetX; int y = baseY + CellHeightPadding + bitmapOffsetY; _renderer.DrawBitmap(image, new Point(x, y)); } } int strOffsetX = 0; int strOffsetY = 0; QueryItemText(f + startRow, col, out var text, ref strOffsetX, ref strOffsetY); int textWidth = (int)_renderer.MeasureString(text, Font).Width; if (col.Rotatable) { // Center Text int textX = Math.Max(((colHeight - textWidth) / 2), CellWidthPadding) + strOffsetX; int textY = CellWidthPadding + strOffsetY; _renderer.PrepDrawString(Font, _foreColor, rotate: true); DrawString(text, new Rectangle(baseX - textY, baseY + textX, 999, CellHeight)); _renderer.PrepDrawString(Font, _foreColor, rotate: false); } else { // Center Text int textX = Math.Max(((CellWidth - textWidth) / 2), CellWidthPadding) + strOffsetX; int textY = CellHeightPadding + strOffsetY; DrawString(text, new Rectangle(baseX + textX, baseY + textY, MaxColumnWidth, CellHeight)); } } } } else { int xPadding = CellWidthPadding + 1 - _hBar.Value; for (int i = 0, f = 0; f < range; i++, f++) // Vertical { f += _lagFrames[i]; foreach (var column in visibleColumns) { RollColumn col = column; int strOffsetX = 0; int strOffsetY = 0; Point point = new Point(col.Left + xPadding, RowsToPixels(i) + CellHeightPadding); Bitmap image = null; int bitmapOffsetX = 0; int bitmapOffsetY = 0; QueryItemIcon?.Invoke(f + startRow, column, ref image, ref bitmapOffsetX, ref bitmapOffsetY); if (image != null) { _renderer.DrawBitmap(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding)); } QueryItemText(f + startRow, column, out var text, ref strOffsetX, ref strOffsetY); bool rePrep = false; if (_selectedItems.Contains(new Cell { Column = column, RowIndex = f + startRow })) { _renderer.PrepDrawString(Font, SystemColors.HighlightText); rePrep = true; } DrawString(text, new Rectangle(point.X + strOffsetX, point.Y + strOffsetY, col.Width, ColumnHeight)); if (rePrep) { _renderer.PrepDrawString(Font, _foreColor); } } } } }
private void GDIP_DrawData(PaintEventArgs e, List <RollColumn> visibleColumns) { // Prevent exceptions with small TAStudio windows if (visibleColumns.Count == 0) { return; } bool isRotated = false; if (QueryItemText != null) { if (HorizontalOrientation) { int startRow = FirstVisibleRow; int range = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1; sBrush = new SolidBrush(_foreColor); for (int i = 0, f = 0; f < range; i++, f++) { f += _lagFrames[i]; int LastVisible = LastVisibleColumnIndex; for (int j = FirstVisibleColumn; j <= LastVisible; j++) { Bitmap image = null; int x = 0; int y = 0; int bitmapOffsetX = 0; int bitmapOffsetY = 0; QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY); if (image != null) { x = RowsToPixels(i) + CellWidthPadding + bitmapOffsetX; y = (j * CellHeight) + (CellHeightPadding * 2) + bitmapOffsetY; e.Graphics.DrawImage(image, new Point(x, y)); } string text; int strOffsetX = 0; int strOffsetY = 0; QueryItemText(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY); // Center Text x = RowsToPixels(i) + ((CellWidth - (int)Math.Round((text.Length * _charSizeF.Width))) / 2); y = (j * CellHeight) + CellHeightPadding - _vBar.Value; var point = new Point(x + strOffsetX, y + strOffsetY); var rePrep = false; if (j == 1) { if (_selectedItems.Contains(new Cell { Column = visibleColumns[j], RowIndex = i + startRow })) { isRotated = true; sBrush = new SolidBrush(SystemColors.HighlightText); rePrep = true; } else if (j == 1) { // 1. not sure about this; 2. repreps may be excess, but if we render one column at a time, we do need to change back after rendering the header rePrep = true; isRotated = true; sBrush = new SolidBrush(SystemColors.HighlightText); } } if (!string.IsNullOrWhiteSpace(text)) { //_gdi.DrawString(text, point); if (isRotated) { SizeF sz = e.Graphics.VisibleClipBounds.Size; e.Graphics.TranslateTransform(sz.Width / 2, sz.Height / 2); e.Graphics.RotateTransform(90); sz = e.Graphics.MeasureString(text, _commonFont); e.Graphics.DrawString(text, _commonFont, sBrush, -(sz.Width / 2), -(sz.Height / 2)); } else { //e.Graphics.DrawString(text, _commonFont, sBrush, (PointF)point); GDIP_DrawString(e, text, _commonFont, point, new Pen(sBrush).Color); } } if (rePrep) { isRotated = false; sBrush = new SolidBrush(_foreColor); } } } } else { int startRow = FirstVisibleRow; int range = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1; sBrush = new SolidBrush(_foreColor); int xPadding = CellWidthPadding + 1 - _hBar.Value; for (int i = 0, f = 0; f < range; i++, f++) // Vertical { f += _lagFrames[i]; int LastVisible = LastVisibleColumnIndex; for (int j = FirstVisibleColumn; j <= LastVisible; j++) // Horizontal { RollColumn col = visibleColumns[j]; string text; int strOffsetX = 0; int strOffsetY = 0; Point point = new Point(col.Left.Value + xPadding, RowsToPixels(i) + CellHeightPadding); Bitmap image = null; int bitmapOffsetX = 0; int bitmapOffsetY = 0; QueryItemIcon?.Invoke(f + startRow, visibleColumns[j], ref image, ref bitmapOffsetX, ref bitmapOffsetY); if (image != null) { e.Graphics.DrawImage(image, new Point(point.X + bitmapOffsetX, point.Y + bitmapOffsetY + CellHeightPadding)); } QueryItemText(f + startRow, visibleColumns[j], out text, ref strOffsetX, ref strOffsetY); bool rePrep = false; if (_selectedItems.Contains(new Cell { Column = visibleColumns[j], RowIndex = f + startRow })) { sBrush = new SolidBrush(SystemColors.HighlightText); isRotated = false; rePrep = true; } if (!string.IsNullOrWhiteSpace(text)) { //e.Graphics.DrawString(text, _commonFont, sBrush, (PointF)(new Point(point.X + strOffsetX, point.Y + strOffsetY))); GDIP_DrawString(e, text, _commonFont, new Point(point.X + strOffsetX, point.Y + strOffsetY), new Pen(sBrush).Color); } if (rePrep) { isRotated = false; sBrush = new SolidBrush(_foreColor); } } } } } }