neshawk: show preview of palette to be selected in palette config

This commit is contained in:
goyuken 2014-01-06 20:23:21 +00:00
parent 59ffca28ba
commit d67a2d0df1
2 changed files with 78 additions and 23 deletions

View File

@ -59,6 +59,7 @@
this.DispSprites = new System.Windows.Forms.CheckBox();
this.BGColorDialog = new System.Windows.Forms.ColorDialog();
this.RestoreDefaultsButton = new System.Windows.Forms.Button();
this.pictureBoxPalette = new System.Windows.Forms.PictureBox();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.PAL_LastLineNumeric)).BeginInit();
@ -67,12 +68,13 @@
((System.ComponentModel.ISupportInitialize)(this.NTSC_FirstLineNumeric)).BeginInit();
this.groupBox3.SuspendLayout();
this.groupBox4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxPalette)).BeginInit();
this.SuspendLayout();
//
// OK
//
this.OK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.OK.Location = new System.Drawing.Point(213, 385);
this.OK.Location = new System.Drawing.Point(213, 477);
this.OK.Name = "OK";
this.OK.Size = new System.Drawing.Size(75, 23);
this.OK.TabIndex = 70;
@ -84,7 +86,7 @@
//
this.Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.Cancel.Location = new System.Drawing.Point(294, 385);
this.Cancel.Location = new System.Drawing.Point(294, 477);
this.Cancel.Name = "Cancel";
this.Cancel.Size = new System.Drawing.Size(75, 23);
this.Cancel.TabIndex = 75;
@ -105,13 +107,14 @@
//
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox1.Controls.Add(this.pictureBoxPalette);
this.groupBox1.Controls.Add(this.AutoLoadPalette);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.PalettePath);
this.groupBox1.Controls.Add(this.BrowsePalette);
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(352, 95);
this.groupBox1.Size = new System.Drawing.Size(352, 184);
this.groupBox1.TabIndex = 3;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Palette Config";
@ -119,14 +122,13 @@
// AutoLoadPalette
//
this.AutoLoadPalette.AutoSize = true;
this.AutoLoadPalette.Checked = true;
this.AutoLoadPalette.CheckState = System.Windows.Forms.CheckState.Checked;
this.AutoLoadPalette.Location = new System.Drawing.Point(6, 66);
this.AutoLoadPalette.Name = "AutoLoadPalette";
this.AutoLoadPalette.Size = new System.Drawing.Size(129, 17);
this.AutoLoadPalette.TabIndex = 10;
this.AutoLoadPalette.Text = "Change to this palette";
this.AutoLoadPalette.UseVisualStyleBackColor = true;
this.AutoLoadPalette.Click += new System.EventHandler(this.AutoLoadPalette_Click);
//
// label1
//
@ -173,7 +175,7 @@
this.groupBox2.Controls.Add(this.NTSC_FirstLineNumeric);
this.groupBox2.Controls.Add(this.ClipLeftAndRightCheckBox);
this.groupBox2.Controls.Add(this.AllowMoreSprites);
this.groupBox2.Location = new System.Drawing.Point(12, 113);
this.groupBox2.Location = new System.Drawing.Point(12, 202);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(352, 150);
this.groupBox2.TabIndex = 4;
@ -234,9 +236,9 @@
//
// btnAreaFull
//
this.btnAreaFull.Location = new System.Drawing.Point(7, 115);
this.btnAreaFull.Location = new System.Drawing.Point(6, 115);
this.btnAreaFull.Name = "btnAreaFull";
this.btnAreaFull.Size = new System.Drawing.Size(94, 23);
this.btnAreaFull.Size = new System.Drawing.Size(96, 23);
this.btnAreaFull.TabIndex = 40;
this.btnAreaFull.Text = "Full [0,239]";
this.btnAreaFull.UseVisualStyleBackColor = true;
@ -244,9 +246,9 @@
//
// btnAreaStandard
//
this.btnAreaStandard.Location = new System.Drawing.Point(8, 92);
this.btnAreaStandard.Location = new System.Drawing.Point(6, 92);
this.btnAreaStandard.Name = "btnAreaStandard";
this.btnAreaStandard.Size = new System.Drawing.Size(94, 23);
this.btnAreaStandard.Size = new System.Drawing.Size(96, 23);
this.btnAreaStandard.TabIndex = 35;
this.btnAreaStandard.Text = "Standard [8,231]";
this.btnAreaStandard.UseVisualStyleBackColor = true;
@ -325,7 +327,7 @@
this.groupBox3.Controls.Add(this.groupBox4);
this.groupBox3.Controls.Add(this.DispBackground);
this.groupBox3.Controls.Add(this.DispSprites);
this.groupBox3.Location = new System.Drawing.Point(12, 266);
this.groupBox3.Location = new System.Drawing.Point(12, 358);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(352, 113);
this.groupBox3.TabIndex = 5;
@ -417,7 +419,7 @@
// RestoreDefaultsButton
//
this.RestoreDefaultsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.RestoreDefaultsButton.Location = new System.Drawing.Point(12, 385);
this.RestoreDefaultsButton.Location = new System.Drawing.Point(12, 477);
this.RestoreDefaultsButton.Name = "RestoreDefaultsButton";
this.RestoreDefaultsButton.Size = new System.Drawing.Size(102, 23);
this.RestoreDefaultsButton.TabIndex = 65;
@ -425,13 +427,21 @@
this.RestoreDefaultsButton.UseVisualStyleBackColor = true;
this.RestoreDefaultsButton.Click += new System.EventHandler(this.RestoreDefaultsButton_Click);
//
// pictureBoxPalette
//
this.pictureBoxPalette.Location = new System.Drawing.Point(6, 89);
this.pictureBoxPalette.Name = "pictureBoxPalette";
this.pictureBoxPalette.Size = new System.Drawing.Size(340, 89);
this.pictureBoxPalette.TabIndex = 11;
this.pictureBoxPalette.TabStop = false;
//
// NESGraphicsConfig
//
this.AcceptButton = this.OK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.Cancel;
this.ClientSize = new System.Drawing.Size(381, 409);
this.ClientSize = new System.Drawing.Size(381, 512);
this.Controls.Add(this.RestoreDefaultsButton);
this.Controls.Add(this.groupBox3);
this.Controls.Add(this.groupBox2);
@ -439,7 +449,6 @@
this.Controls.Add(this.Cancel);
this.Controls.Add(this.OK);
this.MaximizeBox = false;
this.MaximumSize = new System.Drawing.Size(389, 494);
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(389, 434);
this.Name = "NESGraphicsConfig";
@ -459,6 +468,7 @@
this.groupBox3.ResumeLayout(false);
this.groupBox3.PerformLayout();
this.groupBox4.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pictureBoxPalette)).EndInit();
this.ResumeLayout(false);
}
@ -496,5 +506,6 @@
private System.Windows.Forms.NumericUpDown PAL_LastLineNumeric;
private System.Windows.Forms.NumericUpDown PAL_FirstLineNumeric;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.PictureBox pictureBoxPalette;
}
}

View File

@ -15,9 +15,9 @@ namespace BizHawk.Client.EmuHawk
//Hotkeys for BG & Sprite display toggle
//NTSC filter settings? Hue, Tint (This should probably be a multiclient thing, not a nes specific thing?)
private HawkFile palette;
private NES nes;
private NES.NESSettings settings;
Bitmap bmp;
public NESGraphicsConfig()
{
@ -44,6 +44,7 @@ namespace BizHawk.Client.EmuHawk
BGColorDialog.Color = Color.FromArgb(unchecked(settings.BackgroundColor | (int)0xFF000000));
checkUseBackdropColor.Checked = (settings.BackgroundColor & 0xFF000000) != 0;
SetColorBox();
SetPaletteImage();
}
private void BrowsePalette_Click(object sender, EventArgs e)
@ -62,29 +63,67 @@ namespace BizHawk.Client.EmuHawk
}
PalettePath.Text = ofd.FileName;
AutoLoadPalette.Checked = true;
SetPaletteImage();
}
private void OK_Click(object sender, EventArgs e)
private void SetPaletteImage()
{
if (AutoLoadPalette.Checked)
var pal = ResolvePalette(false);
int w = pictureBoxPalette.Size.Width;
int h = pictureBoxPalette.Size.Height;
bmp = new Bitmap(w, h);
for (int j = 0; j < h; j++)
{
int cy = j * 4 / h;
for (int i = 0; i < w; i++)
{
int cx = i * 16 / w;
int cindex = cy * 16 + cx;
Color col = Color.FromArgb(0xff, pal[cindex, 0], pal[cindex, 1], pal[cindex, 2]);
bmp.SetPixel(i, j, col);
}
}
pictureBoxPalette.Image = bmp;
}
private int[,] ResolvePalette(bool showmsg = false)
{
if (AutoLoadPalette.Checked) // checkbox checked: try to load palette from file
{
if (PalettePath.Text.Length > 0)
{
palette = new HawkFile(PalettePath.Text);
HawkFile palette = new HawkFile(PalettePath.Text);
if (palette != null && palette.Exists)
{
var data = NES.Palettes.Load_FCEUX_Palette(HawkFile.ReadAllBytes(palette.Name));
settings.Palette = data;
GlobalWin.OSD.AddMessage("Palette file loaded: " + palette.Name);
if (showmsg) GlobalWin.OSD.AddMessage("Palette file loaded: " + palette.Name);
return data;
}
else
{
return settings.Palette;
}
}
else
else // no filename: interpret this as "reset to default"
{
settings.Palette = (int[,])NES.Palettes.FCEUX_Standard.Clone();
GlobalWin.OSD.AddMessage("Standard Palette set");
if (showmsg) GlobalWin.OSD.AddMessage("Standard Palette set");
return (int[,])NES.Palettes.FCEUX_Standard.Clone();
}
}
else // checkbox unchecked: we're reusing whatever palette was set
{
return settings.Palette;
}
}
private void OK_Click(object sender, EventArgs e)
{
settings.Palette = ResolvePalette(true);
settings.NTSC_TopLine = (int)NTSC_FirstLineNumeric.Value;
settings.NTSC_BottomLine = (int)NTSC_LastLineNumeric.Value;
@ -144,5 +183,10 @@ namespace BizHawk.Client.EmuHawk
settings = new NES.NESSettings();
LoadStuff();
}
private void AutoLoadPalette_Click(object sender, EventArgs e)
{
SetPaletteImage();
}
}
}