diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c1063f0c..bb37f0f6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -388,6 +388,7 @@ set(SRC_DRIVERS_SDL ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/ConsoleViewerSDL.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/GamePadConf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/HotKeyConf.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/PaletteConf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/ConsoleVideoConf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/ConsoleSoundConf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/AboutWindow.cpp diff --git a/src/drivers/Qt/AboutWindow.cpp b/src/drivers/Qt/AboutWindow.cpp index 4d67090d..b79f0315 100644 --- a/src/drivers/Qt/AboutWindow.cpp +++ b/src/drivers/Qt/AboutWindow.cpp @@ -16,6 +16,7 @@ static const char *Authors[] = { "Linux/SDL Developers:", + "\t mjbudd77", "\t Lukas Sabota //punkrockguy318", "\t Soules", "\t Bryan Cain", "\t radsaq", "\t Shinydoofy", "FceuX 2.0 Developers:", diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index c9bc21db..c0b120ee 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -19,6 +19,7 @@ #include "Qt/ConsoleWindow.h" #include "Qt/GamePadConf.h" #include "Qt/HotKeyConf.h" +#include "Qt/PaletteConf.h" #include "Qt/ConsoleSoundConf.h" #include "Qt/ConsoleVideoConf.h" #include "Qt/AboutWindow.h" @@ -285,6 +286,14 @@ void consoleWin_t::createMainMenu(void) optMenu->addAction(hotkeyConfig); + // Options -> Palette Config + paletteConfig = new QAction(tr("Palette Config"), this); + //paletteConfig->setShortcut( QKeySequence(tr("Ctrl+C"))); + paletteConfig->setStatusTip(tr("Palette Configure")); + connect(paletteConfig, SIGNAL(triggered()), this, SLOT(openPaletteConfWin(void)) ); + + optMenu->addAction(paletteConfig); + // Options -> Auto-Resume autoResume = new QAction(tr("Auto-Resume Play"), this); //autoResume->setShortcut( QKeySequence(tr("Ctrl+C"))); @@ -931,6 +940,22 @@ void consoleWin_t::openHotkeyConfWin(void) //printf("Hotkey Config Window Destroyed\n"); } +void consoleWin_t::openPaletteConfWin(void) +{ + PaletteConfDialog_t *paletteConfWin; + + //printf("Open Palette Config Window\n"); + + paletteConfWin = new PaletteConfDialog_t(this); + + paletteConfWin->show(); + paletteConfWin->exec(); + + delete paletteConfWin; + + //printf("Palette Config Window Destroyed\n"); +} + void consoleWin_t::toggleAutoResume(void) { //printf("Auto Resume: %i\n", autoResume->isChecked() ); diff --git a/src/drivers/Qt/ConsoleWindow.h b/src/drivers/Qt/ConsoleWindow.h index 59bb43f5..e5d563fb 100644 --- a/src/drivers/Qt/ConsoleWindow.h +++ b/src/drivers/Qt/ConsoleWindow.h @@ -67,6 +67,7 @@ class consoleWin_t : public QMainWindow QAction *gameSoundConfig; QAction *gameVideoConfig; QAction *hotkeyConfig; + QAction *paletteConfig; QAction *autoResume; QAction *fullscreen; QAction *aboutAct; @@ -116,6 +117,7 @@ class consoleWin_t : public QMainWindow void openGameSndConfWin(void); void openGameVideoConfWin(void); void openHotkeyConfWin(void); + void openPaletteConfWin(void); void toggleAutoResume(void); void toggleFullscreen(void); void updatePeriodic(void); diff --git a/src/drivers/Qt/PaletteConf.cpp b/src/drivers/Qt/PaletteConf.cpp new file mode 100644 index 00000000..bf167a27 --- /dev/null +++ b/src/drivers/Qt/PaletteConf.cpp @@ -0,0 +1,217 @@ +// PaletteConf.cpp +// +#include + +#include "Qt/PaletteConf.h" +#include "Qt/main.h" +#include "Qt/input.h" +#include "Qt/config.h" +#include "Qt/keyscan.h" +#include "Qt/fceuWrapper.h" + +//---------------------------------------------------- +PaletteConfDialog_t::PaletteConfDialog_t(QWidget *parent) + : QDialog( parent ) +{ + QVBoxLayout *mainLayout, *vbox; + QHBoxLayout *hbox1; + QGroupBox *frame; + QPushButton *closebutton; + QPushButton *button; + int hue, tint; + char stmp[64]; + + // sync with config + g_config->getOption ("SDL.Hue", &hue); + g_config->getOption ("SDL.Tint", &tint); + + setWindowTitle( tr("Palette Config") ); + + mainLayout = new QVBoxLayout(); + + frame = new QGroupBox( tr("Custom Palette:") ); + hbox1 = new QHBoxLayout(); + + button = new QPushButton( tr("Open Palette") ); + hbox1->addWidget( button ); + + connect( button, SIGNAL(clicked(void)), this, SLOT(openPaletteFile(void)) ); + + custom_palette_path = new QLineEdit(); + custom_palette_path->setReadOnly(true); + hbox1->addWidget( custom_palette_path ); + + button = new QPushButton( tr("Clear") ); + hbox1->addWidget( button ); + + connect( button, SIGNAL(clicked(void)), this, SLOT(clearPalette(void)) ); + + frame->setLayout( hbox1 ); + + mainLayout->addWidget( frame ); + + frame = new QGroupBox( tr("NTSC Palette Controls:") ); + + vbox = new QVBoxLayout(); + useNTSC = new QCheckBox( tr("Use NTSC Palette") ); + + int ntscPaletteEnable; + g_config->getOption("SDL.NTSCpalette", &ntscPaletteEnable); + useNTSC->setChecked( ntscPaletteEnable ); + + connect(useNTSC , SIGNAL(stateChanged(int)), this, SLOT(use_NTSC_Changed(int)) ); + + vbox->addWidget( useNTSC ); + + sprintf( stmp, "Tint: %3i \n", tint ); + tintFrame = new QGroupBox( tr(stmp) ); + hbox1 = new QHBoxLayout(); + tintSlider = new QSlider( Qt::Horizontal ); + tintSlider->setMinimum( 0); + tintSlider->setMaximum(128); + tintSlider->setValue( tint ); + + connect( tintSlider, SIGNAL(valueChanged(int)), this, SLOT(tintChanged(int)) ); + + hbox1->addWidget( tintSlider ); + tintFrame->setLayout( hbox1 ); + vbox->addWidget( tintFrame ); + + sprintf( stmp, "Hue: %3i \n", hue ); + hueFrame = new QGroupBox( tr(stmp) ); + hbox1 = new QHBoxLayout(); + hueSlider = new QSlider( Qt::Horizontal ); + hueSlider->setMinimum( 0); + hueSlider->setMaximum(128); + hueSlider->setValue( hue ); + + connect( hueSlider, SIGNAL(valueChanged(int)), this, SLOT(hueChanged(int)) ); + + hbox1->addWidget( hueSlider ); + hueFrame->setLayout( hbox1 ); + vbox->addWidget( hueFrame ); + + frame->setLayout( vbox ); + + mainLayout->addWidget( frame ); + + setLayout( mainLayout ); +} + +//---------------------------------------------------- +PaletteConfDialog_t::~PaletteConfDialog_t(void) +{ + +} +//---------------------------------------------------- +void PaletteConfDialog_t::closeWindow(void) +{ + //printf("Close Window\n"); + done(0); +} +//---------------------------------------------------- +void PaletteConfDialog_t::hueChanged(int v) +{ + int c, t; + char stmp[64]; + + sprintf( stmp, "Hue: %3i", v ); + + hueFrame->setTitle(stmp); + + g_config->setOption ("SDL.Hue", v); + g_config->save (); + g_config->getOption ("SDL.Tint", &t); + g_config->getOption ("SDL.NTSCpalette", &c); + + fceuWrapperLock(); + FCEUI_SetNTSCTH (c, t, v); + fceuWrapperUnLock(); +} +//---------------------------------------------------- +void PaletteConfDialog_t::tintChanged(int v) +{ + int c, h; + char stmp[64]; + + sprintf( stmp, "Tint: %3i", v ); + + tintFrame->setTitle(stmp); + + g_config->setOption ("SDL.Tint", v); + g_config->save (); + g_config->getOption ("SDL.NTSCpalette", &c); + g_config->getOption ("SDL.Hue", &h); + + fceuWrapperLock(); + FCEUI_SetNTSCTH (c, v, h); + fceuWrapperUnLock(); +} +//---------------------------------------------------- +void PaletteConfDialog_t::use_NTSC_Changed(int state) +{ + int value = (state == Qt::Unchecked) ? 0 : 1; + + g_config->setOption ("SDL.NTSCpalette", value); + g_config->save (); + UpdateEMUCore (g_config); +} +//---------------------------------------------------- +void PaletteConfDialog_t::clearPalette(void) +{ + g_config->setOption ("SDL.Palette", 0); + custom_palette_path->setText(""); +} +//---------------------------------------------------- +void PaletteConfDialog_t::openPaletteFile(void) +{ + int ret; + QString filename; + QFileDialog dialog(this, tr("Open NES Palette") ); + + dialog.setFileMode(QFileDialog::ExistingFile); + + dialog.setNameFilter(tr("NES Palettes (*.pal)(*.PAL) ;; All files (*)")); + + dialog.setViewMode(QFileDialog::List); + + dialog.setDirectory( tr("/usr/share/fceux/palettes") ); + + // the gnome default file dialog is not playing nice with QT. + // TODO make this a config option to use native file dialog. + dialog.setOption(QFileDialog::DontUseNativeDialog, true); + + dialog.show(); + ret = dialog.exec(); + + if ( ret ) + { + QStringList fileList; + fileList = dialog.selectedFiles(); + + if ( fileList.size() > 0 ) + { + filename = fileList[0]; + } + } + + if ( filename.isNull() ) + { + return; + } + qDebug() << "selected file path : " << filename.toUtf8(); + + g_config->setOption ("SDL.Palette", filename.toStdString().c_str() ); + g_config->setOption ("SDL.NTSCpalette", 0); + + fceuWrapperLock(); + LoadCPalette ( filename.toStdString().c_str() ); + fceuWrapperUnLock(); + + custom_palette_path->setText( filename.toStdString().c_str() ); + + useNTSC->setChecked( 0 ); + + return; +} +//---------------------------------------------------- diff --git a/src/drivers/Qt/PaletteConf.h b/src/drivers/Qt/PaletteConf.h new file mode 100644 index 00000000..f1d83041 --- /dev/null +++ b/src/drivers/Qt/PaletteConf.h @@ -0,0 +1,46 @@ +// PaletteConf.h +// + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Qt/main.h" + +class PaletteConfDialog_t : public QDialog +{ + Q_OBJECT + + public: + PaletteConfDialog_t(QWidget *parent = 0); + ~PaletteConfDialog_t(void); + + protected: + QLineEdit *custom_palette_path; + QCheckBox *useNTSC; + QSlider *tintSlider; + QSlider *hueSlider; + QGroupBox *tintFrame; + QGroupBox *hueFrame; + private: + + public slots: + void closeWindow(void); + private slots: + void hueChanged(int value); + void tintChanged(int value); + void openPaletteFile(void); + void clearPalette(void); + void use_NTSC_Changed(int v); + +}; diff --git a/src/drivers/Qt/sdl-video.cpp b/src/drivers/Qt/sdl-video.cpp index 003f8dcd..95e9584c 100644 --- a/src/drivers/Qt/sdl-video.cpp +++ b/src/drivers/Qt/sdl-video.cpp @@ -297,6 +297,7 @@ static void RedoPalette() { if (s_curbpp > 8) { + //printf("Refresh Palette\n"); SetPaletteBlitToHigh((uint8*)s_psdl); } }