snesgfx-gain the ability to display a rectangle in the palette advising you of which colors could possibly be used by a BG
This commit is contained in:
parent
108162a944
commit
05fabf9405
|
@ -131,7 +131,6 @@
|
||||||
this.radioButton5 = new System.Windows.Forms.RadioButton();
|
this.radioButton5 = new System.Windows.Forms.RadioButton();
|
||||||
this.radioButton10 = new System.Windows.Forms.RadioButton();
|
this.radioButton10 = new System.Windows.Forms.RadioButton();
|
||||||
this.groupBox5 = new System.Windows.Forms.GroupBox();
|
this.groupBox5 = new System.Windows.Forms.GroupBox();
|
||||||
this.paletteViewer = new BizHawk.MultiClient.SNESGraphicsViewer();
|
|
||||||
this.tabctrlDetails = new System.Windows.Forms.TabControl();
|
this.tabctrlDetails = new System.Windows.Forms.TabControl();
|
||||||
this.tpPalette = new System.Windows.Forms.TabPage();
|
this.tpPalette = new System.Windows.Forms.TabPage();
|
||||||
this.txtPaletteDetailsIndexSpecific = new System.Windows.Forms.TextBox();
|
this.txtPaletteDetailsIndexSpecific = new System.Windows.Forms.TextBox();
|
||||||
|
@ -147,8 +146,9 @@
|
||||||
this.lblDetailsPaletteAddress = new System.Windows.Forms.Label();
|
this.lblDetailsPaletteAddress = new System.Windows.Forms.Label();
|
||||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||||
this.panel2 = new System.Windows.Forms.Panel();
|
this.panel2 = new System.Windows.Forms.Panel();
|
||||||
this.viewer = new BizHawk.MultiClient.SNESGraphicsViewer();
|
|
||||||
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
||||||
|
this.paletteViewer = new BizHawk.MultiClient.SNESGraphicsViewer();
|
||||||
|
this.viewer = new BizHawk.MultiClient.SNESGraphicsViewer();
|
||||||
this.menuStrip1.SuspendLayout();
|
this.menuStrip1.SuspendLayout();
|
||||||
this.tableLayoutPanel1.SuspendLayout();
|
this.tableLayoutPanel1.SuspendLayout();
|
||||||
this.panel1.SuspendLayout();
|
this.panel1.SuspendLayout();
|
||||||
|
@ -1107,6 +1107,7 @@
|
||||||
//
|
//
|
||||||
// comboDisplayType
|
// comboDisplayType
|
||||||
//
|
//
|
||||||
|
this.comboDisplayType.DisplayMember = "descr";
|
||||||
this.comboDisplayType.DropDownHeight = 200;
|
this.comboDisplayType.DropDownHeight = 200;
|
||||||
this.comboDisplayType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.comboDisplayType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
this.comboDisplayType.FormattingEnabled = true;
|
this.comboDisplayType.FormattingEnabled = true;
|
||||||
|
@ -1128,6 +1129,7 @@
|
||||||
this.comboDisplayType.Name = "comboDisplayType";
|
this.comboDisplayType.Name = "comboDisplayType";
|
||||||
this.comboDisplayType.Size = new System.Drawing.Size(107, 21);
|
this.comboDisplayType.Size = new System.Drawing.Size(107, 21);
|
||||||
this.comboDisplayType.TabIndex = 18;
|
this.comboDisplayType.TabIndex = 18;
|
||||||
|
this.comboDisplayType.ValueMember = "type";
|
||||||
this.comboDisplayType.SelectedIndexChanged += new System.EventHandler(this.comboDisplayType_SelectedIndexChanged);
|
this.comboDisplayType.SelectedIndexChanged += new System.EventHandler(this.comboDisplayType_SelectedIndexChanged);
|
||||||
//
|
//
|
||||||
// radioButton1
|
// radioButton1
|
||||||
|
@ -1290,20 +1292,6 @@
|
||||||
this.groupBox5.TabStop = false;
|
this.groupBox5.TabStop = false;
|
||||||
this.groupBox5.Text = "Palette";
|
this.groupBox5.Text = "Palette";
|
||||||
//
|
//
|
||||||
// paletteViewer
|
|
||||||
//
|
|
||||||
this.paletteViewer.BackColor = System.Drawing.Color.Transparent;
|
|
||||||
this.paletteViewer.Location = new System.Drawing.Point(6, 14);
|
|
||||||
this.paletteViewer.Name = "paletteViewer";
|
|
||||||
this.paletteViewer.Size = new System.Drawing.Size(307, 307);
|
|
||||||
this.paletteViewer.TabIndex = 18;
|
|
||||||
this.paletteViewer.TabStop = false;
|
|
||||||
this.paletteViewer.MouseClick += new System.Windows.Forms.MouseEventHandler(this.paletteViewer_MouseClick);
|
|
||||||
this.paletteViewer.MouseDown += new System.Windows.Forms.MouseEventHandler(this.paletteViewer_MouseDown);
|
|
||||||
this.paletteViewer.MouseEnter += new System.EventHandler(this.paletteViewer_MouseEnter);
|
|
||||||
this.paletteViewer.MouseLeave += new System.EventHandler(this.paletteViewer_MouseLeave);
|
|
||||||
this.paletteViewer.MouseMove += new System.Windows.Forms.MouseEventHandler(this.paletteViewer_MouseMove);
|
|
||||||
//
|
|
||||||
// tabctrlDetails
|
// tabctrlDetails
|
||||||
//
|
//
|
||||||
this.tabctrlDetails.Controls.Add(this.tpPalette);
|
this.tabctrlDetails.Controls.Add(this.tpPalette);
|
||||||
|
@ -1465,6 +1453,26 @@
|
||||||
this.panel2.Size = new System.Drawing.Size(516, 667);
|
this.panel2.Size = new System.Drawing.Size(516, 667);
|
||||||
this.panel2.TabIndex = 1;
|
this.panel2.TabIndex = 1;
|
||||||
//
|
//
|
||||||
|
// toolTip1
|
||||||
|
//
|
||||||
|
this.toolTip1.AutoPopDelay = 5000;
|
||||||
|
this.toolTip1.InitialDelay = 250;
|
||||||
|
this.toolTip1.ReshowDelay = 100;
|
||||||
|
//
|
||||||
|
// paletteViewer
|
||||||
|
//
|
||||||
|
this.paletteViewer.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
this.paletteViewer.Location = new System.Drawing.Point(6, 14);
|
||||||
|
this.paletteViewer.Name = "paletteViewer";
|
||||||
|
this.paletteViewer.Size = new System.Drawing.Size(307, 307);
|
||||||
|
this.paletteViewer.TabIndex = 18;
|
||||||
|
this.paletteViewer.TabStop = false;
|
||||||
|
this.paletteViewer.MouseClick += new System.Windows.Forms.MouseEventHandler(this.paletteViewer_MouseClick);
|
||||||
|
this.paletteViewer.MouseDown += new System.Windows.Forms.MouseEventHandler(this.paletteViewer_MouseDown);
|
||||||
|
this.paletteViewer.MouseEnter += new System.EventHandler(this.paletteViewer_MouseEnter);
|
||||||
|
this.paletteViewer.MouseLeave += new System.EventHandler(this.paletteViewer_MouseLeave);
|
||||||
|
this.paletteViewer.MouseMove += new System.Windows.Forms.MouseEventHandler(this.paletteViewer_MouseMove);
|
||||||
|
//
|
||||||
// viewer
|
// viewer
|
||||||
//
|
//
|
||||||
this.viewer.BackColor = System.Drawing.Color.Transparent;
|
this.viewer.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
@ -1474,12 +1482,6 @@
|
||||||
this.viewer.TabIndex = 38;
|
this.viewer.TabIndex = 38;
|
||||||
this.viewer.TabStop = false;
|
this.viewer.TabStop = false;
|
||||||
//
|
//
|
||||||
// toolTip1
|
|
||||||
//
|
|
||||||
this.toolTip1.AutoPopDelay = 5000;
|
|
||||||
this.toolTip1.InitialDelay = 250;
|
|
||||||
this.toolTip1.ReshowDelay = 100;
|
|
||||||
//
|
|
||||||
// SNESGraphicsDebugger
|
// SNESGraphicsDebugger
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
|
|
@ -26,6 +26,22 @@ namespace BizHawk.MultiClient
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
Closing += (o, e) => SaveConfigSettings();
|
Closing += (o, e) => SaveConfigSettings();
|
||||||
|
|
||||||
|
var displayTypeItems = new List<DisplayTypeItem>();
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("BG1", eDisplayType.BG1));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("BG1", eDisplayType.BG1));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("BG2",eDisplayType.BG2));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("BG3",eDisplayType.BG3));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("BG4",eDisplayType.BG4));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("OBJ",eDisplayType.OBJ));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("2bpp tiles",eDisplayType.Tiles2bpp));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("4bpp tiles",eDisplayType.Tiles4bpp));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("8bpp tiles",eDisplayType.Tiles8bpp));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("Mode7 tiles",eDisplayType.TilesMode7));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("Mode7Ext tiles",eDisplayType.TilesMode7Ext));
|
||||||
|
displayTypeItems.Add(new DisplayTypeItem("Mode7 tiles (DC)", eDisplayType.TilesMode7DC));
|
||||||
|
|
||||||
|
comboDisplayType.DataSource = displayTypeItems;
|
||||||
comboDisplayType.SelectedIndex = 0;
|
comboDisplayType.SelectedIndex = 0;
|
||||||
comboBGProps.SelectedIndex = 0;
|
comboBGProps.SelectedIndex = 0;
|
||||||
|
|
||||||
|
@ -170,6 +186,8 @@ namespace BizHawk.MultiClient
|
||||||
UpdateColorDetails();
|
UpdateColorDetails();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eDisplayType CurrDisplaySelection { get { return (comboDisplayType.SelectedValue as eDisplayType?).Value; } }
|
||||||
|
|
||||||
//todo - something smarter to cycle through bitmaps without repeatedly trashing them (use the dispose callback on the viewer)
|
//todo - something smarter to cycle through bitmaps without repeatedly trashing them (use the dispose callback on the viewer)
|
||||||
void RenderView()
|
void RenderView()
|
||||||
{
|
{
|
||||||
|
@ -188,43 +206,43 @@ namespace BizHawk.MultiClient
|
||||||
|
|
||||||
var gd = new SNESGraphicsDecoder();
|
var gd = new SNESGraphicsDecoder();
|
||||||
gd.CacheTiles();
|
gd.CacheTiles();
|
||||||
string selection = comboDisplayType.SelectedItem as string;
|
var selection = CurrDisplaySelection;
|
||||||
if (selection == "2bpp tiles")
|
if (selection == eDisplayType.Tiles2bpp)
|
||||||
{
|
{
|
||||||
allocate(512, 512);
|
allocate(512, 512);
|
||||||
gd.RenderTilesToScreen(pixelptr, 64, 64, stride / 4, 2, currPaletteSelection.start);
|
gd.RenderTilesToScreen(pixelptr, 64, 64, stride / 4, 2, currPaletteSelection.start);
|
||||||
}
|
}
|
||||||
if (selection == "4bpp tiles")
|
if (selection == eDisplayType.Tiles4bpp)
|
||||||
{
|
{
|
||||||
allocate(512, 512);
|
allocate(512, 512);
|
||||||
gd.RenderTilesToScreen(pixelptr, 64, 32, stride / 4, 4, currPaletteSelection.start);
|
gd.RenderTilesToScreen(pixelptr, 64, 32, stride / 4, 4, currPaletteSelection.start);
|
||||||
}
|
}
|
||||||
if (selection == "8bpp tiles")
|
if (selection == eDisplayType.Tiles8bpp)
|
||||||
{
|
{
|
||||||
allocate(256, 256);
|
allocate(256, 256);
|
||||||
gd.RenderTilesToScreen(pixelptr, 32, 32, stride / 4, 8, currPaletteSelection.start);
|
gd.RenderTilesToScreen(pixelptr, 32, 32, stride / 4, 8, currPaletteSelection.start);
|
||||||
}
|
}
|
||||||
if (selection == "Mode7 tiles")
|
if (selection == eDisplayType.TilesMode7)
|
||||||
{
|
{
|
||||||
//256 tiles
|
//256 tiles
|
||||||
allocate(128, 128);
|
allocate(128, 128);
|
||||||
gd.RenderMode7TilesToScreen(pixelptr, stride / 4, false, false);
|
gd.RenderMode7TilesToScreen(pixelptr, stride / 4, false, false);
|
||||||
}
|
}
|
||||||
if (selection == "Mode7Ext tiles")
|
if (selection == eDisplayType.TilesMode7Ext)
|
||||||
{
|
{
|
||||||
//256 tiles
|
//256 tiles
|
||||||
allocate(128, 128);
|
allocate(128, 128);
|
||||||
gd.RenderMode7TilesToScreen(pixelptr, stride / 4, true, false);
|
gd.RenderMode7TilesToScreen(pixelptr, stride / 4, true, false);
|
||||||
}
|
}
|
||||||
if (selection == "Mode7 tiles (DC)")
|
if (selection == eDisplayType.TilesMode7DC)
|
||||||
{
|
{
|
||||||
//256 tiles
|
//256 tiles
|
||||||
allocate(128, 128);
|
allocate(128, 128);
|
||||||
gd.RenderMode7TilesToScreen(pixelptr, stride / 4, false, true);
|
gd.RenderMode7TilesToScreen(pixelptr, stride / 4, false, true);
|
||||||
}
|
}
|
||||||
if (selection == "BG1" || selection == "BG2" || selection == "BG3" || selection == "BG4")
|
if (IsDisplayTypeBG(selection))
|
||||||
{
|
{
|
||||||
int bgnum = int.Parse(selection.Substring(2));
|
int bgnum = (int)selection;
|
||||||
var si = gd.ScanScreenInfo();
|
var si = gd.ScanScreenInfo();
|
||||||
var bg = si.BG[bgnum];
|
var bg = si.BG[bgnum];
|
||||||
|
|
||||||
|
@ -274,6 +292,23 @@ namespace BizHawk.MultiClient
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum eDisplayType
|
||||||
|
{
|
||||||
|
BG1=1, BG2=2, BG3=3, BG4=4, OBJ, Tiles2bpp, Tiles4bpp, Tiles8bpp, TilesMode7, TilesMode7Ext, TilesMode7DC
|
||||||
|
}
|
||||||
|
static bool IsDisplayTypeBG(eDisplayType type) { return type == eDisplayType.BG1 || type == eDisplayType.BG2 || type == eDisplayType.BG3 || type == eDisplayType.BG4; }
|
||||||
|
static int DisplayTypeBGNum(eDisplayType type) { if(IsDisplayTypeBG(type)) return (int)type; else return -1; }
|
||||||
|
|
||||||
|
class DisplayTypeItem
|
||||||
|
{
|
||||||
|
public eDisplayType type { get; set; }
|
||||||
|
public string descr { get; set; }
|
||||||
|
public DisplayTypeItem(string descr, eDisplayType type)
|
||||||
|
{
|
||||||
|
this.type = type;
|
||||||
|
this.descr = descr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void comboDisplayType_SelectedIndexChanged(object sender, EventArgs e)
|
private void comboDisplayType_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
@ -359,7 +394,7 @@ namespace BizHawk.MultiClient
|
||||||
int[] lastPalette;
|
int[] lastPalette;
|
||||||
int lastColorNum = 0;
|
int lastColorNum = 0;
|
||||||
int selectedColorNum = 0;
|
int selectedColorNum = 0;
|
||||||
PaletteSelection currPaletteSelection;
|
SNESGraphicsDecoder.PaletteSelection currPaletteSelection;
|
||||||
|
|
||||||
Rectangle GetPaletteRegion(int start, int num)
|
Rectangle GetPaletteRegion(int start, int num)
|
||||||
{
|
{
|
||||||
|
@ -373,6 +408,12 @@ namespace BizHawk.MultiClient
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rectangle GetPaletteRegion(SNESGraphicsDecoder.PaletteSelection sel)
|
||||||
|
{
|
||||||
|
int start = sel.start, num = sel.size;
|
||||||
|
return GetPaletteRegion(start, num);
|
||||||
|
}
|
||||||
|
|
||||||
void DrawPaletteRegion(Graphics g, Color color, Rectangle region)
|
void DrawPaletteRegion(Graphics g, Color color, Rectangle region)
|
||||||
{
|
{
|
||||||
int cellTotalSize = (paletteCellSize + paletteCellSpacing);
|
int cellTotalSize = (paletteCellSize + paletteCellSpacing);
|
||||||
|
@ -387,23 +428,18 @@ namespace BizHawk.MultiClient
|
||||||
g.DrawRectangle(pen, rect);
|
g.DrawRectangle(pen, rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
class PaletteSelection
|
|
||||||
{
|
|
||||||
public int start, size;
|
|
||||||
}
|
|
||||||
|
|
||||||
//if a tile set is being displayed, this will adapt the user's color selection into a palette to be used for rendering the tiles
|
//if a tile set is being displayed, this will adapt the user's color selection into a palette to be used for rendering the tiles
|
||||||
PaletteSelection GetPaletteSelectionForTileDisplay(int colorSelection)
|
SNESGraphicsDecoder.PaletteSelection GetPaletteSelectionForTileDisplay(int colorSelection)
|
||||||
{
|
{
|
||||||
int bpp = 0;
|
int bpp = 0;
|
||||||
string selection = comboDisplayType.SelectedItem as string;
|
var selection = CurrDisplaySelection;
|
||||||
if (selection == "2bpp tiles") bpp=2;
|
if (selection == eDisplayType.Tiles2bpp) bpp=2;
|
||||||
if (selection == "4bpp tiles") bpp=4;
|
if (selection == eDisplayType.Tiles4bpp) bpp = 4;
|
||||||
if (selection == "8bpp tiles") bpp=8;
|
if (selection == eDisplayType.Tiles8bpp) bpp = 8;
|
||||||
if (selection == "Mode7 tiles") bpp=8;
|
if (selection == eDisplayType.TilesMode7) bpp = 8;
|
||||||
if (selection == "Mode7Ext tiles") bpp = 7;
|
if (selection == eDisplayType.TilesMode7Ext) bpp = 7;
|
||||||
|
|
||||||
PaletteSelection ret = new PaletteSelection();
|
SNESGraphicsDecoder.PaletteSelection ret = new SNESGraphicsDecoder.PaletteSelection();
|
||||||
if(bpp == 0) return ret;
|
if(bpp == 0) return ret;
|
||||||
|
|
||||||
//mode7 ext is fixed to use the top 128 colors
|
//mode7 ext is fixed to use the top 128 colors
|
||||||
|
@ -446,10 +482,18 @@ namespace BizHawk.MultiClient
|
||||||
//first, draw the current selection
|
//first, draw the current selection
|
||||||
var region = GetPaletteRegion(selectedColorNum, 1);
|
var region = GetPaletteRegion(selectedColorNum, 1);
|
||||||
DrawPaletteRegion(g, Color.Red, region);
|
DrawPaletteRegion(g, Color.Red, region);
|
||||||
var palSelection = GetPaletteSelectionForTileDisplay(selectedColorNum);
|
//next, draw the rectangle that advises you which colors could possibly be used for a bg
|
||||||
if (palSelection.size != 0)
|
if (IsDisplayTypeBG(CurrDisplaySelection))
|
||||||
{
|
{
|
||||||
region = GetPaletteRegion(palSelection.start, palSelection.size);
|
var si = gd.ScanScreenInfo();
|
||||||
|
var ps = si.BG[DisplayTypeBGNum(CurrDisplaySelection)].PaletteSelection;
|
||||||
|
region = GetPaletteRegion(ps);
|
||||||
|
DrawPaletteRegion(g, Color.FromArgb(192, 128, 255, 255), region);
|
||||||
|
}
|
||||||
|
//finally, draw the palette the user has chosen, in case he's viewing tiles
|
||||||
|
if (currPaletteSelection.size != 0)
|
||||||
|
{
|
||||||
|
region = GetPaletteRegion(currPaletteSelection.start, currPaletteSelection.size);
|
||||||
DrawPaletteRegion(g, Color.FromArgb(192,255,255,255), region);
|
DrawPaletteRegion(g, Color.FromArgb(192,255,255,255), region);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue