diff --git a/pipelines/debpkg.pl b/pipelines/debpkg.pl index 87167b15..9d2198b5 100755 --- a/pipelines/debpkg.pl +++ b/pipelines/debpkg.pl @@ -2,7 +2,7 @@ use strict; -my $VERSION="2.6.1"; +my $VERSION="2.6.2"; my $INSTALL_PREFIX="/tmp/fceux"; my $CTL_FILENAME="$INSTALL_PREFIX/DEBIAN/control"; my $ARCH="amd64"; diff --git a/pipelines/macOS_build.sh b/pipelines/macOS_build.sh index b1a458e4..c05230af 100755 --- a/pipelines/macOS_build.sh +++ b/pipelines/macOS_build.sh @@ -10,7 +10,7 @@ QT_MAJOR=5; QT_PKGNAME=qt$QT_MAJOR; FCEUX_VERSION_MAJOR=2 FCEUX_VERSION_MINOR=6 -FCEUX_VERSION_PATCH=1 +FCEUX_VERSION_PATCH=2 SDL2_VERSION=2.0.14 SCRIPT_DIR=$( cd $(dirname $BASH_SOURCE[0]); pwd ); diff --git a/readme.md b/readme.md index 1c928939..e5f59b79 100644 --- a/readme.md +++ b/readme.md @@ -28,8 +28,8 @@ Interim builds: * Win32: [fceux.zip](https://ci.appveyor.com/api/projects/zeromus/fceux/artifacts/fceux.zip?branch=master&job=Windows%2032) * Win64: [fceux64.zip](https://ci.appveyor.com/api/projects/zeromus/fceux/artifacts/fceux64.zip?branch=master&job=Windows%2064) * Win64 Qt/SDL: [qfceux64.zip](https://ci.appveyor.com/api/projects/zeromus/fceux/artifacts/qfceux64.zip?branch=master&job=Win64%20Qt) -* Ubuntu: [fceux-2.6.1-amd64.deb](https://ci.appveyor.com/api/projects/zeromus/fceux/artifacts/fceux-2.6.1-amd64.deb?branch=master&job=Ubuntu) -* MacOSX: [fceux-2.6.1-Darwin.dmg](https://ci.appveyor.com/api/projects/zeromus/fceux/artifacts/fceux-2.6.1-Darwin.dmg?branch=master&job=MacOS) +* Ubuntu: [fceux-2.6.2-amd64.deb](https://ci.appveyor.com/api/projects/zeromus/fceux/artifacts/fceux-2.6.2-amd64.deb?branch=master&job=Ubuntu) +* MacOSX: [fceux-2.6.2-Darwin.dmg](https://ci.appveyor.com/api/projects/zeromus/fceux/artifacts/fceux-2.6.2-Darwin.dmg?branch=master&job=MacOS) * Status: [Appveyor](https://ci.appveyor.com/project/zeromus/fceux/) But you might like mesen more: https://github.com/SourMesen/Mesen diff --git a/src/drivers/Qt/AviRecord.cpp b/src/drivers/Qt/AviRecord.cpp index c0b2de81..f6a096a9 100644 --- a/src/drivers/Qt/AviRecord.cpp +++ b/src/drivers/Qt/AviRecord.cpp @@ -32,6 +32,7 @@ #include #endif +#include #include #include #include diff --git a/src/drivers/Qt/ConsoleUtilities.cpp b/src/drivers/Qt/ConsoleUtilities.cpp index a9e5bff1..1d55615c 100644 --- a/src/drivers/Qt/ConsoleUtilities.cpp +++ b/src/drivers/Qt/ConsoleUtilities.cpp @@ -492,7 +492,11 @@ void fceuCustomToolTip::mouseMoveEvent(QMouseEvent *event) if (!w->rect().isNull()) { +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + QPoint pos = event->globalPosition().toPoint(); +#else QPoint pos = event->globalPos(); +#endif pos = mapFromGlobal(pos); //printf("QEvent::MouseMove: (%i,%i) (%i,%i)\n", diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index b67d1732..4461c4cd 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -114,19 +114,23 @@ consoleWin_t::consoleWin_t(QWidget *parent) initHotKeys(); - createMainMenu(); - firstResize = true; closeRequested = false; errorMsgValid = false; viewport_GL = NULL; viewport_SDL = NULL; - mainMenuEmuPauseSet = false; - mainMenuEmuWasPaused = false; - mainMenuPauseWhenActv = false; + contextMenuEnable = false; + soundUseGlobalFocus = false; + mainMenuEmuPauseSet = false; + mainMenuEmuWasPaused = false; + mainMenuPauseWhenActv = false; + autoHideMenuFullscreen = false; + + createMainMenu(); g_config->getOption( "SDL.PauseOnMainMenuAccess", &mainMenuPauseWhenActv ); + g_config->getOption( "SDL.AutoHideMenuFullsreen", &autoHideMenuFullscreen ); g_config->getOption( "SDL.ContextMenuEnable", &contextMenuEnable ); g_config->getOption( "SDL.Sound.UseGlobalFocus", &soundUseGlobalFocus ); g_config->getOption ("SDL.VideoDriver", &use_SDL_video); @@ -225,6 +229,10 @@ consoleWin_t::consoleWin_t(QWidget *parent) if ( setFullScreen ) { + if ( autoHideMenuFullscreen ) + { + menubar->setVisible(false); + } this->showFullScreen(); } @@ -1221,6 +1229,19 @@ void consoleWin_t::createMainMenu(void) Hotkeys[ HK_MAIN_MENU_HIDE ].setAction( act ); connect( Hotkeys[ HK_MAIN_MENU_HIDE ].getShortcut(), SIGNAL(activated()), this, SLOT(toggleMenuVis(void)) ); + // Options -> Auto Hide Menu on Fullscreen + g_config->getOption( "SDL.AutoHideMenuFullsreen", &autoHideMenuFullscreen ); + + act = new QAction(tr("&Auto Hide Menu on Fullscreen"), this); + //act->setShortcut( QKeySequence(tr("Alt+/"))); + act->setCheckable(true); + act->setChecked( autoHideMenuFullscreen ); + act->setStatusTip(tr("Auto Hide Menu on Fullscreen")); + //act->setIcon( style()->standardIcon( QStyle::SP_TitleBarMaxButton ) ); + connect(act, SIGNAL(triggered(bool)), this, SLOT(toggleMenuAutoHide(bool)) ); + + optMenu->addAction(act); + // Options -> Video BG Color fceuLoadConfigColor( "SDL.VideoBgColor", &videoBgColor ); @@ -2098,6 +2119,14 @@ void consoleWin_t::toggleMenuVis(void) } } //--------------------------------------------------------------------------- +void consoleWin_t::toggleMenuAutoHide(bool checked) +{ + autoHideMenuFullscreen = checked; + + g_config->setOption( "SDL.AutoHideMenuFullsreen", autoHideMenuFullscreen ); + g_config->save(); +} +//--------------------------------------------------------------------------- void consoleWin_t::closeApp(void) { nes_shm->runEmulator = 0; @@ -3102,9 +3131,18 @@ void consoleWin_t::toggleFullscreen(void) if ( isFullScreen() ) { showNormal(); + + if ( autoHideMenuFullscreen ) + { + menubar->setVisible(true); + } } else { + if ( autoHideMenuFullscreen ) + { + menubar->setVisible(false); + } showFullScreen(); } } diff --git a/src/drivers/Qt/ConsoleWindow.h b/src/drivers/Qt/ConsoleWindow.h index e884d41a..a3d1c7d0 100644 --- a/src/drivers/Qt/ConsoleWindow.h +++ b/src/drivers/Qt/ConsoleWindow.h @@ -271,6 +271,7 @@ class consoleWin_t : public QMainWindow bool scrHandlerConnected; bool contextMenuEnable; bool soundUseGlobalFocus; + bool autoHideMenuFullscreen; std::list romList; std::vector afActList; @@ -449,6 +450,7 @@ class consoleWin_t : public QMainWindow void winScreenChanged( QScreen *scr ); void winActiveChanged(void); void emuFrameFinish(void); + void toggleMenuAutoHide(bool); void videoBgColorChanged( QColor &c ); void loadRomRequestCB( QString s ); diff --git a/src/drivers/Qt/HexEditor.cpp b/src/drivers/Qt/HexEditor.cpp index d6869d6b..090dc233 100644 --- a/src/drivers/Qt/HexEditor.cpp +++ b/src/drivers/Qt/HexEditor.cpp @@ -1100,7 +1100,7 @@ HexEditorDialog_t::HexEditorDialog_t(QWidget *parent) QAction *act, *actHlgt, *actHlgtRV; ColorMenuItem *actColorFG, *actColorBG, *actRowColColor, *actAltColColor; QActionGroup *group; - int opt, useNativeMenuBar, refreshRateOpt; + int opt, useNativeMenuBar; QSettings settings; QDialog::setWindowTitle( tr("Hex Editor") ); @@ -1280,6 +1280,7 @@ HexEditorDialog_t::HexEditorDialog_t(QWidget *parent) group->setExclusive(true); + refreshRateOpt = 10; g_config->getOption("SDL.HexEditRefreshRate", &refreshRateOpt); // View -> Refresh Rate -> 5 Hz @@ -1318,6 +1319,15 @@ HexEditorDialog_t::HexEditorDialog_t(QWidget *parent) group->addAction(act); subMenu->addAction(act); + // View -> Refresh Rate -> 50 Hz + act = new QAction(tr("50 Hz"), this); + act->setCheckable(true); + act->setChecked( refreshRateOpt == 50 ); + connect(act, SIGNAL(triggered()), this, SLOT(setViewRefresh50Hz(void)) ); + + group->addAction(act); + subMenu->addAction(act); + // View -> Refresh Rate -> 60 Hz act = new QAction(tr("60 Hz"), this); act->setCheckable(true); @@ -1727,6 +1737,7 @@ void HexEditorDialog_t::changeFontRequest(void) //---------------------------------------------------------------------------- void HexEditorDialog_t::setViewRefresh5Hz(void) { + refreshRateOpt = 5; g_config->setOption("SDL.HexEditRefreshRate", 5); periodicTimer->stop(); periodicTimer->start(200); @@ -1734,6 +1745,7 @@ void HexEditorDialog_t::setViewRefresh5Hz(void) //---------------------------------------------------------------------------- void HexEditorDialog_t::setViewRefresh10Hz(void) { + refreshRateOpt = 10; g_config->setOption("SDL.HexEditRefreshRate", 10); periodicTimer->stop(); periodicTimer->start(100); @@ -1741,6 +1753,7 @@ void HexEditorDialog_t::setViewRefresh10Hz(void) //---------------------------------------------------------------------------- void HexEditorDialog_t::setViewRefresh20Hz(void) { + refreshRateOpt = 20; g_config->setOption("SDL.HexEditRefreshRate", 20); periodicTimer->stop(); periodicTimer->start(50); @@ -1748,13 +1761,23 @@ void HexEditorDialog_t::setViewRefresh20Hz(void) //---------------------------------------------------------------------------- void HexEditorDialog_t::setViewRefresh30Hz(void) { + refreshRateOpt = 30; g_config->setOption("SDL.HexEditRefreshRate", 30); periodicTimer->stop(); periodicTimer->start(33); } //---------------------------------------------------------------------------- +void HexEditorDialog_t::setViewRefresh50Hz(void) +{ + refreshRateOpt = 50; + g_config->setOption("SDL.HexEditRefreshRate", 50); + periodicTimer->stop(); + periodicTimer->start(20); +} +//---------------------------------------------------------------------------- void HexEditorDialog_t::setViewRefresh60Hz(void) { + refreshRateOpt = 60; g_config->setOption("SDL.HexEditRefreshRate", 60); periodicTimer->stop(); periodicTimer->start(16); @@ -3804,7 +3827,7 @@ void QHexEdit::paintEvent(QPaintEvent *event) painter.fillRect( 0, 0, w, h, bgColor ); - if ( cursorBlinkCount >= 5 ) + if ( cursorBlinkCount >= (parent->getRefreshRate()>>1) ) { cursorBlink = !cursorBlink; cursorBlinkCount = 0; @@ -4008,8 +4031,12 @@ void QHexEdit::paintEvent(QPaintEvent *event) if ( reverseVideo ) { painter.setPen( romFgColor ); - painter.fillRect( x - (0.5*pxCharWidth) , recty, pxCharWidth3, pxLineSpacing, romBgColor ); - painter.fillRect( pxHexAscii + (col*pxCharWidth) - pxLineXScroll, recty, pxCharWidth, pxLineSpacing, romBgColor ); + + if ( bgColor != romBgColor ) + { + painter.fillRect( x - (0.5*pxCharWidth) , recty, pxCharWidth3, pxLineSpacing, romBgColor ); + painter.fillRect( pxHexAscii + (col*pxCharWidth) - pxLineXScroll, recty, pxCharWidth, pxLineSpacing, romBgColor ); + } } else { diff --git a/src/drivers/Qt/HexEditor.h b/src/drivers/Qt/HexEditor.h index 74fcf37c..1914c74a 100644 --- a/src/drivers/Qt/HexEditor.h +++ b/src/drivers/Qt/HexEditor.h @@ -297,6 +297,8 @@ class HexEditorDialog_t : public QDialog void setWindowTitle(void); void openDebugSymbolEditWindow( int addr ); + int getRefreshRate(void){ return refreshRateOpt; } + QHexEdit *editor; HexEditorFindDialog_t *findDialog; @@ -318,6 +320,8 @@ class HexEditorDialog_t : public QDialog QAction *rolColHlgtAct; QAction *altColHlgtAct; + int refreshRateOpt; + private: public slots: @@ -349,6 +353,7 @@ class HexEditorDialog_t : public QDialog void setViewRefresh10Hz(void); void setViewRefresh20Hz(void); void setViewRefresh30Hz(void); + void setViewRefresh50Hz(void); void setViewRefresh60Hz(void); void changeFontRequest(void); }; diff --git a/src/drivers/Qt/TasEditor/TasEditorWindow.cpp b/src/drivers/Qt/TasEditor/TasEditorWindow.cpp index b656aaaf..14f61e1c 100644 --- a/src/drivers/Qt/TasEditor/TasEditorWindow.cpp +++ b/src/drivers/Qt/TasEditor/TasEditorWindow.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include diff --git a/src/drivers/Qt/TasEditor/bookmarks.cpp b/src/drivers/Qt/TasEditor/bookmarks.cpp index a38a15f9..91e418c5 100644 --- a/src/drivers/Qt/TasEditor/bookmarks.cpp +++ b/src/drivers/Qt/TasEditor/bookmarks.cpp @@ -858,7 +858,11 @@ void BOOKMARKS::mouseMoveEvent(QMouseEvent * event) emit imageIndexChanged(item); } imageItem = item; +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + imagePos = event->globalPosition().toPoint(); +#else imagePos = event->globalPos(); +#endif imageTimer->start(); QToolTip::hideText(); } diff --git a/src/drivers/Qt/TasEditor/branches.cpp b/src/drivers/Qt/TasEditor/branches.cpp index a12c179f..3ecd0b2d 100644 --- a/src/drivers/Qt/TasEditor/branches.cpp +++ b/src/drivers/Qt/TasEditor/branches.cpp @@ -152,7 +152,7 @@ void BRANCHES::calcFontData(void) // printf("Char:'%c' x:%i y:%i w:%i h:%i\n", txt[0], boundingRect.x(), boundingRect.y(), boundingRect.width(), boundingRect.height() ); //} - bs = (metrics.leftBearing(ch) + metrics.rightBearing(ch)) / 2; + bs = (metrics.leftBearing(QChar(ch)) + metrics.rightBearing(QChar(ch))) / 2; pxCharHeight = metrics.capHeight(); //pxCharHeight = metrics.ascent(); @@ -690,7 +690,11 @@ void BRANCHES::mouseMoveEvent(QMouseEvent * event) emit imageIndexChanged(item); } imageItem = item; +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + imagePos = event->globalPosition().toPoint(); +#else imagePos = event->globalPos(); +#endif imageTimer->start(); QToolTip::hideText(); } diff --git a/src/drivers/Qt/config.cpp b/src/drivers/Qt/config.cpp index d3727e56..6261b428 100644 --- a/src/drivers/Qt/config.cpp +++ b/src/drivers/Qt/config.cpp @@ -817,6 +817,7 @@ InitConfig() config->addOption("_useNativeFileDialog", "SDL.UseNativeFileDialog", false); config->addOption("_useNativeMenuBar" , "SDL.UseNativeMenuBar", false); config->addOption("SDL.PauseOnMainMenuAccess", false); + config->addOption("SDL.AutoHideMenuFullsreen", false); config->addOption("SDL.ContextMenuEnable", true); config->addOption("SDL.GuiStyle", ""); config->addOption("SDL.QtStyleSheet", ""); diff --git a/src/drivers/Qt/input.cpp b/src/drivers/Qt/input.cpp index fd04b36e..39d76699 100644 --- a/src/drivers/Qt/input.cpp +++ b/src/drivers/Qt/input.cpp @@ -265,11 +265,19 @@ void hotkey_t::conv2SDL(void) if (shortcut == nullptr) return; +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + qkey.value = shortcut->key()[0].key(); + qkey.modifier = shortcut->key()[0].keyboardModifiers(); + + SDL_Keycode k = convQtKey2SDLKeyCode(shortcut->key()[0].key()); + SDL_Keymod m = convQtKey2SDLModifier(shortcut->key()[0].keyboardModifiers()); +#else qkey.value = (Qt::Key)(shortcut->key()[0] & 0x01FFFFFF); qkey.modifier = (Qt::KeyboardModifier)(shortcut->key()[0] & 0xFE000000); SDL_Keycode k = convQtKey2SDLKeyCode((Qt::Key)(shortcut->key()[0] & 0x01FFFFFF)); SDL_Keymod m = convQtKey2SDLModifier((Qt::KeyboardModifier)(shortcut->key()[0] & 0xFE000000)); +#endif //printf("Key: '%s' 0x%08x\n", shortcut->key().toString().toStdString().c_str(), shortcut->key()[0] ); diff --git a/src/version.h b/src/version.h index 935835b9..30bfcf0c 100644 --- a/src/version.h +++ b/src/version.h @@ -62,14 +62,14 @@ #define FCEU_VERSION_MAJOR 2 #define FCEU_VERSION_MINOR 6 -#define FCEU_VERSION_PATCH 1 +#define FCEU_VERSION_PATCH 2 #define FCEU_VERSION_NUMERIC ( (FCEU_VERSION_MAJOR*10000) + (FCEU_VERSION_MINOR*100) + (FCEU_VERSION_PATCH) ) #define FCEU_VERSION_MAJOR_DECODE(x) ( (x / 10000) ) #define FCEU_VERSION_MINOR_DECODE(x) ( (x / 100) % 100 ) #define FCEU_VERSION_PATCH_DECODE(x) (x % 100) -#define FCEU_VERSION_STRING "2.6.1" FCEU_SUBVERSION_STRING FCEU_FEATURE_STRING FCEU_COMPILER +#define FCEU_VERSION_STRING "2.6.2" FCEU_SUBVERSION_STRING FCEU_FEATURE_STRING FCEU_COMPILER #define FCEU_NAME_AND_VERSION FCEU_NAME " " FCEU_VERSION_STRING #endif diff --git a/web/download.html b/web/download.html index f5a8b37b..a34b4f11 100644 --- a/web/download.html +++ b/web/download.html @@ -84,8 +84,8 @@
  • Windows 32-bit
  • Windows 64-bit
  • Win 64 Qt/SDL
  • -
  • Ubuntu Linux
  • -
  • Mac OS X
  • +
  • Ubuntu Linux
  • +
  • Mac OS X
  • Source Code