From: Shamus Hammons Date: Thu, 16 Aug 2012 05:01:31 +0000 (-0500) Subject: Added preliminary full screen support. X-Git-Tag: 2.1.0~18 X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=virtualjaguar;a=commitdiff_plain;h=122ea9b537bf5da3e5cca0804826ef19d3b8fe86 Added preliminary full screen support. --- diff --git a/src/gui/configdialog.cpp b/src/gui/configdialog.cpp index ac22898..e84cf23 100644 --- a/src/gui/configdialog.cpp +++ b/src/gui/configdialog.cpp @@ -70,6 +70,7 @@ void ConfigDialog::LoadDialogFromSettings(void) generalTab->useBIOS->setChecked(vjs.useJaguarBIOS); generalTab->useGPU->setChecked(vjs.GPUEnabled); generalTab->useDSP->setChecked(vjs.DSPEnabled); + generalTab->useFullScreen->setChecked(vjs.fullscreen); // generalTab->useHostAudio->setChecked(vjs.audioEnabled); if (vjs.hardwareTypeAlpine) @@ -98,6 +99,7 @@ void ConfigDialog::UpdateVJSettings(void) vjs.useJaguarBIOS = generalTab->useBIOS->isChecked(); vjs.GPUEnabled = generalTab->useGPU->isChecked(); vjs.DSPEnabled = generalTab->useDSP->isChecked(); + vjs.fullscreen = generalTab->useFullScreen->isChecked(); // vjs.audioEnabled = generalTab->useHostAudio->isChecked(); if (vjs.hardwareTypeAlpine) diff --git a/src/gui/generaltab.cpp b/src/gui/generaltab.cpp index 050cfff..d3b3cf2 100644 --- a/src/gui/generaltab.cpp +++ b/src/gui/generaltab.cpp @@ -56,12 +56,14 @@ GeneralTab::GeneralTab(QWidget * parent/*= 0*/): QWidget(parent) useBIOS = new QCheckBox(tr("Enable Jaguar BIOS")); useGPU = new QCheckBox(tr("Enable GPU")); useDSP = new QCheckBox(tr("Enable DSP")); + useFullScreen = new QCheckBox(tr("Start Virtual Jaguar in full screen")); // useHostAudio = new QCheckBox(tr("Enable audio playback (requires DSP)")); useUnknownSoftware = new QCheckBox(tr("Show all files in file chooser")); layout4->addWidget(useBIOS); layout4->addWidget(useGPU); layout4->addWidget(useDSP); + layout4->addWidget(useFullScreen); // layout4->addWidget(useHostAudio); layout4->addWidget(useUnknownSoftware); diff --git a/src/gui/generaltab.h b/src/gui/generaltab.h index d1338ab..5696dfa 100644 --- a/src/gui/generaltab.h +++ b/src/gui/generaltab.h @@ -20,7 +20,8 @@ class GeneralTab: public QWidget QCheckBox * useBIOS; QCheckBox * useGPU; QCheckBox * useDSP; - QCheckBox * useHostAudio; +// QCheckBox * useHostAudio; + QCheckBox * useFullScreen; QCheckBox * useUnknownSoftware; }; diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index ac017ce..56c5747 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -201,6 +201,10 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), frameAdvanceAct->setShortcut(QKeySequence(tr("F7"))); connect(frameAdvanceAct, SIGNAL(triggered()), this, SLOT(FrameAdvance())); + fullScreenAct = new QAction(QIcon(":/res/generic.png"), tr("F&ull Screen"), this); + fullScreenAct->setShortcut(QKeySequence(tr("F9"))); + connect(fullScreenAct, SIGNAL(triggered()), this, SLOT(ToggleFullScreen())); + // Debugger Actions memBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("Memory Browser"), this); memBrowseAct->setStatusTip(tr("Shows the Jaguar memory browser window")); @@ -252,6 +256,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), toolbar->addAction(palAct); toolbar->addSeparator(); toolbar->addAction(blurAct); + toolbar->addAction(fullScreenAct); if (vjs.hardwareTypeAlpine) { @@ -338,6 +343,7 @@ void MainWin::LoadFile(QString file) void MainWin::SyncUI(void) { // Set toolbar buttons/menus based on settings read in (sync the UI)... + // (Really, this is to sync command line options passed in) blurAct->setChecked(vjs.glFilter); x1Act->setChecked(zoomLevel == 1); x2Act->setChecked(zoomLevel == 2); @@ -346,6 +352,9 @@ void MainWin::SyncUI(void) ntscAct->setChecked(vjs.hardwareTypeNTSC); palAct->setChecked(!vjs.hardwareTypeNTSC); powerAct->setIcon(vjs.hardwareTypeNTSC ? powerRed : powerGreen); + + fullScreen = vjs.fullscreen; + SetFullScreen(fullScreen); } @@ -367,7 +376,13 @@ void MainWin::keyPressEvent(QKeyEvent * e) e->accept(); return; } - +/* + if (e->key() == Qt::Key_F9) + { + ToggleFullScreen(); + return; + } +*/ HandleKeys(e, true); } @@ -788,6 +803,44 @@ void MainWin::FrameAdvance(void) } +void MainWin::SetFullScreen(bool state/*= true*/) +{ + if (state) + { + menuBar()->hide(); + statusBar()->hide(); + showFullScreen(); + QRect r = QApplication::desktop()->availableGeometry(); + double targetWidth = 320.0, targetHeight = (vjs.hardwareTypeNTSC ? 240.0 : 256.0); + double aspectRatio = targetWidth / targetHeight; + // NOTE: Really should check here to see which dimension constrains the other. + // Right now, we assume that height is the constraint. + int newWidth = (int)(aspectRatio * (double)r.height()); + + videoWidget->setFixedSize(newWidth, r.height()); + showFullScreen(); + } + else + { + menuBar()->show(); + statusBar()->show(); + showNormal(); + ResizeMainWindow(); + } + + // For some reason, this doesn't work: If the emu is paused, toggling from + // fullscreen to windowed (& vice versa) shows a white screen. +// videoWidget->updateGL(); +} + + +void MainWin::ToggleFullScreen(void) +{ + fullScreen = !fullScreen; + SetFullScreen(fullScreen); +} + + void MainWin::ShowMemoryBrowserWin(void) { memBrowseWin->show(); diff --git a/src/gui/mainwin.h b/src/gui/mainwin.h index a5d0f76..8d51e19 100644 --- a/src/gui/mainwin.h +++ b/src/gui/mainwin.h @@ -54,12 +54,14 @@ class MainWin: public QMainWindow void LoadSoftware(QString); void ToggleCDUsage(void); void FrameAdvance(void); + void ToggleFullScreen(void); void ShowMemoryBrowserWin(void); void ShowCPUBrowserWin(void); private: void HandleKeys(QKeyEvent *, bool); + void SetFullScreen(bool state = true); void ResizeMainWindow(void); void ReadSettings(void); void WriteSettings(void); @@ -84,6 +86,7 @@ class MainWin: public QMainWindow bool pauseForFileSelector; bool loadAndGo; bool keyHeld[8]; + bool fullScreen; public: bool plzDontKillMyComputer; private: @@ -111,6 +114,7 @@ class MainWin: public QMainWindow QAction * configAct; QAction * useCDAct; QAction * frameAdvanceAct; + QAction * fullScreenAct; QAction * memBrowseAct; QAction * cpuBrowseAct;