Mesen2/UI/Debugger/Utilities/PaletteHelper.cs
2024-09-19 21:19:43 +09:00

74 lines
3.1 KiB
C#

using Mesen.Debugger.Controls;
using Mesen.Interop;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Mesen.Debugger.Utilities
{
public class PaletteHelper
{
public static DynamicTooltip GetPreviewPanel(UInt32[] rgbPalette, UInt32[] rawPalette, RawPaletteFormat format, int index, DynamicTooltip? tooltipToUpdate, int colorsPerPalette = 0)
{
TooltipEntries entries = tooltipToUpdate?.Items ?? new();
entries.StartUpdate();
entries.AddEntry("Color", new TooltipColorEntry(rgbPalette[index]));
if(colorsPerPalette > 0) {
entries.AddEntry("Index", "$" + (index % colorsPerPalette).ToString("X2"));
} else {
entries.AddEntry("Index", "$" + index.ToString("X2"));
}
if(format == RawPaletteFormat.Rgb555) {
//SNES / GBC
entries.AddEntry("Value", "$" + rawPalette[index].ToString("X4"));
entries.AddEntry("R", "$" + (rawPalette[index] & 0x1F).ToString("X2"));
entries.AddEntry("G", "$" + ((rawPalette[index] >> 5) & 0x1F).ToString("X2"));
entries.AddEntry("B", "$" + ((rawPalette[index] >> 10) & 0x1F).ToString("X2"));
} else if(format == RawPaletteFormat.Rgb333) {
//PC Engine
entries.AddEntry("Value", "$" + rawPalette[index].ToString("X3"));
entries.AddEntry("R", "$" + ((rawPalette[index] >> 3) & 0x07).ToString("X2"));
entries.AddEntry("G", "$" + (rawPalette[index] >> 6).ToString("X2"));
entries.AddEntry("B", "$" + (rawPalette[index] & 0x07).ToString("X2"));
} else if(format == RawPaletteFormat.Rgb222) {
//SMS
entries.AddEntry("Value", "$" + rawPalette[index].ToString("X2"));
entries.AddEntry("R", "$" + (rawPalette[index] & 0x03).ToString());
entries.AddEntry("G", "$" + ((rawPalette[index] >> 2) & 0x03).ToString());
entries.AddEntry("B", "$" + ((rawPalette[index] >> 4) & 0x03).ToString());
} else if(format == RawPaletteFormat.Rgb444) {
//Game Gear
entries.AddEntry("Value", "$" + rawPalette[index].ToString("X3"));
entries.AddEntry("R", "$" + (rawPalette[index] & 0x0F).ToString());
entries.AddEntry("G", "$" + ((rawPalette[index] >> 4) & 0x0F).ToString());
entries.AddEntry("B", "$" + ((rawPalette[index] >> 8) & 0x0F).ToString());
} else if(format == RawPaletteFormat.Bgr444) {
//WonderSwan
entries.AddEntry("Value", "$" + rawPalette[index].ToString("X3"));
entries.AddEntry("R", "$" + ((rawPalette[index] >> 8) & 0x0F).ToString());
entries.AddEntry("G", "$" + ((rawPalette[index] >> 4) & 0x0F).ToString());
entries.AddEntry("B", "$" + (rawPalette[index] & 0x0F).ToString());
} else {
//NES/GB
entries.AddEntry("Value", "$" + rawPalette[index].ToString("X2"));
}
entries.AddEntry("Color Code (Hex)", "#" + rgbPalette[index].ToString("X8").Substring(2));
entries.AddEntry("Color Code (RGB)",
((rgbPalette[index] >> 16) & 0xFF).ToString() + ", " +
((rgbPalette[index] >> 8) & 0xFF).ToString() + ", " +
(rgbPalette[index] & 0xFF).ToString()
);
entries.EndUpdate();
if(tooltipToUpdate != null) {
return tooltipToUpdate;
} else {
return new DynamicTooltip() { Items = entries };
}
}
}
}