From d87978087d2f3b477324441c1d7deaf1dfbe49a1 Mon Sep 17 00:00:00 2001 From: adelikat Date: Fri, 31 Jan 2014 22:58:41 +0000 Subject: [PATCH] NES PPU Viewer - implement Always on Top and Floating Window and refactor --- BizHawk.Client.Common/config/Config.cs | 6 +- BizHawk.Client.EmuHawk/MainForm.Events.cs | 2 +- BizHawk.Client.EmuHawk/MainForm.cs | 2 +- .../tools/NES/NESPPU.Designer.cs | 1627 +++++++++-------- BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs | 988 +++++----- BizHawk.Client.EmuHawk/tools/NES/NESPPU.resx | 6 +- BizHawk.Client.EmuHawk/tools/ToolBox.cs | 2 +- 7 files changed, 1357 insertions(+), 1276 deletions(-) diff --git a/BizHawk.Client.Common/config/Config.cs b/BizHawk.Client.Common/config/Config.cs index aad55b09d3..f9b2373ba0 100644 --- a/BizHawk.Client.Common/config/Config.cs +++ b/BizHawk.Client.Common/config/Config.cs @@ -118,7 +118,7 @@ namespace BizHawk.Client.Common public bool DisplayFPS = false; public int DispFPSx = 0; public int DispFPSy = 0; - public int DispFPSanchor = 0; //0 = UL, 1 = UR, 2 = DL, 3 = DR + public int DispFPSanchor = 0; // 0 = UL, 1 = UR, 2 = DL, 3 = DR public bool DisplayFrameCounter = false; public int DispFrameCx = 0; public int DispFrameCy = 14; @@ -344,10 +344,8 @@ namespace BizHawk.Client.Common #endregion // NESPPU Settings + public ToolDialogSettings NesPPUSettings = new ToolDialogSettings(); public bool AutoLoadNESPPU = false; - public bool NESPPUSaveWindowPosition = true; - public int NESPPUWndx = -1; - public int NESPPUWndy = -1; public int NESPPURefreshRate = 4; // NESDebuger Settings diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index 40aac81e34..d9cf64edb7 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -1195,7 +1195,7 @@ namespace BizHawk.Client.EmuHawk private void NESPPUViewerMenuItem_Click(object sender, EventArgs e) { - GlobalWin.Tools.Load(); + GlobalWin.Tools.Load(); } private void NESNametableViewerMenuItem_Click(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index b7986e7bf4..a6059b4564 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -298,7 +298,7 @@ namespace BizHawk.Client.EmuHawk if (Global.Config.AutoLoadNESPPU && Global.Emulator is NES) { - GlobalWin.Tools.Load(); + GlobalWin.Tools.Load(); } if (Global.Config.AutoLoadNESNameTable && Global.Emulator is NES) diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.Designer.cs b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.Designer.cs index 7bd58b374e..1568d2bab3 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.Designer.cs @@ -1,6 +1,6 @@ namespace BizHawk.Client.EmuHawk { - partial class NESPPU + partial class NesPPU { /// /// Required designer variable. @@ -28,768 +28,789 @@ /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NESPPU)); - this.PatternGroup = new System.Windows.Forms.GroupBox(); - this.Table1PaletteLabel = new System.Windows.Forms.Label(); - this.Table0PaletteLabel = new System.Windows.Forms.Label(); - this.PatternView = new BizHawk.Client.EmuHawk.PatternViewer(); - this.PatternContext = new System.Windows.Forms.ContextMenuStrip(this.components); - this.saveImageToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.imageToClipboardToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.refreshToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.PalettesGroup = new System.Windows.Forms.GroupBox(); - this.PaletteView = new BizHawk.Client.EmuHawk.PaletteViewer(); - this.PaletteContext = new System.Windows.Forms.ContextMenuStrip(this.components); - this.saveImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.imageToClipboardToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); - this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.DetailsBox = new System.Windows.Forms.GroupBox(); - this.label2 = new System.Windows.Forms.Label(); - this.Value5Label = new System.Windows.Forms.Label(); - this.Value4Label = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.ZoomBox = new System.Windows.Forms.PictureBox(); - this.Value3Label = new System.Windows.Forms.Label(); - this.Value2Label = new System.Windows.Forms.Label(); - this.ValueLabel = new System.Windows.Forms.Label(); - this.AddressLabel = new System.Windows.Forms.Label(); - this.SpriteViewerBox = new System.Windows.Forms.GroupBox(); - this.SpriteView = new BizHawk.Client.EmuHawk.SpriteViewer(); - this.SpriteContext = new System.Windows.Forms.ContextMenuStrip(this.components); - this.saveImageToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); - this.imageToClipboardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.refreshToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); - this.txtScanline = new System.Windows.Forms.TextBox(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.RefreshRate = new System.Windows.Forms.TrackBar(); - this.menuStrip1 = new MenuStripEx(); - this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.savePaletteScreenshotToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.savePatternScreenshotToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.saveSpriteScreenshotToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.savePaletteToClipboardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.copyPatternToClipboardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.copySpriteToClipboardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.patternToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.table0PaletteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.Table0P0 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table0P1 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table0P2 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table0P3 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table0P4 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table0P5 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table0P6 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table0P7 = new System.Windows.Forms.ToolStripMenuItem(); - this.table1PaletteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table1P0 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table1P1 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table1P2 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table1P3 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table1P4 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table1P5 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table1P6 = new System.Windows.Forms.ToolStripMenuItem(); - this.Table1P7 = new System.Windows.Forms.ToolStripMenuItem(); - this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.autoLoadToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.saveWindowPositionToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.statusStrip1 = new System.Windows.Forms.StatusStrip(); - this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); - this.messagetimer = new System.Windows.Forms.Timer(this.components); - this.PatternGroup.SuspendLayout(); - this.PatternContext.SuspendLayout(); - this.PalettesGroup.SuspendLayout(); - this.PaletteContext.SuspendLayout(); - this.DetailsBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ZoomBox)).BeginInit(); - this.SpriteViewerBox.SuspendLayout(); - this.SpriteContext.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.RefreshRate)).BeginInit(); - this.menuStrip1.SuspendLayout(); - this.statusStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // PatternGroup - // - this.PatternGroup.Controls.Add(this.Table1PaletteLabel); - this.PatternGroup.Controls.Add(this.Table0PaletteLabel); - this.PatternGroup.Controls.Add(this.PatternView); - this.PatternGroup.Location = new System.Drawing.Point(293, 37); - this.PatternGroup.Name = "PatternGroup"; - this.PatternGroup.Size = new System.Drawing.Size(272, 169); - this.PatternGroup.TabIndex = 0; - this.PatternGroup.TabStop = false; - this.PatternGroup.Text = "Pattern Tables"; - // - // Table1PaletteLabel - // - this.Table1PaletteLabel.AutoSize = true; - this.Table1PaletteLabel.Location = new System.Drawing.Point(129, 150); - this.Table1PaletteLabel.Name = "Table1PaletteLabel"; - this.Table1PaletteLabel.Size = new System.Drawing.Size(52, 13); - this.Table1PaletteLabel.TabIndex = 2; - this.Table1PaletteLabel.Text = "Palette: 0"; - // - // Table0PaletteLabel - // - this.Table0PaletteLabel.AutoSize = true; - this.Table0PaletteLabel.Location = new System.Drawing.Point(6, 150); - this.Table0PaletteLabel.Name = "Table0PaletteLabel"; - this.Table0PaletteLabel.Size = new System.Drawing.Size(52, 13); - this.Table0PaletteLabel.TabIndex = 1; - this.Table0PaletteLabel.Text = "Palette: 0"; - // - // PatternView - // - this.PatternView.BackColor = System.Drawing.Color.Transparent; - this.PatternView.ContextMenuStrip = this.PatternContext; - this.PatternView.Location = new System.Drawing.Point(7, 20); - this.PatternView.Name = "PatternView"; - this.PatternView.Size = new System.Drawing.Size(256, 128); - this.PatternView.TabIndex = 0; - this.PatternView.Text = "Pattern Tables"; - this.PatternView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.PatternView_Click); - this.PatternView.MouseEnter += new System.EventHandler(this.PatternView_MouseEnter); - this.PatternView.MouseLeave += new System.EventHandler(this.PatternView_MouseLeave); - this.PatternView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.PatternView_MouseMove); - // - // PatternContext - // - this.PatternContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.saveImageToolStripMenuItem1, - this.imageToClipboardToolStripMenuItem1, - this.refreshToolStripMenuItem1}); - this.PatternContext.Name = "PatternContext"; - this.PatternContext.Size = new System.Drawing.Size(177, 70); - // - // saveImageToolStripMenuItem1 - // - this.saveImageToolStripMenuItem1.Name = "saveImageToolStripMenuItem1"; - this.saveImageToolStripMenuItem1.Size = new System.Drawing.Size(176, 22); - this.saveImageToolStripMenuItem1.Text = "&Save Image..."; - this.saveImageToolStripMenuItem1.Click += new System.EventHandler(this.saveImageToolStripMenuItem1_Click); - // - // imageToClipboardToolStripMenuItem1 - // - this.imageToClipboardToolStripMenuItem1.Name = "imageToClipboardToolStripMenuItem1"; - this.imageToClipboardToolStripMenuItem1.Size = new System.Drawing.Size(176, 22); - this.imageToClipboardToolStripMenuItem1.Text = "Image to &Clipboard"; - this.imageToClipboardToolStripMenuItem1.Click += new System.EventHandler(this.imageToClipboardToolStripMenuItem1_Click); - // - // refreshToolStripMenuItem1 - // - this.refreshToolStripMenuItem1.Name = "refreshToolStripMenuItem1"; - this.refreshToolStripMenuItem1.Size = new System.Drawing.Size(176, 22); - this.refreshToolStripMenuItem1.Text = "&Refresh"; - this.refreshToolStripMenuItem1.Click += new System.EventHandler(this.refreshToolStripMenuItem1_Click); - // - // PalettesGroup - // - this.PalettesGroup.Controls.Add(this.PaletteView); - this.PalettesGroup.Location = new System.Drawing.Point(12, 271); - this.PalettesGroup.Name = "PalettesGroup"; - this.PalettesGroup.Size = new System.Drawing.Size(272, 65); - this.PalettesGroup.TabIndex = 1; - this.PalettesGroup.TabStop = false; - this.PalettesGroup.Text = "Palettes"; - // - // PaletteView - // - this.PaletteView.BackColor = System.Drawing.Color.Transparent; - this.PaletteView.ContextMenuStrip = this.PaletteContext; - this.PaletteView.Location = new System.Drawing.Point(6, 19); - this.PaletteView.Name = "PaletteView"; - this.PaletteView.Size = new System.Drawing.Size(256, 32); - this.PaletteView.TabIndex = 0; - this.PaletteView.Text = "Palettes"; - this.PaletteView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.PaletteView_MouseClick); - this.PaletteView.MouseEnter += new System.EventHandler(this.PaletteView_MouseEnter); - this.PaletteView.MouseLeave += new System.EventHandler(this.PaletteView_MouseLeave); - this.PaletteView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.PaletteView_MouseMove); - // - // PaletteContext - // - this.PaletteContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.saveImageToolStripMenuItem, - this.imageToClipboardToolStripMenuItem2, - this.refreshToolStripMenuItem}); - this.PaletteContext.Name = "PaletteContext"; - this.PaletteContext.Size = new System.Drawing.Size(177, 70); - // - // saveImageToolStripMenuItem - // - this.saveImageToolStripMenuItem.Name = "saveImageToolStripMenuItem"; - this.saveImageToolStripMenuItem.Size = new System.Drawing.Size(176, 22); - this.saveImageToolStripMenuItem.Text = "&Save Image..."; - this.saveImageToolStripMenuItem.Click += new System.EventHandler(this.saveImageToolStripMenuItem_Click); - // - // imageToClipboardToolStripMenuItem2 - // - this.imageToClipboardToolStripMenuItem2.Name = "imageToClipboardToolStripMenuItem2"; - this.imageToClipboardToolStripMenuItem2.Size = new System.Drawing.Size(176, 22); - this.imageToClipboardToolStripMenuItem2.Text = "Image to &Clipboard"; - this.imageToClipboardToolStripMenuItem2.Click += new System.EventHandler(this.imageToClipboardToolStripMenuItem2_Click); - // - // refreshToolStripMenuItem - // - this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem"; - this.refreshToolStripMenuItem.Size = new System.Drawing.Size(176, 22); - this.refreshToolStripMenuItem.Text = "&Refresh"; - this.refreshToolStripMenuItem.Click += new System.EventHandler(this.refreshToolStripMenuItem_Click); - // - // DetailsBox - // - this.DetailsBox.Controls.Add(this.label2); - this.DetailsBox.Controls.Add(this.Value5Label); - this.DetailsBox.Controls.Add(this.Value4Label); - this.DetailsBox.Controls.Add(this.label1); - this.DetailsBox.Controls.Add(this.ZoomBox); - this.DetailsBox.Controls.Add(this.Value3Label); - this.DetailsBox.Controls.Add(this.Value2Label); - this.DetailsBox.Controls.Add(this.ValueLabel); - this.DetailsBox.Controls.Add(this.AddressLabel); - this.DetailsBox.Location = new System.Drawing.Point(12, 95); - this.DetailsBox.Name = "DetailsBox"; - this.DetailsBox.Size = new System.Drawing.Size(272, 170); - this.DetailsBox.TabIndex = 2; - this.DetailsBox.TabStop = false; - this.DetailsBox.Text = "Details"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(6, 31); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(159, 13); - this.label2.TabIndex = 10; - this.label2.Text = "Shift-click to remember selection"; - // - // Value5Label - // - this.Value5Label.AutoSize = true; - this.Value5Label.Location = new System.Drawing.Point(144, 148); - this.Value5Label.Name = "Value5Label"; - this.Value5Label.Size = new System.Drawing.Size(43, 13); - this.Value5Label.TabIndex = 9; - this.Value5Label.Text = "Value 5"; - // - // Value4Label - // - this.Value4Label.AutoSize = true; - this.Value4Label.Location = new System.Drawing.Point(144, 120); - this.Value4Label.Name = "Value4Label"; - this.Value4Label.Size = new System.Drawing.Size(43, 13); - this.Value4Label.TabIndex = 8; - this.Value4Label.Text = "Value 4"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(6, 16); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(152, 13); - this.label1.TabIndex = 7; - this.label1.Text = "Hover over item to view details"; - // - // ZoomBox - // - this.ZoomBox.Location = new System.Drawing.Point(196, 16); - this.ZoomBox.Name = "ZoomBox"; - this.ZoomBox.Size = new System.Drawing.Size(64, 64); - this.ZoomBox.TabIndex = 6; - this.ZoomBox.TabStop = false; - this.ZoomBox.Text = "Details"; - // - // Value3Label - // - this.Value3Label.AutoSize = true; - this.Value3Label.Location = new System.Drawing.Point(144, 92); - this.Value3Label.Name = "Value3Label"; - this.Value3Label.Size = new System.Drawing.Size(43, 13); - this.Value3Label.TabIndex = 5; - this.Value3Label.Text = "Value 3"; - // - // Value2Label - // - this.Value2Label.AutoSize = true; - this.Value2Label.Location = new System.Drawing.Point(10, 148); - this.Value2Label.Name = "Value2Label"; - this.Value2Label.Size = new System.Drawing.Size(43, 13); - this.Value2Label.TabIndex = 3; - this.Value2Label.Text = "Value 2"; - // - // ValueLabel - // - this.ValueLabel.AutoSize = true; - this.ValueLabel.Location = new System.Drawing.Point(10, 120); - this.ValueLabel.Name = "ValueLabel"; - this.ValueLabel.Size = new System.Drawing.Size(43, 13); - this.ValueLabel.TabIndex = 2; - this.ValueLabel.Text = "Value 1"; - // - // AddressLabel - // - this.AddressLabel.AutoSize = true; - this.AddressLabel.Location = new System.Drawing.Point(10, 92); - this.AddressLabel.Name = "AddressLabel"; - this.AddressLabel.Size = new System.Drawing.Size(45, 13); - this.AddressLabel.TabIndex = 1; - this.AddressLabel.Text = "Address"; - // - // SpriteViewerBox - // - this.SpriteViewerBox.Controls.Add(this.SpriteView); - this.SpriteViewerBox.Location = new System.Drawing.Point(293, 212); - this.SpriteViewerBox.Name = "SpriteViewerBox"; - this.SpriteViewerBox.Size = new System.Drawing.Size(272, 124); - this.SpriteViewerBox.TabIndex = 5; - this.SpriteViewerBox.TabStop = false; - this.SpriteViewerBox.Text = "Sprites"; - // - // SpriteView - // - this.SpriteView.BackColor = System.Drawing.Color.Transparent; - this.SpriteView.ContextMenuStrip = this.SpriteContext; - this.SpriteView.Location = new System.Drawing.Point(6, 18); - this.SpriteView.Name = "SpriteView"; - this.SpriteView.Size = new System.Drawing.Size(256, 96); - this.SpriteView.TabIndex = 0; - this.SpriteView.Text = "Sprites"; - this.SpriteView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.SpriteView_MouseClick); - this.SpriteView.MouseEnter += new System.EventHandler(this.SpriteView_MouseEnter); - this.SpriteView.MouseLeave += new System.EventHandler(this.SpriteView_MouseLeave); - this.SpriteView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.SpriteView_MouseMove); - // - // SpriteContext - // - this.SpriteContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.saveImageToolStripMenuItem2, - this.imageToClipboardToolStripMenuItem, - this.refreshToolStripMenuItem2}); - this.SpriteContext.Name = "SpriteContext"; - this.SpriteContext.Size = new System.Drawing.Size(177, 70); - // - // saveImageToolStripMenuItem2 - // - this.saveImageToolStripMenuItem2.Name = "saveImageToolStripMenuItem2"; - this.saveImageToolStripMenuItem2.Size = new System.Drawing.Size(176, 22); - this.saveImageToolStripMenuItem2.Text = "&Save Image..."; - this.saveImageToolStripMenuItem2.Click += new System.EventHandler(this.saveImageToolStripMenuItem2_Click); - // - // imageToClipboardToolStripMenuItem - // - this.imageToClipboardToolStripMenuItem.Name = "imageToClipboardToolStripMenuItem"; - this.imageToClipboardToolStripMenuItem.Size = new System.Drawing.Size(176, 22); - this.imageToClipboardToolStripMenuItem.Text = "Image to &Clipboard"; - this.imageToClipboardToolStripMenuItem.Click += new System.EventHandler(this.imageToClipboardToolStripMenuItem_Click); - // - // refreshToolStripMenuItem2 - // - this.refreshToolStripMenuItem2.Name = "refreshToolStripMenuItem2"; - this.refreshToolStripMenuItem2.Size = new System.Drawing.Size(176, 22); - this.refreshToolStripMenuItem2.Text = "&Refresh"; - this.refreshToolStripMenuItem2.Click += new System.EventHandler(this.refreshToolStripMenuItem2_Click); - // - // txtScanline - // - this.txtScanline.Location = new System.Drawing.Point(7, 16); - this.txtScanline.Name = "txtScanline"; - this.txtScanline.Size = new System.Drawing.Size(60, 20); - this.txtScanline.TabIndex = 6; - this.txtScanline.Text = "0"; - this.txtScanline.TextChanged += new System.EventHandler(this.txtScanline_TextChanged); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.txtScanline); - this.groupBox1.Location = new System.Drawing.Point(12, 37); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(75, 52); - this.groupBox1.TabIndex = 8; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Scanline"; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.label4); - this.groupBox2.Controls.Add(this.label3); - this.groupBox2.Controls.Add(this.RefreshRate); - this.groupBox2.Location = new System.Drawing.Point(93, 37); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(191, 52); - this.groupBox2.TabIndex = 9; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Refresh"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(140, 20); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(29, 13); - this.label4.TabIndex = 11; - this.label4.Text = "Less"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(6, 19); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(31, 13); - this.label3.TabIndex = 10; - this.label3.Text = "More"; - // - // RefreshRate - // - this.RefreshRate.AutoSize = false; - this.RefreshRate.LargeChange = 2; - this.RefreshRate.Location = new System.Drawing.Point(39, 15); - this.RefreshRate.Maximum = 8; - this.RefreshRate.Minimum = 1; - this.RefreshRate.Name = "RefreshRate"; - this.RefreshRate.Size = new System.Drawing.Size(104, 31); - this.RefreshRate.TabIndex = 0; - this.RefreshRate.TickFrequency = 8; - this.RefreshRate.Value = 1; - // - // menuStrip1 - // - this.menuStrip1.ClickThrough = true; - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.fileToolStripMenuItem, - this.patternToolStripMenuItem, - this.settingsToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(574, 24); - this.menuStrip1.TabIndex = 10; - this.menuStrip1.Text = "menuStrip1"; - // - // fileToolStripMenuItem - // - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.savePaletteScreenshotToolStripMenuItem, - this.savePatternScreenshotToolStripMenuItem, - this.saveSpriteScreenshotToolStripMenuItem, + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NesPPU)); + this.PatternGroup = new System.Windows.Forms.GroupBox(); + this.Table1PaletteLabel = new System.Windows.Forms.Label(); + this.Table0PaletteLabel = new System.Windows.Forms.Label(); + this.PatternView = new BizHawk.Client.EmuHawk.PatternViewer(); + this.PatternContext = new System.Windows.Forms.ContextMenuStrip(this.components); + this.PatternSaveImageMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PatternImageToClipboardMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PatternRefreshMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PalettesGroup = new System.Windows.Forms.GroupBox(); + this.PaletteView = new BizHawk.Client.EmuHawk.PaletteViewer(); + this.PaletteContext = new System.Windows.Forms.ContextMenuStrip(this.components); + this.PaletteSaveImageMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PaletteImageToClipboardMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PaletteRefreshMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DetailsBox = new System.Windows.Forms.GroupBox(); + this.label2 = new System.Windows.Forms.Label(); + this.Value5Label = new System.Windows.Forms.Label(); + this.Value4Label = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.ZoomBox = new System.Windows.Forms.PictureBox(); + this.Value3Label = new System.Windows.Forms.Label(); + this.Value2Label = new System.Windows.Forms.Label(); + this.ValueLabel = new System.Windows.Forms.Label(); + this.AddressLabel = new System.Windows.Forms.Label(); + this.SpriteViewerBox = new System.Windows.Forms.GroupBox(); + this.SpriteView = new BizHawk.Client.EmuHawk.SpriteViewer(); + this.SpriteContext = new System.Windows.Forms.ContextMenuStrip(this.components); + this.SpriteSaveImageMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SpriteImageToClipboardMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SpriteRefreshMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.txtScanline = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.RefreshRate = new System.Windows.Forms.TrackBar(); + this.NesPPUMenu = new MenuStripEx(); + this.FileSubMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.SavePaletteScreenshotMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SavePatternScreenshotMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SaveSpriteScreenshotMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.CopyPaletteToClipboardMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.CopyPatternToClipboardMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.CopySpriteToClipboardMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.ExitMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.PatternSubMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.Table0PaletteSubMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.Table0P0MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table0P1MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table0P2MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table0P3MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table0P4MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table0P5MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table0P6MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table0P7MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table1PaletteSubMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.Table1P0MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table1P1MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table1P2MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table1P3MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table1P4MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table1P5MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table1P6MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Table1P7MenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SettingsSubMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AutoLoadMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SaveWindowPositionMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.AlwaysOnTopMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.FloatingWindowMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.NesPPUStatusBar = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.Messagetimer = new System.Windows.Forms.Timer(this.components); + this.PatternGroup.SuspendLayout(); + this.PatternContext.SuspendLayout(); + this.PalettesGroup.SuspendLayout(); + this.PaletteContext.SuspendLayout(); + this.DetailsBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ZoomBox)).BeginInit(); + this.SpriteViewerBox.SuspendLayout(); + this.SpriteContext.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RefreshRate)).BeginInit(); + this.NesPPUMenu.SuspendLayout(); + this.NesPPUStatusBar.SuspendLayout(); + this.SuspendLayout(); + // + // PatternGroup + // + this.PatternGroup.Controls.Add(this.Table1PaletteLabel); + this.PatternGroup.Controls.Add(this.Table0PaletteLabel); + this.PatternGroup.Controls.Add(this.PatternView); + this.PatternGroup.Location = new System.Drawing.Point(293, 37); + this.PatternGroup.Name = "PatternGroup"; + this.PatternGroup.Size = new System.Drawing.Size(272, 169); + this.PatternGroup.TabIndex = 0; + this.PatternGroup.TabStop = false; + this.PatternGroup.Text = "Pattern Tables"; + // + // Table1PaletteLabel + // + this.Table1PaletteLabel.AutoSize = true; + this.Table1PaletteLabel.Location = new System.Drawing.Point(129, 150); + this.Table1PaletteLabel.Name = "Table1PaletteLabel"; + this.Table1PaletteLabel.Size = new System.Drawing.Size(52, 13); + this.Table1PaletteLabel.TabIndex = 2; + this.Table1PaletteLabel.Text = "Palette: 0"; + // + // Table0PaletteLabel + // + this.Table0PaletteLabel.AutoSize = true; + this.Table0PaletteLabel.Location = new System.Drawing.Point(6, 150); + this.Table0PaletteLabel.Name = "Table0PaletteLabel"; + this.Table0PaletteLabel.Size = new System.Drawing.Size(52, 13); + this.Table0PaletteLabel.TabIndex = 1; + this.Table0PaletteLabel.Text = "Palette: 0"; + // + // PatternView + // + this.PatternView.BackColor = System.Drawing.Color.Transparent; + this.PatternView.ContextMenuStrip = this.PatternContext; + this.PatternView.Location = new System.Drawing.Point(7, 20); + this.PatternView.Name = "PatternView"; + this.PatternView.Size = new System.Drawing.Size(256, 128); + this.PatternView.TabIndex = 0; + this.PatternView.Text = "Pattern Tables"; + this.PatternView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.PatternView_Click); + this.PatternView.MouseEnter += new System.EventHandler(this.PatternView_MouseEnter); + this.PatternView.MouseLeave += new System.EventHandler(this.PatternView_MouseLeave); + this.PatternView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.PatternView_MouseMove); + // + // PatternContext + // + this.PatternContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.PatternSaveImageMenuItem, + this.PatternImageToClipboardMenuItem, + this.PatternRefreshMenuItem}); + this.PatternContext.Name = "PatternContext"; + this.PatternContext.Size = new System.Drawing.Size(177, 70); + // + // PatternSaveImageMenuItem + // + this.PatternSaveImageMenuItem.Name = "PatternSaveImageMenuItem"; + this.PatternSaveImageMenuItem.Size = new System.Drawing.Size(176, 22); + this.PatternSaveImageMenuItem.Text = "&Save Image..."; + this.PatternSaveImageMenuItem.Click += new System.EventHandler(this.SavePatternScreenshotMenuItem_Click); + // + // PatternImageToClipboardMenuItem + // + this.PatternImageToClipboardMenuItem.Name = "PatternImageToClipboardMenuItem"; + this.PatternImageToClipboardMenuItem.Size = new System.Drawing.Size(176, 22); + this.PatternImageToClipboardMenuItem.Text = "Image to &Clipboard"; + this.PatternImageToClipboardMenuItem.Click += new System.EventHandler(this.CopyPatternToClipboardMenuItem_Click); + // + // PatternRefreshMenuItem + // + this.PatternRefreshMenuItem.Name = "PatternRefreshMenuItem"; + this.PatternRefreshMenuItem.Size = new System.Drawing.Size(176, 22); + this.PatternRefreshMenuItem.Text = "&Refresh"; + this.PatternRefreshMenuItem.Click += new System.EventHandler(this.PatternRefreshMenuItem_Click); + // + // PalettesGroup + // + this.PalettesGroup.Controls.Add(this.PaletteView); + this.PalettesGroup.Location = new System.Drawing.Point(12, 271); + this.PalettesGroup.Name = "PalettesGroup"; + this.PalettesGroup.Size = new System.Drawing.Size(272, 65); + this.PalettesGroup.TabIndex = 1; + this.PalettesGroup.TabStop = false; + this.PalettesGroup.Text = "Palettes"; + // + // PaletteView + // + this.PaletteView.BackColor = System.Drawing.Color.Transparent; + this.PaletteView.ContextMenuStrip = this.PaletteContext; + this.PaletteView.Location = new System.Drawing.Point(6, 19); + this.PaletteView.Name = "PaletteView"; + this.PaletteView.Size = new System.Drawing.Size(256, 32); + this.PaletteView.TabIndex = 0; + this.PaletteView.Text = "Palettes"; + this.PaletteView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.PaletteView_MouseClick); + this.PaletteView.MouseEnter += new System.EventHandler(this.PaletteView_MouseEnter); + this.PaletteView.MouseLeave += new System.EventHandler(this.PaletteView_MouseLeave); + this.PaletteView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.PaletteView_MouseMove); + // + // PaletteContext + // + this.PaletteContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.PaletteSaveImageMenuItem, + this.PaletteImageToClipboardMenuItem, + this.PaletteRefreshMenuItem}); + this.PaletteContext.Name = "PaletteContext"; + this.PaletteContext.Size = new System.Drawing.Size(177, 70); + // + // PaletteSaveImageMenuItem + // + this.PaletteSaveImageMenuItem.Name = "PaletteSaveImageMenuItem"; + this.PaletteSaveImageMenuItem.Size = new System.Drawing.Size(176, 22); + this.PaletteSaveImageMenuItem.Text = "&Save Image..."; + this.PaletteSaveImageMenuItem.Click += new System.EventHandler(this.SavePaletteScreenshotMenuItem_Click); + // + // PaletteImageToClipboardMenuItem + // + this.PaletteImageToClipboardMenuItem.Name = "PaletteImageToClipboardMenuItem"; + this.PaletteImageToClipboardMenuItem.Size = new System.Drawing.Size(176, 22); + this.PaletteImageToClipboardMenuItem.Text = "Image to &Clipboard"; + this.PaletteImageToClipboardMenuItem.Click += new System.EventHandler(this.CopyPaletteToClipboardMenuItem_Click); + // + // PaletteRefreshMenuItem + // + this.PaletteRefreshMenuItem.Name = "PaletteRefreshMenuItem"; + this.PaletteRefreshMenuItem.Size = new System.Drawing.Size(176, 22); + this.PaletteRefreshMenuItem.Text = "&Refresh"; + this.PaletteRefreshMenuItem.Click += new System.EventHandler(this.PaletteRefreshMenuItem_Click); + // + // DetailsBox + // + this.DetailsBox.Controls.Add(this.label2); + this.DetailsBox.Controls.Add(this.Value5Label); + this.DetailsBox.Controls.Add(this.Value4Label); + this.DetailsBox.Controls.Add(this.label1); + this.DetailsBox.Controls.Add(this.ZoomBox); + this.DetailsBox.Controls.Add(this.Value3Label); + this.DetailsBox.Controls.Add(this.Value2Label); + this.DetailsBox.Controls.Add(this.ValueLabel); + this.DetailsBox.Controls.Add(this.AddressLabel); + this.DetailsBox.Location = new System.Drawing.Point(12, 95); + this.DetailsBox.Name = "DetailsBox"; + this.DetailsBox.Size = new System.Drawing.Size(272, 170); + this.DetailsBox.TabIndex = 2; + this.DetailsBox.TabStop = false; + this.DetailsBox.Text = "Details"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 31); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(159, 13); + this.label2.TabIndex = 10; + this.label2.Text = "Shift-click to remember selection"; + // + // Value5Label + // + this.Value5Label.AutoSize = true; + this.Value5Label.Location = new System.Drawing.Point(144, 148); + this.Value5Label.Name = "Value5Label"; + this.Value5Label.Size = new System.Drawing.Size(43, 13); + this.Value5Label.TabIndex = 9; + this.Value5Label.Text = "Value 5"; + // + // Value4Label + // + this.Value4Label.AutoSize = true; + this.Value4Label.Location = new System.Drawing.Point(144, 120); + this.Value4Label.Name = "Value4Label"; + this.Value4Label.Size = new System.Drawing.Size(43, 13); + this.Value4Label.TabIndex = 8; + this.Value4Label.Text = "Value 4"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(152, 13); + this.label1.TabIndex = 7; + this.label1.Text = "Hover over item to view details"; + // + // ZoomBox + // + this.ZoomBox.Location = new System.Drawing.Point(196, 16); + this.ZoomBox.Name = "ZoomBox"; + this.ZoomBox.Size = new System.Drawing.Size(64, 64); + this.ZoomBox.TabIndex = 6; + this.ZoomBox.TabStop = false; + this.ZoomBox.Text = "Details"; + // + // Value3Label + // + this.Value3Label.AutoSize = true; + this.Value3Label.Location = new System.Drawing.Point(144, 92); + this.Value3Label.Name = "Value3Label"; + this.Value3Label.Size = new System.Drawing.Size(43, 13); + this.Value3Label.TabIndex = 5; + this.Value3Label.Text = "Value 3"; + // + // Value2Label + // + this.Value2Label.AutoSize = true; + this.Value2Label.Location = new System.Drawing.Point(10, 148); + this.Value2Label.Name = "Value2Label"; + this.Value2Label.Size = new System.Drawing.Size(43, 13); + this.Value2Label.TabIndex = 3; + this.Value2Label.Text = "Value 2"; + // + // ValueLabel + // + this.ValueLabel.AutoSize = true; + this.ValueLabel.Location = new System.Drawing.Point(10, 120); + this.ValueLabel.Name = "ValueLabel"; + this.ValueLabel.Size = new System.Drawing.Size(43, 13); + this.ValueLabel.TabIndex = 2; + this.ValueLabel.Text = "Value 1"; + // + // AddressLabel + // + this.AddressLabel.AutoSize = true; + this.AddressLabel.Location = new System.Drawing.Point(10, 92); + this.AddressLabel.Name = "AddressLabel"; + this.AddressLabel.Size = new System.Drawing.Size(45, 13); + this.AddressLabel.TabIndex = 1; + this.AddressLabel.Text = "Address"; + // + // SpriteViewerBox + // + this.SpriteViewerBox.Controls.Add(this.SpriteView); + this.SpriteViewerBox.Location = new System.Drawing.Point(293, 212); + this.SpriteViewerBox.Name = "SpriteViewerBox"; + this.SpriteViewerBox.Size = new System.Drawing.Size(272, 124); + this.SpriteViewerBox.TabIndex = 5; + this.SpriteViewerBox.TabStop = false; + this.SpriteViewerBox.Text = "Sprites"; + // + // SpriteView + // + this.SpriteView.BackColor = System.Drawing.Color.Transparent; + this.SpriteView.ContextMenuStrip = this.SpriteContext; + this.SpriteView.Location = new System.Drawing.Point(6, 18); + this.SpriteView.Name = "SpriteView"; + this.SpriteView.Size = new System.Drawing.Size(256, 96); + this.SpriteView.TabIndex = 0; + this.SpriteView.Text = "Sprites"; + this.SpriteView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.SpriteView_MouseClick); + this.SpriteView.MouseEnter += new System.EventHandler(this.SpriteView_MouseEnter); + this.SpriteView.MouseLeave += new System.EventHandler(this.SpriteView_MouseLeave); + this.SpriteView.MouseMove += new System.Windows.Forms.MouseEventHandler(this.SpriteView_MouseMove); + // + // SpriteContext + // + this.SpriteContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SpriteSaveImageMenuItem, + this.SpriteImageToClipboardMenuItem, + this.SpriteRefreshMenuItem}); + this.SpriteContext.Name = "SpriteContext"; + this.SpriteContext.Size = new System.Drawing.Size(177, 70); + // + // SpriteSaveImageMenuItem + // + this.SpriteSaveImageMenuItem.Name = "SpriteSaveImageMenuItem"; + this.SpriteSaveImageMenuItem.Size = new System.Drawing.Size(176, 22); + this.SpriteSaveImageMenuItem.Text = "&Save Image..."; + this.SpriteSaveImageMenuItem.Click += new System.EventHandler(this.SaveSpriteScreenshotMenuItem_Click); + // + // SpriteImageToClipboardMenuItem + // + this.SpriteImageToClipboardMenuItem.Name = "SpriteImageToClipboardMenuItem"; + this.SpriteImageToClipboardMenuItem.Size = new System.Drawing.Size(176, 22); + this.SpriteImageToClipboardMenuItem.Text = "Image to &Clipboard"; + this.SpriteImageToClipboardMenuItem.Click += new System.EventHandler(this.CopySpriteToClipboardMenuItem_Click); + // + // SpriteRefreshMenuItem + // + this.SpriteRefreshMenuItem.Name = "SpriteRefreshMenuItem"; + this.SpriteRefreshMenuItem.Size = new System.Drawing.Size(176, 22); + this.SpriteRefreshMenuItem.Text = "&Refresh"; + this.SpriteRefreshMenuItem.Click += new System.EventHandler(this.SpriteRefreshMenuItem_Click); + // + // txtScanline + // + this.txtScanline.Location = new System.Drawing.Point(7, 16); + this.txtScanline.Name = "txtScanline"; + this.txtScanline.Size = new System.Drawing.Size(60, 20); + this.txtScanline.TabIndex = 6; + this.txtScanline.Text = "0"; + this.txtScanline.TextChanged += new System.EventHandler(this.ScanlineTextbox_TextChanged); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.txtScanline); + this.groupBox1.Location = new System.Drawing.Point(12, 37); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(75, 52); + this.groupBox1.TabIndex = 8; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Scanline"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Controls.Add(this.label3); + this.groupBox2.Controls.Add(this.RefreshRate); + this.groupBox2.Location = new System.Drawing.Point(93, 37); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(191, 52); + this.groupBox2.TabIndex = 9; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Refresh"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(140, 20); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(29, 13); + this.label4.TabIndex = 11; + this.label4.Text = "Less"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 19); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(31, 13); + this.label3.TabIndex = 10; + this.label3.Text = "More"; + // + // RefreshRate + // + this.RefreshRate.AutoSize = false; + this.RefreshRate.LargeChange = 2; + this.RefreshRate.Location = new System.Drawing.Point(39, 15); + this.RefreshRate.Maximum = 8; + this.RefreshRate.Minimum = 1; + this.RefreshRate.Name = "RefreshRate"; + this.RefreshRate.Size = new System.Drawing.Size(104, 31); + this.RefreshRate.TabIndex = 0; + this.RefreshRate.TickFrequency = 8; + this.RefreshRate.Value = 1; + // + // NesPPUMenu + // + this.NesPPUMenu.ClickThrough = true; + this.NesPPUMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.FileSubMenu, + this.PatternSubMenu, + this.SettingsSubMenu}); + this.NesPPUMenu.Location = new System.Drawing.Point(0, 0); + this.NesPPUMenu.Name = "NesPPUMenu"; + this.NesPPUMenu.Size = new System.Drawing.Size(574, 24); + this.NesPPUMenu.TabIndex = 10; + this.NesPPUMenu.Text = "menuStrip1"; + // + // FileSubMenu + // + this.FileSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SavePaletteScreenshotMenuItem, + this.SavePatternScreenshotMenuItem, + this.SaveSpriteScreenshotMenuItem, this.toolStripSeparator1, - this.savePaletteToClipboardToolStripMenuItem, - this.copyPatternToClipboardToolStripMenuItem, - this.copySpriteToClipboardToolStripMenuItem, + this.CopyPaletteToClipboardMenuItem, + this.CopyPatternToClipboardMenuItem, + this.CopySpriteToClipboardMenuItem, this.toolStripSeparator2, - this.exitToolStripMenuItem}); - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); - this.fileToolStripMenuItem.Text = "&File"; - // - // savePaletteScreenshotToolStripMenuItem - // - this.savePaletteScreenshotToolStripMenuItem.Name = "savePaletteScreenshotToolStripMenuItem"; - this.savePaletteScreenshotToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.savePaletteScreenshotToolStripMenuItem.Text = "Save Palette Screenshot..."; - this.savePaletteScreenshotToolStripMenuItem.Click += new System.EventHandler(this.savePaletteScreenshotToolStripMenuItem_Click); - // - // savePatternScreenshotToolStripMenuItem - // - this.savePatternScreenshotToolStripMenuItem.Name = "savePatternScreenshotToolStripMenuItem"; - this.savePatternScreenshotToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.savePatternScreenshotToolStripMenuItem.Text = "Save Pattern Screenshot..."; - // - // saveSpriteScreenshotToolStripMenuItem - // - this.saveSpriteScreenshotToolStripMenuItem.Name = "saveSpriteScreenshotToolStripMenuItem"; - this.saveSpriteScreenshotToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.saveSpriteScreenshotToolStripMenuItem.Text = "Save Sprite Screenshot..."; - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(209, 6); - // - // savePaletteToClipboardToolStripMenuItem - // - this.savePaletteToClipboardToolStripMenuItem.Name = "savePaletteToClipboardToolStripMenuItem"; - this.savePaletteToClipboardToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.savePaletteToClipboardToolStripMenuItem.Text = "Copy Palette to Clipboard"; - this.savePaletteToClipboardToolStripMenuItem.Click += new System.EventHandler(this.savePaletteToClipboardToolStripMenuItem_Click); - // - // copyPatternToClipboardToolStripMenuItem - // - this.copyPatternToClipboardToolStripMenuItem.Name = "copyPatternToClipboardToolStripMenuItem"; - this.copyPatternToClipboardToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.copyPatternToClipboardToolStripMenuItem.Text = "Copy Pattern to Clipboard"; - this.copyPatternToClipboardToolStripMenuItem.Click += new System.EventHandler(this.copyPatternToClipboardToolStripMenuItem_Click); - // - // copySpriteToClipboardToolStripMenuItem - // - this.copySpriteToClipboardToolStripMenuItem.Name = "copySpriteToClipboardToolStripMenuItem"; - this.copySpriteToClipboardToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.copySpriteToClipboardToolStripMenuItem.Text = "Copy Sprite to Clipboard"; - this.copySpriteToClipboardToolStripMenuItem.Click += new System.EventHandler(this.copySpriteToClipboardToolStripMenuItem_Click); - // - // toolStripSeparator2 - // - this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(209, 6); - // - // exitToolStripMenuItem - // - this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(212, 22); - this.exitToolStripMenuItem.Text = "E&xit"; - this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); - // - // patternToolStripMenuItem - // - this.patternToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.table0PaletteToolStripMenuItem, - this.table1PaletteToolStripMenuItem1}); - this.patternToolStripMenuItem.Name = "patternToolStripMenuItem"; - this.patternToolStripMenuItem.Size = new System.Drawing.Size(57, 20); - this.patternToolStripMenuItem.Text = "&Pattern"; - this.patternToolStripMenuItem.DropDownOpened += new System.EventHandler(this.toolStripDropDownButton2_DropDownOpened); - // - // table0PaletteToolStripMenuItem - // - this.table0PaletteToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.Table0P0, - this.Table0P1, - this.Table0P2, - this.Table0P3, - this.Table0P4, - this.Table0P5, - this.Table0P6, - this.Table0P7}); - this.table0PaletteToolStripMenuItem.Name = "table0PaletteToolStripMenuItem"; - this.table0PaletteToolStripMenuItem.Size = new System.Drawing.Size(151, 22); - this.table0PaletteToolStripMenuItem.Text = "Table 0 Palette"; - // - // Table0P0 - // - this.Table0P0.Name = "Table0P0"; - this.Table0P0.Size = new System.Drawing.Size(80, 22); - this.Table0P0.Text = "0"; - this.Table0P0.Click += new System.EventHandler(this.Palette_Click); - // - // Table0P1 - // - this.Table0P1.Name = "Table0P1"; - this.Table0P1.Size = new System.Drawing.Size(80, 22); - this.Table0P1.Text = "1"; - this.Table0P1.Click += new System.EventHandler(this.Palette_Click); - // - // Table0P2 - // - this.Table0P2.Name = "Table0P2"; - this.Table0P2.Size = new System.Drawing.Size(80, 22); - this.Table0P2.Text = "2"; - this.Table0P2.Click += new System.EventHandler(this.Palette_Click); - // - // Table0P3 - // - this.Table0P3.Name = "Table0P3"; - this.Table0P3.Size = new System.Drawing.Size(80, 22); - this.Table0P3.Text = "3"; - this.Table0P3.Click += new System.EventHandler(this.Palette_Click); - // - // Table0P4 - // - this.Table0P4.Name = "Table0P4"; - this.Table0P4.Size = new System.Drawing.Size(80, 22); - this.Table0P4.Text = "4"; - this.Table0P4.Click += new System.EventHandler(this.Palette_Click); - // - // Table0P5 - // - this.Table0P5.Name = "Table0P5"; - this.Table0P5.Size = new System.Drawing.Size(80, 22); - this.Table0P5.Text = "5"; - this.Table0P5.Click += new System.EventHandler(this.Palette_Click); - // - // Table0P6 - // - this.Table0P6.Name = "Table0P6"; - this.Table0P6.Size = new System.Drawing.Size(80, 22); - this.Table0P6.Text = "6"; - this.Table0P6.Click += new System.EventHandler(this.Palette_Click); - // - // Table0P7 - // - this.Table0P7.Name = "Table0P7"; - this.Table0P7.Size = new System.Drawing.Size(80, 22); - this.Table0P7.Text = "7"; - this.Table0P7.Click += new System.EventHandler(this.Palette_Click); - // - // table1PaletteToolStripMenuItem1 - // - this.table1PaletteToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.Table1P0, - this.Table1P1, - this.Table1P2, - this.Table1P3, - this.Table1P4, - this.Table1P5, - this.Table1P6, - this.Table1P7}); - this.table1PaletteToolStripMenuItem1.Name = "table1PaletteToolStripMenuItem1"; - this.table1PaletteToolStripMenuItem1.Size = new System.Drawing.Size(151, 22); - this.table1PaletteToolStripMenuItem1.Text = "Table 1 Palette"; - // - // Table1P0 - // - this.Table1P0.Name = "Table1P0"; - this.Table1P0.Size = new System.Drawing.Size(80, 22); - this.Table1P0.Text = "0"; - this.Table1P0.Click += new System.EventHandler(this.Palette_Click); - // - // Table1P1 - // - this.Table1P1.Name = "Table1P1"; - this.Table1P1.Size = new System.Drawing.Size(80, 22); - this.Table1P1.Text = "1"; - this.Table1P1.Click += new System.EventHandler(this.Palette_Click); - // - // Table1P2 - // - this.Table1P2.Name = "Table1P2"; - this.Table1P2.Size = new System.Drawing.Size(80, 22); - this.Table1P2.Text = "2"; - this.Table1P2.Click += new System.EventHandler(this.Palette_Click); - // - // Table1P3 - // - this.Table1P3.Name = "Table1P3"; - this.Table1P3.Size = new System.Drawing.Size(80, 22); - this.Table1P3.Text = "3"; - this.Table1P3.Click += new System.EventHandler(this.Palette_Click); - // - // Table1P4 - // - this.Table1P4.Name = "Table1P4"; - this.Table1P4.Size = new System.Drawing.Size(80, 22); - this.Table1P4.Text = "4"; - this.Table1P4.Click += new System.EventHandler(this.Palette_Click); - // - // Table1P5 - // - this.Table1P5.Name = "Table1P5"; - this.Table1P5.Size = new System.Drawing.Size(80, 22); - this.Table1P5.Text = "5"; - this.Table1P5.Click += new System.EventHandler(this.Palette_Click); - // - // Table1P6 - // - this.Table1P6.Name = "Table1P6"; - this.Table1P6.Size = new System.Drawing.Size(80, 22); - this.Table1P6.Text = "6"; - this.Table1P6.Click += new System.EventHandler(this.Palette_Click); - // - // Table1P7 - // - this.Table1P7.Name = "Table1P7"; - this.Table1P7.Size = new System.Drawing.Size(80, 22); - this.Table1P7.Text = "7"; - this.Table1P7.Click += new System.EventHandler(this.Palette_Click); - // - // settingsToolStripMenuItem - // - this.settingsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.autoLoadToolStripMenuItem1, - this.saveWindowPositionToolStripMenuItem1}); - this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; - this.settingsToolStripMenuItem.Size = new System.Drawing.Size(61, 20); - this.settingsToolStripMenuItem.Text = "&Settings"; - this.settingsToolStripMenuItem.DropDownOpened += new System.EventHandler(this.toolStripDropDownButton1_DropDownOpened); - // - // autoLoadToolStripMenuItem1 - // - this.autoLoadToolStripMenuItem1.Name = "autoLoadToolStripMenuItem1"; - this.autoLoadToolStripMenuItem1.Size = new System.Drawing.Size(191, 22); - this.autoLoadToolStripMenuItem1.Text = "Autoload"; - this.autoLoadToolStripMenuItem1.Click += new System.EventHandler(this.autoloadToolStripMenuItem_Click); - // - // saveWindowPositionToolStripMenuItem1 - // - this.saveWindowPositionToolStripMenuItem1.Name = "saveWindowPositionToolStripMenuItem1"; - this.saveWindowPositionToolStripMenuItem1.Size = new System.Drawing.Size(191, 22); - this.saveWindowPositionToolStripMenuItem1.Text = "Save Window Position"; - this.saveWindowPositionToolStripMenuItem1.Click += new System.EventHandler(this.saveWindowPositionToolStripMenuItem_Click); - // - // statusStrip1 - // - this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ExitMenuItem}); + this.FileSubMenu.Name = "FileSubMenu"; + this.FileSubMenu.Size = new System.Drawing.Size(37, 20); + this.FileSubMenu.Text = "&File"; + // + // SavePaletteScreenshotMenuItem + // + this.SavePaletteScreenshotMenuItem.Name = "SavePaletteScreenshotMenuItem"; + this.SavePaletteScreenshotMenuItem.Size = new System.Drawing.Size(212, 22); + this.SavePaletteScreenshotMenuItem.Text = "Save Palette Screenshot..."; + this.SavePaletteScreenshotMenuItem.Click += new System.EventHandler(this.SavePaletteScreenshotMenuItem_Click); + // + // SavePatternScreenshotMenuItem + // + this.SavePatternScreenshotMenuItem.Name = "SavePatternScreenshotMenuItem"; + this.SavePatternScreenshotMenuItem.Size = new System.Drawing.Size(212, 22); + this.SavePatternScreenshotMenuItem.Text = "Save Pattern Screenshot..."; + this.SavePatternScreenshotMenuItem.Click += new System.EventHandler(this.SavePatternScreenshotMenuItem_Click); + // + // SaveSpriteScreenshotMenuItem + // + this.SaveSpriteScreenshotMenuItem.Name = "SaveSpriteScreenshotMenuItem"; + this.SaveSpriteScreenshotMenuItem.Size = new System.Drawing.Size(212, 22); + this.SaveSpriteScreenshotMenuItem.Text = "Save Sprite Screenshot..."; + this.SaveSpriteScreenshotMenuItem.Click += new System.EventHandler(this.SaveSpriteScreenshotMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(209, 6); + // + // CopyPaletteToClipboardMenuItem + // + this.CopyPaletteToClipboardMenuItem.Name = "CopyPaletteToClipboardMenuItem"; + this.CopyPaletteToClipboardMenuItem.Size = new System.Drawing.Size(212, 22); + this.CopyPaletteToClipboardMenuItem.Text = "Copy Palette to Clipboard"; + this.CopyPaletteToClipboardMenuItem.Click += new System.EventHandler(this.CopyPaletteToClipboardMenuItem_Click); + // + // CopyPatternToClipboardMenuItem + // + this.CopyPatternToClipboardMenuItem.Name = "CopyPatternToClipboardMenuItem"; + this.CopyPatternToClipboardMenuItem.Size = new System.Drawing.Size(212, 22); + this.CopyPatternToClipboardMenuItem.Text = "Copy Pattern to Clipboard"; + this.CopyPatternToClipboardMenuItem.Click += new System.EventHandler(this.CopyPatternToClipboardMenuItem_Click); + // + // CopySpriteToClipboardMenuItem + // + this.CopySpriteToClipboardMenuItem.Name = "CopySpriteToClipboardMenuItem"; + this.CopySpriteToClipboardMenuItem.Size = new System.Drawing.Size(212, 22); + this.CopySpriteToClipboardMenuItem.Text = "Copy Sprite to Clipboard"; + this.CopySpriteToClipboardMenuItem.Click += new System.EventHandler(this.CopySpriteToClipboardMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(209, 6); + // + // ExitMenuItem + // + this.ExitMenuItem.Name = "ExitMenuItem"; + this.ExitMenuItem.Size = new System.Drawing.Size(212, 22); + this.ExitMenuItem.Text = "E&xit"; + this.ExitMenuItem.Click += new System.EventHandler(this.ExitMenuItem_Click); + // + // PatternSubMenu + // + this.PatternSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Table0PaletteSubMenu, + this.Table1PaletteSubMenu}); + this.PatternSubMenu.Name = "PatternSubMenu"; + this.PatternSubMenu.Size = new System.Drawing.Size(57, 20); + this.PatternSubMenu.Text = "&Pattern"; + // + // Table0PaletteSubMenu + // + this.Table0PaletteSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Table0P0MenuItem, + this.Table0P1MenuItem, + this.Table0P2MenuItem, + this.Table0P3MenuItem, + this.Table0P4MenuItem, + this.Table0P5MenuItem, + this.Table0P6MenuItem, + this.Table0P7MenuItem}); + this.Table0PaletteSubMenu.Name = "Table0PaletteSubMenu"; + this.Table0PaletteSubMenu.Size = new System.Drawing.Size(151, 22); + this.Table0PaletteSubMenu.Text = "Table 0 Palette"; + this.Table0PaletteSubMenu.DropDownOpened += new System.EventHandler(this.Table0PaletteSubMenu_DropDownOpened); + // + // Table0P0MenuItem + // + this.Table0P0MenuItem.Name = "Table0P0MenuItem"; + this.Table0P0MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table0P0MenuItem.Text = "0"; + this.Table0P0MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table0P1MenuItem + // + this.Table0P1MenuItem.Name = "Table0P1MenuItem"; + this.Table0P1MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table0P1MenuItem.Text = "1"; + this.Table0P1MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table0P2MenuItem + // + this.Table0P2MenuItem.Name = "Table0P2MenuItem"; + this.Table0P2MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table0P2MenuItem.Text = "2"; + this.Table0P2MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table0P3MenuItem + // + this.Table0P3MenuItem.Name = "Table0P3MenuItem"; + this.Table0P3MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table0P3MenuItem.Text = "3"; + this.Table0P3MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table0P4MenuItem + // + this.Table0P4MenuItem.Name = "Table0P4MenuItem"; + this.Table0P4MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table0P4MenuItem.Text = "4"; + this.Table0P4MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table0P5MenuItem + // + this.Table0P5MenuItem.Name = "Table0P5MenuItem"; + this.Table0P5MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table0P5MenuItem.Text = "5"; + this.Table0P5MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table0P6MenuItem + // + this.Table0P6MenuItem.Name = "Table0P6MenuItem"; + this.Table0P6MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table0P6MenuItem.Text = "6"; + this.Table0P6MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table0P7MenuItem + // + this.Table0P7MenuItem.Name = "Table0P7MenuItem"; + this.Table0P7MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table0P7MenuItem.Text = "7"; + this.Table0P7MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table1PaletteSubMenu + // + this.Table1PaletteSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.Table1P0MenuItem, + this.Table1P1MenuItem, + this.Table1P2MenuItem, + this.Table1P3MenuItem, + this.Table1P4MenuItem, + this.Table1P5MenuItem, + this.Table1P6MenuItem, + this.Table1P7MenuItem}); + this.Table1PaletteSubMenu.Name = "Table1PaletteSubMenu"; + this.Table1PaletteSubMenu.Size = new System.Drawing.Size(151, 22); + this.Table1PaletteSubMenu.Text = "Table 1 Palette"; + this.Table1PaletteSubMenu.DropDownOpened += new System.EventHandler(this.Table1PaletteSubMenu_DropDownOpened); + // + // Table1P0MenuItem + // + this.Table1P0MenuItem.Name = "Table1P0MenuItem"; + this.Table1P0MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table1P0MenuItem.Text = "0"; + this.Table1P0MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table1P1MenuItem + // + this.Table1P1MenuItem.Name = "Table1P1MenuItem"; + this.Table1P1MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table1P1MenuItem.Text = "1"; + this.Table1P1MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table1P2MenuItem + // + this.Table1P2MenuItem.Name = "Table1P2MenuItem"; + this.Table1P2MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table1P2MenuItem.Text = "2"; + this.Table1P2MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table1P3MenuItem + // + this.Table1P3MenuItem.Name = "Table1P3MenuItem"; + this.Table1P3MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table1P3MenuItem.Text = "3"; + this.Table1P3MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table1P4MenuItem + // + this.Table1P4MenuItem.Name = "Table1P4MenuItem"; + this.Table1P4MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table1P4MenuItem.Text = "4"; + this.Table1P4MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table1P5MenuItem + // + this.Table1P5MenuItem.Name = "Table1P5MenuItem"; + this.Table1P5MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table1P5MenuItem.Text = "5"; + this.Table1P5MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table1P6MenuItem + // + this.Table1P6MenuItem.Name = "Table1P6MenuItem"; + this.Table1P6MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table1P6MenuItem.Text = "6"; + this.Table1P6MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // Table1P7MenuItem + // + this.Table1P7MenuItem.Name = "Table1P7MenuItem"; + this.Table1P7MenuItem.Size = new System.Drawing.Size(80, 22); + this.Table1P7MenuItem.Text = "7"; + this.Table1P7MenuItem.Click += new System.EventHandler(this.Palette_Click); + // + // SettingsSubMenu + // + this.SettingsSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.AutoLoadMenuItem, + this.SaveWindowPositionMenuItem, + this.AlwaysOnTopMenuItem, + this.FloatingWindowMenuItem}); + this.SettingsSubMenu.Name = "SettingsSubMenu"; + this.SettingsSubMenu.Size = new System.Drawing.Size(61, 20); + this.SettingsSubMenu.Text = "&Settings"; + this.SettingsSubMenu.DropDownOpened += new System.EventHandler(this.SettingsSubMenu_DropDownOpened); + // + // AutoLoadMenuItem + // + this.AutoLoadMenuItem.Name = "AutoLoadMenuItem"; + this.AutoLoadMenuItem.Size = new System.Drawing.Size(191, 22); + this.AutoLoadMenuItem.Text = "Autoload"; + this.AutoLoadMenuItem.Click += new System.EventHandler(this.AutoloadMenuItem_Click); + // + // SaveWindowPositionMenuItem + // + this.SaveWindowPositionMenuItem.Name = "SaveWindowPositionMenuItem"; + this.SaveWindowPositionMenuItem.Size = new System.Drawing.Size(191, 22); + this.SaveWindowPositionMenuItem.Text = "Save Window Position"; + this.SaveWindowPositionMenuItem.Click += new System.EventHandler(this.SaveWindowPositionMenuItem_Click); + // + // AlwaysOnTopMenuItem + // + this.AlwaysOnTopMenuItem.Name = "AlwaysOnTopMenuItem"; + this.AlwaysOnTopMenuItem.Size = new System.Drawing.Size(191, 22); + this.AlwaysOnTopMenuItem.Text = "Always On Top"; + this.AlwaysOnTopMenuItem.Click += new System.EventHandler(this.AlwaysOnTopMenuItem_Click); + // + // FloatingWindowMenuItem + // + this.FloatingWindowMenuItem.Name = "FloatingWindowMenuItem"; + this.FloatingWindowMenuItem.Size = new System.Drawing.Size(191, 22); + this.FloatingWindowMenuItem.Text = "Floating Window"; + this.FloatingWindowMenuItem.Click += new System.EventHandler(this.FloatingWindowMenuItem_Click); + // + // NesPPUStatusBar + // + this.NesPPUStatusBar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripStatusLabel1}); - this.statusStrip1.Location = new System.Drawing.Point(0, 349); - this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(574, 22); - this.statusStrip1.SizingGrip = false; - this.statusStrip1.TabIndex = 11; - this.statusStrip1.Text = "statusStrip1"; - // - // toolStripStatusLabel1 - // - this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - this.toolStripStatusLabel1.Size = new System.Drawing.Size(348, 17); - this.toolStripStatusLabel1.Text = "Use CTRL+C to copy the pane under the mouse to the clipboard."; - // - // messagetimer - // - this.messagetimer.Interval = 5000; - this.messagetimer.Tick += new System.EventHandler(this.messagetimer_Tick); - // - // NESPPU - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(574, 371); - this.Controls.Add(this.statusStrip1); - this.Controls.Add(this.groupBox2); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.SpriteViewerBox); - this.Controls.Add(this.menuStrip1); - this.Controls.Add(this.DetailsBox); - this.Controls.Add(this.PalettesGroup); - this.Controls.Add(this.PatternGroup); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.KeyPreview = true; - this.MainMenuStrip = this.menuStrip1; - this.MinimumSize = new System.Drawing.Size(580, 370); - this.Name = "NESPPU"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "NES PPU Viewer"; - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.NESPPU_FormClosed); - this.Load += new System.EventHandler(this.NESPPU_Load); - this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.NESPPU_KeyDown); - this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.NESPPU_MouseClick); - this.PatternGroup.ResumeLayout(false); - this.PatternGroup.PerformLayout(); - this.PatternContext.ResumeLayout(false); - this.PalettesGroup.ResumeLayout(false); - this.PaletteContext.ResumeLayout(false); - this.DetailsBox.ResumeLayout(false); - this.DetailsBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ZoomBox)).EndInit(); - this.SpriteViewerBox.ResumeLayout(false); - this.SpriteContext.ResumeLayout(false); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.RefreshRate)).EndInit(); - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - this.statusStrip1.ResumeLayout(false); - this.statusStrip1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); + this.NesPPUStatusBar.Location = new System.Drawing.Point(0, 349); + this.NesPPUStatusBar.Name = "NesPPUStatusBar"; + this.NesPPUStatusBar.Size = new System.Drawing.Size(574, 22); + this.NesPPUStatusBar.SizingGrip = false; + this.NesPPUStatusBar.TabIndex = 11; + this.NesPPUStatusBar.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(348, 17); + this.toolStripStatusLabel1.Text = "Use CTRL+C to copy the pane under the mouse to the clipboard."; + // + // Messagetimer + // + this.Messagetimer.Interval = 5000; + this.Messagetimer.Tick += new System.EventHandler(this.MessageTimer_Tick); + // + // NesPPU + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(574, 371); + this.Controls.Add(this.NesPPUStatusBar); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.SpriteViewerBox); + this.Controls.Add(this.NesPPUMenu); + this.Controls.Add(this.DetailsBox); + this.Controls.Add(this.PalettesGroup); + this.Controls.Add(this.PatternGroup); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.MainMenuStrip = this.NesPPUMenu; + this.MinimumSize = new System.Drawing.Size(580, 370); + this.Name = "NesPPU"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "NES PPU Viewer"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.NesPPU_FormClosed); + this.Load += new System.EventHandler(this.NesPPU_Load); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.NesPPU_KeyDown); + this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.NesPPU_MouseClick); + this.PatternGroup.ResumeLayout(false); + this.PatternGroup.PerformLayout(); + this.PatternContext.ResumeLayout(false); + this.PalettesGroup.ResumeLayout(false); + this.PaletteContext.ResumeLayout(false); + this.DetailsBox.ResumeLayout(false); + this.DetailsBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ZoomBox)).EndInit(); + this.SpriteViewerBox.ResumeLayout(false); + this.SpriteContext.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RefreshRate)).EndInit(); + this.NesPPUMenu.ResumeLayout(false); + this.NesPPUMenu.PerformLayout(); + this.NesPPUStatusBar.ResumeLayout(false); + this.NesPPUStatusBar.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); } @@ -819,53 +840,55 @@ private System.Windows.Forms.TrackBar RefreshRate; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label3; - private MenuStripEx menuStrip1; - private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem autoLoadToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem saveWindowPositionToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem patternToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem table0PaletteToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem Table0P0; - private System.Windows.Forms.ToolStripMenuItem Table0P1; - private System.Windows.Forms.ToolStripMenuItem Table0P2; - private System.Windows.Forms.ToolStripMenuItem Table0P3; - private System.Windows.Forms.ToolStripMenuItem Table0P4; - private System.Windows.Forms.ToolStripMenuItem Table0P5; - private System.Windows.Forms.ToolStripMenuItem Table0P6; - private System.Windows.Forms.ToolStripMenuItem Table0P7; - private System.Windows.Forms.ToolStripMenuItem table1PaletteToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem Table1P0; - private System.Windows.Forms.ToolStripMenuItem Table1P1; - private System.Windows.Forms.ToolStripMenuItem Table1P2; - private System.Windows.Forms.ToolStripMenuItem Table1P3; - private System.Windows.Forms.ToolStripMenuItem Table1P4; - private System.Windows.Forms.ToolStripMenuItem Table1P5; - private System.Windows.Forms.ToolStripMenuItem Table1P6; - private System.Windows.Forms.ToolStripMenuItem Table1P7; - private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem savePaletteScreenshotToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem savePatternScreenshotToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem saveSpriteScreenshotToolStripMenuItem; + private MenuStripEx NesPPUMenu; + private System.Windows.Forms.ToolStripMenuItem SettingsSubMenu; + private System.Windows.Forms.ToolStripMenuItem AutoLoadMenuItem; + private System.Windows.Forms.ToolStripMenuItem SaveWindowPositionMenuItem; + private System.Windows.Forms.ToolStripMenuItem PatternSubMenu; + private System.Windows.Forms.ToolStripMenuItem Table0PaletteSubMenu; + private System.Windows.Forms.ToolStripMenuItem Table0P0MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table0P1MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table0P2MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table0P3MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table0P4MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table0P5MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table0P6MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table0P7MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table1PaletteSubMenu; + private System.Windows.Forms.ToolStripMenuItem Table1P0MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table1P1MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table1P2MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table1P3MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table1P4MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table1P5MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table1P6MenuItem; + private System.Windows.Forms.ToolStripMenuItem Table1P7MenuItem; + private System.Windows.Forms.ToolStripMenuItem FileSubMenu; + private System.Windows.Forms.ToolStripMenuItem SavePaletteScreenshotMenuItem; + private System.Windows.Forms.ToolStripMenuItem SavePatternScreenshotMenuItem; + private System.Windows.Forms.ToolStripMenuItem SaveSpriteScreenshotMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ExitMenuItem; private System.Windows.Forms.ContextMenuStrip PaletteContext; - private System.Windows.Forms.ToolStripMenuItem saveImageToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem PaletteSaveImageMenuItem; + private System.Windows.Forms.ToolStripMenuItem PaletteRefreshMenuItem; private System.Windows.Forms.ContextMenuStrip PatternContext; - private System.Windows.Forms.ToolStripMenuItem saveImageToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem PatternSaveImageMenuItem; + private System.Windows.Forms.ToolStripMenuItem PatternRefreshMenuItem; private System.Windows.Forms.ContextMenuStrip SpriteContext; - private System.Windows.Forms.ToolStripMenuItem saveImageToolStripMenuItem2; - private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem2; - private System.Windows.Forms.ToolStripMenuItem imageToClipboardToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem imageToClipboardToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem imageToClipboardToolStripMenuItem2; - private System.Windows.Forms.ToolStripMenuItem savePaletteToClipboardToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem copyPatternToClipboardToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem copySpriteToClipboardToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem SpriteSaveImageMenuItem; + private System.Windows.Forms.ToolStripMenuItem SpriteRefreshMenuItem; + private System.Windows.Forms.ToolStripMenuItem SpriteImageToClipboardMenuItem; + private System.Windows.Forms.ToolStripMenuItem PatternImageToClipboardMenuItem; + private System.Windows.Forms.ToolStripMenuItem PaletteImageToClipboardMenuItem; + private System.Windows.Forms.ToolStripMenuItem CopyPaletteToClipboardMenuItem; + private System.Windows.Forms.ToolStripMenuItem CopyPatternToClipboardMenuItem; + private System.Windows.Forms.ToolStripMenuItem CopySpriteToClipboardMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.StatusStrip NesPPUStatusBar; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; - private System.Windows.Forms.Timer messagetimer; + private System.Windows.Forms.Timer Messagetimer; + private System.Windows.Forms.ToolStripMenuItem AlwaysOnTopMenuItem; + private System.Windows.Forms.ToolStripMenuItem FloatingWindowMenuItem; } } \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs index 34916f01b7..bb24b93145 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs +++ b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.cs @@ -1,58 +1,69 @@ using System; using System.Drawing; +using System.Drawing.Imaging; +using System.Linq; using System.Windows.Forms; -using System.Globalization; - using BizHawk.Client.Common; using BizHawk.Emulation.Cores.Nintendo.NES; namespace BizHawk.Client.EmuHawk { - public partial class NESPPU : Form, IToolForm + public partial class NesPPU : Form, IToolForm { - //TODO: - //If 8/16 sprite mode, mouse over should put 32x64 version of prite - //Speedups - //Smarter refreshing? only refresh when things of changed, perhaps peek at the ppu to when the pattern table has changed, or sprites have moved - //Maybe 48 individual bitmaps for sprites is faster than the overhead of redrawing all that transparent space + // TODO: + // If 8/16 sprite mode, mouse over should put 32x64 version of prite + // Speedups + // Smarter refreshing? only refresh when things of changed, perhaps peek at the ppu to when the pattern table has changed, or sprites have moved + // Maybe 48 individual bitmaps for sprites is faster than the overhead of redrawing all that transparent space + private readonly byte[] _ppuBus = Enumerable.Repeat((byte)0, 0x2000).ToArray(); + private readonly byte[] _ppuBusprev = Enumerable.Repeat((byte)0, 0x2000).ToArray(); + private readonly byte[] _palRam = Enumerable.Repeat((byte)0, 0x20).ToArray(); + private readonly byte[] _palRamPrev = Enumerable.Repeat((byte)0, 0x20).ToArray(); + private readonly NES.PPU.DebugCallback _callback = new NES.PPU.DebugCallback(); - private Bitmap ZoomBoxDefaultImage = new Bitmap(64, 64); + private Bitmap _zoomBoxDefaultImage = new Bitmap(64, 64); private NES _nes; - private readonly byte[] PPUBus = new byte[0x2000]; - private readonly byte[] PPUBusprev = new byte[0x2000]; - private readonly byte[] PALRAM = new byte[0x20]; - private readonly byte[] PALRAMprev = new byte[0x20]; - private readonly NES.PPU.DebugCallback Callback = new NES.PPU.DebugCallback(); - private bool ForceChange; + private bool _forceChange; + + public NesPPU() + { + InitializeComponent(); + Closing += (o, e) => + { + Global.Config.NesPPUSettings.Wndx = Location.X; + Global.Config.NesPPUSettings.Wndy = Location.Y; + Global.Config.NESPPURefreshRate = RefreshRate.Value; + }; + TopMost = Global.Config.NesPPUSettings.TopMost; + _callback.Callback = () => Generate(); + } + + private void NesPPU_Load(object sender, EventArgs e) + { + LoadConfigSettings(); + _nes = Global.Emulator as NES; + ClearDetails(); + RefreshRate.Value = Global.Config.NESPPURefreshRate; + Generate(true); + } + + #region Public API public bool AskSave() { return true; } public bool UpdateBefore { get { return true; } } - public NESPPU() + public void UpdateValues() { - InitializeComponent(); - Closing += (o, e) => SaveConfigSettings(); - Callback.Callback = () => Generate(); - for (int x = 0; x < 0x2000; x++) + if (Global.Emulator is NES) { - PPUBus[x] = 0; - PPUBusprev[x] = 0; + _nes.ppu.PPUViewCallback = _callback; } - - for (int x = 0; x < 0x20; x++) + else { - PALRAM[x] = 0; - PALRAMprev[x] = 0; + Close(); } } - private void SaveConfigSettings() - { - Global.Config.NESPPUWndx = Location.X; - Global.Config.NESPPUWndy = Location.Y; - Global.Config.NESPPURefreshRate = RefreshRate.Value; - } - public void Restart() { if (Global.Emulator is NES) @@ -66,84 +77,95 @@ namespace BizHawk.Client.EmuHawk } } + #endregion + private void LoadConfigSettings() { - if (Global.Config.NESPPUSaveWindowPosition && Global.Config.NESPPUWndx >= 0 && Global.Config.NESPPUWndy >= 0) - Location = new Point(Global.Config.NESPPUWndx, Global.Config.NESPPUWndy); + if (Global.Config.NesPPUSettings.UseWindowPosition) + { + Location = Global.Config.NesPPUSettings.WindowPosition; + } } private byte GetBit(int address, int bit) { - return (byte)(((PPUBus[address] >> (7 - bit)) & 1)); + return (byte)((_ppuBus[address] >> (7 - bit)) & 1); } private bool CheckChange() { - bool changed = false; - for (int x = 0; x < 0x20; x++) + var changed = false; + for (var i = 0; i < 0x20; i++) { - PALRAMprev[x] = PALRAM[x]; - PALRAM[x] = _nes.ppu.PALRAM[x]; - if (PALRAM[x] != PALRAMprev[x]) + _palRamPrev[i] = _palRam[i]; + _palRam[i] = _nes.ppu.PALRAM[i]; + if (_palRam[i] != _palRamPrev[i]) { changed = true; } } - for (int x = 0; x < 0x2000; x++) + for (var i = 0; i < 0x2000; i++) { - PPUBusprev[x] = PPUBus[x]; - PPUBus[x] = _nes.ppu.ppubus_peek(x); - if (PPUBus[x] != PPUBusprev[x]) + _ppuBusprev[i] = _ppuBus[i]; + _ppuBus[i] = _nes.ppu.ppubus_peek(i); + if (_ppuBus[i] != _ppuBusprev[i]) { changed = true; } } - if (ForceChange) return true; + if (_forceChange) + { + return true; + } return changed; } - unsafe void Generate(bool now = false) + private unsafe void Generate(bool now = false) { - if (!IsHandleCreated || IsDisposed) return; + if (!IsHandleCreated || IsDisposed) + { + return; + } if (Global.Emulator.Frame % RefreshRate.Value == 0 || now) { - bool Changed = CheckChange(); - int b0; int b1; byte value; int cvalue; - if (Changed) + if (CheckChange()) { - ForceChange = false; + _forceChange = false; - //Pattern Viewer - for (int x = 0; x < 16; x++) + // Pattern Viewer + for (var i = 0; i < 16; i++) { - PaletteView.BgPalettesPrev[x].Value = PaletteView.BgPalettes[x].Value; - PaletteView.SpritePalettesPrev[x].Value = PaletteView.SpritePalettes[x].Value; - PaletteView.BgPalettes[x].Value = _nes.LookupColor(_nes.ppu.PALRAM[PaletteView.BgPalettes[x].Address]); - PaletteView.SpritePalettes[x].Value = _nes.LookupColor(_nes.ppu.PALRAM[PaletteView.SpritePalettes[x].Address]); + PaletteView.BgPalettesPrev[i].Value = PaletteView.BgPalettes[i].Value; + PaletteView.SpritePalettesPrev[i].Value = PaletteView.SpritePalettes[i].Value; + PaletteView.BgPalettes[i].Value = _nes.LookupColor(_nes.ppu.PALRAM[PaletteView.BgPalettes[i].Address]); + PaletteView.SpritePalettes[i].Value = _nes.LookupColor(_nes.ppu.PALRAM[PaletteView.SpritePalettes[i].Address]); } + if (PaletteView.HasChanged()) { PaletteView.Refresh(); } - System.Drawing.Imaging.BitmapData bmpdata = PatternView.pattern.LockBits(new Rectangle(new Point(0, 0), PatternView.pattern.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - int* framebuf = (int*)bmpdata.Scan0.ToPointer(); + var bmpdata = PatternView.pattern.LockBits( + new Rectangle(new Point(0, 0), PatternView.pattern.Size), + ImageLockMode.WriteOnly, + PixelFormat.Format32bppArgb + ); + + var framebuf = (int*)bmpdata.Scan0.ToPointer(); for (int z = 0; z < 2; z++) { int pal; - if (z == 0) - pal = PatternView.Pal0; - else - pal = PatternView.Pal1; + pal = z == 0 ? PatternView.Pal0 : PatternView.Pal1; for (int i = 0; i < 16; i++) { @@ -154,8 +176,8 @@ namespace BizHawk.Client.EmuHawk for (int y = 0; y < 8; y++) { int address = (z << 12) + (i << 8) + (j << 4) + y; - b0 = (byte)(((PPUBus[address] >> (7 - x)) & 1)); - b1 = (byte)(((PPUBus[address + 8] >> (7 - x)) & 1)); + b0 = (byte)((_ppuBus[address] >> (7 - x)) & 1); + b1 = (byte)((_ppuBus[address + 8] >> (7 - x)) & 1); value = (byte)(b0 + (b1 << 1)); cvalue = _nes.LookupColor(_nes.ppu.PALRAM[value + (pal << 2)]); @@ -166,38 +188,38 @@ namespace BizHawk.Client.EmuHawk } } } + PatternView.pattern.UnlockBits(bmpdata); PatternView.Refresh(); } - System.Drawing.Imaging.BitmapData bmpdata2 = SpriteView.sprites.LockBits(new Rectangle(new Point(0, 0), SpriteView.sprites.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - int* framebuf2 = (int*)bmpdata2.Scan0.ToPointer(); + var bmpdata2 = SpriteView.sprites.LockBits(new Rectangle(new Point(0, 0), SpriteView.sprites.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + var framebuf2 = (int*)bmpdata2.Scan0.ToPointer(); int pt_add = _nes.ppu.reg_2000.obj_pattern_hi ? 0x1000 : 0; bool is8x16 = _nes.ppu.reg_2000.obj_size_16; - //Sprite Viewer + // Sprite Viewer for (int n = 0; n < 4; n++) { for (int r = 0; r < 16; r++) { int BaseAddr = (r << 2) + (n << 6); int TileNum = _nes.ppu.OAM[BaseAddr + 1]; - int PatAddr; + int patternAddr; if (is8x16) { - PatAddr = ((TileNum >> 1) * 0x20); - PatAddr += (0x1000 * (TileNum & 1)); + patternAddr = (TileNum >> 1) * 0x20; + patternAddr += 0x1000 * (TileNum & 1); } else { - PatAddr = TileNum * 0x10; - PatAddr += pt_add; + patternAddr = TileNum * 0x10; + patternAddr += pt_add; } - int Attributes = _nes.ppu.OAM[BaseAddr + 2]; int Palette = Attributes & 0x03; @@ -205,70 +227,416 @@ namespace BizHawk.Client.EmuHawk { for (int y = 0; y < 8; y++) { - int address = PatAddr + y; - b0 = (byte)(((PPUBus[address] >> (7 - x)) & 1)); - b1 = (byte)(((PPUBus[address + 8] >> (7 - x)) & 1)); + int address = patternAddr + y; + b0 = (byte)((_ppuBus[address] >> (7 - x)) & 1); + b1 = (byte)((_ppuBus[address + 8] >> (7 - x)) & 1); value = (byte)(b0 + (b1 << 1)); cvalue = _nes.LookupColor(_nes.ppu.PALRAM[16 + value + (Palette << 2)]); int adr = (x + (r * 16)) + (y + (n * 24)) * (bmpdata2.Stride >> 2); framebuf2[adr] = cvalue; } + if (is8x16) { - PatAddr += 0x10; + patternAddr += 0x10; for (int y = 0; y < 8; y++) { - int address = PatAddr + y; - b0 = (byte)(((PPUBus[address] >> (7 - x)) & 1)); - b1 = (byte)(((PPUBus[address + 8] >> (7 - x)) & 1)); + int address = patternAddr + y; + b0 = (byte)((_ppuBus[address] >> (7 - x)) & 1); + b1 = (byte)((_ppuBus[address + 8] >> (7 - x)) & 1); value = (byte)(b0 + (b1 << 1)); cvalue = _nes.LookupColor(_nes.ppu.PALRAM[16 + value + (Palette << 2)]); int adr = (x + (r << 4)) + ((y+8) + (n * 24)) * (bmpdata2.Stride >> 2); framebuf2[adr] = cvalue; } - PatAddr -= 0x10; + + patternAddr -= 0x10; } } } } + SpriteView.sprites.UnlockBits(bmpdata2); SpriteView.Refresh(); } } - public void UpdateValues() - { - if (Global.Emulator is NES) - { - _nes.ppu.PPUViewCallback = Callback; - } - else - { - Close(); - } - } - - private void NESPPU_Load(object sender, EventArgs e) - { - LoadConfigSettings(); - _nes = Global.Emulator as NES; - ClearDetails(); - RefreshRate.Value = Global.Config.NESPPURefreshRate; - Generate(true); - } - private void ClearDetails() { DetailsBox.Text = "Details"; - AddressLabel.Text = ""; - ValueLabel.Text = ""; - Value2Label.Text = ""; - Value3Label.Text = ""; - Value4Label.Text = ""; - Value5Label.Text = ""; - ZoomBox.Image = ZoomBoxDefaultImage; + AddressLabel.Text = string.Empty; + ValueLabel.Text = string.Empty; + Value2Label.Text = string.Empty; + Value3Label.Text = string.Empty; + Value4Label.Text = string.Empty; + Value5Label.Text = string.Empty; + ZoomBox.Image = _zoomBoxDefaultImage; + } + + private void UpdatePaletteSelection() + { + _forceChange = true; + Table0PaletteLabel.Text = "Palette: " + PatternView.Pal0; + Table1PaletteLabel.Text = "Palette: " + PatternView.Pal1; + } + + private static Bitmap Section(Image srcBitmap, Rectangle section, bool is8x16) + { + // Create the new bitmap and associated graphics object + var bmp = new Bitmap(64, 64); + var g = Graphics.FromImage(bmp); + + // Draw the specified section of the source bitmap to the new one + g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; + + var rect = is8x16 ? new Rectangle(0, 0, 32, 64) : new Rectangle(0, 0, 64, 64); + g.DrawImage(srcBitmap, rect, section, GraphicsUnit.Pixel); + g.Dispose(); + + return bmp; + } + + private void HandleDefaultImage() + { + if (ModifierKeys == Keys.Shift) + { + _zoomBoxDefaultImage = ZoomBox.Image as Bitmap; + } + } + + private void RefreshFloatingWindowControl() + { + Owner = Global.Config.NesPPUSettings.FloatingWindow ? null : GlobalWin.MainForm; + } + + #region Events + + #region Menu and Context Menu + + #region File + + private void SavePaletteScreenshotMenuItem_Click(object sender, EventArgs e) + { + PaletteView.Screenshot(); + } + + private void SavePatternScreenshotMenuItem_Click(object sender, EventArgs e) + { + PatternView.Screenshot(); + } + + private void SaveSpriteScreenshotMenuItem_Click(object sender, EventArgs e) + { + SpriteView.Screenshot(); + } + + private void CopyPaletteToClipboardMenuItem_Click(object sender, EventArgs e) + { + PaletteView.ScreenshotToClipboard(); + } + + private void CopyPatternToClipboardMenuItem_Click(object sender, EventArgs e) + { + PatternView.ScreenshotToClipboard(); + } + + private void CopySpriteToClipboardMenuItem_Click(object sender, EventArgs e) + { + SpriteView.ScreenshotToClipboard(); + } + + private void ExitMenuItem_Click(object sender, EventArgs e) + { + Close(); + } + + #endregion + + #region Pattern + + private void Table0PaletteSubMenu_DropDownOpened(object sender, EventArgs e) + { + Table0P0MenuItem.Checked = PatternView.Pal0 == 0; + Table0P1MenuItem.Checked = PatternView.Pal0 == 1; + Table0P2MenuItem.Checked = PatternView.Pal0 == 2; + Table0P3MenuItem.Checked = PatternView.Pal0 == 3; + Table0P4MenuItem.Checked = PatternView.Pal0 == 4; + Table0P5MenuItem.Checked = PatternView.Pal0 == 5; + Table0P6MenuItem.Checked = PatternView.Pal0 == 6; + Table0P7MenuItem.Checked = PatternView.Pal0 == 7; + } + + private void Table1PaletteSubMenu_DropDownOpened(object sender, EventArgs e) + { + Table1P0MenuItem.Checked = PatternView.Pal1 == 0; + Table1P1MenuItem.Checked = PatternView.Pal1 == 1; + Table1P2MenuItem.Checked = PatternView.Pal1 == 2; + Table1P3MenuItem.Checked = PatternView.Pal1 == 3; + Table1P4MenuItem.Checked = PatternView.Pal1 == 4; + Table1P5MenuItem.Checked = PatternView.Pal1 == 5; + Table1P6MenuItem.Checked = PatternView.Pal1 == 6; + Table1P7MenuItem.Checked = PatternView.Pal1 == 7; + } + + private void Palette_Click(object sender, EventArgs e) + { + if (sender == Table0P0MenuItem) + { + PatternView.Pal0 = 0; + } + else if (sender == Table0P1MenuItem) + { + PatternView.Pal0 = 1; + } + else if (sender == Table0P2MenuItem) + { + PatternView.Pal0 = 2; + } + else if (sender == Table0P3MenuItem) + { + PatternView.Pal0 = 3; + } + else if (sender == Table0P4MenuItem) + { + PatternView.Pal0 = 4; + } + else if (sender == Table0P5MenuItem) + { + PatternView.Pal0 = 5; + } + else if (sender == Table0P6MenuItem) + { + PatternView.Pal0 = 6; + } + else if (sender == Table0P7MenuItem) + { + PatternView.Pal0 = 7; + } + else if (sender == Table1P0MenuItem) + { + PatternView.Pal1 = 0; + } + else if (sender == Table1P1MenuItem) + { + PatternView.Pal1 = 1; + } + else if (sender == Table1P2MenuItem) + { + PatternView.Pal1 = 2; + } + else if (sender == Table1P3MenuItem) + { + PatternView.Pal1 = 3; + } + else if (sender == Table1P4MenuItem) + { + PatternView.Pal1 = 4; + } + else if (sender == Table1P5MenuItem) + { + PatternView.Pal1 = 5; + } + else if (sender == Table1P6MenuItem) + { + PatternView.Pal1 = 6; + } + else if (sender == Table1P7MenuItem) + { + PatternView.Pal1 = 7; + } + + UpdatePaletteSelection(); + } + + #endregion + + #region Settings + + private void SettingsSubMenu_DropDownOpened(object sender, EventArgs e) + { + AutoLoadMenuItem.Checked = Global.Config.AutoLoadNESPPU; + SaveWindowPositionMenuItem.Checked = Global.Config.NesPPUSettings.SaveWindowPosition; + AlwaysOnTopMenuItem.Checked = Global.Config.NesPPUSettings.TopMost; + FloatingWindowMenuItem.Checked = Global.Config.NesPPUSettings.FloatingWindow; + } + + private void AutoloadMenuItem_Click(object sender, EventArgs e) + { + Global.Config.AutoLoadNESPPU ^= true; + } + + private void SaveWindowPositionMenuItem_Click(object sender, EventArgs e) + { + Global.Config.NesPPUSettings.SaveWindowPosition ^= true; + } + + private void AlwaysOnTopMenuItem_Click(object sender, EventArgs e) + { + Global.Config.NesPPUSettings.TopMost ^= true; + TopMost = Global.Config.NesPPUSettings.TopMost; + } + + private void FloatingWindowMenuItem_Click(object sender, EventArgs e) + { + Global.Config.NesPPUSettings.FloatingWindow ^= true; + RefreshFloatingWindowControl(); + } + + #endregion + + #region Context Menus + + private void PaletteRefreshMenuItem_Click(object sender, EventArgs e) + { + PaletteView.Refresh(); + } + + private void PatternRefreshMenuItem_Click(object sender, EventArgs e) + { + PatternView.Refresh(); + } + + private void SpriteRefreshMenuItem_Click(object sender, EventArgs e) + { + SpriteView.Refresh(); + } + + #endregion + + #endregion + + #region Dialog and Controls + + private void NesPPU_MouseClick(object sender, MouseEventArgs e) + { + ZoomBox.Image = new Bitmap(64, 64); + } + + private void NesPPU_KeyDown(object sender, KeyEventArgs e) + { + if (ModifierKeys.HasFlag(Keys.Control) && e.KeyCode == Keys.C) + { + // find the control under the mouse + var m = Cursor.Position; + Control top = this; + Control found; + do + { + found = top.GetChildAtPoint(top.PointToClient(m)); + top = found; + } + while (found != null && found.HasChildren); + + if (found != null) + { + var meth = found.GetType().GetMethod("ScreenshotToClipboard", Type.EmptyTypes); + if (meth != null) + { + meth.Invoke(found, null); + } + else if (found is PictureBox) + { + Clipboard.SetImage((found as PictureBox).Image); + } + else + { + return; + } + + toolStripStatusLabel1.Text = found.Text + " copied to clipboard."; + + Messagetimer.Stop(); + Messagetimer.Start(); + } + } + } + + private void MessageTimer_Tick(object sender, EventArgs e) + { + Messagetimer.Stop(); + toolStripStatusLabel1.Text = "Use CTRL+C to copy the pane under the mouse to the clipboard."; + } + + protected override void OnShown(EventArgs e) + { + RefreshFloatingWindowControl(); + base.OnShown(e); + } + + private void PaletteView_MouseClick(object sender, MouseEventArgs e) + { + HandleDefaultImage(); + } + + private void SpriteView_MouseClick(object sender, MouseEventArgs e) + { + HandleDefaultImage(); + } + + private void SpriteView_MouseEnter(object sender, EventArgs e) + { + DetailsBox.Text = "Details - Sprites"; + } + + private void SpriteView_MouseLeave(object sender, EventArgs e) + { + ClearDetails(); + } + + private void SpriteView_MouseMove(object sender, MouseEventArgs e) + { + bool is8x16 = _nes.ppu.reg_2000.obj_size_16; + var spriteNumber = ((e.Y / 24) * 16) + (e.X / 16); + int x = _nes.ppu.OAM[(spriteNumber * 4) + 3]; + int y = _nes.ppu.OAM[spriteNumber * 4]; + var color = _nes.ppu.OAM[(spriteNumber * 4) + 2] & 0x03; + var attributes = _nes.ppu.OAM[(spriteNumber * 4) + 2]; + + var flags = "Flags: "; + int h = GetBit(attributes, 6); + int v = GetBit(attributes, 7); + int priority = GetBit(attributes, 5); + if (h > 0) + { + flags += "H "; + } + + if (v > 0) + { + flags += "V "; + } + + if (priority > 0) + { + flags += "Behind"; + } + else + { + flags += "Front"; + } + + var tile = _nes.ppu.OAM[spriteNumber * 1]; + + AddressLabel.Text = "Number: " + string.Format("{0:X2}", spriteNumber); + ValueLabel.Text = "X: " + string.Format("{0:X2}", x); + Value2Label.Text = "Y: " + string.Format("{0:X2}", y); + Value3Label.Text = "Tile: " + string.Format("{0:X2}", tile); + Value4Label.Text = "Color: " + color; + Value5Label.Text = flags; + + if (is8x16) + { + ZoomBox.Image = Section( + SpriteView.sprites, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 24) * 24), new Size(8, 16)), true); + } + else + { + ZoomBox.Image = Section( + SpriteView.sprites, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 8) * 8), new Size(8, 8)), false); + } } private void PaletteView_MouseLeave(object sender, EventArgs e) @@ -285,51 +653,38 @@ namespace BizHawk.Client.EmuHawk { int baseAddr = 0x3F00; if (e.Y > 16) + { baseAddr += 16; + } + int column = (e.X - PaletteView.Location.X) / 16; int addr = column + baseAddr; - AddressLabel.Text = "Address: 0x" + String.Format("{0:X4}", addr); + AddressLabel.Text = "Address: 0x" + string.Format("{0:X4}", addr); int val; - int offset = addr & 0x03; - Bitmap bmp = new Bitmap(64, 64); - Graphics g= Graphics.FromImage(bmp); + var bmp = new Bitmap(64, 64); + var g = Graphics.FromImage(bmp); if (baseAddr == 0x3F00) { val = _nes.ppu.PALRAM[PaletteView.BgPalettes[column].Address]; - ValueLabel.Text = "ID: BG" + (column / 4).ToString(); + ValueLabel.Text = "ID: BG" + (column / 4); g.FillRectangle(new SolidBrush(PaletteView.BgPalettes[column].Color), 0, 0, 64, 64); } else { val = _nes.ppu.PALRAM[PaletteView.SpritePalettes[column].Address]; - ValueLabel.Text = "ID: SPR" + (column / 4).ToString(); + ValueLabel.Text = "ID: SPR" + (column / 4); g.FillRectangle(new SolidBrush(PaletteView.SpritePalettes[column].Color), 0, 0, 64, 64); } + g.Dispose(); - Value3Label.Text = "Color: 0x" + String.Format("{0:X2}", val); - Value4Label.Text = "Offset: " + offset.ToString(); + Value3Label.Text = "Color: 0x" + string.Format("{0:X2}", val); + Value4Label.Text = "Offset: " + (addr & 0x03); ZoomBox.Image = bmp; } - private void autoloadToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.AutoLoadNESPPU ^= true; - } - - private void saveWindowPositionToolStripMenuItem_Click(object sender, EventArgs e) - { - Global.Config.NESPPUSaveWindowPosition ^= true; - } - - private void toolStripDropDownButton1_DropDownOpened(object sender, EventArgs e) - { - autoLoadToolStripMenuItem1.Checked = Global.Config.AutoLoadNESPPU; - saveWindowPositionToolStripMenuItem1.Checked = Global.Config.NESPPUSaveWindowPosition; - } - private void PatternView_Click(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) @@ -337,23 +692,24 @@ namespace BizHawk.Client.EmuHawk if (e.X < PatternView.Width / 2) { PatternView.Pal0++; - if (PatternView.Pal0 > 7) PatternView.Pal0 = 0; + if (PatternView.Pal0 > 7) + { + PatternView.Pal0 = 0; + } } else { PatternView.Pal1++; - if (PatternView.Pal1 > 7) PatternView.Pal1 = 0; + if (PatternView.Pal1 > 7) + { + PatternView.Pal1 = 0; + } } + UpdatePaletteSelection(); } - HandleDefaultImage(); - } - private void UpdatePaletteSelection() - { - ForceChange = true; - Table0PaletteLabel.Text = "Palette: " + PatternView.Pal0; - Table1PaletteLabel.Text = "Palette: " + PatternView.Pal1; + HandleDefaultImage(); } private void PatternView_MouseEnter(object sender, EventArgs e) @@ -372,362 +728,66 @@ namespace BizHawk.Client.EmuHawk int address; int tile; if (e.X > PatternView.Width / 2) + { table = 1; + } if (table == 0) { tile = (e.X - 1) / 8; address = tile * 16; - } else { tile = (e.X - 128) / 8; address = 0x1000 + (tile * 16); - } address += (e.Y / 8) * 256; tile += (e.Y / 8) * 16; - string Usage = "Usage: "; + var usage = "Usage: "; if ((_nes.ppu.reg_2000.Value & 0x10) << 4 == ((address >> 4) & 0x100)) - Usage = "BG"; + { + usage = "BG"; + } else if (((_nes.ppu.reg_2000.Value & 0x08) << 5) == ((address >> 4) & 0x100)) - Usage = "SPR"; + { + usage = "SPR"; + } if ((_nes.ppu.reg_2000.Value & 0x20) > 0) - Usage += " (SPR16)"; - - AddressLabel.Text = "Address: " + String.Format("{0:X4}", address); - ValueLabel.Text = "Table " + table.ToString(); - Value3Label.Text = "Tile " + String.Format("{0:X2}", tile); - Value4Label.Text = Usage; + { + usage += " (SPR16)"; + } + + AddressLabel.Text = "Address: " + string.Format("{0:X4}", address); + ValueLabel.Text = "Table " + table; + Value3Label.Text = "Tile " + string.Format("{0:X2}", tile); + Value4Label.Text = usage; ZoomBox.Image = Section(PatternView.pattern, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 8) * 8), new Size(8, 8)), false); } - static public Bitmap Section(Bitmap srcBitmap, Rectangle section, bool Is8x16) - { - // Create the new bitmap and associated graphics object - Bitmap bmp = new Bitmap(64, 64); - Graphics g = Graphics.FromImage(bmp); - - // Draw the specified section of the source bitmap to the new one - g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; - Rectangle rect; - if (Is8x16) - rect = new Rectangle(0, 0, 32, 64); - else - rect = new Rectangle(0, 0, 64, 64); - g.DrawImage(srcBitmap, rect, section, GraphicsUnit.Pixel); - g.Dispose(); - - // Return the bitmap - return bmp; - } - - private void toolStripDropDownButton2_DropDownOpened(object sender, EventArgs e) - { - Table0P0.Checked = false; - Table0P1.Checked = false; - Table0P2.Checked = false; - Table0P3.Checked = false; - Table0P4.Checked = false; - Table0P5.Checked = false; - Table0P6.Checked = false; - Table0P7.Checked = false; - Table1P0.Checked = false; - Table1P1.Checked = false; - Table1P2.Checked = false; - Table1P3.Checked = false; - Table1P4.Checked = false; - Table1P5.Checked = false; - Table1P6.Checked = false; - Table1P7.Checked = false; - - Table0P0.Checked = false; - - switch (PatternView.Pal0) - { - case 0: - Table0P0.Checked = true; - break; - case 1: - Table0P1.Checked = true; - break; - case 2: - Table0P2.Checked = true; - break; - case 3: - Table0P3.Checked = true; - break; - case 4: - Table0P4.Checked = true; - break; - case 5: - Table0P5.Checked = true; - break; - case 6: - Table0P6.Checked = true; - break; - case 7: - Table0P7.Checked = true; - break; - } - - switch (PatternView.Pal1) - { - case 0: - Table1P0.Checked = true; - break; - case 1: - Table1P1.Checked = true; - break; - case 2: - Table1P2.Checked = true; - break; - case 3: - Table1P3.Checked = true; - break; - case 4: - Table1P4.Checked = true; - break; - case 5: - Table1P5.Checked = true; - break; - case 6: - Table1P6.Checked = true; - break; - case 7: - Table1P7.Checked = true; - break; - } - } - - private void Palette_Click(object sender, EventArgs e) - { - if (sender == Table0P0) PatternView.Pal0 = 0; - if (sender == Table0P1) PatternView.Pal0 = 1; - if (sender == Table0P2) PatternView.Pal0 = 2; - if (sender == Table0P3) PatternView.Pal0 = 3; - if (sender == Table0P4) PatternView.Pal0 = 4; - if (sender == Table0P5) PatternView.Pal0 = 5; - if (sender == Table0P6) PatternView.Pal0 = 6; - if (sender == Table0P7) PatternView.Pal0 = 7; - - if (sender == Table1P0) PatternView.Pal1 = 0; - if (sender == Table1P1) PatternView.Pal1 = 1; - if (sender == Table1P2) PatternView.Pal1 = 2; - if (sender == Table1P3) PatternView.Pal1 = 3; - if (sender == Table1P4) PatternView.Pal1 = 4; - if (sender == Table1P5) PatternView.Pal1 = 5; - if (sender == Table1P6) PatternView.Pal1 = 6; - if (sender == Table1P7) PatternView.Pal1 = 7; - - UpdatePaletteSelection(); - } - - private void txtScanline_TextChanged(object sender, EventArgs e) + private void ScanlineTextbox_TextChanged(object sender, EventArgs e) { int temp; if (int.TryParse(txtScanline.Text, out temp)) { - Callback.Scanline = temp; + _callback.Scanline = temp; } } - private void NESPPU_FormClosed(object sender, FormClosedEventArgs e) + private void NesPPU_FormClosed(object sender, FormClosedEventArgs e) { - if (_nes == null) return; - if (_nes.ppu.PPUViewCallback == Callback) + if (_nes != null && _nes.ppu.PPUViewCallback == _callback) + { _nes.ppu.PPUViewCallback = null; - } - - private void SpriteView_MouseEnter(object sender, EventArgs e) - { - DetailsBox.Text = "Details - Sprites"; - } - - private void SpriteView_MouseLeave(object sender, EventArgs e) - { - ClearDetails(); - } - - private void SpriteView_MouseMove(object sender, MouseEventArgs e) - { - bool is8x16 = _nes.ppu.reg_2000.obj_size_16; - int SpriteNumber = ((e.Y / 24) * 16) + (e.X / 16); - int X = _nes.ppu.OAM[(SpriteNumber * 4) + 3]; - int Y = _nes.ppu.OAM[SpriteNumber * 4]; - int Color = _nes.ppu.OAM[(SpriteNumber * 4) + 2] & 0x03; - int Attributes = _nes.ppu.OAM[(SpriteNumber * 4) + 2]; - - string flags = "Flags: "; - int h = GetBit(Attributes, 6); - int v = GetBit(Attributes, 7); - int priority = GetBit(Attributes, 5); - if (h > 0) - flags += "H "; - if (v > 0) - flags += "V "; - if (priority > 0) - flags += "Behind"; - else - flags += "Front"; - - int Tile = _nes.ppu.OAM[SpriteNumber * 1]; - - AddressLabel.Text = "Number: " + String.Format("{0:X2}", SpriteNumber); - ValueLabel.Text = "X: " + String.Format("{0:X2}", X); - Value2Label.Text = "Y: " + String.Format("{0:X2}", Y); - Value3Label.Text = "Tile: " + String.Format("{0:X2}", Tile); - Value4Label.Text = "Color: " + Color.ToString(); - Value5Label.Text = flags; - - if (is8x16) - ZoomBox.Image = Section(SpriteView.sprites, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 24) * 24), new Size(8, 16)), true); - else - ZoomBox.Image = Section(SpriteView.sprites, new Rectangle(new Point((e.X / 8) * 8, (e.Y / 8) * 8), new Size(8, 8)), false); - } - - private void PaletteView_MouseClick(object sender, MouseEventArgs e) - { - HandleDefaultImage(); - } - - private void SpriteView_MouseClick(object sender, MouseEventArgs e) - { - HandleDefaultImage(); - } - - private void HandleDefaultImage() - { - if (ModifierKeys == Keys.Shift) - { - ZoomBoxDefaultImage = ZoomBox.Image as Bitmap; } } - private void NESPPU_MouseClick(object sender, MouseEventArgs e) - { - ZoomBox.Image = new Bitmap(64, 64); - } + #endregion - private void exitToolStripMenuItem_Click(object sender, EventArgs e) - { - Close(); - } - - private void savePaletteScreenshotToolStripMenuItem_Click(object sender, EventArgs e) - { - PaletteView.Screenshot(); - } - - private void saveImageToolStripMenuItem_Click(object sender, EventArgs e) - { - PaletteView.Screenshot(); - } - - private void refreshToolStripMenuItem_Click(object sender, EventArgs e) - { - PaletteView.Refresh(); - } - - private void saveImageToolStripMenuItem1_Click(object sender, EventArgs e) - { - PatternView.Screenshot(); - } - - private void refreshToolStripMenuItem1_Click(object sender, EventArgs e) - { - PatternView.Refresh(); - } - - private void saveImageToolStripMenuItem2_Click(object sender, EventArgs e) - { - SpriteView.Screenshot(); - } - - private void refreshToolStripMenuItem2_Click(object sender, EventArgs e) - { - SpriteView.Refresh(); - } - - private void imageToClipboardToolStripMenuItem_Click(object sender, EventArgs e) - { - SpriteView.ScreenshotToClipboard(); - } - - private void imageToClipboardToolStripMenuItem1_Click(object sender, EventArgs e) - { - PatternView.ScreenshotToClipboard(); - } - - private void imageToClipboardToolStripMenuItem2_Click(object sender, EventArgs e) - { - PaletteView.ScreenshotToClipboard(); - } - - private void savePaletteToClipboardToolStripMenuItem_Click(object sender, EventArgs e) - { - PaletteView.ScreenshotToClipboard(); - } - - private void copyPatternToClipboardToolStripMenuItem_Click(object sender, EventArgs e) - { - PatternView.ScreenshotToClipboard(); - } - - private void copySpriteToClipboardToolStripMenuItem_Click(object sender, EventArgs e) - { - SpriteView.ScreenshotToClipboard(); - } - - private void NESPPU_KeyDown(object sender, KeyEventArgs e) - { - if (ModifierKeys.HasFlag(Keys.Control) && e.KeyCode == Keys.C) - { - // find the control under the mouse - Point m = Cursor.Position; - Control top = this; - Control found; - do - { - found = top.GetChildAtPoint(top.PointToClient(m)); - top = found; - } while (found != null && found.HasChildren); - - if (found != null) - { - - var meth = found.GetType().GetMethod("ScreenshotToClipboard", Type.EmptyTypes); - if (meth != null) - { - meth.Invoke(found, null); - } - else if (found is PictureBox) - { - Clipboard.SetImage((found as PictureBox).Image); - } - else - { - return; - } - - toolStripStatusLabel1.Text = found.Text + " copied to clipboard."; - - messagetimer.Stop(); - messagetimer.Start(); - } - } - } - - private void messagetimer_Tick(object sender, EventArgs e) - { - messagetimer.Stop(); - toolStripStatusLabel1.Text = "Use CTRL+C to copy the pane under the mouse to the clipboard."; - } + #endregion } } diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.resx b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.resx index b14cfc9738..09afd152d4 100644 --- a/BizHawk.Client.EmuHawk/tools/NES/NESPPU.resx +++ b/BizHawk.Client.EmuHawk/tools/NES/NESPPU.resx @@ -126,13 +126,13 @@ 475, 17 - + 116, 17 - + 594, 17 - + 704, 17 diff --git a/BizHawk.Client.EmuHawk/tools/ToolBox.cs b/BizHawk.Client.EmuHawk/tools/ToolBox.cs index 1a6cbe58e1..651286a2b9 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolBox.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolBox.cs @@ -140,7 +140,7 @@ namespace BizHawk.Client.EmuHawk private void NesPPUToolbarItem_Click(object sender, EventArgs e) { - GlobalWin.Tools.Load(); + GlobalWin.Tools.Load(); } private void NesDebuggerToolbarItem_Click(object sender, EventArgs e)