X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=37f9f242b2573061166b513d7f2a4fe7eb8291f6;hb=bae593a9f2f6557d271d8b2eacc5d4a825cf4b0a;hp=5794f2b0552ade2945e7b337f5dfe2e8b6351b84;hpb=4ad544a2887b4fa558c9e15bc3d23988bada7480;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 5794f2b..37f9f24 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -17,13 +17,14 @@ // - Add dbl click/enter to select in cart list, ESC to dimiss [DONE] // - Autoscan/autoload all available BIOS from 'software' folder [DONE] // - Add 1 key jumping in cartridge list (press 'R', jumps to carts starting with 'R', etc) [DONE] +// - Controller configuration [DONE] // // STILL TO BE DONE: // -// - Controller configuration // - Remove SDL dependencies (sound, mainly) from Jaguar core lib // - Fix inconsistency with trailing slashes in paths (eeproms needs one, software doesn't) // +// SFDX CODE: 9XF9TUHFM2359 // Uncomment this for debugging... //#define DEBUG @@ -35,6 +36,7 @@ #include "SDL.h" #include "glwidget.h" #include "about.h" +#include "help.h" #include "settings.h" #include "filepicker.h" #include "configdialog.h" @@ -56,16 +58,6 @@ #include #endif -// Uncomment this to use built-in BIOS/CD-ROM BIOS -// You'll need a copy of jagboot.h & jagcd.h for this to work...! -// Creating those is left as an exercise for the reader. ;-) -//#define USE_BUILT_IN_BIOS - -//#ifdef USE_BUILT_IN_BIOS -//#include "jagboot.h" -//#include "jagcd.h" -//#endif - // The way BSNES controls things is by setting a timer with a zero // timeout, sleeping if not emulating anything. Seems there has to be a // better way. @@ -78,14 +70,13 @@ // We'll make the VJ core modular so that it doesn't matter what GUI is in // use, we can drop it in anywhere and use it as-is. -MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit(true), +MainWin::MainWin(): running(true), powerButtonOn(false), showUntunedTankCircuit(true), cartridgeLoaded(false), CDActive(false),//, alpineLoadSuccessful(false), pauseForFileSelector(false) { videoWidget = new GLWidget(this); setCentralWidget(videoWidget); setWindowIcon(QIcon(":/res/vj-icon.png")); -// setWindowTitle("Virtual Jaguar v2.0.0"); QString title = QString(tr("Virtual Jaguar " VJ_RELEASE_VERSION )); @@ -95,6 +86,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit setWindowTitle(title); aboutWin = new AboutWindow(this); + helpWin = new HelpWindow(this); filePickWin = new FilePickerWindow(this); videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); @@ -105,7 +97,9 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit // Create actions quitAppAct = new QAction(tr("E&xit"), this); - quitAppAct->setShortcuts(QKeySequence::Quit); +// quitAppAct->setShortcuts(QKeySequence::Quit); +// quitAppAct->setShortcut(QKeySequence(tr("Alt+x"))); + quitAppAct->setShortcut(QKeySequence(tr("Ctrl+q"))); quitAppAct->setStatusTip(tr("Quit Virtual Jaguar")); connect(quitAppAct, SIGNAL(triggered()), this, SLOT(close())); @@ -113,7 +107,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit powerAct->setStatusTip(tr("Powers Jaguar on/off")); powerAct->setCheckable(true); powerAct->setChecked(false); - powerAct->setDisabled(true); +// powerAct->setDisabled(true); connect(powerAct, SIGNAL(triggered()), this, SLOT(TogglePowerState())); pauseAct = new QAction(QIcon(":/res/pause.png"), tr("Pause"), this); @@ -161,6 +155,10 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit aboutAct->setStatusTip(tr("Blatant self-promotion")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin())); + helpAct = new QAction(QIcon(":/res/vj-icon.png"), tr("&Contents..."), this); + helpAct->setStatusTip(tr("Help is available, if you should need it")); + connect(helpAct, SIGNAL(triggered()), this, SLOT(ShowHelpWin())); + filePickAct = new QAction(QIcon(":/res/software.png"), tr("&Insert Cartridge..."), this); filePickAct->setStatusTip(tr("Insert a cartridge into Virtual Jaguar")); filePickAct->setShortcut(QKeySequence(tr("Ctrl+i"))); @@ -192,6 +190,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit fileMenu->addAction(quitAppAct); helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu->addAction(helpAct); helpMenu->addAction(aboutAct); toolbar = addToolBar(tr("Stuff")); @@ -219,7 +218,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit x1Act->setChecked(zoomLevel == 1); x2Act->setChecked(zoomLevel == 2); x3Act->setChecked(zoomLevel == 3); - running = powerAct->isChecked(); +// running = powerAct->isChecked(); ntscAct->setChecked(vjs.hardwareTypeNTSC); palAct->setChecked(!vjs.hardwareTypeNTSC); @@ -229,31 +228,21 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit // Set up timer based loop for animation... timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(Timer())); - timer->start(20); - +//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); + + // We set this initially, to make VJ behave somewhat as it would if no + // cart were inserted and the BIOS was set as active... + jaguarCartInserted = true; WriteLog("Virtual Jaguar %s (Last full build was on %s %s)\n", VJ_RELEASE_VERSION, __DATE__, __TIME__); WriteLog("VJ: Initializing jaguar subsystem...\n"); JaguarInit(); - // Get the BIOS ROM -#ifdef USE_BUILT_IN_BIOS -// WriteLog("VJ: Using built in BIOS/CD BIOS...\n"); -// memcpy(jaguarBootROM, jagBootROM, 0x20000); -// memcpy(jaguarCDBootROM, jagCDROM, 0x40000); -//// BIOSLoaded = CDBIOSLoaded = true; -// biosAvailable |= (BIOS_NORMAL | BIOS_CD); -#else -// What would be nice here would be a way to check if the BIOS was loaded so that we -// could disable the pushbutton on the Misc Options menu... !!! FIX !!! [DONE here, but needs to be fixed in GUI as well!] -// WriteLog("VJ: About to attempt to load BIOSes...\n"); -//This is short-circuiting the file finding thread... ??? WHY ??? -//Not anymore. Was related to a QImage object creation/corruption bug elsewhere. -// BIOSLoaded = (JaguarLoadROM(jaguarBootROM, vjs.jagBootPath) == 0x20000 ? true : false); -// WriteLog("VJ: BIOS is %savailable...\n", (BIOSLoaded ? "" : "not ")); -// CDBIOSLoaded = (JaguarLoadROM(jaguarCDBootROM, vjs.CDBootPath) == 0x40000 ? true : false); -// WriteLog("VJ: CD BIOS is %savailable...\n", (CDBIOSLoaded ? "" : "not ")); -#endif - filePickWin->ScanSoftwareFolder(allowUnknownSoftware); // Load up the default ROM if in Alpine mode: @@ -273,6 +262,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit // Attempt to load/run the ABS file... LoadSoftware(vjs.absROMPath); + memcpy(jagMemSpace + 0xE00000, jaguarDevBootROM2, 0x20000); // Use the stub BIOS } else memcpy(jagMemSpace + 0xE00000, jaguarBootROM, 0x20000); // Otherwise, use the stock BIOS @@ -287,11 +277,25 @@ void MainWin::closeEvent(QCloseEvent * event) void MainWin::keyPressEvent(QKeyEvent * e) { + // We ignore the Alt key for now, since it causes problems with the GUI + if (e->key() == Qt::Key_Alt) + { + e->accept(); + return; + } + HandleKeys(e, true); } void MainWin::keyReleaseEvent(QKeyEvent * e) { + // We ignore the Alt key for now, since it causes problems with the GUI + if (e->key() == Qt::Key_Alt) + { + e->accept(); + return; + } + HandleKeys(e, false); } @@ -316,13 +320,29 @@ void MainWin::HandleKeys(QKeyEvent * e, bool state) joypad_0_buttons[BUTTON_D] = 0; if (e->key() == (int)vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U]) joypad_0_buttons[BUTTON_U] = 0; + + if (e->key() == (int)vjs.p2KeyBindings[BUTTON_L] && joypad_1_buttons[BUTTON_R]) + joypad_1_buttons[BUTTON_R] = 0; + if (e->key() == (int)vjs.p2KeyBindings[BUTTON_R] && joypad_1_buttons[BUTTON_L]) + joypad_1_buttons[BUTTON_L] = 0; + if (e->key() == (int)vjs.p2KeyBindings[BUTTON_U] && joypad_1_buttons[BUTTON_D]) + joypad_1_buttons[BUTTON_D] = 0; + if (e->key() == (int)vjs.p2KeyBindings[BUTTON_D] && joypad_1_buttons[BUTTON_U]) + joypad_1_buttons[BUTTON_U] = 0; #endif // No bad combos exist, let's stuff the emulator key buffers...! for(int i=BUTTON_FIRST; i<=BUTTON_LAST; i++) { if (e->key() == (int)vjs.p1KeyBindings[i]) - joypad_0_buttons[i] = (uint8)state; +// joypad_0_buttons[i] = (uint8)state; + joypad_0_buttons[i] = (state ? 0x01 : 0x00); + +// Pad #2 is screwing up pad #1. Prolly a problem in joystick.cpp... +// So let's try to fix it there. :-P [DONE] + if (e->key() == (int)vjs.p2KeyBindings[i]) +// joypad_1_buttons[i] = (uint8)state; + joypad_1_buttons[i] = (state ? 0x01 : 0x00); } } @@ -412,8 +432,8 @@ void MainWin::Timer(void) { for(uint32_t y=0; yrasterHeight; y++) { - videoWidget->buffer[(y * videoWidget->textureWidth) + x] = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;// | (rand() & 0xFF);//0x000000FF; - // buffer[(y * textureWidth) + x] = x*y; + videoWidget->buffer[(y * videoWidget->textureWidth) + x] + = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24; } } } @@ -421,9 +441,6 @@ void MainWin::Timer(void) { // Otherwise, run the Jaguar simulation JaguarExecuteNew(); -// memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->rasterWidth); - memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->textureWidth * sizeof(uint32_t)); -// memcpy(surface->pixels, backbuffer, TOMGetVideoModeWidth() * TOMGetVideoModeHeight() * 4); } videoWidget->updateGL(); @@ -432,47 +449,44 @@ void MainWin::Timer(void) void MainWin::TogglePowerState(void) { powerButtonOn = !powerButtonOn; + running = true; // With the power off, we simulate white noise on the screen. :-) if (!powerButtonOn) { + useCDAct->setDisabled(false); + palAct->setDisabled(false); + ntscAct->setDisabled(false); pauseAct->setChecked(false); pauseAct->setDisabled(true); showUntunedTankCircuit = true; - running = true; // This is just in case the ROM we were playing was in a narrow or wide field mode, // so the untuned tank sim doesn't look wrong. :-) TOMReset(); } else { -//NOTE: Low hanging fruit: We can simplify this a lot... + useCDAct->setDisabled(true); + palAct->setDisabled(true); + ntscAct->setDisabled(true); + pauseAct->setChecked(false); + pauseAct->setDisabled(false); + showUntunedTankCircuit = false; + // Otherwise, we prepare for running regular software... - if (!CDActive) - { - showUntunedTankCircuit = false;//(cartridgeLoaded ? false : true); - pauseAct->setChecked(false); - pauseAct->setDisabled(false);//!cartridgeLoaded); - } - // Or, set up for the Jaguar CD - else + if (CDActive) { // Should check for cartridgeLoaded here as well...! // We can clear it when toggling CDActive on, so that when we power cycle it does the // expected thing. Otherwise, if we use the file picker to insert a cart, we expect // to run the cart! Maybe have a RemoveCart function that only works if the CD unit // is active? - showUntunedTankCircuit = false; - pauseAct->setChecked(false); - pauseAct->setDisabled(false); - memcpy(jagMemSpace + 0x800000, jaguarCDBootROM, 0x40000); setWindowTitle(QString("Virtual Jaguar " VJ_RELEASE_VERSION " - Now playing: Jaguar CD")); } WriteLog("GUI: Resetting Jaguar...\n"); JaguarReset(); - running = true; } } @@ -484,14 +498,12 @@ void MainWin::ToggleRunState(void) { for(uint32_t i=0; i<(uint32_t)(videoWidget->textureWidth * 256); i++) { - uint32_t pixel = backbuffer[i]; + uint32_t pixel = videoWidget->buffer[i]; uint8_t r = (pixel >> 24) & 0xFF, g = (pixel >> 16) & 0xFF, b = (pixel >> 8) & 0xFF; pixel = ((r + g + b) / 3) & 0x00FF; - backbuffer[i] = 0x000000FF | (pixel << 16) | (pixel << 8); + videoWidget->buffer[i] = 0x000000FF | (pixel << 16) | (pixel << 8); } - memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->textureWidth * sizeof(uint32_t)); - videoWidget->updateGL(); } } @@ -516,12 +528,14 @@ void MainWin::SetZoom300(void) void MainWin::SetNTSC(void) { + timer->setInterval(16); vjs.hardwareTypeNTSC = true; ResizeMainWindow(); } void MainWin::SetPAL(void) { + timer->setInterval(20); vjs.hardwareTypeNTSC = false; ResizeMainWindow(); } @@ -536,11 +550,16 @@ void MainWin::ShowAboutWin(void) aboutWin->show(); } +void MainWin::ShowHelpWin(void) +{ + helpWin->show(); +} + void MainWin::InsertCart(void) { // If the emulator is running, we pause it here and unpause it later // if we dismiss the file selector without choosing anything - if (running) + if (running && powerButtonOn) { ToggleRunState(); pauseForFileSelector = true; @@ -590,6 +609,7 @@ void MainWin::ToggleCDUsage(void) { CDActive = !CDActive; +#if 0 if (CDActive) { powerAct->setDisabled(false); @@ -598,6 +618,13 @@ void MainWin::ToggleCDUsage(void) { powerAct->setDisabled(true); } +#else + // Set up the Jaguar CD for execution, otherwise, clear memory + if (CDActive) + memcpy(jagMemSpace + 0x800000, jaguarCDBootROM, 0x40000); + else + memset(jagMemSpace + 0x800000, 0xFF, 0x40000); +#endif } void MainWin::ResizeMainWindow(void) @@ -623,7 +650,7 @@ void MainWin::ReadSettings(void) pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint(); filePickWin->move(pos); - zoomLevel = settings.value("zoom", 1).toInt(); + zoomLevel = settings.value("zoom", 2).toInt(); allowUnknownSoftware = settings.value("showUnknownSoftware", false).toBool(); vjs.useJoystick = settings.value("useJoystick", false).toBool(); @@ -631,12 +658,13 @@ void MainWin::ReadSettings(void) vjs.hardwareTypeNTSC = settings.value("hardwareTypeNTSC", true).toBool(); vjs.frameSkip = settings.value("frameSkip", 0).toInt(); vjs.useJaguarBIOS = settings.value("useJaguarBIOS", false).toBool(); + vjs.GPUEnabled = settings.value("GPUEnabled", true).toBool(); vjs.DSPEnabled = settings.value("DSPEnabled", false).toBool(); vjs.audioEnabled = settings.value("audioEnabled", true).toBool(); vjs.usePipelinedDSP = settings.value("usePipelinedDSP", false).toBool(); vjs.fullscreen = settings.value("fullscreen", false).toBool(); vjs.useOpenGL = settings.value("useOpenGL", true).toBool(); - vjs.glFilter = settings.value("glFilterType", 0).toInt(); + vjs.glFilter = settings.value("glFilterType", 1).toInt(); vjs.renderType = settings.value("renderType", 0).toInt(); vjs.allowWritesToROM = settings.value("writeROM", false).toBool(); // strcpy(vjs.jagBootPath, settings.value("JagBootROM", "./bios/[BIOS] Atari Jaguar (USA, Europe).zip").toString().toAscii().data()); @@ -654,15 +682,15 @@ WriteLog("AlpineROMPath = \"%s\"\n", vjs.alpineROMPath); WriteLog(" absROMPath = \"%s\"\n", vjs.absROMPath); // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, * - vjs.p1KeyBindings[BUTTON_U] = settings.value("p1k_up", Qt::Key_Up).toInt(); - vjs.p1KeyBindings[BUTTON_D] = settings.value("p1k_down", Qt::Key_Down).toInt(); - vjs.p1KeyBindings[BUTTON_L] = settings.value("p1k_left", Qt::Key_Left).toInt(); - vjs.p1KeyBindings[BUTTON_R] = settings.value("p1k_right", Qt::Key_Right).toInt(); - vjs.p1KeyBindings[BUTTON_C] = settings.value("p1k_c", Qt::Key_Z).toInt(); - vjs.p1KeyBindings[BUTTON_B] = settings.value("p1k_b", Qt::Key_X).toInt(); - vjs.p1KeyBindings[BUTTON_A] = settings.value("p1k_a", Qt::Key_C).toInt(); - vjs.p1KeyBindings[BUTTON_OPTION] = settings.value("p1k_option", Qt::Key_Apostrophe).toInt(); - vjs.p1KeyBindings[BUTTON_PAUSE] = settings.value("p1k_pause", Qt::Key_Return).toInt(); + vjs.p1KeyBindings[BUTTON_U] = settings.value("p1k_up", Qt::Key_S).toInt(); + vjs.p1KeyBindings[BUTTON_D] = settings.value("p1k_down", Qt::Key_X).toInt(); + vjs.p1KeyBindings[BUTTON_L] = settings.value("p1k_left", Qt::Key_A).toInt(); + vjs.p1KeyBindings[BUTTON_R] = settings.value("p1k_right", Qt::Key_D).toInt(); + vjs.p1KeyBindings[BUTTON_C] = settings.value("p1k_c", Qt::Key_J).toInt(); + vjs.p1KeyBindings[BUTTON_B] = settings.value("p1k_b", Qt::Key_K).toInt(); + vjs.p1KeyBindings[BUTTON_A] = settings.value("p1k_a", Qt::Key_L).toInt(); + vjs.p1KeyBindings[BUTTON_OPTION] = settings.value("p1k_option", Qt::Key_O).toInt(); + vjs.p1KeyBindings[BUTTON_PAUSE] = settings.value("p1k_pause", Qt::Key_P).toInt(); vjs.p1KeyBindings[BUTTON_0] = settings.value("p1k_0", Qt::Key_0).toInt(); vjs.p1KeyBindings[BUTTON_1] = settings.value("p1k_1", Qt::Key_1).toInt(); vjs.p1KeyBindings[BUTTON_2] = settings.value("p1k_2", Qt::Key_2).toInt(); @@ -673,8 +701,8 @@ WriteLog(" absROMPath = \"%s\"\n", vjs.absROMPath); vjs.p1KeyBindings[BUTTON_7] = settings.value("p1k_7", Qt::Key_7).toInt(); vjs.p1KeyBindings[BUTTON_8] = settings.value("p1k_8", Qt::Key_8).toInt(); vjs.p1KeyBindings[BUTTON_9] = settings.value("p1k_9", Qt::Key_9).toInt(); - vjs.p1KeyBindings[BUTTON_d] = settings.value("p1k_pound", Qt::Key_Slash).toInt(); - vjs.p1KeyBindings[BUTTON_s] = settings.value("p1k_star", Qt::Key_Asterisk).toInt(); + vjs.p1KeyBindings[BUTTON_d] = settings.value("p1k_pound", Qt::Key_Minus).toInt(); + vjs.p1KeyBindings[BUTTON_s] = settings.value("p1k_star", Qt::Key_Equal).toInt(); vjs.p2KeyBindings[BUTTON_U] = settings.value("p2k_up", Qt::Key_Up).toInt(); vjs.p2KeyBindings[BUTTON_D] = settings.value("p2k_down", Qt::Key_Down).toInt(); @@ -714,6 +742,7 @@ void MainWin::WriteSettings(void) settings.setValue("hardwareTypeNTSC", vjs.hardwareTypeNTSC); settings.setValue("frameSkip", vjs.frameSkip); settings.setValue("useJaguarBIOS", vjs.useJaguarBIOS); + settings.setValue("GPUEnabled", vjs.GPUEnabled); settings.setValue("DSPEnabled", vjs.DSPEnabled); settings.setValue("audioEnabled", vjs.audioEnabled); settings.setValue("usePipelinedDSP", vjs.usePipelinedDSP); @@ -773,90 +802,3 @@ void MainWin::WriteSettings(void) settings.setValue("p2k_pound", vjs.p2KeyBindings[BUTTON_d]); settings.setValue("p2k_star", vjs.p2KeyBindings[BUTTON_s]); } - -// Here's how Byuu does it... -// I think I have it working now... :-) -#if 0 -void Utility::resizeMainWindow() -{ - unsigned region = config().video.context->region; - unsigned multiplier = config().video.context->multiplier; - unsigned width = 256 * multiplier; - unsigned height = (region == 0 ? 224 : 239) * multiplier; - - if(config().video.context->correctAspectRatio) - { - if(region == 0) - { - width = (double)width * config().video.ntscAspectRatio + 0.5; //NTSC adjust - } - else - { - width = (double)width * config().video.palAspectRatio + 0.5; //PAL adjust - } - } - - if(config().video.isFullscreen == false) - { - //get effective desktop work area region (ignore Windows taskbar, OS X dock, etc.) - QRect deskRect = QApplication::desktop()->availableGeometry(mainWindow); - - //ensure window size will not be larger than viewable desktop area - constrainSize(height, width, deskRect.height()); //- frameHeight); - constrainSize(width, height, deskRect.width()); //- frameWidth ); - - mainWindow->canvas->setFixedSize(width, height); - mainWindow->show(); - } - else - { - for(unsigned i = 0; i < 2; i++) - { - unsigned iWidth = width, iHeight = height; - - constrainSize(iHeight, iWidth, mainWindow->canvasContainer->size().height()); - constrainSize(iWidth, iHeight, mainWindow->canvasContainer->size().width()); - - //center canvas onscreen; ensure it is not larger than viewable area - mainWindow->canvas->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - mainWindow->canvas->setFixedSize(iWidth, iHeight); - mainWindow->canvas->setMinimumSize(0, 0); - - usleep(2000); - QApplication::processEvents(); - } - } - - //workaround for Qt/Xlib bug: - //if window resize occurs with cursor over it, Qt shows Qt::Size*DiagCursor; - //so force it to show Qt::ArrowCursor, as expected - mainWindow->setCursor(Qt::ArrowCursor); - mainWindow->canvasContainer->setCursor(Qt::ArrowCursor); - mainWindow->canvas->setCursor(Qt::ArrowCursor); - - //workaround for DirectSound(?) bug: - //window resizing sometimes breaks audio sync, this call re-initializes it - updateAvSync(); -} - -void Utility::setScale(unsigned scale) -{ - config().video.context->multiplier = scale; - resizeMainWindow(); - mainWindow->shrink(); - mainWindow->syncUi(); -} - -void QbWindow::shrink() -{ - if(config().video.isFullscreen == false) - { - for(unsigned i = 0; i < 2; i++) - { - resize(0, 0); - usleep(2000); - QApplication::processEvents(); - } - } -} -#endif