{
/* initialize */
this->uiInfo = uiInfo;
- this->popupMenu = NULL;
this->skinView = NULL;
+ this->popupMenu = NULL;
+
this->display = NULL;
- this->screenWidget = NULL;
+ this->swapper = NULL;
+ this->swapperThread = NULL;
- captureRequestHandler = NULL;
- captureRequestData = NULL;
+ this->screenWidget = NULL;
+ this->captureRequestHandler = NULL;
+ this->captureRequestData = NULL;
/* windowing */
setWindowTitle("Emulator");
winLayout->addWidget(skinView);
/* display */
- QGLContext *context = NULL;
+ display = createDisplay();
+
+ /* set HW Key shortcut */
+ keyboardShortcut = new KeyboardShortcut(this);
+ keyboardShortcut->setKeyboardShortcutHwKey();
+
+ /* popup menu */
+ popupMenu = new ContextMenu(this);
+
+ setContextMenuPolicy(Qt::CustomContextMenu);
+ connect(this, SIGNAL(customContextMenuRequested(const QPoint&)),
+ SLOT(showContextMenu(const QPoint&)));
+}
+
+DisplayBase *MainWindow::createDisplay()
+{
+ DisplayBase *displayWidget = NULL;
+
if (qt5GLContext) { /* on-screen rendering */
- QGLContext *wrapperContext = QGLContext::fromOpenGLContext(qt5GLContext);
+ QGLContext *wrapperContext =
+ QGLContext::fromOpenGLContext(qt5GLContext);
/*
* Qt5 bug, wrapperContext->requestedFormat() doesn't return
* Qt5 bug, format set here doesn't always have effect, must
* set it after QGLWidget is created.
*/
- context = new QGLContext(format);
+ QGLContext *context = new QGLContext(format);
- display = new DisplayGLWidget(skinView, context,
+ displayWidget = new DisplayGLWidget(skinView, context,
uiInfo->getMainFormDisplayType()->getRect(),
uiInfo->getMainFormDisplayType()->getAngle(),
getUIState()->getScaleFactor());
context->setFormat(format);
-
context->create(wrapperContext);
- } else { /* off-screen rendering */
- DisplaySWWidget *w = new DisplaySWWidget(skinView,
- uiInfo->getMainFormDisplayType()->getRect(),
- uiInfo->getMainFormDisplayType()->getAngle(),
- getUIState()->getScaleFactor());
- display = w;
- screenWidget = w;
- }
+ /* display swapper */
+ swapperThread = new QThread(this);
- /* set HwKey shortcut */
- keyboardShortcut = new KeyboardShortcut(this);
- keyboardShortcut->setKeyboardShortcutHwKey();
+ if (context) {
+ context->doneCurrent();
+ context->moveToThread(swapperThread);
+ }
- /* popup menu */
- popupMenu = new ContextMenu(this);
+ swapper = new DisplaySwapper(context);
+ swapper->moveToThread(swapperThread);
+ connect(swapperThread, &QThread::finished, swapper, &QObject::deleteLater);
- setContextMenuPolicy(Qt::CustomContextMenu);
- connect(this, SIGNAL(customContextMenuRequested(const QPoint&)),
- SLOT(showContextMenu(const QPoint&)));
-
- /* swapper */
- swapperThread = new QThread(this);
+ swapperThread->start();
+ } else { /* off-screen rendering */
+ DisplaySWWidget *widget = new DisplaySWWidget(skinView,
+ uiInfo->getMainFormDisplayType()->getRect(),
+ uiInfo->getMainFormDisplayType()->getAngle(),
+ getUIState()->getScaleFactor());
- if (context) {
- context->doneCurrent();
- context->moveToThread(swapperThread);
+ screenWidget = widget;
+ displayWidget = widget;
}
- swapper = new DisplaySwapper(context);
- swapper->moveToThread(swapperThread);
- connect(swapperThread, &QThread::finished, swapper, &QObject::deleteLater);
-
- swapperThread->start();
+ return displayWidget;
}
-void MainWindow::startSwapper()
+void MainWindow::startDisplaySwapper()
{
if (swapper != NULL) {
QMetaObject::invokeMethod(swapper, "display", Qt::QueuedConnection);
}
}
-void MainWindow::terminateSwapper()
+void MainWindow::terminateDisplaySwapper()
{
if (swapper != NULL) {
swapper->setTerminating();
resize(uiInfo->getUiSize());
skinView->update();
- display->rotate(
- uiInfo->getMainFormDisplayType()->getRect(),
- uiInfo->getMainFormDisplayType()->getAngle());
+ if (display != NULL) {
+ display->rotate(
+ uiInfo->getMainFormDisplayType()->getRect(),
+ uiInfo->getMainFormDisplayType()->getAngle());
+ }
}
void MainWindow::scaleForm(int scale)
resize(uiInfo->getUiSize());
skinView->update();
- display->scale(getUIState()->getScaleFactor());
+ if (display != NULL) {
+ display->scale(getUIState()->getScaleFactor());
+ }
}
void MainWindow::capture(void)