From 0d77f7706909afffbec4b271ed33d2e391b47327 Mon Sep 17 00:00:00 2001 From: goyuken Date: Tue, 6 Nov 2012 21:29:42 +0000 Subject: [PATCH] gp gpu view: some mouseover stuff --- .../GBtools/GBGPUView.Designer.cs | 160 +++++++---- BizHawk.MultiClient/GBtools/GBGPUView.cs | 267 +++++++++++++++--- 2 files changed, 339 insertions(+), 88 deletions(-) diff --git a/BizHawk.MultiClient/GBtools/GBGPUView.Designer.cs b/BizHawk.MultiClient/GBtools/GBGPUView.Designer.cs index cfe4d2d8e7..2d27cc17c2 100644 --- a/BizHawk.MultiClient/GBtools/GBGPUView.Designer.cs +++ b/BizHawk.MultiClient/GBtools/GBGPUView.Designer.cs @@ -39,12 +39,15 @@ this.groupBox3 = new System.Windows.Forms.GroupBox(); this.groupBox4 = new System.Windows.Forms.GroupBox(); this.groupBox5 = new System.Windows.Forms.GroupBox(); - this.radioButtonRefreshFrame = new System.Windows.Forms.RadioButton(); - this.radioButtonRefreshScanline = new System.Windows.Forms.RadioButton(); - this.radioButtonRefreshManual = new System.Windows.Forms.RadioButton(); - this.buttonRefresh = new System.Windows.Forms.Button(); - this.labelScanline = new System.Windows.Forms.Label(); this.hScrollBarScanline = new System.Windows.Forms.HScrollBar(); + this.labelScanline = new System.Windows.Forms.Label(); + this.buttonRefresh = new System.Windows.Forms.Button(); + this.radioButtonRefreshManual = new System.Windows.Forms.RadioButton(); + this.radioButtonRefreshScanline = new System.Windows.Forms.RadioButton(); + this.radioButtonRefreshFrame = new System.Windows.Forms.RadioButton(); + this.groupBoxDetails = new System.Windows.Forms.GroupBox(); + this.labelDetails = new System.Windows.Forms.Label(); + this.bmpViewDetails = new BizHawk.MultiClient.GBtools.BmpView(); this.bmpViewOAM = new BizHawk.MultiClient.GBtools.BmpView(); this.bmpViewBGPal = new BizHawk.MultiClient.GBtools.BmpView(); this.bmpViewSPPal = new BizHawk.MultiClient.GBtools.BmpView(); @@ -57,6 +60,7 @@ this.groupBox3.SuspendLayout(); this.groupBox4.SuspendLayout(); this.groupBox5.SuspendLayout(); + this.groupBoxDetails.SuspendLayout(); this.SuspendLayout(); // // label1 @@ -177,29 +181,34 @@ this.groupBox5.TabStop = false; this.groupBox5.Text = "Refresh Control"; // - // radioButtonRefreshFrame + // hScrollBarScanline // - this.radioButtonRefreshFrame.AutoSize = true; - this.radioButtonRefreshFrame.Location = new System.Drawing.Point(7, 20); - this.radioButtonRefreshFrame.Name = "radioButtonRefreshFrame"; - this.radioButtonRefreshFrame.Size = new System.Drawing.Size(54, 17); - this.radioButtonRefreshFrame.TabIndex = 0; - this.radioButtonRefreshFrame.TabStop = true; - this.radioButtonRefreshFrame.Text = "Frame"; - this.radioButtonRefreshFrame.UseVisualStyleBackColor = true; - this.radioButtonRefreshFrame.CheckedChanged += new System.EventHandler(this.radioButtonRefreshFrame_CheckedChanged); + this.hScrollBarScanline.Location = new System.Drawing.Point(76, 45); + this.hScrollBarScanline.Maximum = 153; + this.hScrollBarScanline.Name = "hScrollBarScanline"; + this.hScrollBarScanline.Size = new System.Drawing.Size(192, 16); + this.hScrollBarScanline.TabIndex = 21; + this.hScrollBarScanline.ValueChanged += new System.EventHandler(this.hScrollBarScanline_ValueChanged); // - // radioButtonRefreshScanline + // labelScanline // - this.radioButtonRefreshScanline.AutoSize = true; - this.radioButtonRefreshScanline.Location = new System.Drawing.Point(7, 44); - this.radioButtonRefreshScanline.Name = "radioButtonRefreshScanline"; - this.radioButtonRefreshScanline.Size = new System.Drawing.Size(66, 17); - this.radioButtonRefreshScanline.TabIndex = 1; - this.radioButtonRefreshScanline.TabStop = true; - this.radioButtonRefreshScanline.Text = "Scanline"; - this.radioButtonRefreshScanline.UseVisualStyleBackColor = true; - this.radioButtonRefreshScanline.CheckedChanged += new System.EventHandler(this.radioButtonRefreshScanline_CheckedChanged); + this.labelScanline.AutoSize = true; + this.labelScanline.Location = new System.Drawing.Point(159, 24); + this.labelScanline.Name = "labelScanline"; + this.labelScanline.Size = new System.Drawing.Size(21, 13); + this.labelScanline.TabIndex = 5; + this.labelScanline.Text = "SS"; + this.labelScanline.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // buttonRefresh + // + this.buttonRefresh.Location = new System.Drawing.Point(76, 65); + this.buttonRefresh.Name = "buttonRefresh"; + this.buttonRefresh.Size = new System.Drawing.Size(80, 23); + this.buttonRefresh.TabIndex = 4; + this.buttonRefresh.Text = "Refresh Now"; + this.buttonRefresh.UseVisualStyleBackColor = true; + this.buttonRefresh.Click += new System.EventHandler(this.buttonRefresh_Click); // // radioButtonRefreshManual // @@ -213,34 +222,57 @@ this.radioButtonRefreshManual.UseVisualStyleBackColor = true; this.radioButtonRefreshManual.CheckedChanged += new System.EventHandler(this.radioButtonRefreshManual_CheckedChanged); // - // buttonRefresh + // radioButtonRefreshScanline // - this.buttonRefresh.Location = new System.Drawing.Point(76, 65); - this.buttonRefresh.Name = "buttonRefresh"; - this.buttonRefresh.Size = new System.Drawing.Size(80, 23); - this.buttonRefresh.TabIndex = 4; - this.buttonRefresh.Text = "Refresh Now"; - this.buttonRefresh.UseVisualStyleBackColor = true; - this.buttonRefresh.Click += new System.EventHandler(this.buttonRefresh_Click); + this.radioButtonRefreshScanline.AutoSize = true; + this.radioButtonRefreshScanline.Location = new System.Drawing.Point(7, 44); + this.radioButtonRefreshScanline.Name = "radioButtonRefreshScanline"; + this.radioButtonRefreshScanline.Size = new System.Drawing.Size(66, 17); + this.radioButtonRefreshScanline.TabIndex = 1; + this.radioButtonRefreshScanline.TabStop = true; + this.radioButtonRefreshScanline.Text = "Scanline"; + this.radioButtonRefreshScanline.UseVisualStyleBackColor = true; + this.radioButtonRefreshScanline.CheckedChanged += new System.EventHandler(this.radioButtonRefreshScanline_CheckedChanged); // - // labelScanline + // radioButtonRefreshFrame // - this.labelScanline.AutoSize = true; - this.labelScanline.Location = new System.Drawing.Point(159, 24); - this.labelScanline.Name = "labelScanline"; - this.labelScanline.Size = new System.Drawing.Size(21, 13); - this.labelScanline.TabIndex = 5; - this.labelScanline.Text = "SS"; - this.labelScanline.TextAlign = System.Drawing.ContentAlignment.TopCenter; + this.radioButtonRefreshFrame.AutoSize = true; + this.radioButtonRefreshFrame.Location = new System.Drawing.Point(7, 20); + this.radioButtonRefreshFrame.Name = "radioButtonRefreshFrame"; + this.radioButtonRefreshFrame.Size = new System.Drawing.Size(54, 17); + this.radioButtonRefreshFrame.TabIndex = 0; + this.radioButtonRefreshFrame.TabStop = true; + this.radioButtonRefreshFrame.Text = "Frame"; + this.radioButtonRefreshFrame.UseVisualStyleBackColor = true; + this.radioButtonRefreshFrame.CheckedChanged += new System.EventHandler(this.radioButtonRefreshFrame_CheckedChanged); // - // hScrollBarScanline + // groupBoxDetails // - this.hScrollBarScanline.Location = new System.Drawing.Point(76, 45); - this.hScrollBarScanline.Maximum = 153; - this.hScrollBarScanline.Name = "hScrollBarScanline"; - this.hScrollBarScanline.Size = new System.Drawing.Size(192, 16); - this.hScrollBarScanline.TabIndex = 21; - this.hScrollBarScanline.ValueChanged += new System.EventHandler(this.hScrollBarScanline_ValueChanged); + this.groupBoxDetails.Controls.Add(this.labelDetails); + this.groupBoxDetails.Controls.Add(this.bmpViewDetails); + this.groupBoxDetails.Location = new System.Drawing.Point(12, 359); + this.groupBoxDetails.Name = "groupBoxDetails"; + this.groupBoxDetails.Size = new System.Drawing.Size(418, 153); + this.groupBoxDetails.TabIndex = 21; + this.groupBoxDetails.TabStop = false; + this.groupBoxDetails.Text = "Details"; + // + // labelDetails + // + this.labelDetails.AutoSize = true; + this.labelDetails.Location = new System.Drawing.Point(76, 16); + this.labelDetails.Name = "labelDetails"; + this.labelDetails.Size = new System.Drawing.Size(206, 13); + this.labelDetails.TabIndex = 1; + this.labelDetails.Text = "Mouse over an item to see details about it."; + // + // bmpViewDetails + // + this.bmpViewDetails.BackColor = System.Drawing.Color.Black; + this.bmpViewDetails.Location = new System.Drawing.Point(6, 19); + this.bmpViewDetails.Name = "bmpViewDetails"; + this.bmpViewDetails.Size = new System.Drawing.Size(64, 128); + this.bmpViewDetails.TabIndex = 0; // // bmpViewOAM // @@ -249,6 +281,9 @@ this.bmpViewOAM.Name = "bmpViewOAM"; this.bmpViewOAM.Size = new System.Drawing.Size(320, 16); this.bmpViewOAM.TabIndex = 14; + this.bmpViewOAM.MouseEnter += new System.EventHandler(this.bmpViewOAM_MouseEnter); + this.bmpViewOAM.MouseLeave += new System.EventHandler(this.bmpViewOAM_MouseLeave); + this.bmpViewOAM.MouseMove += new System.Windows.Forms.MouseEventHandler(this.bmpViewOAM_MouseMove); // // bmpViewBGPal // @@ -258,6 +293,9 @@ this.bmpViewBGPal.Size = new System.Drawing.Size(128, 64); this.bmpViewBGPal.TabIndex = 10; this.bmpViewBGPal.Text = "bmpView1"; + this.bmpViewBGPal.MouseEnter += new System.EventHandler(this.bmpViewBGPal_MouseEnter); + this.bmpViewBGPal.MouseLeave += new System.EventHandler(this.bmpViewBGPal_MouseLeave); + this.bmpViewBGPal.Move += new System.EventHandler(this.bmpViewBGPal_Move); // // bmpViewSPPal // @@ -267,6 +305,9 @@ this.bmpViewSPPal.Size = new System.Drawing.Size(128, 64); this.bmpViewSPPal.TabIndex = 11; this.bmpViewSPPal.Text = "bmpView2"; + this.bmpViewSPPal.MouseEnter += new System.EventHandler(this.bmpViewSPPal_MouseEnter); + this.bmpViewSPPal.MouseLeave += new System.EventHandler(this.bmpViewSPPal_MouseLeave); + this.bmpViewSPPal.MouseMove += new System.Windows.Forms.MouseEventHandler(this.bmpViewSPPal_MouseMove); // // bmpViewTiles1 // @@ -276,6 +317,9 @@ this.bmpViewTiles1.Size = new System.Drawing.Size(128, 192); this.bmpViewTiles1.TabIndex = 6; this.bmpViewTiles1.Text = "bmpView1"; + this.bmpViewTiles1.MouseEnter += new System.EventHandler(this.bmpViewTiles1_MouseEnter); + this.bmpViewTiles1.MouseLeave += new System.EventHandler(this.bmpViewTiles1_MouseLeave); + this.bmpViewTiles1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.bmpViewTiles1_MouseMove); // // bmpViewTiles2 // @@ -285,6 +329,9 @@ this.bmpViewTiles2.Size = new System.Drawing.Size(128, 192); this.bmpViewTiles2.TabIndex = 7; this.bmpViewTiles2.Text = "bmpView2"; + this.bmpViewTiles2.MouseEnter += new System.EventHandler(this.bmpViewTiles2_MouseEnter); + this.bmpViewTiles2.MouseLeave += new System.EventHandler(this.bmpViewTiles2_MouseLeave); + this.bmpViewTiles2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.bmpViewTiles2_MouseMove); // // bmpViewBG // @@ -294,6 +341,9 @@ this.bmpViewBG.Size = new System.Drawing.Size(256, 256); this.bmpViewBG.TabIndex = 4; this.bmpViewBG.Text = "bmpView1"; + this.bmpViewBG.MouseEnter += new System.EventHandler(this.bmpViewBG_MouseEnter); + this.bmpViewBG.MouseLeave += new System.EventHandler(this.bmpViewBG_MouseLeave); + this.bmpViewBG.MouseMove += new System.Windows.Forms.MouseEventHandler(this.bmpViewBG_MouseMove); // // bmpViewWin // @@ -303,19 +353,24 @@ this.bmpViewWin.Size = new System.Drawing.Size(256, 256); this.bmpViewWin.TabIndex = 5; this.bmpViewWin.Text = "bmpView2"; + this.bmpViewWin.MouseEnter += new System.EventHandler(this.bmpViewWin_MouseEnter); + this.bmpViewWin.MouseLeave += new System.EventHandler(this.bmpViewWin_MouseLeave); + this.bmpViewWin.MouseMove += new System.Windows.Forms.MouseEventHandler(this.bmpViewWin_MouseMove); // // GBGPUView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(903, 500); + this.ClientSize = new System.Drawing.Size(834, 555); + this.Controls.Add(this.groupBoxDetails); this.Controls.Add(this.groupBox5); this.Controls.Add(this.groupBox4); this.Controls.Add(this.groupBox3); this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Name = "GBGPUView"; - this.Text = "GB GPU Viewer"; + this.Text = "GameBoy GPU Viewer"; this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.GBGPUView_FormClosed); this.Load += new System.EventHandler(this.GBGPUView_Load); this.groupBox1.ResumeLayout(false); @@ -327,6 +382,8 @@ this.groupBox4.ResumeLayout(false); this.groupBox5.ResumeLayout(false); this.groupBox5.PerformLayout(); + this.groupBoxDetails.ResumeLayout(false); + this.groupBoxDetails.PerformLayout(); this.ResumeLayout(false); } @@ -357,5 +414,8 @@ private System.Windows.Forms.RadioButton radioButtonRefreshScanline; private System.Windows.Forms.RadioButton radioButtonRefreshFrame; private System.Windows.Forms.HScrollBar hScrollBarScanline; + private System.Windows.Forms.GroupBox groupBoxDetails; + private BmpView bmpViewDetails; + private System.Windows.Forms.Label labelDetails; } } \ No newline at end of file diff --git a/BizHawk.MultiClient/GBtools/GBGPUView.cs b/BizHawk.MultiClient/GBtools/GBGPUView.cs index 07e77ca9fa..215b195129 100644 --- a/BizHawk.MultiClient/GBtools/GBGPUView.cs +++ b/BizHawk.MultiClient/GBtools/GBGPUView.cs @@ -32,6 +32,7 @@ namespace BizHawk.MultiClient.GBtools bmpViewBGPal.ChangeBitmapSize(8, 4); bmpViewSPPal.ChangeBitmapSize(8, 4); bmpViewOAM.ChangeBitmapSize(320, 16); + bmpViewDetails.ChangeBitmapSize(8, 16); hScrollBarScanline.Value = 0; hScrollBarScanline_ValueChanged(null, null); // not firing in this case?? @@ -62,6 +63,8 @@ namespace BizHawk.MultiClient.GBtools bmpViewTiles2.Clear(); bmpViewBGPal.Clear(); bmpViewSPPal.Clear(); + bmpViewOAM.Clear(); + bmpViewDetails.Clear(); cbscanline_emu = -4; // force refresh } else @@ -72,45 +75,8 @@ namespace BizHawk.MultiClient.GBtools } } - /// - /// 0..153: scanline number. -1: frame. -2: manual - /// - int cbscanline; - /// - /// what was last passed to the emu core - /// - int cbscanline_emu = -4; // force refresh - /// - /// put me in ToolsBefore - /// - public void UpdateValues() - { - if (!this.IsHandleCreated || this.IsDisposed) - return; - if (gb != null) - { - if (!this.Visible) - { - if (cbscanline_emu != -2) - { - cbscanline_emu = -2; - gb.SetScanlineCallback(null, 0); - } - } - else - { - if (cbscanline != cbscanline_emu) - { - cbscanline_emu = cbscanline; - if (cbscanline == -2) - gb.SetScanlineCallback(null, 0); - else - gb.SetScanlineCallback(ScanlineCallback, cbscanline); - } - } - } - } + #region drawing primitives /// /// draw a single 2bpp tile @@ -351,6 +317,8 @@ namespace BizHawk.MultiClient.GBtools b.UnlockBits(lockdata); } + #endregion + void ScanlineCallback(int lcdc) { this.lcdc = lcdc; @@ -470,6 +438,8 @@ namespace BizHawk.MultiClient.GBtools Restart(); } + #region refresh + private void radioButtonRefreshFrame_CheckedChanged(object sender, EventArgs e) { ComputeRefreshValues(); } private void radioButtonRefreshScanline_CheckedChanged(object sender, EventArgs e) { ComputeRefreshValues(); } private void radioButtonRefreshManual_CheckedChanged(object sender, EventArgs e) { ComputeRefreshValues(); } @@ -509,5 +479,226 @@ namespace BizHawk.MultiClient.GBtools { labelScanline.Text = ((hScrollBarScanline.Value + 145) % 154).ToString(); } + + /// + /// 0..153: scanline number. -1: frame. -2: manual + /// + int cbscanline; + /// + /// what was last passed to the emu core + /// + int cbscanline_emu = -4; // force refresh + + /// + /// put me in ToolsBefore + /// + public void UpdateValues() + { + if (!this.IsHandleCreated || this.IsDisposed) + return; + if (gb != null) + { + if (!this.Visible) + { + if (cbscanline_emu != -2) + { + cbscanline_emu = -2; + gb.SetScanlineCallback(null, 0); + } + } + else + { + if (cbscanline != cbscanline_emu) + { + cbscanline_emu = cbscanline; + if (cbscanline == -2) + gb.SetScanlineCallback(null, 0); + else + gb.SetScanlineCallback(ScanlineCallback, cbscanline); + } + } + } + } + + #endregion + + #region mouseovers + + string freeze_label; + Bitmap freeze_bmp; + string freeze_details; + + void SaveFreeze() + { + freeze_label = groupBoxDetails.Text; + if (freeze_bmp != null) + freeze_bmp.Dispose(); + freeze_bmp = (Bitmap)bmpViewDetails.bmp.Clone(); + freeze_details = labelDetails.Text; + } + + void LoadFreeze() + { + groupBoxDetails.Text = freeze_label; + bmpViewDetails.Height = freeze_bmp.Height * 8; + bmpViewDetails.ChangeBitmapSize(freeze_bmp.Size); + using (var g = Graphics.FromImage(bmpViewDetails.bmp)) + g.DrawImageUnscaled(freeze_bmp, 0, 0); + labelDetails.Text = freeze_details; + bmpViewDetails.Refresh(); + } + + unsafe void TilemapMouseover(int x, int y, bool win) + { + bmpViewDetails.ChangeBitmapSize(8, 8); + if (bmpViewDetails.Height != 64) + bmpViewDetails.Height = 64; + var sb = new StringBuilder(); + bool secondmap = win ? lcdc.Bit(6) : lcdc.Bit(3); + int mapoffs = secondmap ? 0x1c00 : 0x1800; + x /= 8; + y /= 8; + mapoffs += y * 32 + x; + byte *mapbase = (byte *)vram + mapoffs; + int tileindex = mapbase[0]; + if (win || !lcdc.Bit(4)) // 0x9000 base + if (tileindex < 128) + tileindex += 256; // compute all if from 0x8000 base + int tileoffs = tileindex * 16; + var lockdata = bmpViewDetails.bmp.LockBits(new Rectangle(0, 0, 8, 8), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + if (!cgb) + { + sb.AppendLine(string.Format("{0} Map ({1},{2}) @{3:x4}", win ? "Win" : "BG", x, y, mapoffs + 0x8000)); + sb.AppendLine(string.Format(" Tile #{0} @{1:x4}", tileindex, tileoffs + 0x8000)); + DrawTile((byte*)vram + tileoffs, (int*)lockdata.Scan0, lockdata.Stride / sizeof(int), (int*)bgpal); + } + else + { + int tileext = mapbase[8192]; + + sb.AppendLine(string.Format("{0} Map ({1},{2}) @{3:x4}", win ? "Win" : "BG", x, y, mapoffs + 0x8000)); + sb.AppendLine(string.Format(" Tile #{0} @{2}:{1:x4}", tileindex, tileoffs + 0x8000, tileext.Bit(3) ? 1 : 0)); + sb.AppendLine(string.Format(" Palette {0}", tileext & 7)); + sb.AppendLine(string.Format(" Flags {0}{1}{2}", tileext.Bit(5) ? 'H' : ' ', tileext.Bit(6) ? 'V' : ' ', tileext.Bit(7) ? 'P' : ' ')); + DrawTileHV((byte*)vram + tileoffs + (tileext.Bit(3) ? 8192 : 0), (int*)lockdata.Scan0, lockdata.Stride / sizeof(int), (int*)bgpal + 4 * (tileext & 7), tileext.Bit(5), tileext.Bit(6)); + } + bmpViewDetails.bmp.UnlockBits(lockdata); + labelDetails.Text = sb.ToString(); + bmpViewDetails.Refresh(); + } + + private void bmpViewBG_MouseEnter(object sender, EventArgs e) + { + SaveFreeze(); + groupBoxDetails.Text = "Details - Background"; + } + + private void bmpViewBG_MouseLeave(object sender, EventArgs e) + { + LoadFreeze(); + } + + private void bmpViewBG_MouseMove(object sender, MouseEventArgs e) + { + TilemapMouseover(e.X, e.Y, false); + } + + private void bmpViewWin_MouseEnter(object sender, EventArgs e) + { + SaveFreeze(); + groupBoxDetails.Text = "Details - Window"; + } + + private void bmpViewWin_MouseLeave(object sender, EventArgs e) + { + LoadFreeze(); + } + + private void bmpViewWin_MouseMove(object sender, MouseEventArgs e) + { + TilemapMouseover(e.X, e.Y, true); + } + + private void bmpViewTiles1_MouseEnter(object sender, EventArgs e) + { + SaveFreeze(); + groupBoxDetails.Text = "Details - Tiles"; + } + + private void bmpViewTiles1_MouseLeave(object sender, EventArgs e) + { + LoadFreeze(); + } + + private void bmpViewTiles1_MouseMove(object sender, MouseEventArgs e) + { + + } + + private void bmpViewTiles2_MouseEnter(object sender, EventArgs e) + { + SaveFreeze(); + groupBoxDetails.Text = "Details - Tiles"; + } + + private void bmpViewTiles2_MouseLeave(object sender, EventArgs e) + { + LoadFreeze(); + } + + private void bmpViewTiles2_MouseMove(object sender, MouseEventArgs e) + { + + } + + private void bmpViewBGPal_MouseEnter(object sender, EventArgs e) + { + SaveFreeze(); + groupBoxDetails.Text = "Details - Palette"; + } + + private void bmpViewBGPal_MouseLeave(object sender, EventArgs e) + { + LoadFreeze(); + } + + private void bmpViewBGPal_Move(object sender, EventArgs e) + { + + } + + private void bmpViewSPPal_MouseEnter(object sender, EventArgs e) + { + SaveFreeze(); + groupBoxDetails.Text = "Details - Palette"; + } + + private void bmpViewSPPal_MouseLeave(object sender, EventArgs e) + { + LoadFreeze(); + } + + private void bmpViewSPPal_MouseMove(object sender, MouseEventArgs e) + { + + } + + private void bmpViewOAM_MouseEnter(object sender, EventArgs e) + { + SaveFreeze(); + groupBoxDetails.Text = "Details - Sprite"; + } + + private void bmpViewOAM_MouseLeave(object sender, EventArgs e) + { + LoadFreeze(); + } + + private void bmpViewOAM_MouseMove(object sender, MouseEventArgs e) + { + + } + + #endregion } }