Added a targeting reticle icon that can be used as a mouse cursor on the main viewport of Qt GUI. Easier to aim with for zapper games emulated by mouse.

This commit is contained in:
mjbudd77 2021-03-18 22:30:40 -04:00
parent ffd5de60aa
commit 456251861a
5 changed files with 71 additions and 73 deletions

BIN
icons/reticle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -13,5 +13,6 @@
<file>icons/timer.png</file> <file>icons/timer.png</file>
<file>icons/movie.png</file> <file>icons/movie.png</file>
<file>icons/camera.png</file> <file>icons/camera.png</file>
<file>icons/reticle.png</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -367,9 +367,11 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
grid = new QGridLayout(); grid = new QGridLayout();
cursorSelect = new QComboBox(); cursorSelect = new QComboBox();
cursorSelect->addItem( tr("Arrow"), 0 ); cursorSelect->addItem( tr("Arrow") , 0 );
cursorSelect->addItem( tr("Cross"), 1 ); cursorSelect->addItem( tr("Cross") , 1 );
cursorSelect->addItem( tr("Blank"), 2 ); cursorSelect->addItem( tr("Blank") , 2 );
cursorSelect->addItem( tr("Reticle 1x"), 3 );
cursorSelect->addItem( tr("Reticle 2x"), 4 );
setComboBoxFromProperty( cursorSelect, "SDL.CursorType" ); setComboBoxFromProperty( cursorSelect, "SDL.CursorType" );
@ -751,30 +753,15 @@ void ConsoleVideoConfDialog_t::regionChanged(int index)
void ConsoleVideoConfDialog_t::cursorShapeChanged(int index) void ConsoleVideoConfDialog_t::cursorShapeChanged(int index)
{ {
int cursorSel; int cursorSel;
Qt::CursorShape s;
//printf("Scaler: %i : %i \n", index, scalerSelect->itemData(index).toInt() ); //printf("Scaler: %i : %i \n", index, scalerSelect->itemData(index).toInt() );
cursorSel = cursorSelect->itemData(index).toInt(); cursorSel = cursorSelect->itemData(index).toInt();
switch ( cursorSel )
{
case 2:
s = Qt::BlankCursor;
break;
case 1:
s = Qt::CrossCursor;
break;
default:
case 0:
s = Qt::ArrowCursor;
cursorSel = 0;
break;
}
consoleWindow->setViewerCursor( s );
g_config->setOption ("SDL.CursorType", cursorSel); g_config->setOption ("SDL.CursorType", cursorSel);
g_config->save (); g_config->save ();
consoleWindow->loadCursor();
} }
//---------------------------------------------------- //----------------------------------------------------
void ConsoleVideoConfDialog_t::cursorVisChanged( int value ) void ConsoleVideoConfDialog_t::cursorVisChanged( int value )
@ -787,32 +774,7 @@ void ConsoleVideoConfDialog_t::cursorVisChanged( int value )
g_config->setOption("SDL.CursorVis", vis ); g_config->setOption("SDL.CursorVis", vis );
g_config->save (); g_config->save ();
if ( vis ) consoleWindow->loadCursor();
{
int opt;
Qt::CursorShape s;
g_config->getOption("SDL.CursorType", &opt );
switch ( opt )
{
case 2:
s = Qt::BlankCursor;
break;
case 1:
s = Qt::CrossCursor;
break;
default:
case 0:
s = Qt::ArrowCursor;
break;
}
consoleWindow->setViewerCursor( s );
}
else
{
consoleWindow->setViewerCursor( Qt::BlankCursor );
}
} }
//---------------------------------------------------- //----------------------------------------------------
QSize ConsoleVideoConfDialog_t::calcNewScreenSize(void) QSize ConsoleVideoConfDialog_t::calcNewScreenSize(void)

View File

@ -90,7 +90,6 @@ consoleWin_t::consoleWin_t(QWidget *parent)
int opt, xWinSize = 256, yWinSize = 240; int opt, xWinSize = 256, yWinSize = 240;
int use_SDL_video = false; int use_SDL_video = false;
int setFullScreen = false; int setFullScreen = false;
int cursorVis = true;
//QString libpath = QLibraryInfo::location(QLibraryInfo::PluginsPath); //QString libpath = QLibraryInfo::location(QLibraryInfo::PluginsPath);
//printf("LibPath: '%s'\n", libpath.toStdString().c_str() ); //printf("LibPath: '%s'\n", libpath.toStdString().c_str() );
@ -193,32 +192,7 @@ consoleWin_t::consoleWin_t(QWidget *parent)
recentRomMenuReset = false; recentRomMenuReset = false;
// Viewport Cursor Type and Visibility // Viewport Cursor Type and Visibility
g_config->getOption("SDL.CursorVis", &cursorVis ); loadCursor();
if ( cursorVis )
{
int cursorType;
g_config->getOption("SDL.CursorType", &cursorType );
switch ( cursorType )
{
case 2:
setViewerCursor( Qt::BlankCursor );
break;
case 1:
setViewerCursor( Qt::CrossCursor );
break;
default:
case 0:
setViewerCursor( Qt::ArrowCursor );
break;
}
}
else
{
setViewerCursor( Qt::BlankCursor );
}
} }
consoleWin_t::~consoleWin_t(void) consoleWin_t::~consoleWin_t(void)
@ -352,6 +326,65 @@ QSize consoleWin_t::calcRequiredSize(void)
return out; return out;
} }
void consoleWin_t::loadCursor(void)
{
int cursorVis;
// Viewport Cursor Type and Visibility
g_config->getOption("SDL.CursorVis", &cursorVis );
if ( cursorVis )
{
int cursorType;
g_config->getOption("SDL.CursorType", &cursorType );
switch ( cursorType )
{
case 4:
{
QPixmap reticle(":/icons/reticle.png");
setViewerCursor( QCursor(reticle.scaled(64,64)) );
}
break;
case 3:
{
QPixmap reticle(":/icons/reticle.png");
setViewerCursor( QCursor(reticle.scaled(32,32)) );
}
break;
case 2:
setViewerCursor( Qt::BlankCursor );
break;
case 1:
setViewerCursor( Qt::CrossCursor );
break;
default:
case 0:
setViewerCursor( Qt::ArrowCursor );
break;
}
}
else
{
setViewerCursor( Qt::BlankCursor );
}
}
void consoleWin_t::setViewerCursor( QCursor s )
{
if ( viewport_GL )
{
viewport_GL->setCursor(s);
}
else if ( viewport_SDL )
{
viewport_SDL->setCursor(s);
}
}
void consoleWin_t::setViewerCursor( Qt::CursorShape s ) void consoleWin_t::setViewerCursor( Qt::CursorShape s )
{ {
if ( viewport_GL ) if ( viewport_GL )

View File

@ -119,6 +119,8 @@ class consoleWin_t : public QMainWindow
QSize calcRequiredSize(void); QSize calcRequiredSize(void);
void loadCursor(void);
void setViewerCursor( QCursor s );
void setViewerCursor( Qt::CursorShape s ); void setViewerCursor( Qt::CursorShape s );
Qt::CursorShape getViewerCursor(void); Qt::CursorShape getViewerCursor(void);
protected: protected: