Added scanline start/end entry boxes for NTSC and PAL/Dendy to Qt Video config window.
This commit is contained in:
parent
c544c137f5
commit
e3f2970dcd
|
@ -27,6 +27,7 @@
|
||||||
#include "Qt/config.h"
|
#include "Qt/config.h"
|
||||||
#include "Qt/fceuWrapper.h"
|
#include "Qt/fceuWrapper.h"
|
||||||
#include "Qt/ConsoleWindow.h"
|
#include "Qt/ConsoleWindow.h"
|
||||||
|
#include "Qt/ConsoleUtilities.h"
|
||||||
#include "Qt/ConsoleVideoConf.h"
|
#include "Qt/ConsoleVideoConf.h"
|
||||||
#include "Qt/nes_shm.h"
|
#include "Qt/nes_shm.h"
|
||||||
|
|
||||||
|
@ -34,17 +35,39 @@
|
||||||
ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
|
ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
|
||||||
: QDialog( parent )
|
: QDialog( parent )
|
||||||
{
|
{
|
||||||
QVBoxLayout *main_vbox;
|
QVBoxLayout *main_vbox, *vbox1, *vbox2;
|
||||||
QHBoxLayout *hbox1;
|
QHBoxLayout *main_hbox, *hbox1;
|
||||||
QLabel *lbl;
|
QLabel *lbl;
|
||||||
QPushButton *button;
|
QPushButton *button;
|
||||||
QStyle *style;
|
QStyle *style;
|
||||||
|
QGroupBox *gbox;
|
||||||
|
QGridLayout *grid;
|
||||||
|
fceuDecIntValidtor *validator;
|
||||||
|
QFont font;
|
||||||
|
int opt, fontCharWidth;
|
||||||
|
char stmp[128];
|
||||||
|
|
||||||
|
font.setFamily("Courier New");
|
||||||
|
font.setStyle( QFont::StyleNormal );
|
||||||
|
font.setStyleHint( QFont::Monospace );
|
||||||
|
QFontMetrics fm(font);
|
||||||
|
|
||||||
|
#if QT_VERSION > QT_VERSION_CHECK(5, 11, 0)
|
||||||
|
fontCharWidth = fm.horizontalAdvance(QLatin1Char('2'));
|
||||||
|
#else
|
||||||
|
fontCharWidth = fm.width(QLatin1Char('2'));
|
||||||
|
#endif
|
||||||
|
|
||||||
style = this->style();
|
style = this->style();
|
||||||
|
|
||||||
setWindowTitle( tr("Video Config") );
|
setWindowTitle( tr("Video Config") );
|
||||||
|
|
||||||
main_vbox = new QVBoxLayout();
|
main_vbox = new QVBoxLayout();
|
||||||
|
main_hbox = new QHBoxLayout();
|
||||||
|
vbox1 = new QVBoxLayout();
|
||||||
|
|
||||||
|
main_vbox->addLayout( main_hbox );
|
||||||
|
main_hbox->addLayout( vbox1 );
|
||||||
|
|
||||||
// Video Driver Select
|
// Video Driver Select
|
||||||
lbl = new QLabel( tr("Driver:") );
|
lbl = new QLabel( tr("Driver:") );
|
||||||
|
@ -59,7 +82,7 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
|
||||||
hbox1->addWidget( lbl );
|
hbox1->addWidget( lbl );
|
||||||
hbox1->addWidget( driverSelect );
|
hbox1->addWidget( driverSelect );
|
||||||
|
|
||||||
main_vbox->addLayout( hbox1 );
|
vbox1->addLayout( hbox1 );
|
||||||
|
|
||||||
// Video Driver Select
|
// Video Driver Select
|
||||||
lbl = new QLabel( tr("Scaler:") );
|
lbl = new QLabel( tr("Scaler:") );
|
||||||
|
@ -82,7 +105,7 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
|
||||||
hbox1->addWidget( lbl );
|
hbox1->addWidget( lbl );
|
||||||
hbox1->addWidget( scalerSelect );
|
hbox1->addWidget( scalerSelect );
|
||||||
|
|
||||||
main_vbox->addLayout( hbox1 );
|
vbox1->addLayout( hbox1 );
|
||||||
|
|
||||||
// Enable OpenGL Linear Filter Checkbox
|
// Enable OpenGL Linear Filter Checkbox
|
||||||
gl_LF_chkBox = new QCheckBox( tr("Enable OpenGL Linear Filter") );
|
gl_LF_chkBox = new QCheckBox( tr("Enable OpenGL Linear Filter") );
|
||||||
|
@ -91,7 +114,7 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
|
||||||
|
|
||||||
connect(gl_LF_chkBox , SIGNAL(stateChanged(int)), this, SLOT(openGL_linearFilterChanged(int)) );
|
connect(gl_LF_chkBox , SIGNAL(stateChanged(int)), this, SLOT(openGL_linearFilterChanged(int)) );
|
||||||
|
|
||||||
main_vbox->addWidget( gl_LF_chkBox );
|
vbox1->addWidget( gl_LF_chkBox );
|
||||||
|
|
||||||
// Region Select
|
// Region Select
|
||||||
lbl = new QLabel( tr("Region:") );
|
lbl = new QLabel( tr("Region:") );
|
||||||
|
@ -115,7 +138,7 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
|
||||||
hbox1->addWidget( lbl );
|
hbox1->addWidget( lbl );
|
||||||
hbox1->addWidget( regionSelect );
|
hbox1->addWidget( regionSelect );
|
||||||
|
|
||||||
main_vbox->addLayout( hbox1 );
|
vbox1->addLayout( hbox1 );
|
||||||
|
|
||||||
// Enable New PPU Checkbox
|
// Enable New PPU Checkbox
|
||||||
new_PPU_ena = new QCheckBox( tr("Enable New PPU") );
|
new_PPU_ena = new QCheckBox( tr("Enable New PPU") );
|
||||||
|
@ -127,7 +150,7 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
|
||||||
sprtLimCbx = new QCheckBox( tr("Disable Sprite Limit") );
|
sprtLimCbx = new QCheckBox( tr("Disable Sprite Limit") );
|
||||||
|
|
||||||
// Clip Sides Checkbox
|
// Clip Sides Checkbox
|
||||||
clipSidesCbx = new QCheckBox( tr("Clip Sides") );
|
clipSidesCbx = new QCheckBox( tr("Clip Left/Right Sides (8 px on each)") );
|
||||||
|
|
||||||
// Show FPS Checkbox
|
// Show FPS Checkbox
|
||||||
showFPS_cbx = new QCheckBox( tr("Show FPS") );
|
showFPS_cbx = new QCheckBox( tr("Show FPS") );
|
||||||
|
@ -166,13 +189,13 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
|
||||||
connect(sqrPixCbx , SIGNAL(stateChanged(int)), this, SLOT(sqrPixChanged(int)) );
|
connect(sqrPixCbx , SIGNAL(stateChanged(int)), this, SLOT(sqrPixChanged(int)) );
|
||||||
connect(autoScaleCbx, SIGNAL(stateChanged(int)), this, SLOT(autoScaleChanged(int)) );
|
connect(autoScaleCbx, SIGNAL(stateChanged(int)), this, SLOT(autoScaleChanged(int)) );
|
||||||
|
|
||||||
main_vbox->addWidget( new_PPU_ena );
|
vbox1->addWidget( new_PPU_ena );
|
||||||
main_vbox->addWidget( frmskipcbx );
|
vbox1->addWidget( frmskipcbx );
|
||||||
main_vbox->addWidget( sprtLimCbx );
|
vbox1->addWidget( sprtLimCbx );
|
||||||
main_vbox->addWidget( clipSidesCbx);
|
//vbox1->addWidget( clipSidesCbx);
|
||||||
main_vbox->addWidget( showFPS_cbx );
|
vbox1->addWidget( showFPS_cbx );
|
||||||
main_vbox->addWidget( autoScaleCbx);
|
vbox1->addWidget( autoScaleCbx);
|
||||||
main_vbox->addWidget( sqrPixCbx );
|
vbox1->addWidget( sqrPixCbx );
|
||||||
|
|
||||||
xScaleBox = new QDoubleSpinBox(this);
|
xScaleBox = new QDoubleSpinBox(this);
|
||||||
yScaleBox = new QDoubleSpinBox(this);
|
yScaleBox = new QDoubleSpinBox(this);
|
||||||
|
@ -210,12 +233,12 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
|
||||||
hbox1 = new QHBoxLayout();
|
hbox1 = new QHBoxLayout();
|
||||||
hbox1->addWidget( xScaleLabel );
|
hbox1->addWidget( xScaleLabel );
|
||||||
hbox1->addWidget( xScaleBox );
|
hbox1->addWidget( xScaleBox );
|
||||||
main_vbox->addLayout( hbox1 );
|
vbox1->addLayout( hbox1 );
|
||||||
|
|
||||||
hbox1 = new QHBoxLayout();
|
hbox1 = new QHBoxLayout();
|
||||||
hbox1->addWidget( yScaleLabel );
|
hbox1->addWidget( yScaleLabel );
|
||||||
hbox1->addWidget( yScaleBox );
|
hbox1->addWidget( yScaleBox );
|
||||||
main_vbox->addLayout( hbox1 );
|
vbox1->addLayout( hbox1 );
|
||||||
|
|
||||||
if ( sqrPixCbx->isChecked() )
|
if ( sqrPixCbx->isChecked() )
|
||||||
{
|
{
|
||||||
|
@ -237,6 +260,83 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent)
|
||||||
|
|
||||||
main_vbox->addLayout( hbox1 );
|
main_vbox->addLayout( hbox1 );
|
||||||
|
|
||||||
|
gbox = new QGroupBox( tr("Drawing Area") );
|
||||||
|
vbox2 = new QVBoxLayout();
|
||||||
|
grid = new QGridLayout();
|
||||||
|
|
||||||
|
main_hbox->addLayout( vbox2 );
|
||||||
|
vbox2->addWidget( gbox, 1 );
|
||||||
|
vbox2->addStretch( 5 );
|
||||||
|
gbox->setLayout(grid);
|
||||||
|
|
||||||
|
ntsc_start = new QLineEdit();
|
||||||
|
ntsc_end = new QLineEdit();
|
||||||
|
pal_start = new QLineEdit();
|
||||||
|
pal_end = new QLineEdit();
|
||||||
|
|
||||||
|
validator = new fceuDecIntValidtor( 0, 239, this );
|
||||||
|
ntsc_start->setFont( font );
|
||||||
|
ntsc_start->setMaxLength( 3 );
|
||||||
|
ntsc_start->setValidator( validator );
|
||||||
|
ntsc_start->setAlignment(Qt::AlignCenter);
|
||||||
|
ntsc_start->setMaximumWidth( 8 * fontCharWidth );
|
||||||
|
ntsc_start->setCursorPosition(0);
|
||||||
|
|
||||||
|
validator = new fceuDecIntValidtor( 0, 239, this );
|
||||||
|
ntsc_end->setFont( font );
|
||||||
|
ntsc_end->setMaxLength( 3 );
|
||||||
|
ntsc_end->setValidator( validator );
|
||||||
|
ntsc_end->setAlignment(Qt::AlignCenter);
|
||||||
|
ntsc_end->setMaximumWidth( 8 * fontCharWidth );
|
||||||
|
ntsc_end->setCursorPosition(0);
|
||||||
|
|
||||||
|
validator = new fceuDecIntValidtor( 0, 239, this );
|
||||||
|
pal_start->setFont( font );
|
||||||
|
pal_start->setMaxLength( 3 );
|
||||||
|
pal_start->setValidator( validator );
|
||||||
|
pal_start->setAlignment(Qt::AlignCenter);
|
||||||
|
pal_start->setMaximumWidth( 8 * fontCharWidth );
|
||||||
|
pal_start->setCursorPosition(0);
|
||||||
|
|
||||||
|
validator = new fceuDecIntValidtor( 0, 239, this );
|
||||||
|
pal_end->setFont( font );
|
||||||
|
pal_end->setMaxLength( 3 );
|
||||||
|
pal_end->setValidator( validator );
|
||||||
|
pal_end->setAlignment(Qt::AlignCenter);
|
||||||
|
pal_end->setMaximumWidth( 8 * fontCharWidth );
|
||||||
|
pal_end->setCursorPosition(0);
|
||||||
|
|
||||||
|
g_config->getOption("SDL.ScanLineStartNTSC", &opt);
|
||||||
|
sprintf( stmp, "%i", opt );
|
||||||
|
ntsc_start->setText( tr(stmp) );
|
||||||
|
|
||||||
|
g_config->getOption("SDL.ScanLineEndNTSC", &opt);
|
||||||
|
sprintf( stmp, "%i", opt );
|
||||||
|
ntsc_end->setText( tr(stmp) );
|
||||||
|
|
||||||
|
g_config->getOption("SDL.ScanLineStartPAL", &opt);
|
||||||
|
sprintf( stmp, "%i", opt );
|
||||||
|
pal_start->setText( tr(stmp) );
|
||||||
|
|
||||||
|
g_config->getOption("SDL.ScanLineEndPAL", &opt);
|
||||||
|
sprintf( stmp, "%i", opt );
|
||||||
|
pal_end->setText( tr(stmp) );
|
||||||
|
|
||||||
|
connect( ntsc_start, SIGNAL(textEdited(const QString &)), this, SLOT(ntscStartScanLineChanged(const QString &)));
|
||||||
|
connect( ntsc_end , SIGNAL(textEdited(const QString &)), this, SLOT(ntscEndScanLineChanged(const QString &)));
|
||||||
|
connect( pal_start , SIGNAL(textEdited(const QString &)), this, SLOT(palStartScanLineChanged(const QString &)));
|
||||||
|
connect( pal_end , SIGNAL(textEdited(const QString &)), this, SLOT(palEndScanLineChanged(const QString &)));
|
||||||
|
|
||||||
|
grid->addWidget( new QLabel( tr("NTSC") ) , 0, 1, Qt::AlignLeft);
|
||||||
|
grid->addWidget( new QLabel( tr("PAL/Dendy") ) , 0, 2, Qt::AlignLeft);
|
||||||
|
grid->addWidget( new QLabel( tr("First Line:") ), 1, 0, Qt::AlignLeft);
|
||||||
|
grid->addWidget( new QLabel( tr("Last Line:") ), 2, 0, Qt::AlignLeft);
|
||||||
|
grid->addWidget( ntsc_start, 1, 1, Qt::AlignLeft);
|
||||||
|
grid->addWidget( pal_start , 1, 2, Qt::AlignLeft);
|
||||||
|
grid->addWidget( ntsc_end , 2, 1, Qt::AlignLeft);
|
||||||
|
grid->addWidget( pal_end , 2, 2, Qt::AlignLeft);
|
||||||
|
grid->addWidget( clipSidesCbx, 3, 0, 1, 3);
|
||||||
|
|
||||||
setLayout( main_vbox );
|
setLayout( main_vbox );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -270,6 +370,68 @@ void ConsoleVideoConfDialog_t::resetVideo(void)
|
||||||
fceuWrapperUnLock();
|
fceuWrapperUnLock();
|
||||||
}
|
}
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
|
void ConsoleVideoConfDialog_t::ntscStartScanLineChanged(const QString &txt)
|
||||||
|
{
|
||||||
|
int opt;
|
||||||
|
std::string s;
|
||||||
|
|
||||||
|
s = txt.toStdString();
|
||||||
|
|
||||||
|
if ( s.size() > 0 )
|
||||||
|
{
|
||||||
|
opt = strtoul( s.c_str(), NULL, 10 );
|
||||||
|
|
||||||
|
g_config->setOption("SDL.ScanLineStartNTSC", opt);
|
||||||
|
|
||||||
|
printf("NTSC Start: %i \n", opt );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//----------------------------------------------------
|
||||||
|
void ConsoleVideoConfDialog_t::ntscEndScanLineChanged(const QString &txt)
|
||||||
|
{
|
||||||
|
int opt;
|
||||||
|
std::string s;
|
||||||
|
|
||||||
|
s = txt.toStdString();
|
||||||
|
|
||||||
|
if ( s.size() > 0 )
|
||||||
|
{
|
||||||
|
opt = strtoul( s.c_str(), NULL, 10 );
|
||||||
|
|
||||||
|
g_config->setOption("SDL.ScanLineEndNTSC", opt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//----------------------------------------------------
|
||||||
|
void ConsoleVideoConfDialog_t::palStartScanLineChanged(const QString &txt)
|
||||||
|
{
|
||||||
|
int opt;
|
||||||
|
std::string s;
|
||||||
|
|
||||||
|
s = txt.toStdString();
|
||||||
|
|
||||||
|
if ( s.size() > 0 )
|
||||||
|
{
|
||||||
|
opt = strtoul( s.c_str(), NULL, 10 );
|
||||||
|
|
||||||
|
g_config->setOption("SDL.ScanLineStartPAL", opt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//----------------------------------------------------
|
||||||
|
void ConsoleVideoConfDialog_t::palEndScanLineChanged(const QString &txt)
|
||||||
|
{
|
||||||
|
int opt;
|
||||||
|
std::string s;
|
||||||
|
|
||||||
|
s = txt.toStdString();
|
||||||
|
|
||||||
|
if ( s.size() > 0 )
|
||||||
|
{
|
||||||
|
opt = strtoul( s.c_str(), NULL, 10 );
|
||||||
|
|
||||||
|
g_config->setOption("SDL.ScanLineEndPAL", opt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//----------------------------------------------------
|
||||||
void ConsoleVideoConfDialog_t::setCheckBoxFromProperty( QCheckBox *cbx, const char *property )
|
void ConsoleVideoConfDialog_t::setCheckBoxFromProperty( QCheckBox *cbx, const char *property )
|
||||||
{
|
{
|
||||||
int pval;
|
int pval;
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
#include <QLineEdit>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QSlider>
|
#include <QSlider>
|
||||||
#include <QFrame>
|
#include <QFrame>
|
||||||
|
@ -43,6 +44,10 @@ class ConsoleVideoConfDialog_t : public QDialog
|
||||||
QDoubleSpinBox *yScaleBox;
|
QDoubleSpinBox *yScaleBox;
|
||||||
QLabel *xScaleLabel;
|
QLabel *xScaleLabel;
|
||||||
QLabel *yScaleLabel;
|
QLabel *yScaleLabel;
|
||||||
|
QLineEdit *ntsc_start;
|
||||||
|
QLineEdit *ntsc_end;
|
||||||
|
QLineEdit *pal_start;
|
||||||
|
QLineEdit *pal_end;
|
||||||
|
|
||||||
void setCheckBoxFromProperty( QCheckBox *cbx, const char *property );
|
void setCheckBoxFromProperty( QCheckBox *cbx, const char *property );
|
||||||
void setComboBoxFromProperty( QComboBox *cbx, const char *property );
|
void setComboBoxFromProperty( QComboBox *cbx, const char *property );
|
||||||
|
@ -67,6 +72,10 @@ class ConsoleVideoConfDialog_t : public QDialog
|
||||||
void driverChanged(int index);
|
void driverChanged(int index);
|
||||||
void scalerChanged(int index);
|
void scalerChanged(int index);
|
||||||
void applyChanges( void );
|
void applyChanges( void );
|
||||||
|
void ntscStartScanLineChanged(const QString &);
|
||||||
|
void ntscEndScanLineChanged(const QString &);
|
||||||
|
void palStartScanLineChanged(const QString &);
|
||||||
|
void palEndScanLineChanged(const QString &);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,29 @@ consoleWin_t::consoleWin_t(QWidget *parent)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
g_config->getOption( "SDL.WinSizeX", &xWinSize );
|
||||||
|
g_config->getOption( "SDL.WinSizeY", &yWinSize );
|
||||||
|
|
||||||
|
if ( (xWinSize >= 256) && (yWinSize >= 256) )
|
||||||
|
{
|
||||||
|
this->resize( xWinSize, yWinSize );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QSize reqSize = calcRequiredSize();
|
||||||
|
|
||||||
|
this->resize( reqSize );
|
||||||
|
}
|
||||||
|
|
||||||
|
g_config->getOption( "SDL.Fullscreen", &setFullScreen );
|
||||||
|
g_config->setOption( "SDL.Fullscreen", 0 ); // Reset full screen config parameter to false so it is never saved this way
|
||||||
|
|
||||||
|
if ( setFullScreen )
|
||||||
|
{
|
||||||
|
this->showFullScreen();
|
||||||
|
}
|
||||||
|
|
||||||
recentRomMenuReset = false;
|
recentRomMenuReset = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,6 +259,54 @@ consoleWin_t::~consoleWin_t(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QSize consoleWin_t::calcRequiredSize(void)
|
||||||
|
{
|
||||||
|
QSize out( GL_NES_WIDTH, GL_NES_HEIGHT );
|
||||||
|
|
||||||
|
QSize w, v;
|
||||||
|
double xscale, yscale;
|
||||||
|
int texture_width = nes_shm->video.ncol;
|
||||||
|
int texture_height = nes_shm->video.nrow;
|
||||||
|
int l=0, r=texture_width;
|
||||||
|
int t=0, b=texture_height;
|
||||||
|
int dw=0, dh=0, rw, rh;
|
||||||
|
bool sqrPixChkd = true;
|
||||||
|
|
||||||
|
CalcVideoDimensions();
|
||||||
|
|
||||||
|
w = size();
|
||||||
|
|
||||||
|
if ( viewport_GL )
|
||||||
|
{
|
||||||
|
v = viewport_GL->size();
|
||||||
|
sqrPixChkd = viewport_GL->getSqrPixelOpt();
|
||||||
|
xscale = viewport_GL->getScaleX();
|
||||||
|
yscale = viewport_GL->getScaleY();
|
||||||
|
}
|
||||||
|
else if ( viewport_SDL )
|
||||||
|
{
|
||||||
|
v = viewport_SDL->size();
|
||||||
|
sqrPixChkd = viewport_SDL->getSqrPixelOpt();
|
||||||
|
xscale = viewport_SDL->getScaleX();
|
||||||
|
yscale = viewport_SDL->getScaleY();
|
||||||
|
}
|
||||||
|
|
||||||
|
dw = 0;
|
||||||
|
dh = menubar->height();
|
||||||
|
|
||||||
|
if ( sqrPixChkd )
|
||||||
|
{
|
||||||
|
yscale = xscale * (double)nes_shm->video.xyRatio;
|
||||||
|
}
|
||||||
|
rw=(int)((r-l)*xscale);
|
||||||
|
rh=(int)((b-t)*yscale);
|
||||||
|
|
||||||
|
out.setWidth( rw + dw );
|
||||||
|
out.setHeight( rh + dh );
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
void consoleWin_t::setCyclePeriodms( int ms )
|
void consoleWin_t::setCyclePeriodms( int ms )
|
||||||
{
|
{
|
||||||
// If timer is already running, it will be restarted.
|
// If timer is already running, it will be restarted.
|
||||||
|
|
|
@ -116,6 +116,8 @@ class consoleWin_t : public QMainWindow
|
||||||
|
|
||||||
void addRecentRom( const char *rom );
|
void addRecentRom( const char *rom );
|
||||||
|
|
||||||
|
QSize calcRequiredSize(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
consoleMenuBar *menubar;
|
consoleMenuBar *menubar;
|
||||||
|
|
||||||
|
|
|
@ -241,8 +241,10 @@ InitConfig()
|
||||||
config->addOption("ntsccolor", "SDL.NTSCpalette", 0);
|
config->addOption("ntsccolor", "SDL.NTSCpalette", 0);
|
||||||
|
|
||||||
// scanline settings
|
// scanline settings
|
||||||
config->addOption("slstart", "SDL.ScanLineStart", 0);
|
config->addOption("SDL.ScanLineStartNTSC", 0+8);
|
||||||
config->addOption("slend", "SDL.ScanLineEnd", 239);
|
config->addOption("SDL.ScanLineEndNTSC", 239-8);
|
||||||
|
config->addOption("SDL.ScanLineStartPAL", 0);
|
||||||
|
config->addOption("SDL.ScanLineEndPAL", 239);
|
||||||
|
|
||||||
// video controls
|
// video controls
|
||||||
config->addOption('f', "fullscreen", "SDL.Fullscreen", 0);
|
config->addOption('f', "fullscreen", "SDL.Fullscreen", 0);
|
||||||
|
@ -253,8 +255,8 @@ InitConfig()
|
||||||
config->addOption('y', "yres", "SDL.YResolution", 0);
|
config->addOption('y', "yres", "SDL.YResolution", 0);
|
||||||
config->addOption("SDL.LastXRes", 0);
|
config->addOption("SDL.LastXRes", 0);
|
||||||
config->addOption("SDL.LastYRes", 0);
|
config->addOption("SDL.LastYRes", 0);
|
||||||
config->addOption("SDL.WinSizeX", 512);
|
config->addOption("SDL.WinSizeX", 0);
|
||||||
config->addOption("SDL.WinSizeY", 512);
|
config->addOption("SDL.WinSizeY", 0);
|
||||||
config->addOption("doublebuf", "SDL.DoubleBuffering", 1);
|
config->addOption("doublebuf", "SDL.DoubleBuffering", 1);
|
||||||
config->addOption("autoscale", "SDL.AutoScale", 1);
|
config->addOption("autoscale", "SDL.AutoScale", 1);
|
||||||
config->addOption("keepratio", "SDL.KeepRatio", 1);
|
config->addOption("keepratio", "SDL.KeepRatio", 1);
|
||||||
|
@ -540,7 +542,8 @@ InitConfig()
|
||||||
void
|
void
|
||||||
UpdateEMUCore(Config *config)
|
UpdateEMUCore(Config *config)
|
||||||
{
|
{
|
||||||
int ntsccol, ntsctint, ntschue, flag, region, start, end;
|
int ntsccol, ntsctint, ntschue, flag, region;
|
||||||
|
int startNTSC, endNTSC, startPAL, endPAL;
|
||||||
std::string cpalette;
|
std::string cpalette;
|
||||||
|
|
||||||
config->getOption("SDL.NTSCpalette", &ntsccol);
|
config->getOption("SDL.NTSCpalette", &ntsccol);
|
||||||
|
@ -565,8 +568,10 @@ UpdateEMUCore(Config *config)
|
||||||
config->getOption("SDL.DisableSpriteLimit", &flag);
|
config->getOption("SDL.DisableSpriteLimit", &flag);
|
||||||
FCEUI_DisableSpriteLimitation(flag ? 1 : 0);
|
FCEUI_DisableSpriteLimitation(flag ? 1 : 0);
|
||||||
|
|
||||||
config->getOption("SDL.ScanLineStart", &start);
|
config->getOption("SDL.ScanLineStartNTSC", &startNTSC);
|
||||||
config->getOption("SDL.ScanLineEnd", &end);
|
config->getOption("SDL.ScanLineEndNTSC", &endNTSC);
|
||||||
|
config->getOption("SDL.ScanLineStartPAL", &startPAL);
|
||||||
|
config->getOption("SDL.ScanLineEndPAL", &endPAL);
|
||||||
|
|
||||||
#if DOING_SCANLINE_CHECKS
|
#if DOING_SCANLINE_CHECKS
|
||||||
for(int i = 0; i < 2; x++) {
|
for(int i = 0; i < 2; x++) {
|
||||||
|
@ -575,6 +580,6 @@ UpdateEMUCore(Config *config)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FCEUI_SetRenderedLines(start + 8, end - 8, start, end);
|
FCEUI_SetRenderedLines(startNTSC, endNTSC, startPAL, endPAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ uint32 *GetJSOr(void);
|
||||||
|
|
||||||
int InitVideo(FCEUGI *gi);
|
int InitVideo(FCEUGI *gi);
|
||||||
int KillVideo(void);
|
int KillVideo(void);
|
||||||
|
void CalcVideoDimensions(void);
|
||||||
void BlitScreen(uint8 *XBuf);
|
void BlitScreen(uint8 *XBuf);
|
||||||
void LockConsole(void);
|
void LockConsole(void);
|
||||||
void UnlockConsole(void);
|
void UnlockConsole(void);
|
||||||
|
|
|
@ -34,7 +34,7 @@ nes_shm_t *open_nes_shm(void)
|
||||||
|
|
||||||
memset( vaddr, 0, sizeof(struct nes_shm_t));
|
memset( vaddr, 0, sizeof(struct nes_shm_t));
|
||||||
|
|
||||||
vaddr->video.ncol = 256;
|
vaddr->video.ncol = 240;
|
||||||
vaddr->video.nrow = 256;
|
vaddr->video.nrow = 256;
|
||||||
vaddr->video.pitch = 256 * 4;
|
vaddr->video.pitch = 256 * 4;
|
||||||
vaddr->video.scale = 1;
|
vaddr->video.scale = 1;
|
||||||
|
|
|
@ -140,9 +140,65 @@ void FCEUD_VideoChanged()
|
||||||
PAL = 0; // NTSC and Dendy
|
PAL = 0; // NTSC and Dendy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CalcVideoDimensions(void)
|
||||||
|
{
|
||||||
|
g_config->getOption("SDL.SpecialFilter", &s_sponge);
|
||||||
|
|
||||||
|
FCEUI_GetCurrentVidSystem(&s_srendline, &s_erendline);
|
||||||
|
s_tlines = s_erendline - s_srendline + 1;
|
||||||
|
|
||||||
|
nes_shm->video.preScaler = s_sponge;
|
||||||
|
|
||||||
|
switch ( s_sponge )
|
||||||
|
{
|
||||||
|
case 0: // None
|
||||||
|
nes_shm->video.scale = 1;
|
||||||
|
break;
|
||||||
|
case 1: // hq2x
|
||||||
|
case 2: // Scale2x
|
||||||
|
case 3: // NTSC 2x
|
||||||
|
case 6: // Prescale2x
|
||||||
|
nes_shm->video.scale = 2;
|
||||||
|
break;
|
||||||
|
case 4: // hq3x
|
||||||
|
case 5: // Scale3x
|
||||||
|
case 7: // Prescale3x
|
||||||
|
nes_shm->video.scale = 3;
|
||||||
|
break;
|
||||||
|
case 8: // Prescale4x
|
||||||
|
nes_shm->video.scale = 4;
|
||||||
|
break;
|
||||||
|
case 9: // PAL
|
||||||
|
nes_shm->video.scale = 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
int iScale = nes_shm->video.scale;
|
||||||
|
if ( s_sponge == 3 )
|
||||||
|
{
|
||||||
|
nes_shm->video.ncol = iScale*301;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nes_shm->video.ncol = iScale*NWIDTH;
|
||||||
|
}
|
||||||
|
if ( s_sponge == 9 )
|
||||||
|
{
|
||||||
|
nes_shm->video.nrow = 1*s_tlines;
|
||||||
|
nes_shm->video.xyRatio = 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nes_shm->video.nrow = iScale*s_tlines;
|
||||||
|
nes_shm->video.xyRatio = 1;
|
||||||
|
}
|
||||||
|
nes_shm->video.pitch = nes_shm->video.ncol * 4;
|
||||||
|
}
|
||||||
|
|
||||||
int InitVideo(FCEUGI *gi)
|
int InitVideo(FCEUGI *gi)
|
||||||
{
|
{
|
||||||
int doublebuf, xstretch, ystretch, xres, yres, show_fps;
|
int doublebuf, xstretch, ystretch, xres, yres, show_fps;
|
||||||
|
int startNTSC, endNTSC, startPAL, endPAL;
|
||||||
|
|
||||||
FCEUI_printf("Initializing video...");
|
FCEUI_printf("Initializing video...");
|
||||||
|
|
||||||
|
@ -159,8 +215,14 @@ int InitVideo(FCEUGI *gi)
|
||||||
g_config->getOption("SDL.ShowFPS", &show_fps);
|
g_config->getOption("SDL.ShowFPS", &show_fps);
|
||||||
//g_config->getOption("SDL.XScale", &s_exs);
|
//g_config->getOption("SDL.XScale", &s_exs);
|
||||||
//g_config->getOption("SDL.YScale", &s_eys);
|
//g_config->getOption("SDL.YScale", &s_eys);
|
||||||
|
g_config->getOption("SDL.ScanLineStartNTSC", &startNTSC);
|
||||||
|
g_config->getOption("SDL.ScanLineEndNTSC", &endNTSC);
|
||||||
|
g_config->getOption("SDL.ScanLineStartPAL", &startPAL);
|
||||||
|
g_config->getOption("SDL.ScanLineEndPAL", &endPAL);
|
||||||
uint32_t rmask, gmask, bmask;
|
uint32_t rmask, gmask, bmask;
|
||||||
|
|
||||||
|
FCEUI_SetRenderedLines(startNTSC, endNTSC, startPAL, endPAL);
|
||||||
|
|
||||||
s_exs = 1.0;
|
s_exs = 1.0;
|
||||||
s_eys = 1.0;
|
s_eys = 1.0;
|
||||||
xres = gui_draw_area_width;
|
xres = gui_draw_area_width;
|
||||||
|
|
Loading…
Reference in New Issue