private void LuaListView_QueryItemImage(int index, RollColumn column, ref Bitmap bitmap, ref int offsetX, ref int offsetY) { if (column.Name != IconColumnName) { return; } if (LuaImp.ScriptList[index].IsSeparator) { return; } if (LuaImp.ScriptList[index].Paused) { bitmap = Properties.Resources.Pause; } else if (LuaImp.ScriptList[index].Enabled) { bitmap = Properties.Resources.ts_h_arrow_green; } else { bitmap = Properties.Resources.StopButton; } }
private void MarkerView_QueryItemBkColor(int index, RollColumn column, ref Color color) { var prev = Markers.PreviousOrCurrent(Tastudio.Emulator.Frame); if (prev != null && index == Markers.IndexOf(prev)) { // feos: taseditor doesn't have it, so we're free to set arbitrary color scheme. and I prefer consistency color = TAStudio.CurrentFrame_InputLog; } else if (index < Markers.Count) { var marker = Markers[index]; var record = Tastudio.CurrentTasMovie[marker.Frame]; if (record.Lagged.HasValue) { if (record.Lagged.Value) { color = column.Name == "FrameColumn" ? TAStudio.LagZone_FrameCol : TAStudio.LagZone_InputLog; } else { color = column.Name == "LabelColumn" ? TAStudio.GreenZone_FrameCol : TAStudio.GreenZone_InputLog; } } } }
private void MarkerView_QueryItemBkColor(int index, RollColumn column, ref Color color) { // This could happen if the control is told to redraw while Tastudio is rebooting, as we would not have a TasMovie just yet if (Tastudio.CurrentTasMovie == null) { return; } var prev = Markers.PreviousOrCurrent(Tastudio.Emulator.Frame); if (prev != null && index == Markers.IndexOf(prev)) { // feos: taseditor doesn't have it, so we're free to set arbitrary color scheme. and I prefer consistency color = TAStudio.CurrentFrame_InputLog; } else if (index < Markers.Count) { var marker = Markers[index]; var record = Tastudio.CurrentTasMovie[marker.Frame]; if (record.Lagged.HasValue) { if (record.Lagged.Value) { color = column.Name == "FrameColumn" ? TAStudio.LagZone_FrameCol : TAStudio.LagZone_InputLog; } else { color = column.Name == "LabelColumn" ? TAStudio.GreenZone_FrameCol : TAStudio.GreenZone_InputLog; } } } }
private void ListView_QueryItemBkColor(int index, RollColumn column, ref Color color) { if ((_searches.Count > 0) && (index < _searches.Count)) { var nextColor = Color.White; var isCheat = MainForm.CheatList.IsActive(_settings.Domain, _searches[index].Address); var isWeeded = Settings.PreviewMode && !_forcePreviewClear && _searches.Preview(_searches[index].Address); if (!_searches[index].IsValid) { nextColor = Color.PeachPuff; } else if (isCheat) { nextColor = isWeeded ? Color.Lavender : Color.LightCyan; } else { if (isWeeded) { nextColor = Color.Pink; } } color = nextColor; } }
private void CalculateHorizontalColumnPositions(List <RollColumn> visibleColumns) { if (_horizontalColumnTops == null || _horizontalColumnTops.Length != visibleColumns.Count + 1) { _horizontalColumnTops = new int[visibleColumns.Count + 1]; } int top = 0; int startRow = FirstVisibleRow; for (int j = 0; j < visibleColumns.Count; j++) { RollColumn col = visibleColumns[j]; int height = CellHeight; if (col.Rotatable && col.RotatedHeight != null) { height = Math.Max(height, col.RotatedHeight.Value); } else if (col.Rotatable) { int strOffsetX = 0; int strOffsetY = 0; QueryItemText(startRow, col, out var text, ref strOffsetX, ref strOffsetY); int textWidth = (int)_renderer.MeasureString(text, Font).Width; height = Math.Max(height, textWidth + (CellWidthPadding * 2)); } _horizontalColumnTops[j] = top; top += height; } _horizontalColumnTops[visibleColumns.Count] = top; }
private void AddColumn(RollColumn column) { if (TasView.AllColumns[column.Name] == null) { TasView.AllColumns.Add(column); } }
private void QueryItemBkColor(int index, RollColumn column, ref Color color) { TasBranch branch = GetBranch(index); if (branch != null) { var record = Movie[branch.Frame]; if (index == Movie.CurrentBranch) { color = TAStudio.CurrentFrame_InputLog; } else if (record.Lagged.HasValue) { color = record.Lagged.Value ? TAStudio.LagZone_InputLog : TAStudio.GreenZone_InputLog; } } // Highlight the branch cell a little, if hovering over it if (BranchView.CurrentCellIsDataCell && BranchView.CurrentCell.Column.Name == BranchNumberColumnName && column.Name == BranchNumberColumnName && index == BranchView.CurrentCell.RowIndex) { color = Color.FromArgb((byte)(color.A - 24), (byte)(color.R - 24), (byte)(color.G - 24), (byte)(color.B - 24)); } }
private void WatchListView_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { text = ""; if (index >= _watches.Count) { return; } if (_watches[index].IsSeparator) { if (column.Name == WatchList.Address) { text = _watches[index].Notes; } return; } switch (column.Name) { case WatchList.Address: text = _watches[index].AddressString; break; case WatchList.Value: text = _watches[index].ValueString; break; case WatchList.Prev: text = _watches[index].PreviousStr; break; case WatchList.ChangesCol: if (!_watches[index].IsSeparator) { text = _watches[index].ChangeCount.ToString(); } break; case WatchList.Diff: text = _watches[index].Diff; break; case WatchList.Type: text = ComputeDisplayType(_watches[index]); break; case WatchList.Domain: text = _watches[index].Domain.Name; break; case WatchList.Notes: text = _watches[index].Notes; break; } }
private void DisassemblerView_QueryItemBkColor(int index, RollColumn column, ref Color color) { if (_disassemblyLines.Any() && index < _disassemblyLines.Count) { if (_disassemblyLines[index].Address == _currentDisassemblerAddress) { color = Color.LightCyan; } } }
private void HistoryView_QueryItemBkColor(int index, RollColumn column, ref Color color) { if (index == Log.UndoIndex) { color = TAStudio.GreenZone_InputLog; } else if (index > Log.UndoIndex) { color = TAStudio.LagZone_InputLog; } }
private void MarkerView_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { text = ""; if (column.Name == "FrameColumn") { text = Markers[index].Frame.ToString(); } else if (column.Name == "LabelColumn") { text = Markers[index].Message; } }
private void OrderColumn(RollColumn column) { if (column.Name != _sortedColumn) { _sortReverse = false; } _watches.OrderWatches(column.Name, _sortReverse); _sortedColumn = column.Name; _sortReverse ^= true; WatchListView.Refresh(); }
private void CheatListView_QueryItemBkColor(int index, RollColumn column, ref Color color) { if (index < MainForm.CheatList.Count) { if (MainForm.CheatList[index].IsSeparator) { color = BackColor; } else if (MainForm.CheatList[index].Enabled) { color = Color.LightCyan; } } }
private void LuaListView_QueryItemBkColor(int index, RollColumn column, ref Color color) { if (LuaImp.ScriptList[index].IsSeparator) { color = BackColor; } else if (LuaImp.ScriptList[index].Enabled && !LuaImp.ScriptList[index].Paused) { color = Color.LightCyan; } else if (LuaImp.ScriptList[index].Enabled && LuaImp.ScriptList[index].Paused) { color = Color.LightPink; } }
private void DisassemblerView_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { text = ""; if (index < _disassemblyLines.Count) { if (column.Name == AddressColumnName) { text = _disassemblyLines[index].Address.ToHexString(_pcRegisterSize); } else if (column.Name == InstructionColumnName) { text = _disassemblyLines[index].Mnemonic; } } }
private void TraceView_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { text = ""; if (index < _instructions.Count) { switch (column.Name) { case DisasmColumnName: text = _instructions[index].Disassembly.TrimEnd(); break; case RegistersColumnName: text = _instructions[index].RegisterInfo; break; } } }
private void LuaListView_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { text = ""; if (LuaImp.ScriptList[index].IsSeparator) { return; } if (column.Name == ScriptColumnName) { text = Path.GetFileNameWithoutExtension(LuaImp.ScriptList[index].Path); // TODO: how about allow the user to name scripts? } else if (column.Name == PathColumnName) { text = DressUpRelative(LuaImp.ScriptList[index].Path); } }
private void MarkerView_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { text = ""; // This could happen if the control is told to redraw while Tastudio is rebooting, as we would not have a TasMovie just yet if (Tastudio.CurrentTasMovie == null) { return; } if (column.Name == "FrameColumn") { text = Markers[index].Frame.ToString(); } else if (column.Name == "LabelColumn") { text = Markers[index].Message; } }
private void WatchListView_QueryItemBkColor(int index, RollColumn column, ref Color color) { if (index >= _watches.Count) { return; } if (_watches[index].IsSeparator) { color = BackColor; } else if (!_watches[index].IsValid) { color = Color.PeachPuff; } else if (MainForm.CheatList.IsActive(_watches[index].Domain, _watches[index].Address)) { color = Color.LightCyan; } }
private void ListView_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { text = ""; if (index >= _searches.Count) { return; } var columnName = column.Name; text = columnName switch { WatchList.Address => _searches[index].AddressString, WatchList.Value => _searches[index].ValueString, WatchList.Prev => _searches[index].PreviousStr, WatchList.ChangesCol => _searches[index].ChangeCount.ToString(), WatchList.Diff => _searches[index].Diff, _ => text }; }
private void QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { text = ""; if (index >= Movie.BranchCount) { return; } switch (column.Name) { case BranchNumberColumnName: text = index.ToString(); break; case FrameColumnName: text = GetBranch(index).Frame.ToString(); break; case UserTextColumnName: text = GetBranch(index).UserText; break; } }
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 CheatListView_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { text = ""; if (index >= MainForm.CheatList.Count || MainForm.CheatList[index].IsSeparator) { return; } var columnName = column.Name; switch (columnName) { case NameColumn: text = MainForm.CheatList[index].Name; break; case AddressColumn: text = MainForm.CheatList[index].AddressStr; break; case ValueColumn: text = MainForm.CheatList[index].ValueStr; break; case CompareColumn: text = MainForm.CheatList[index].CompareStr; break; case OnColumn: text = MainForm.CheatList[index].Enabled ? "*" : ""; break; case DomainColumn: text = MainForm.CheatList[index].Domain.Name; break; case SizeColumn: text = MainForm.CheatList[index].Size.ToString(); break; case EndianColumn: text = (MainForm.CheatList[index].BigEndian ?? false) ? "Big" : "Little"; break; case TypeColumn: text = Watch.DisplayTypeToString(MainForm.CheatList[index].Type); break; case ComparisonTypeColumn: text = MainForm.CheatList[index].ComparisonType switch { Cheat.CompareType.None => "", Cheat.CompareType.Equal => "=", Cheat.CompareType.GreaterThan => ">", Cheat.CompareType.GreaterThanOrEqual => ">=", Cheat.CompareType.LessThan => "<", Cheat.CompareType.LessThanOrEqual => "<=", Cheat.CompareType.NotEqual => "!=", _ => "" }; break; } }
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); } } } } } }
private void lvCDL_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { var subItem = lvCDL.AllColumns.IndexOf(column); text = listContents[index][subItem]; }
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 DrawData(PaintEventArgs e, List <RollColumn> visibleColumns) { 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; if (QueryItemIcon != null) { QueryItemIcon(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; if (QueryItemIcon != null) { QueryItemIcon(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 HistoryView_QueryItemText(int index, RollColumn column, out string text, ref int offsetX, ref int offsetY) { text = column.Name == UndoColumnName ? Log.Names[index] : index.ToString(); }