1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-30 04:30:42 +02:00

Merge branch 'krnowak/choose-display' into develop

This commit is contained in:
AlexVinS 2016-09-04 04:06:42 +03:00
commit ad3049e6f8
12 changed files with 129 additions and 36 deletions

View File

@ -92,7 +92,7 @@ static po::variables_map vm;
static bool ermInteractiveMode = false; //structurize when time is right
void processCommand(const std::string &message);
static void setScreenRes(int w, int h, int bpp, bool fullscreen, bool resetVideo=true);
static void setScreenRes(int w, int h, int bpp, bool fullscreen, int displayIndex, bool resetVideo=true);
void dispose();
void playIntro();
static void mainLoop();
@ -407,7 +407,7 @@ int main(int argc, char** argv)
}
}
setScreenRes(res["width"].Float(), res["height"].Float(), video["bitsPerPixel"].Float(), video["fullscreen"].Bool());
setScreenRes(res["width"].Float(), res["height"].Float(), video["bitsPerPixel"].Float(), video["displayIndex"].Float(), video["fullscreen"].Bool());
logGlobal->infoStream() <<"\tInitializing screen: "<<pomtime.getDiff();
}
@ -984,7 +984,7 @@ static void cleanupRenderer()
}
}
static bool recreateWindow(int w, int h, int bpp, bool fullscreen)
static bool recreateWindow(int w, int h, int bpp, bool fullscreen, int displayIndex)
{
// VCMI will only work with 2 or 4 bytes per pixel
vstd::amax(bpp, 16);
@ -992,7 +992,14 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen)
if(bpp>16)
bpp = 32;
if(!checkVideoMode(0,w,h))
if(displayIndex < 0)
{
if (mainWindow != nullptr)
displayIndex = SDL_GetWindowDisplayIndex(mainWindow);
if (displayIndex < 0)
displayIndex = 0;
}
if(!checkVideoMode(displayIndex, w, h))
{
logGlobal->errorStream() << "Error: SDL says that " << w << "x" << h << " resolution is not available!";
return false;
@ -1005,12 +1012,12 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen)
if(fullscreen)
{
//in full-screen mode always use desktop resolution
mainWindow = SDL_CreateWindow(NAME.c_str(), SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED, 0, 0, SDL_WINDOW_FULLSCREEN_DESKTOP);
mainWindow = SDL_CreateWindow(NAME.c_str(), SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex),SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), 0, 0, SDL_WINDOW_FULLSCREEN_DESKTOP);
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
}
else
{
mainWindow = SDL_CreateWindow(NAME.c_str(), SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED, w, h, 0);
mainWindow = SDL_CreateWindow(NAME.c_str(), SDL_WINDOWPOS_CENTERED_DISPLAY(displayIndex),SDL_WINDOWPOS_CENTERED_DISPLAY(displayIndex), w, h, 0);
}
if(nullptr == mainWindow)
@ -1091,9 +1098,9 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen)
}
//used only once during initialization
static void setScreenRes(int w, int h, int bpp, bool fullscreen, bool resetVideo)
static void setScreenRes(int w, int h, int bpp, bool fullscreen, int displayIndex, bool resetVideo)
{
if(!recreateWindow(w,h,bpp,fullscreen))
if(!recreateWindow(w, h, bpp, fullscreen, displayIndex))
{
throw std::runtime_error("Requested screen resolution is not available\n");
}
@ -1111,7 +1118,7 @@ static void fullScreenChanged()
auto w = screen->w;
auto h = screen->h;
if(!recreateWindow(w,h,bitsPerPixel,toFullscreen))
if(!recreateWindow(w, h, bitsPerPixel, toFullscreen, -1))
{
//will return false and report error if video mode is not supported
return;

View File

@ -45,7 +45,7 @@
"type" : "object",
"additionalProperties" : false,
"default": {},
"required" : [ "screenRes", "bitsPerPixel", "fullscreen", "spellbookAnimation","driver", "showIntro" ],
"required" : [ "screenRes", "bitsPerPixel", "fullscreen", "spellbookAnimation","driver", "showIntro", "displayIndex" ],
"properties" : {
"screenRes" : {
"type" : "object",
@ -77,6 +77,10 @@
"type" : "string",
"default" : "opengl",
"description" : "preferred graphics backend driver name for SDL2"
},
"displayIndex" : {
"type" : "number",
"default" : 0
}
}
},

View File

@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 2.8.7)
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(${SDL_INCLUDE_DIR})
set(launcher_modmanager_SRCS
modManager/cdownloadmanager_moc.cpp
@ -25,6 +26,7 @@ set(launcher_SRCS
mainwindow_moc.cpp
launcherdirs.cpp
jsonutils.cpp
sdldisplayquery.cpp
)
set(launcher_FORMS
@ -60,10 +62,10 @@ endif()
if(MSVC)
# Fix _WinMain@16 linking error
target_link_libraries(vcmilauncher vcmi ${Qt5Core_QTMAIN_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES})
target_link_libraries(vcmilauncher vcmi ${Qt5Core_QTMAIN_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ${SDL_LIBRARY})
else()
# The Qt5Widgets_LIBRARIES variable also includes QtGui and QtCore
target_link_libraries(vcmilauncher vcmi ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES})
target_link_libraries(vcmilauncher vcmi ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES} ${SDL_LIBRARY})
endif()
# temporary(?) disabled - generation of PCH takes too much time since cotire is trying to collect all Qt headers

View File

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

View File

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

View File

@ -1,5 +1,6 @@
#pragma once
#include <QMainWindow>
#include <QStringList>
namespace Ui {
class MainWindow;
@ -14,7 +15,7 @@ class MainWindow : public QMainWindow
void load();
void startExecutable(QString name);
public:
explicit MainWindow(QWidget *parent = 0);
explicit MainWindow(const QStringList& displayList, QWidget *parent = 0);
~MainWindow();
private slots:

View File

@ -176,7 +176,7 @@
<number>1</number>
</property>
<widget class="CModListView" name="stackedWidgetPage2"/>
<widget class="CSettingsView" name="stackedWidgetPage3"/>
<widget class="CSettingsView" name="settingsView"/>
</widget>
</item>
</layout>

View File

@ -0,0 +1,32 @@
#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

@ -0,0 +1,5 @@
#pragma once
#include <QStringList>
QStringList getDisplays();

View File

@ -20,11 +20,25 @@ 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)
{
if (displayList.count() < 2)
{
ui->comboBoxDisplayIndex->hide ();
ui->labelDisplayIndex->hide ();
}
else
{
ui->comboBoxDisplayIndex->clear();
ui->comboBoxDisplayIndex->addItems(displayList);
ui->comboBoxDisplayIndex->setCurrentIndex(settings["video"]["displayIndex"].Float());
}
}
void CSettingsView::loadSettings()
{
int resX = settings["video"]["screenRes"]["width"].Float();
int resY = settings["video"]["screenRes"]["height"].Float();
int resIndex = ui->comboBoxResolution->findText(QString("%1x%2").arg(resX).arg(resY));
ui->comboBoxResolution->setCurrentIndex(resIndex);
@ -92,6 +106,12 @@ void CSettingsView::on_comboBoxAutoCheck_currentIndexChanged(int index)
node->Bool() = index;
}
void CSettingsView::on_comboBoxDisplayIndex_currentIndexChanged(int index)
{
Settings node = settings.write["video"];
node["displayIndex"].Float() = index;
}
void CSettingsView::on_comboBoxPlayerAI_currentIndexChanged(const QString &arg1)
{
Settings node = settings.write["server"]["playerAI"];

View File

@ -15,6 +15,7 @@ public:
~CSettingsView();
void loadSettings();
void setDisplayList(const QStringList& displayList);
private slots:
void on_comboBoxResolution_currentIndexChanged(const QString &arg1);
@ -43,6 +44,8 @@ private slots:
void on_comboBoxAutoCheck_currentIndexChanged(int index);
void on_comboBoxDisplayIndex_currentIndexChanged(int index);
private:
Ui::CSettingsView *ui;
};

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>700</width>
<height>420</height>
<width>714</width>
<height>429</height>
</rect>
</property>
<property name="windowTitle">
@ -26,7 +26,7 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item row="9" column="1" colspan="4">
<item row="10" column="1" colspan="4">
<widget class="QLabel" name="LauncherSettings">
<property name="font">
<font>
@ -39,7 +39,7 @@
</property>
</widget>
</item>
<item row="5" column="6" colspan="4">
<item row="6" column="6" colspan="4">
<widget class="QLabel" name="labelGeneral">
<property name="font">
<font>
@ -59,7 +59,7 @@
</property>
</widget>
</item>
<item row="6" column="7" colspan="3">
<item row="7" column="7" colspan="3">
<widget class="QSpinBox" name="spinBoxNetworkPort">
<property name="minimum">
<number>1024</number>
@ -99,7 +99,7 @@
</item>
</widget>
</item>
<item row="5" column="1" colspan="4">
<item row="6" column="1" colspan="4">
<widget class="QLabel" name="labelAISettings">
<property name="font">
<font>
@ -192,7 +192,7 @@
</property>
</widget>
</item>
<item row="13" column="1" colspan="9">
<item row="14" column="1" colspan="9">
<widget class="QPlainTextEdit" name="plainTextEditRepos">
<property name="lineWrapMode">
<enum>QPlainTextEdit::NoWrap</enum>
@ -222,7 +222,7 @@
</property>
</widget>
</item>
<item row="7" column="4">
<item row="8" column="4">
<widget class="QComboBox" name="comboBoxNeutralAI">
<item>
<property name="text">
@ -250,21 +250,21 @@
</property>
</widget>
</item>
<item row="7" column="1">
<item row="8" column="1">
<widget class="QLabel" name="labelNeutralAI">
<property name="text">
<string>Neutral AI</string>
</property>
</widget>
</item>
<item row="7" column="6">
<item row="8" column="6">
<widget class="QLabel" name="labelEncoding">
<property name="text">
<string>Heroes III character set</string>
</property>
</widget>
</item>
<item row="6" column="4">
<item row="7" column="4">
<widget class="QComboBox" name="comboBoxPlayerAI">
<item>
<property name="text">
@ -273,14 +273,14 @@
</item>
</widget>
</item>
<item row="6" column="1">
<item row="7" column="1">
<widget class="QLabel" name="labelPlayerAI">
<property name="text">
<string>Player AI</string>
</property>
</widget>
</item>
<item row="7" column="7" colspan="3">
<item row="8" column="7" colspan="3">
<widget class="QComboBox" name="comboBoxEncoding">
<item>
<property name="text">
@ -309,7 +309,7 @@
</item>
</widget>
</item>
<item row="6" column="6">
<item row="7" column="6">
<widget class="QLabel" name="labelNetworkPort">
<property name="text">
<string>Network port</string>
@ -329,7 +329,7 @@
</property>
</widget>
</item>
<item row="11" column="1" colspan="4">
<item row="12" column="1" colspan="4">
<widget class="QLabel" name="labelRepositories">
<property name="font">
<font>
@ -411,7 +411,7 @@
</item>
</widget>
</item>
<item row="4" column="1" colspan="4">
<item row="5" column="1" colspan="4">
<spacer name="spacerSections">
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -427,7 +427,7 @@
</property>
</spacer>
</item>
<item row="8" column="1" colspan="4">
<item row="9" column="1" colspan="4">
<spacer name="spacerRepos">
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -472,7 +472,7 @@
</property>
</spacer>
</item>
<item row="10" column="6">
<item row="11" column="6">
<widget class="QComboBox" name="comboBoxAutoCheck">
<property name="currentIndex">
<number>1</number>
@ -489,13 +489,29 @@
</item>
</widget>
</item>
<item row="10" column="1" colspan="4">
<item row="11" column="1" colspan="4">
<widget class="QLabel" name="labelAutoCheck">
<property name="text">
<string>Check repositories on startup</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="labelDisplayIndex">
<property name="text">
<string>Display index</string>
</property>
</widget>
</item>
<item row="4" column="4">
<widget class="QComboBox" name="comboBoxDisplayIndex">
<item>
<property name="text">
<string>0</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
<resources/>