From 7bd1d6c2e82d1bff4dce897da7816bcd6c37b6fd Mon Sep 17 00:00:00 2001
From: mjbudd77 <mjbudd77@gmail.com>
Date: Sun, 23 May 2021 21:06:34 -0400
Subject: [PATCH] Added draw input aid configuration option to Qt GUI.

---
 src/drivers/Qt/ConsoleVideoConf.cpp | 39 ++++++++++++++++++++++-------
 src/drivers/Qt/ConsoleVideoConf.h   |  2 ++
 src/drivers/Qt/config.cpp           |  1 +
 src/drivers/Qt/fceuWrapper.cpp      |  8 ++++++
 src/drivers/Qt/fceuWrapper.h        |  1 +
 src/drivers/Qt/sdl-video.cpp        |  9 +------
 src/input/zapper.cpp                | 26 +++++++++++--------
 7 files changed, 58 insertions(+), 28 deletions(-)

diff --git a/src/drivers/Qt/ConsoleVideoConf.cpp b/src/drivers/Qt/ConsoleVideoConf.cpp
index aeaf5961..6626fd75 100644
--- a/src/drivers/Qt/ConsoleVideoConf.cpp
+++ b/src/drivers/Qt/ConsoleVideoConf.cpp
@@ -164,12 +164,16 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
 	// Force Aspect Ratio
 	aspectCbx  = new QCheckBox( tr("Force Aspect Ratio") );
 
+	// Draw Input Aids
+	drawInputAidsCbx = new QCheckBox( tr("Draw Input Aids") );
+
 	setCheckBoxFromProperty( autoRegion   , "SDL.AutoDetectPAL");
 	setCheckBoxFromProperty( new_PPU_ena  , "SDL.NewPPU");
 	setCheckBoxFromProperty( frmskipcbx   , "SDL.Frameskip");
 	setCheckBoxFromProperty( sprtLimCbx   , "SDL.DisableSpriteLimit");
 	setCheckBoxFromProperty( clipSidesCbx , "SDL.ClipSides");
 	setCheckBoxFromProperty( showFPS_cbx  , "SDL.ShowFPS");
+	setCheckBoxFromProperty( drawInputAidsCbx, "SDL.DrawInputAids" );
 	
 	if ( consoleWindow )
 	{
@@ -185,20 +189,22 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
 		}
 	}
 
-	connect(autoRegion  , SIGNAL(stateChanged(int)), this, SLOT(autoRegionChanged(int)) );
-	connect(new_PPU_ena , SIGNAL(stateChanged(int)), this, SLOT(use_new_PPU_changed(int)) );
-	connect(frmskipcbx  , SIGNAL(stateChanged(int)), this, SLOT(frameskip_changed(int)) );
-	connect(sprtLimCbx  , SIGNAL(stateChanged(int)), this, SLOT(useSpriteLimitChanged(int)) );
-	connect(clipSidesCbx, SIGNAL(stateChanged(int)), this, SLOT(clipSidesChanged(int)) );
-	connect(showFPS_cbx , SIGNAL(stateChanged(int)), this, SLOT(showFPSChanged(int)) );
-	connect(aspectCbx   , SIGNAL(stateChanged(int)), this, SLOT(aspectEnableChanged(int)) );
-	connect(autoScaleCbx, SIGNAL(stateChanged(int)), this, SLOT(autoScaleChanged(int)) );
+	connect(autoRegion      , SIGNAL(stateChanged(int)), this, SLOT(autoRegionChanged(int)) );
+	connect(new_PPU_ena     , SIGNAL(stateChanged(int)), this, SLOT(use_new_PPU_changed(int)) );
+	connect(frmskipcbx      , SIGNAL(stateChanged(int)), this, SLOT(frameskip_changed(int)) );
+	connect(sprtLimCbx      , SIGNAL(stateChanged(int)), this, SLOT(useSpriteLimitChanged(int)) );
+	connect(clipSidesCbx    , SIGNAL(stateChanged(int)), this, SLOT(clipSidesChanged(int)) );
+	connect(showFPS_cbx     , SIGNAL(stateChanged(int)), this, SLOT(showFPSChanged(int)) );
+	connect(aspectCbx       , SIGNAL(stateChanged(int)), this, SLOT(aspectEnableChanged(int)) );
+	connect(autoScaleCbx    , SIGNAL(stateChanged(int)), this, SLOT(autoScaleChanged(int)) );
+	connect(drawInputAidsCbx, SIGNAL(stateChanged(int)), this, SLOT(drawInputAidsChanged(int)) );
 
 	vbox1->addWidget( autoRegion  );
 	vbox1->addWidget( new_PPU_ena );
 	vbox1->addWidget( frmskipcbx  );
 	vbox1->addWidget( sprtLimCbx  );
 	//vbox1->addWidget( clipSidesCbx);
+	vbox1->addWidget( drawInputAidsCbx );
 	vbox1->addWidget( showFPS_cbx );
 	vbox1->addWidget( autoScaleCbx);
 	vbox1->addWidget( aspectCbx   );
@@ -412,7 +418,9 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
 	setCheckBoxFromProperty( cursorVisCbx, "SDL.CursorVis" );
 	grid->addWidget( cursorVisCbx, 1, 0, 2, 1, Qt::AlignLeft);
 
-	connect(cursorVisCbx, SIGNAL(stateChanged(int)), this, SLOT(cursorVisChanged(int)) );
+	//grid->addWidget( drawInputAidsCbx, 2, 0, 2, 1, Qt::AlignLeft);
+
+	connect(cursorVisCbx    , SIGNAL(stateChanged(int)), this, SLOT(cursorVisChanged(int)) );
 
 	vbox2->addStretch( 5 );
 
@@ -825,6 +833,19 @@ void ConsoleVideoConfDialog_t::cursorVisChanged( int value )
 	consoleWindow->loadCursor();
 }
 //----------------------------------------------------
+void ConsoleVideoConfDialog_t::drawInputAidsChanged( int value )
+{
+	int draw;
+
+	draw = (value != Qt::Unchecked);
+
+	//printf("Value:%i \n", value );
+	g_config->setOption("SDL.DrawInputAids", draw );
+	g_config->save ();
+
+	drawInputAidsEnable = draw;
+}
+//----------------------------------------------------
 QSize ConsoleVideoConfDialog_t::calcNewScreenSize(void)
 {
 	QSize out( GL_NES_WIDTH, GL_NES_HEIGHT );
diff --git a/src/drivers/Qt/ConsoleVideoConf.h b/src/drivers/Qt/ConsoleVideoConf.h
index f164702d..59fc969b 100644
--- a/src/drivers/Qt/ConsoleVideoConf.h
+++ b/src/drivers/Qt/ConsoleVideoConf.h
@@ -45,6 +45,7 @@ class ConsoleVideoConfDialog_t : public QDialog
 		QCheckBox   *autoScaleCbx;
 		QCheckBox   *aspectCbx;
 		QCheckBox   *cursorVisCbx;
+		QCheckBox   *drawInputAidsCbx;
 		QDoubleSpinBox *xScaleBox;
 		QDoubleSpinBox *yScaleBox;
 		QLabel         *aspectSelectLabel;
@@ -85,6 +86,7 @@ class ConsoleVideoConfDialog_t : public QDialog
 		void  scalerChanged(int index);
 		void  cursorShapeChanged(int index);
 		void  cursorVisChanged(int value);
+		void  drawInputAidsChanged(int value);
 		void  applyChanges( void );
 		void  ntscStartScanLineChanged(const QString &);
 		void  ntscEndScanLineChanged(const QString &);
diff --git a/src/drivers/Qt/config.cpp b/src/drivers/Qt/config.cpp
index 8633b37b..b58dc71b 100644
--- a/src/drivers/Qt/config.cpp
+++ b/src/drivers/Qt/config.cpp
@@ -504,6 +504,7 @@ InitConfig()
 	config->addOption("togglemenu", "SDL.ToggleMenu", 0);
 	config->addOption("cursorType", "SDL.CursorType", 0);
 	config->addOption("cursorVis" , "SDL.CursorVis", 1);
+	config->addOption("SDL.DrawInputAids", 1);
 
 	// OpenGL options
 	config->addOption("opengl", "SDL.OpenGL", 1);
diff --git a/src/drivers/Qt/fceuWrapper.cpp b/src/drivers/Qt/fceuWrapper.cpp
index 6755e695..b8fcafe4 100644
--- a/src/drivers/Qt/fceuWrapper.cpp
+++ b/src/drivers/Qt/fceuWrapper.cpp
@@ -84,6 +84,7 @@ bool turbo = false;
 bool pauseAfterPlayback = false;
 bool suggestReadOnlyReplay = true;
 bool showStatusIconOpt = true;
+bool drawInputAidsEnable = true;
 unsigned int gui_draw_area_width   = 256;
 unsigned int gui_draw_area_height  = 256;
 
@@ -736,6 +737,8 @@ int  fceuWrapperInit( int argc, char *argv[] )
 		AutoResumePlay = false;
 	}
 
+	g_config->getOption ("SDL.DrawInputAids", &drawInputAidsEnable);
+
 	// check to see if recording HUD to AVI is enabled
 	int rh;
 	g_config->getOption("SDL.RecordHUD", &rh);
@@ -1549,6 +1552,11 @@ void FCEUD_ToggleStatusIcon(void)
 	showStatusIconOpt = !showStatusIconOpt;
 }
 
+bool FCEUD_ShouldDrawInputAids(void)
+{
+	return drawInputAidsEnable;
+}
+
 void FCEUD_TurboOn	 (void) { /* TODO */ };
 void FCEUD_TurboOff   (void) { /* TODO */ };
 void FCEUD_TurboToggle(void) { /* TODO */ };
diff --git a/src/drivers/Qt/fceuWrapper.h b/src/drivers/Qt/fceuWrapper.h
index 2073740b..48e35ddd 100644
--- a/src/drivers/Qt/fceuWrapper.h
+++ b/src/drivers/Qt/fceuWrapper.h
@@ -17,6 +17,7 @@ extern bool pauseAfterPlayback;
 extern bool suggestReadOnlyReplay;
 extern bool emulatorCycleToggle;
 extern bool showStatusIconOpt;
+extern bool drawInputAidsEnable;
 extern unsigned int gui_draw_area_width;
 extern unsigned int gui_draw_area_height;
 extern unsigned int emulatorCycleCount;
diff --git a/src/drivers/Qt/sdl-video.cpp b/src/drivers/Qt/sdl-video.cpp
index f99ae08c..464864fa 100644
--- a/src/drivers/Qt/sdl-video.cpp
+++ b/src/drivers/Qt/sdl-video.cpp
@@ -77,15 +77,8 @@ extern bool MaxSpeed;
  * Attempts to destroy the graphical video display.  Returns 0 on
  * success, -1 on failure.
  */
-
-//draw input aids if we are fullscreen
-bool FCEUD_ShouldDrawInputAids()
-{
-	return s_fullscreen!=0;
-}
- 
 int
-KillVideo()
+KillVideo(void)
 {
 	//printf("Killing Video\n");
 
diff --git a/src/input/zapper.cpp b/src/input/zapper.cpp
index e367a03b..41149c74 100644
--- a/src/input/zapper.cpp
+++ b/src/input/zapper.cpp
@@ -169,24 +169,28 @@ static void UpdateZapper(int w, void *data, int arg)
 {
 	uint32 *ptr=(uint32 *)data;
 
-    bool newclicked = (ptr[2]&3)!=0;
-    bool oldclicked = (ZD[w].lastInput)!=0;
+	bool newclicked = (ptr[2]&3)!=0;
+	bool oldclicked = (ZD[w].lastInput)!=0;
 
 	if(ZD[w].bogo)
-    {
+	{
 		ZD[w].bogo--;	
-    }
+	}
 
-    ZD[w].lastInput = ptr[2]&3;
+	ZD[w].lastInput = ptr[2]&3;
 
     //woah.. this looks like broken bit logic.
-	if(newclicked && !oldclicked)
-    {
+	if (newclicked && !oldclicked)
+	{
 		ZD[w].bogo=5;
-	    ZD[w].mzb=ptr[2];
-	    ZD[w].mzx=ptr[0];
-	    ZD[w].mzy=ptr[1];
-    }
+		ZD[w].mzb=ptr[2];
+		ZD[w].mzx=ptr[0];
+		ZD[w].mzy=ptr[1];
+	}
+	// Always update X,Y so that gunsight draw function
+	// is always following the cursor.
+	ZD[w].mzx=ptr[0];
+	ZD[w].mzy=ptr[1];
 
 }