mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
74 lines
3.1 KiB
C#
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 };
|
|
}
|
|
}
|
|
}
|
|
}
|