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"));
toolbar->addAction(palAct);
toolbar->addSeparator();
toolbar->addAction(blurAct);
+ toolbar->addAction(fullScreenAct);
if (vjs.hardwareTypeAlpine)
{
// Set up timer based loop for animation...
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(Timer()));
-//This is only correct for PAL. !!! FIX !!! [DONE]
-//Use timer->setInterval( int msec ) to fix this on the fly
-// timer->start(20);
+
// This isn't very accurate for NTSC: This is early by 40 msec per frame.
// This is because it's discarding the 0.6666... on the end of the fraction.
// Alas, 6 doesn't divide cleanly into 10. :-P
- timer->start(vjs.hardwareTypeNTSC ? 16 : 20);
+//Should we defer this until SyncUI? Probably.
+//No, it doesn't work, because it uses setInterval() instead of start()...
+// timer->start(vjs.hardwareTypeNTSC ? 16 : 20);
// We set this initially, to make VJ behave somewhat as it would if no
// cart were inserted and the BIOS was set as active...
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);
ntscAct->setChecked(vjs.hardwareTypeNTSC);
palAct->setChecked(!vjs.hardwareTypeNTSC);
powerAct->setIcon(vjs.hardwareTypeNTSC ? powerRed : powerGreen);
+
+ fullScreen = vjs.fullscreen;
+ SetFullScreen(fullScreen);
+
+ // Reset the timer to be what was set in the command line (if any):
+// timer->setInterval(vjs.hardwareTypeNTSC ? 16 : 20);
+ timer->start(vjs.hardwareTypeNTSC ? 16 : 20);
}
e->accept();
return;
}
-
+/*
+ if (e->key() == Qt::Key_F9)
+ {
+ ToggleFullScreen();
+ return;
+ }
+*/
HandleKeys(e, true);
}
}
+void MainWin::SetFullScreen(bool state/*= true*/)
+{
+ if (state)
+ {
+ mainWinPosition = pos();
+// mainWinSize = size();
+ menuBar()->hide();
+ statusBar()->hide();
+ showFullScreen();
+ QRect r = QApplication::desktop()->availableGeometry();
+// double targetWidth = 320.0, targetHeight = (vjs.hardwareTypeNTSC ? 240.0 : 256.0);
+ double targetWidth = (double)VIRTUAL_SCREEN_WIDTH,
+ targetHeight = (double)(vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL);
+ 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();
+ move(mainWinPosition);
+ }
+
+ // 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();
void MainWin::ResizeMainWindow(void)
{
- videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256));
+// videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256));
+ videoWidget->setFixedSize(zoomLevel * VIRTUAL_SCREEN_WIDTH,
+ zoomLevel * (vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL));
show();
for(int i=0; i<2; i++)
void MainWin::ReadSettings(void)
{
QSettings settings("Underground Software", "Virtual Jaguar");
- QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
+ mainWinPosition = settings.value("pos", QPoint(200, 200)).toPoint();
QSize size = settings.value("size", QSize(400, 400)).toSize();
resize(size);
- move(pos);
- pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint();
+ move(mainWinPosition);
+ QPoint pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint();
filePickWin->move(pos);
zoomLevel = settings.value("zoom", 2).toInt();