1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-02-01 12:57:51 +02:00

Launcher: use QDesktopWidget to get display list instead of SDL2

First of all SDL2 trying to use dbus and this conflict with Qt. Check mantis#2704.
And there no reason to use SDL2 in launcher when Qt can do the same thing as well.
This commit is contained in:
Arseniy Shestakov 2017-08-24 04:52:02 +03:00
parent c6ff28936d
commit 1110dd27d1
8 changed files with 28 additions and 78 deletions

View File

@ -2,7 +2,6 @@
# https://doc.qt.io/qt-5/cmake-manual.html
include_directories(${CMAKE_HOME_DIRECTORY} ${CMAKE_HOME_DIRECTORY}/include ${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${ZLIB_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS})
include_directories(${SDL2_INCLUDE_DIR})
set(launcher_modmanager_SRCS
modManager/cdownloadmanager_moc.cpp
@ -38,7 +37,6 @@ set(launcher_SRCS
mainwindow_moc.cpp
launcherdirs.cpp
jsonutils.cpp
sdldisplayquery.cpp
)
set(launcher_HEADERS
@ -48,7 +46,6 @@ set(launcher_HEADERS
mainwindow_moc.h
launcherdirs.h
jsonutils.h
sdldisplayquery.h
)
set(launcher_FORMS
@ -102,7 +99,7 @@ if(APPLE)
set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER vcmilauncher)
endif()
target_link_libraries(vcmilauncher vcmi Qt5::Widgets Qt5::Network ${SDL2_LIBRARY})
target_link_libraries(vcmilauncher vcmi Qt5::Widgets Qt5::Network)
vcmi_set_output_dir(vcmilauncher "")

View File

@ -10,13 +10,11 @@
#include <QApplication>
#include "StdInc.h"
#include "mainwindow_moc.h"
#include "sdldisplayquery.h"
int main(int argc, char * argv[])
{
QApplication vcmilauncher(argc, argv);
auto displayList = getDisplays();
MainWindow mainWindow(displayList);
MainWindow mainWindow;
mainWindow.show();
return vcmilauncher.exec();
}

View File

@ -39,7 +39,7 @@ void MainWindow::load()
settings.init();
}
MainWindow::MainWindow(const QStringList& displayList, QWidget *parent) :
MainWindow::MainWindow(QWidget * parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
@ -62,7 +62,7 @@ MainWindow::MainWindow(const QStringList& displayList, QWidget *parent) :
ui->tabSelectList->setMaximumWidth(width + 4);
}
ui->tabListWidget->setCurrentIndex(0);
ui->settingsView->setDisplayList(displayList);
ui->settingsView->setDisplayList();
connect(ui->tabSelectList, SIGNAL(currentRowChanged(int)),
ui->tabListWidget, SLOT(setCurrentIndex(int)));

View File

@ -25,7 +25,7 @@ private:
void load();
void startExecutable(QString name);
public:
explicit MainWindow(const QStringList& displayList, QWidget *parent = 0);
explicit MainWindow(QWidget * parent = 0);
~MainWindow();
private slots:

View File

@ -1,42 +0,0 @@
/*
* sdldisplayquery.cpp, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#include "StdInc.h"
#include "sdldisplayquery.h"
#include <QString>
#include <QTextStream>
#include <SDL.h>
#include <SDL_video.h>
QStringList getDisplays()
{
if(SDL_Init(SDL_INIT_VIDEO))
return QStringList("default display");
const int displays = SDL_GetNumVideoDisplays();
QStringList list;
for (int display = 0; display < displays; ++display)
{
SDL_Rect rect;
if (SDL_GetDisplayBounds (display, &rect))
continue;
QString string;
QTextStream(&string) << display << " - " << rect.w << "x" << rect.h << " (at " << rect.x << ", " << rect.y << ")";
list << string;
}
SDL_Quit();
return list;
}

View File

@ -1,14 +0,0 @@
/*
* sdldisplayquery.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#pragma once
#include <QStringList>
QStringList getDisplays();

View File

@ -29,19 +29,30 @@ static const std::string knownEncodingsList[] = //TODO: remove hardcode
"GB2312" // basic set for Simplified Chinese. Separate from GBK to allow proper detection of H3 fonts
};
void CSettingsView::setDisplayList(const QStringList& displayList)
void CSettingsView::setDisplayList()
{
if (displayList.count() < 2)
{
ui->comboBoxDisplayIndex->hide ();
ui->labelDisplayIndex->hide ();
}
QStringList list;
QDesktopWidget * widget = QApplication::desktop();
for(int display = 0; display < widget->screenCount(); display++)
{
QString string;
auto rect = widget->screenGeometry(display);
QTextStream(&string) << display << " - " << rect.width() << "x" << rect.height();
list << string;
}
if(list.count() < 2)
{
ui->comboBoxDisplayIndex->hide();
ui->labelDisplayIndex->hide();
}
else
{
ui->comboBoxDisplayIndex->clear();
ui->comboBoxDisplayIndex->addItems(displayList);
ui->comboBoxDisplayIndex->setCurrentIndex(settings["video"]["displayIndex"].Float());
}
{
int displayIndex = settings["video"]["displayIndex"].Integer();
ui->comboBoxDisplayIndex->clear();
ui->comboBoxDisplayIndex->addItems(list);
ui->comboBoxDisplayIndex->setCurrentIndex(displayIndex);
}
}
void CSettingsView::loadSettings()

View File

@ -22,7 +22,7 @@ public:
~CSettingsView();
void loadSettings();
void setDisplayList(const QStringList& displayList);
void setDisplayList();
private slots:
void on_checkBoxFullScreen_stateChanged(int state);