diff --git a/.gitignore b/.gitignore
index 365f2fa6..b4ef7825 100644
--- a/.gitignore
+++ b/.gitignore
@@ -95,3 +95,4 @@ _deps
/Common/ffmpeg/*
/Docs/html/screenplay.index
/ContentBuilder/**
+/aqtinstall.log
diff --git a/CMake/CMakeLists.txt b/CMake/CMakeLists.txt
index 0b954bc4..8083506c 100644
--- a/CMake/CMakeLists.txt
+++ b/CMake/CMakeLists.txt
@@ -1,8 +1,7 @@
project(CMake)
set(FILES # cmake-format: sortable
- CopyRecursive.cmake
- QtUpdateTranslations.cmake)
+ CopyRecursive.cmake QtUpdateTranslations.cmake)
add_custom_target(
${PROJECT_NAME}
diff --git a/CMakeLists.txt b/CMakeLists.txt
index da7d2998..3e261871 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,17 +1,18 @@
cmake_minimum_required(VERSION 3.16.0)
-project(ScreenPlay
- VERSION 0.15.0
- DESCRIPTION "Modern, Cross Plattform, Live Wallpaper, Widgets and AppDrawer!"
- HOMEPAGE_URL "https://screen-play.app/"
- LANGUAGES CXX)
+project(
+ ScreenPlay
+ VERSION 0.15.0
+ DESCRIPTION "Modern, Cross Plattform, Live Wallpaper, Widgets and AppDrawer!"
+ HOMEPAGE_URL "https://screen-play.app/"
+ LANGUAGES CXX)
# This sets cmake to compile all dlls into the main directory
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
-option(SCREENPLAY_STEAM "For FOSS distribution so we do not bundle proprietary code." ON)
+option(SCREENPLAY_STEAM "For FOSS distribution so we do not bundle proprietary code." ON)
option(SCREENPLAY_TESTS "Enables UI tests." OFF)
option(SCREENPLAY_CREATE_INSTALLER "Indicates whether an installer via the Qt Installer Framework is created." OFF)
@@ -148,8 +149,7 @@ if(${SCREENPLAY_CREATE_INSTALLER})
DESCRIPTION "This installs ScreenPlay.")
cpack_ifw_configure_component(
- ScreenPlayApp
- FORCED_INSTALLATION
+ ScreenPlayApp FORCED_INSTALLATION
NAME "ScreenPlay"
VERSION ${PROJECT_VERSION} # Version of component
DESCRIPTION "Welcome to the K3000 installer."
@@ -158,4 +158,3 @@ if(${SCREENPLAY_CREATE_INSTALLER})
CHECKABLE FALSE)
endif()
-
diff --git a/ScreenPlay/CMakeLists.txt b/ScreenPlay/CMakeLists.txt
index 04e84ac4..723a39ac 100644
--- a/ScreenPlay/CMakeLists.txt
+++ b/ScreenPlay/CMakeLists.txt
@@ -71,7 +71,6 @@ set(QML
qml/Monitors/MonitorsProjectSettingItem.qml
qml/Navigation/Navigation.qml
qml/Navigation/NavigationItem.qml
- qml/Navigation/NavigationWallpaperConfiguration.qml
qml/Monitors/DefaultVideoControls.qml
qml/Common/TagSelector.qml
qml/Common/Tag.qml
@@ -146,6 +145,7 @@ list(
${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_it_IT.ts
${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_nl_NL.ts
${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_de_DE.ts
+ ${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_pl_PL.ts
${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_zh_CN.ts
${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_pt_BR.ts
${CMAKE_CURRENT_SOURCE_DIR}/translations/ScreenPlay_es_ES.ts
@@ -175,8 +175,6 @@ find_package(
WebSockets
Svg
LinguistTools
- WebEngineQuick
- WebEngineCore
Test)
qt_add_resources(RESOURCES Resources.qrc)
@@ -184,8 +182,6 @@ qt_add_big_resources(FONTS fonts.qrc)
add_library(ScreenPlayLib ${SOURCES} ${HEADER} ${RESOURCES} ${FONTS})
-target_include_directories(ScreenPlayLib PUBLIC ./ src/ ${LibArchive_INCLUDE_DIRS})
-
target_link_libraries(
ScreenPlayLib
PUBLIC ScreenPlaySDK
@@ -199,9 +195,6 @@ target_link_libraries(
Qt6::Core
Qt6::WebSockets
Qt6::Svg
- Qt6::WebEngineQuick
- Qt6::WebEngineCore
- ${LibArchive_LIBRARIES}
SteamSDKQtEnums)
if(${TESTS_ENABLED})
diff --git a/ScreenPlay/Resources.qrc b/ScreenPlay/Resources.qrc
index 85d1d5dd..625e5a34 100644
--- a/ScreenPlay/Resources.qrc
+++ b/ScreenPlay/Resources.qrc
@@ -148,5 +148,11 @@
translations/ScreenPlay_it_IT.ts
qml/Create/WizardsFiles/HTMLWallpaperMain.html
qml/Create/WizardsFiles/HTMLWidgetMain.html
+ assets/icons/icon_minimize.svg
+ assets/icons/icon_video_settings_black_24dp.svg
+ qml/Create/WizardsFiles/QMLWallpaperMain.qml
+ qml/Create/WizardsFiles/QMLWidgetMain.qml
+ translations/ScreenPlay_pl_PL.qm
+ translations/ScreenPlay_pl_PL.ts
diff --git a/ScreenPlay/app.cpp b/ScreenPlay/app.cpp
index 8c60f339..cfe79715 100644
--- a/ScreenPlay/app.cpp
+++ b/ScreenPlay/app.cpp
@@ -210,14 +210,12 @@ void App::init()
}
qmlRegisterSingletonInstance("ScreenPlay", 1, 0, "ScreenPlay", this);
+ QGuiApplication::instance()->addLibraryPath(QGuiApplication::instance()->applicationDirPath());
-#ifdef Q_OS_MACOS
- // Needed for macos .app files
- m_mainWindowEngine->addPluginPath(QGuiApplication::instance()->applicationDirPath());
-#endif
if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) {
setupKDE();
}
+
m_mainWindowEngine->load(QUrl(QStringLiteral("qrc:/ScreenPlay/main.qml")));
// Must be called last to display a error message on startup by the qml engine
diff --git a/ScreenPlay/app.h b/ScreenPlay/app.h
index 92e774c3..342d3ce8 100644
--- a/ScreenPlay/app.h
+++ b/ScreenPlay/app.h
@@ -48,7 +48,6 @@
#include
#include
#include
-#include
#include "src/create.h"
#include "src/globalvariables.h"
@@ -64,8 +63,6 @@
#include
#include
-class ScreenPlayWorkshopPlugin;
-
namespace ScreenPlay {
class App : public QObject {
@@ -119,6 +116,8 @@ public slots:
QString version() const;
void exit();
+ QPointF cursorPos() { return QCursor::pos(); }
+
void setGlobalVariables(GlobalVariables* globalVariables)
{
if (m_globalVariables.get() == globalVariables)
@@ -215,11 +214,11 @@ public slots:
m_wizards.reset(wizards);
emit wizardsChanged(m_wizards.get());
}
+
private:
bool setupKDE();
private:
- QPluginLoader m_workshopPlugin;
QNetworkAccessManager m_networkAccessManager;
QElapsedTimer m_continuousIntegrationMetricsTimer;
std::unique_ptr m_mainWindowEngine;
diff --git a/ScreenPlay/assets/icons/icon_close_black_24dp.svg b/ScreenPlay/assets/icons/icon_close_black_24dp.svg
new file mode 100644
index 00000000..989837ca
--- /dev/null
+++ b/ScreenPlay/assets/icons/icon_close_black_24dp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ScreenPlay/assets/icons/icon_minimize.svg b/ScreenPlay/assets/icons/icon_minimize.svg
new file mode 100644
index 00000000..a5f54781
--- /dev/null
+++ b/ScreenPlay/assets/icons/icon_minimize.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/ScreenPlay/assets/icons/icon_video_settings_black_24dp.svg b/ScreenPlay/assets/icons/icon_video_settings_black_24dp.svg
new file mode 100644
index 00000000..1cd53c98
--- /dev/null
+++ b/ScreenPlay/assets/icons/icon_video_settings_black_24dp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ScreenPlay/main.cpp b/ScreenPlay/main.cpp
index 874bc134..b37aa693 100644
--- a/ScreenPlay/main.cpp
+++ b/ScreenPlay/main.cpp
@@ -36,7 +36,6 @@
#include
#include
#include
-#include
#include
#define DOCTEST_CONFIG_IMPLEMENT
@@ -47,9 +46,6 @@ int main(int argc, char* argv[])
{
Q_INIT_RESOURCE(Resources);
- QtWebEngineQuick::initialize();
- QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
-
QApplication qtGuiApp(argc, argv);
// Unit tests
diff --git a/ScreenPlay/main.qml b/ScreenPlay/main.qml
index 2f79f610..98c44b95 100644
--- a/ScreenPlay/main.qml
+++ b/ScreenPlay/main.qml
@@ -15,18 +15,18 @@ import "qml/Workshop" as Workshop
import "qml/Community" as Community
ApplicationWindow {
- id: window
+ id: root
function setTheme(theme) {
switch (theme) {
case Settings.System:
- window.Material.theme = Material.System;
+ root.Material.theme = Material.System;
break;
case Settings.Dark:
- window.Material.theme = Material.Dark;
+ root.Material.theme = Material.Dark;
break;
case Settings.Light:
- window.Material.theme = Material.Light;
+ root.Material.theme = Material.Light;
break;
}
}
@@ -38,7 +38,7 @@ ApplicationWindow {
}
if (name === "Installed") {
- stackView.replace("qrc:/ScreenPlay/qml/" + name + "/" + name + ".qml", {
+ stackView.replace("qrc:/ScreenPlay/qml/Installed/Installed.qml", {
"sidebar": sidebar
})
return
@@ -55,159 +55,254 @@ ApplicationWindow {
title: "ScreenPlay Alpha - " + ScreenPlay.version()
minimumHeight: 450
minimumWidth: 1050
+ flags: Qt.FramelessWindowHint |Qt.Window
+
// Partial workaround for
// https://bugreports.qt.io/browse/QTBUG-86047
Material.accent: Material.color(Material.Orange)
onVisibilityChanged: {
- if (window.visibility === 2)
+ if (root.visibility === 2)
ScreenPlay.installedListModel.reset();
}
+ onClosing: {
+ if (ScreenPlay.screenPlayManager.activeWallpaperCounter === 0
+ && ScreenPlay.screenPlayManager.activeWidgetsCounter === 0) {
+ Qt.quit()
+ }
+ }
Component.onCompleted: {
setTheme(ScreenPlay.settings.theme);
- switchPage("Installed");
+ stackView.push("qrc:/ScreenPlay/qml/Installed/Installed.qml", {
+ "sidebar": sidebar
+ })
if (!ScreenPlay.settings.silentStart)
- window.show();
+ root.show();
}
- Connections {
- function onThemeChanged(theme) {
- setTheme(theme);
- }
+ Item {
+ anchors.fill: parent
+ anchors.margins: 1
- target: ScreenPlay.settings
- }
- Connections {
- function onRequestNavigation(nav) {
- switchPage(nav);
- }
- target: ScreenPlay.util
- }
-
- Connections {
- function onRequestRaise() {
- window.show();
- }
-
- target: ScreenPlay.screenPlayManager
- }
-
- Dialogs.SteamNotAvailable {
- id: dialogSteam
- }
-
- Dialogs.MonitorConfiguration {
- }
-
- Dialogs.CriticalError {
- mainWindow: window
- }
-
- Common.TrayIcon {
- }
-
- StackView {
- id: stackView
- objectName: "stackView"
- property int duration: 300
-
- anchors {
- top: nav.bottom
- right: parent.right
- bottom: parent.bottom
- left: parent.left
- }
-
- replaceEnter: Transition {
- OpacityAnimator {
- from: 0
- to: 1
- duration: stackView.duration
- easing.type: Easing.InOutQuart
+ Connections {
+ function onThemeChanged(theme) {
+ setTheme(theme);
}
- ScaleAnimator {
- from: 0.8
- to: 1
- duration: stackView.duration
- easing.type: Easing.InOutQuart
+ target: ScreenPlay.settings
+ }
+
+ Connections {
+ function onRequestNavigation(nav) {
+ switchPage(nav);
+ }
+
+ target: ScreenPlay.util
+ }
+
+ Connections {
+ function onRequestRaise() {
+ root.show();
+ }
+
+ target: ScreenPlay.screenPlayManager
+ }
+
+ Dialogs.SteamNotAvailable {
+ id: dialogSteam
+ }
+
+ Dialogs.MonitorConfiguration {
+ }
+
+ Dialogs.CriticalError {
+ window: root
+ }
+
+ Common.TrayIcon {
+ window: root
+ }
+
+ StackView {
+ id: stackView
+ objectName: "stackView"
+ property int duration: 300
+
+ anchors {
+ top: nav.bottom
+ right: parent.right
+ bottom: parent.bottom
+ left: parent.left
+ }
+
+ replaceEnter: Transition {
+ OpacityAnimator {
+ from: 0
+ to: 1
+ duration: stackView.duration
+ easing.type: Easing.InOutQuart
+ }
+
+ ScaleAnimator {
+ from: 0.8
+ to: 1
+ duration: stackView.duration
+ easing.type: Easing.InOutQuart
+ }
+
+ }
+
+ replaceExit: Transition {
+ OpacityAnimator {
+ from: 1
+ to: 0
+ duration: stackView.duration
+ easing.type: Easing.InOutQuart
+ }
+
+ ScaleAnimator {
+ from: 1
+ to: 0.8
+ duration: stackView.duration
+ easing.type: Easing.InOutQuart
+ }
+
}
}
- replaceExit: Transition {
- OpacityAnimator {
- from: 1
- to: 0
- duration: stackView.duration
- easing.type: Easing.InOutQuart
+ Connections {
+ function onSetSidebarActive(active) {
+ if (active)
+ sidebar.state = "active";
+ else
+ sidebar.state = "inactive";
}
- ScaleAnimator {
- from: 1
- to: 0.8
- duration: stackView.duration
- easing.type: Easing.InOutQuart
+ function onSetNavigationItem(pos) {
+ if (pos === 0)
+ nav.onPageChanged("Create");
+ else
+ nav.onPageChanged("Workshop");
+ }
+
+ target: stackView.currentItem
+ ignoreUnknownSignals: true
+ }
+
+ Installed.Sidebar {
+ id: sidebar
+ objectName: "installedSidebar"
+ navHeight: nav.height
+
+ anchors {
+ top: parent.top
+ right: parent.right
+ bottom: parent.bottom
}
}
- }
+ Navigation.Navigation {
+ id: nav
+ window: root
+ width:parent.width
+ anchors {
+ top: parent.top
+ right: parent.right
+ left: parent.left
+ }
+
+ onChangePage: (name)=> {
+ monitors.close();
+ switchPage(name);
+ }
+
- Connections {
- function onSetSidebarActive(active) {
- if (active)
- sidebar.state = "active";
- else
- sidebar.state = "inactive";
}
- function onSetNavigationItem(pos) {
- if (pos === 0)
- nav.onPageChanged("Create");
- else
- nav.onPageChanged("Workshop");
+ Monitors.Monitors {
+ id: monitors
}
- target: stackView.currentItem
- ignoreUnknownSignals: true
- }
- Installed.Sidebar {
- id: sidebar
- objectName: "installedSidebar"
-
- navHeight: nav.height
-
- anchors {
- top: parent.top
- right: parent.right
- bottom: parent.bottom
- }
}
- Navigation.Navigation {
- id: nav
-
- onChangePage: (name)=> {
- monitors.close();
- switchPage(name);
+ Rectangle {
+ height: 1
+ color:"#222"
+ anchors{
+ top:parent.top
+ right:parent.right
+ left:parent.left
}
-
- anchors {
- top: parent.top
- right: parent.right
- left: parent.left
+ }
+ Rectangle {
+ height: 1
+ color:"#222"
+ anchors{
+ bottom:parent.bottom
+ right:parent.right
+ left:parent.left
+ }
+ }
+ Rectangle {
+ width: 1
+ color:"#222"
+ anchors{
+ left:parent.left
+ bottom:parent.bottom
+ top:parent.top
+ }
+ }
+ Rectangle {
+ width: 1
+ color:"#222"
+ anchors{
+ right:parent.right
+ bottom:parent.bottom
+ top:parent.top
}
-
}
- Monitors.Monitors {
- id: monitors
+ Rectangle {
+ width: 15
+ height:width
+ color:"#555"
+ anchors{
+ right:parent.right
+ bottom:parent.bottom
+ margins: 1
+ }
+ MouseArea {
+ id: maResize
+ anchors.fill: parent
+ cursorShape: Qt.SizeFDiagCursor
+ property point clickPosition
+ property size originalSize
+ onPressed: {
+ maResize.clickPosition = Qt.point(maResize.mouseX, maResize.mouseY);
+ maResize.clickPosition = maResize.mapToGlobal(maResize.clickPosition.x , maResize.clickPosition.y )
+ maResize.originalSize = Qt.size(root.width, root.height)
+ }
+ onPositionChanged: {
+ if (maResize.pressed){
+ let newPos = maResize.mapToGlobal(maResize.mouseX, maResize.mouseY)
+ let newPosX = newPos.x - maResize.clickPosition.x
+ let newPosY = newPos.y - maResize.clickPosition.y
+
+ root.setGeometry(root.x,root.y, maResize.originalSize.width + newPosX,
+ maResize.originalSize.height + newPosY)
+
+ }
+
+
+ }
+ }
}
}
diff --git a/ScreenPlay/qml/Common/Dialogs/CriticalError.qml b/ScreenPlay/qml/Common/Dialogs/CriticalError.qml
index b27bbcaf..1c1779dc 100644
--- a/ScreenPlay/qml/Common/Dialogs/CriticalError.qml
+++ b/ScreenPlay/qml/Common/Dialogs/CriticalError.qml
@@ -9,7 +9,7 @@ import ScreenPlay 1.0
Dialog {
id: root
- property Window mainWindow
+ property ApplicationWindow window
property string message
modal: true
@@ -22,7 +22,7 @@ Dialog {
Connections {
function onDisplayErrorPopup(msg) {
root.message = msg;
- root.mainWindow.show();
+ root.window.show();
root.open();
}
diff --git a/ScreenPlay/qml/Common/TrayIcon.qml b/ScreenPlay/qml/Common/TrayIcon.qml
index 4a5e4e90..609b67cc 100644
--- a/ScreenPlay/qml/Common/TrayIcon.qml
+++ b/ScreenPlay/qml/Common/TrayIcon.qml
@@ -1,10 +1,12 @@
import QtQuick
-import Qt.labs.platform 1.1
+import QtQuick.Window
+import Qt.labs.platform
import ScreenPlay 1.0
SystemTrayIcon {
id: root
+ property var window
visible: true
icon.source: "qrc:/assets/icons/app.ico"
tooltip: qsTr("ScreenPlay - Double click to change you settings.")
diff --git a/ScreenPlay/qml/Community/Community.qml b/ScreenPlay/qml/Community/Community.qml
index 60fae792..5f73f20e 100644
--- a/ScreenPlay/qml/Community/Community.qml
+++ b/ScreenPlay/qml/Community/Community.qml
@@ -4,16 +4,24 @@ import QtQuick.Controls.Material
import Qt5Compat.GraphicalEffects
import QtQuick.Layouts
import ScreenPlay 1.0
-import QtWebEngine
Item {
id: root
+ XMLNewsfeed {
+ anchors {
+ top: navWrapper.bottom
+ right: parent.right
+ bottom: parent.bottom
+ left: parent.left
+ }
+ }
+
Rectangle {
id: navWrapper
color: Material.theme === Material.Light ? "white" : Material.background
- height: 50
+ height: 60
anchors {
top: parent.top
@@ -21,60 +29,72 @@ Item {
left: parent.left
}
- TabBar {
+ RowLayout {
id: nav
height: parent.height
- currentIndex: 0
anchors {
top: parent.top
left: parent.left
+ leftMargin: 20
bottom: parent.bottom
- right: parent.right
}
- CommunityNavItem {
+ Button {
text: qsTr("News")
- openLink: "https://screen-play.app/blog/"
+ onClicked: Qt.openUrlExternally("https://screen-play.app/blog/")
icon.source: "qrc:/assets/icons/icon_document.svg"
+ icon.width: 14
+ icon.height: 14
+ Layout.alignment: Qt.AlignVCenter
}
- CommunityNavItem {
+ Button {
text: qsTr("Wiki")
- openLink: "https://kelteseth.gitlab.io/ScreenPlayDocs/"
+ onClicked: Qt.openUrlExternally("https://kelteseth.gitlab.io/ScreenPlayDocs/")
icon.source: "qrc:/assets/icons/icon_help_center.svg"
+ icon.width: 14
+ icon.height: 14
+ Layout.alignment: Qt.AlignVCenter
}
- CommunityNavItem {
+ Button {
text: qsTr("Forum")
- openLink: "https://forum.screen-play.app/"
+ onClicked: Qt.openUrlExternally("https://forum.screen-play.app/")
icon.source: "qrc:/assets/icons/icon_forum.svg"
+ icon.width: 14
+ icon.height: 14
+ Layout.alignment: Qt.AlignVCenter
}
- CommunityNavItem {
- text: qsTr("Issue List")
- openLink: "https://gitlab.com/kelteseth/ScreenPlay/-/issues"
+ Button {
+ text: qsTr("Issue Tracker")
+ onClicked: Qt.openUrlExternally("https://gitlab.com/kelteseth/ScreenPlay/-/issues")
icon.source: "qrc:/assets/icons/icon_report_problem.svg"
+ icon.width: 14
+ icon.height: 14
+ Layout.alignment: Qt.AlignVCenter
}
- CommunityNavItem {
+ Button {
text: qsTr("Contribute")
- openLink: "https://gitlab.com/kelteseth/ScreenPlay#general-contributing"
+ onClicked: Qt.openUrlExternally("https://gitlab.com/kelteseth/ScreenPlay#general-contributing")
icon.source: "qrc:/assets/icons/icon_supervisor_account.svg"
+ icon.width: 14
+ icon.height: 14
+ Layout.alignment: Qt.AlignVCenter
}
- CommunityNavItem {
+ Button {
text: qsTr("Steam Workshop")
- openLink: "steam://url/GameHub/672870"
+ onClicked: Qt.openUrlExternally("steam://url/GameHub/672870")
icon.source: "qrc:/assets/icons/icon_steam.svg"
+ icon.width: 14
+ icon.height: 14
+ Layout.alignment: Qt.AlignVCenter
}
-
- background: Item {
- }
-
}
-
}
LinearGradient {
@@ -99,90 +119,8 @@ Item {
position: 1
color: "transparent"
}
-
}
-
}
- SwipeView {
- id: swipeView
-
- currentIndex: nav.currentIndex
-
- anchors {
- top: navWrapper.bottom
- right: parent.right
- bottom: parent.bottom
- left: parent.left
- }
-
- XMLNewsfeed {
- }
-
- Repeater {
- id: repeater
-
- Loader {
- active: SwipeView.isCurrentItem || SwipeView.isNextItem || SwipeView.isPreviousItem
- asynchronous: true
-
- sourceComponent: Item {
- Component.onCompleted: timer.start()
-
- Timer {
- id: timer
-
- interval: 200
- onTriggered: webView.url = webModel.get(index + 1).url
- }
-
- WebEngineView {
- id: webView
-
- anchors.fill: parent
- }
-
- }
-
- }
-
- model: ListModel {
- id: webModel
-
- ListElement {
- url: "https://screen-play.app/blog/"
- }
-
- ListElement {
- url: "https://kelteseth.gitlab.io/ScreenPlayDocs/"
- }
-
- ListElement {
- url: "https://forum.screen-play.app/"
- }
-
- ListElement {
- url: "https://gitlab.com/kelteseth/ScreenPlay/-/issues"
- }
-
- ListElement {
- url: "https://gitlab.com/kelteseth/ScreenPlay#general-contributing"
- }
-
- ListElement {
- url: "https://steamcommunity.com/app/672870/workshop/"
- }
-
- }
-
- }
-
- }
-
- Binding {
- target: nav
- property: "currentIndex"
- value: swipeView.currentIndex
- }
}
diff --git a/ScreenPlay/qml/Community/CommunityNavItem.qml b/ScreenPlay/qml/Community/CommunityNavItem.qml
index 25f71c62..ad347945 100644
--- a/ScreenPlay/qml/Community/CommunityNavItem.qml
+++ b/ScreenPlay/qml/Community/CommunityNavItem.qml
@@ -9,6 +9,7 @@ TabButton {
property url openLink
height: parent.height
+ onClicked: Qt.openUrlExternally(control.openLink)
contentItem: Item {
anchors.fill: parent
diff --git a/ScreenPlay/qml/Community/XMLNewsfeed.qml b/ScreenPlay/qml/Community/XMLNewsfeed.qml
index 28f4e77c..10061b93 100644
--- a/ScreenPlay/qml/Community/XMLNewsfeed.qml
+++ b/ScreenPlay/qml/Community/XMLNewsfeed.qml
@@ -17,7 +17,6 @@ Item {
flickDeceleration: 5000
cellHeight: 250
cellWidth: 450
- clip: true
model: feedModel
anchors {
diff --git a/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml b/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml
index 7db08486..a458ba40 100644
--- a/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml
+++ b/ScreenPlay/qml/Create/Wizards/Importh264/Importh264Init.qml
@@ -120,7 +120,7 @@ Item {
text: qsTr("Open Documentation")
Material.background: Material.LightGreen
- Material.foreground: "white"
+ highlighted: true
icon.source: "qrc:/assets/icons/icon_document.svg"
icon.color: "white"
icon.width: 16
diff --git a/ScreenPlay/qml/Installed/Installed.qml b/ScreenPlay/qml/Installed/Installed.qml
index 879da4eb..d48e3db5 100644
--- a/ScreenPlay/qml/Installed/Installed.qml
+++ b/ScreenPlay/qml/Installed/Installed.qml
@@ -91,8 +91,8 @@ Item {
property bool isScrolling: gridView.verticalVelocity != 0
boundsBehavior: Flickable.DragOverBounds
- maximumFlickVelocity: 2500
- flickDeceleration: 500
+ maximumFlickVelocity: 5000
+ flickDeceleration: 5000
anchors.fill: parent
cellWidth: 340
cellHeight: 200
diff --git a/ScreenPlay/qml/Monitors/DefaultVideoControls.qml b/ScreenPlay/qml/Monitors/DefaultVideoControls.qml
index df5e2bb7..70176db2 100644
--- a/ScreenPlay/qml/Monitors/DefaultVideoControls.qml
+++ b/ScreenPlay/qml/Monitors/DefaultVideoControls.qml
@@ -114,7 +114,7 @@ ColumnLayout {
"text": qsTr("Scale_Down")
}]
onActivated: {
- ScreenPlay.screenPlayManager.setWallpaperValueAtMonitorIndex(activeMonitorIndex, "fillmode", settingsComboBox.currentText);
+ ScreenPlay.screenPlayManager.setWallpaperFillModeAtMonitorIndex(activeMonitorIndex,settingsComboBox.currentValue);
}
}
diff --git a/ScreenPlay/qml/Monitors/MonitorSelection.qml b/ScreenPlay/qml/Monitors/MonitorSelection.qml
index b6ca8212..38c8e65f 100644
--- a/ScreenPlay/qml/Monitors/MonitorSelection.qml
+++ b/ScreenPlay/qml/Monitors/MonitorSelection.qml
@@ -17,7 +17,7 @@ Rectangle {
property alias background: root.color
property alias radius: root.radius
- signal requestProjectSettings(int index, var installedType, string appID)
+ signal requestProjectSettings(var index, var installedType, var appID)
function selectOnly(index) {
for (var i = 0; i < rp.count; i++) {
@@ -62,7 +62,7 @@ Rectangle {
}
function resize() {
- var absoluteDesktopSize = ScreenPlay.monitorListModel.getAbsoluteDesktopSize();
+ var absoluteDesktopSize = ScreenPlay.monitorListModel.absoluteDesktopSize();
var isWidthGreaterThanHeight = false;
var windowsDelta = 0;
if (absoluteDesktopSize.width < absoluteDesktopSize.height) {
@@ -135,22 +135,14 @@ Rectangle {
delegate: MonitorSelectionItem {
id: delegate
- monitorID: m_monitorID
- monitorName: m_name
appID: m_appID
- height: m_availableGeometry.height
- width: m_availableGeometry.width
- x: m_availableGeometry.x
- y: m_availableGeometry.y
- monitorManufacturer: m_manufacturer
- monitorModel: m_model
- monitorSize: m_availableGeometry
+ geometry: m_geometry
fontSize: root.fontSize
- index: m_number
+ index: m_index
previewImage: m_previewImage
installedType: m_installedType
monitorWithoutContentSelectable: root.monitorWithoutContentSelectable
- onMonitorSelected: root.selectMonitorAt(delegate.index)
+ onMonitorSelected: (index) => root.selectMonitorAt(index)
}
}
@@ -167,15 +159,5 @@ Rectangle {
}
-// layer.effect: InnerShadow {
-// cached: true
-// fast: true
-// smooth: true
-// radius: 32
-// spread: 0.8
-// verticalOffset: 3
-// color: "#55000000"
-// }
- // Width of the Sidebar or Space that should be used
}
diff --git a/ScreenPlay/qml/Monitors/MonitorSelectionItem.qml b/ScreenPlay/qml/Monitors/MonitorSelectionItem.qml
index d33f044c..d7849c09 100644
--- a/ScreenPlay/qml/Monitors/MonitorSelectionItem.qml
+++ b/ScreenPlay/qml/Monitors/MonitorSelectionItem.qml
@@ -7,11 +7,14 @@ import ScreenPlay.Enums.InstalledType 1.0
Item {
id: root
- property rect monitorSize: Qt.rect(0, 0, 0, 0)
- property string monitorModel
- property string monitorManufacturer
- property string monitorName
- property string monitorID
+ property rect geometry
+ onGeometryChanged: {
+ root.width = geometry.width
+ root.height = geometry.height
+ root.x = geometry.x
+ root.y = geometry.y
+ }
+
property string previewImage
property string appID
property var installedType: InstalledType.QMLWallpaper
@@ -34,7 +37,7 @@ Item {
}
Text {
- text: monitorSize.width + "x" + monitorSize.height
+ text: geometry.width + "x" + geometry.height
color: Material.foreground
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
@@ -72,13 +75,6 @@ Item {
fillMode: Image.PreserveAspectCrop
}
- Text {
- font.pointSize: 14
- text: root.index
- anchors.centerIn: parent
- color: "white"
- }
-
MouseArea {
anchors.fill: parent
hoverEnabled: true
@@ -86,7 +82,7 @@ Item {
onClicked: {
if (monitorWithoutContentSelectable) {
monitorSelected(index);
- return ;
+ return
}
if (root.hasContent && !root.monitorWithoutContentSelectable)
monitorSelected(index);
diff --git a/ScreenPlay/qml/Monitors/Monitors.qml b/ScreenPlay/qml/Monitors/Monitors.qml
index 1326bc58..5f7a3243 100644
--- a/ScreenPlay/qml/Monitors/Monitors.qml
+++ b/ScreenPlay/qml/Monitors/Monitors.qml
@@ -83,7 +83,7 @@ Popup {
monitorWithoutContentSelectable: false
availableWidth: width - 20
availableHeight: 150
- function onRequestProjectSettings() {
+ onRequestProjectSettings: ( index, installedType, appID) => {
if (installedType === InstalledType.VideoWallpaper) {
videoControlWrapper.state = "visible";
customPropertiesGridView.visible = false;
@@ -92,7 +92,9 @@ Popup {
} else {
videoControlWrapper.state = "hidden";
customPropertiesGridView.visible = true;
- ScreenPlay.screenPlayManager.requestProjectSettingsAtMonitorIndex(index);
+ if(!ScreenPlay.screenPlayManager.requestProjectSettingsAtMonitorIndex(index)){
+ console.warn("Unable to get requested settings from index: ", index)
+ }
}
activeMonitorIndex = index;
}
@@ -126,12 +128,11 @@ Popup {
Button {
id: btnRemoveSelectedWallpaper
-
- text: qsTr("Remove selected")
Material.background: Material.accent
- Material.foreground: "white"
+ highlighted: true
+ text: qsTr("Remove selected")
font.family: ScreenPlay.settings.font
- enabled: monitorSelection.activeMonitors.length == 1
+ enabled: monitorSelection.activeMonitors.length == 1 && ScreenPlay.screenPlayManager.activeWallpaperCounter > 0
onClicked: {
if (!ScreenPlay.screenPlayManager.removeWallpaperAt(monitorSelection.activeMonitors[0]))
print("Unable to close singel wallpaper");
@@ -142,9 +143,9 @@ Popup {
Button {
id: btnRemoveAllWallpape
- text: qsTr("Remove ") + ScreenPlay.screenPlayManager.activeWallpaperCounter + " " + qsTr("Wallpapers")
+ text: qsTr("Remove all ") + ScreenPlay.screenPlayManager.activeWallpaperCounter + " " + qsTr("Wallpapers")
Material.background: Material.accent
- Material.foreground: "white"
+ highlighted: true
font.family: ScreenPlay.settings.font
enabled: ScreenPlay.screenPlayManager.activeWallpaperCounter > 0
onClicked: {
@@ -158,9 +159,10 @@ Popup {
Button {
id: btnRemoveAllWidgets
- text: qsTr("Remove ") + ScreenPlay.screenPlayManager.activeWidgetsCounter + " " + qsTr("Widgets")
+ text: qsTr("Remove all ") + ScreenPlay.screenPlayManager.activeWidgetsCounter + " " + qsTr("Widgets")
Material.background: Material.accent
- Material.foreground: "white"
+ Material.foreground: Material.primaryTextColor
+ highlighted: true
font.family: ScreenPlay.settings.font
enabled: ScreenPlay.screenPlayManager.activeWidgetsCounter > 0
onClicked: {
diff --git a/ScreenPlay/qml/Navigation/Navigation.qml b/ScreenPlay/qml/Navigation/Navigation.qml
index a85cc851..0bba540c 100644
--- a/ScreenPlay/qml/Navigation/Navigation.qml
+++ b/ScreenPlay/qml/Navigation/Navigation.qml
@@ -1,5 +1,7 @@
import QtQuick
import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Window
import QtQuick.Controls.Material
import Qt5Compat.GraphicalEffects
import QtQuick.Controls.Material.impl
@@ -10,56 +12,78 @@ import "../Common"
Rectangle {
id: root
- property string currentNavigationName: ""
+ property string currentNavigationName: "Installed"
property var navArray: [navCreate, navWorkshop, navInstalled, navSettings, navCommunity]
property bool navActive: true
+ property ApplicationWindow window
+ property int iconWidth: 16
+ property int iconHeight: iconWidth
signal changePage(string name)
function setActive(active) {
- navActive = active;
+ navActive = active
if (active)
- root.state = "enabled";
+ root.state = "enabled"
else
- root.state = "disabled";
+ root.state = "disabled"
}
function setNavigation(name) {
- var i = 0;
+ var i = 0
for (; i < navArray.length; i++) {
if (navArray[i].name === name) {
- navArray[i].state = "active";
- root.currentNavigationName = name;
+ navArray[i].state = "active"
+ root.currentNavigationName = name
} else {
- navArray[i].state = "inactive";
+ navArray[i].state = "inactive"
}
}
}
function onPageChanged(name) {
if (!navActive)
- return ;
+ return
- root.changePage(name);
- setNavigation(name);
+ root.changePage(name)
+ setNavigation(name)
}
height: 60
- clip: true
width: 1366
color: Material.theme === Material.Light ? "white" : Material.background
layer.enabled: true
- MouseHoverBlocker {
+ MouseArea {
+ id: mouseArea
+
+ property var clickPos
+
+ anchors.fill: parent
+ hoverEnabled: true
+ onPressed: (mouse)=>{
+ clickPos = {
+ "x": mouse.x,
+ "y": mouse.y
+ };
+ }
+ onPositionChanged: {
+ if (mouseArea.pressed){
+ let pos = ScreenPlay.cursorPos();
+ window.setX(pos.x - clickPos.x)
+ window.setY(pos.y - clickPos.y)
+ }
+
+ }
}
Connections {
function onRequestNavigationActive(isActive) {
- setActive(isActive);
+ setActive(isActive)
}
function onRequestNavigation(nav) {
- onPageChanged(nav);
+ onPageChanged(nav)
}
target: ScreenPlay.util
@@ -128,10 +152,146 @@ Rectangle {
onPageClicked: (name)=> {root.onPageChanged(name)}
objectName: "settingsTab"
}
-
}
- NavigationWallpaperConfiguration {
+ Rectangle {
+ id:quickActionRowBackground
+ anchors.centerIn: quickActionRow
+ width: quickActionRow.width + 5
+ height: quickActionRow.height - 16
+ color: Material.theme === Material.Light ? Material.background : "#242424"
+ border.color: Material.theme === Material.Light ? Material.iconDisabledColor : Qt.darker(Material.background)
+ border.width: 1
+ radius: 3
+ }
+
+ RowLayout {
+ id: quickActionRow
+ anchors {
+ top: parent.top
+ right: parent.right
+ rightMargin: 10
+ bottom: parent.bottom
+ }
+
+ property bool contentActive: ScreenPlay.screenPlayManager.activeWallpaperCounter > 0
+ || ScreenPlay.screenPlayManager.activeWidgetsCounter > 0
+
+ onContentActiveChanged: {
+ if(!contentActive){
+ miMuteAll.isMuted = false
+ miStopAll.isPlaying = false
+ }
+ }
+
+ ToolButton {
+ id: miMuteAll
+ Layout.alignment: Qt.AlignVCenter
+ icon.source: "qrc:/assets/icons/icon_volume.svg"
+ icon.width: root.iconWidth
+ icon.height: root.iconHeight
+ enabled: quickActionRow.contentActive
+
+ onClicked: isMuted = !isMuted
+ property bool isMuted: false
+ onIsMutedChanged: {
+ if (miMuteAll.isMuted) {
+ miMuteAll.icon.source = "qrc:/assets/icons/icon_volume.svg"
+ ScreenPlay.screenPlayManager.setAllWallpaperValue("muted",
+ "false")
+ } else {
+ miMuteAll.icon.source = "qrc:/assets/icons/icon_volume_mute.svg"
+ ScreenPlay.screenPlayManager.setAllWallpaperValue("muted",
+ "true")
+ }
+ }
+
+ hoverEnabled: true
+ ToolTip.text: qsTr("Mute/Unmute all Wallpaper")
+ ToolTip.visible: hovered
+ }
+ ToolButton {
+ id: miStopAll
+ enabled: quickActionRow.contentActive
+ Layout.alignment: Qt.AlignVCenter
+ icon.source: "qrc:/assets/icons/icon_pause.svg"
+ icon.width: root.iconWidth
+ icon.height: root.iconHeight
+ onClicked: isPlaying = !isPlaying
+ property bool isPlaying: true
+ onIsPlayingChanged:{
+ if (miStopAll.isPlaying) {
+ miStopAll.icon.source = "qrc:/assets/icons/icon_pause.svg"
+ ScreenPlay.screenPlayManager.setAllWallpaperValue(
+ "isPlaying", "true")
+ } else {
+ miStopAll.icon.source = "qrc:/assets/icons/icon_play.svg"
+ ScreenPlay.screenPlayManager.setAllWallpaperValue(
+ "isPlaying", "false")
+ }
+ }
+ hoverEnabled: true
+ ToolTip.text: qsTr("Pause/Play all Wallpaper")
+ ToolTip.visible: hovered
+ }
+ ToolButton {
+ id: miConfig
+ Layout.alignment: Qt.AlignVCenter
+ icon.source: "qrc:/assets/icons/icon_video_settings_black_24dp.svg"
+ icon.width: root.iconWidth
+ icon.height: root.iconHeight
+ onClicked: ScreenPlay.util.setToggleWallpaperConfiguration()
+ hoverEnabled: true
+ ToolTip.text: qsTr("Configure Wallpaper")
+ ToolTip.visible: hovered
+ }
+
+ Rectangle {
+ color: Material.theme === Material.Light ? Material.iconDisabledColor : Qt.darker(Material.background)
+ height: quickActionRowBackground.height
+ width: 1
+ }
+
+ ToolButton {
+ id: miMinimize
+ Layout.alignment: Qt.AlignVCenter
+ icon.source: "qrc:/assets/icons/icon_minimize.svg"
+ icon.width: root.iconWidth
+ icon.height: root.iconHeight
+ onClicked: root.window.hide()
+ hoverEnabled: true
+ ToolTip.text: qsTr("Minimize to Tray")
+ ToolTip.visible: hovered
+ }
+ ToolButton {
+ id: miquit
+ Layout.alignment: Qt.AlignVCenter
+ icon.source: "qrc:/assets/icons/icon_close.svg"
+ icon.width: root.iconWidth
+ icon.height: root.iconHeight
+ onClicked: {
+ if(ScreenPlay.screenPlayManager.activeWallpaperCounter === 0
+ && ScreenPlay.screenPlayManager.activeWidgetsCounter === 0){
+ Qt.quit()
+ return
+ }
+ dialog.open()
+ }
+ hoverEnabled: true
+ ToolTip.text: qsTr("Exit")
+ ToolTip.visible: hovered
+ }
+
+ Dialog {
+ id: dialog
+ anchors.centerIn: Overlay.overlay
+ title: qsTr("Are you sure you want to exit ScreenPlay? \nThis will shut down all Wallpaper and Widgets.")
+ standardButtons: Dialog.Ok | Dialog.Cancel
+ onAccepted: Qt.quit()
+ modal: true
+ }
+
+
}
layer.effect: ElevationEffect {
@@ -149,7 +309,6 @@ Rectangle {
target: row
opacity: 0.3
}
-
}
]
transitions: [
@@ -161,7 +320,6 @@ Rectangle {
target: row
duration: 300
}
-
}
]
}
diff --git a/ScreenPlay/qml/Navigation/NavigationItem.qml b/ScreenPlay/qml/Navigation/NavigationItem.qml
index ef42ea88..70e20388 100644
--- a/ScreenPlay/qml/Navigation/NavigationItem.qml
+++ b/ScreenPlay/qml/Navigation/NavigationItem.qml
@@ -24,7 +24,6 @@ Item {
width: txtAmount.paintedWidth + txt.paintedWidth + icon.paintedWidth + 40
height: 60
state: "inactive"
- clip: true
onEnabledChanged: {
if (!enabled) {
navigationItem.width = 0;
@@ -74,7 +73,7 @@ Item {
anchors.left: txtAmount.right
anchors.leftMargin: navigationItem.amount == "" ? 0 : 5
text: "name"
- font.pointSize: 14
+ font.pointSize: 12
color: Material.primaryTextColor
anchors.verticalCenter: parent.verticalCenter
font.family: ScreenPlay.settings.font
diff --git a/ScreenPlay/qml/Navigation/NavigationWallpaperConfiguration.qml b/ScreenPlay/qml/Navigation/NavigationWallpaperConfiguration.qml
deleted file mode 100644
index 17e22941..00000000
--- a/ScreenPlay/qml/Navigation/NavigationWallpaperConfiguration.qml
+++ /dev/null
@@ -1,127 +0,0 @@
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Controls.Material
-import Qt5Compat.GraphicalEffects
-import ScreenPlay 1.0
-import "../Common"
-
-Item {
- id: root
-
- width: 390
- property bool active: ScreenPlay.screenPlayManager.activeWallpaperCounter > 0
-
- anchors {
- top: parent.top
- right: parent.right
- rightMargin: 20
- bottom: parent.bottom
- }
-
- Connections {
- function onActiveWallpaperCounterChanged() {
- rippleEffect.trigger()
- }
-
- target: ScreenPlay.screenPlayManager
- }
-
- Pane {
- anchors.centerIn: parent
- contentWidth: activeMonitorName.contentWidth + image.width + 80
- contentHeight: parent.height - 10
- background: Item {
- Rectangle {
- id: bg
- clip: true
- anchors {
- fill: parent
- margins: 16
- }
- color: "transparent"
- border.color: root.active ? Material.accentColor : Material.iconDisabledColor
- border.width: 1
- radius: 3
- }
-
- RippleEffect {
- id: rippleEffect
-
- target: bg
- }
- }
-
- Behavior on contentWidth {
- PropertyAnimation {
- duration: 250
- easing.type: Easing.InOutQuart
- }
- }
-
- Text {
- id: activeMonitorName
-
- horizontalAlignment: Text.AlignRight
- color: root.active ? Material.primaryTextColor : Material.iconDisabledColor
- font.pointSize: 12
- font.family: ScreenPlay.settings.font
- text: root.active ? qsTr("Configurate active Wallpaper or Widgets") : qsTr(
- "No active Wallpaper or Widgets")
-
- anchors {
- right: image.right
- rightMargin: 50
- verticalCenter: parent.verticalCenter
- }
- }
-
- Image {
- id: image
-
- width: 28
- height: 24
- source: "qrc:/assets/icons/icon_monitor.svg"
- layer {
- effect: ColorOverlay {
- color: root.active ? Material.color(
- Material.Orange) : Material.iconDisabledColor
- }
- }
-
- anchors {
- rightMargin: 30
- right: parent.right
- verticalCenter: parent.verticalCenter
- }
-
- Text {
- id: txtAmountActiveWallpapers
-
- text: ScreenPlay.screenPlayManager.activeWallpaperCounter
- + ScreenPlay.screenPlayManager.activeWidgetsCounter
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- color: root.active ? Material.color(
- Material.Orange) : Material.iconDisabledColor
- font.pointSize: 10
- font.bold: true
- font.family: ScreenPlay.settings.font
- anchors {
- horizontalCenter: parent.horizontalCenter
- bottom: parent.bottom
- bottomMargin: 7
- }
- }
- }
-
- MouseArea {
- id: ma
-
- anchors.fill: parent
- cursorShape: Qt.PointingHandCursor
- onClicked: {
- ScreenPlay.util.setToggleWallpaperConfiguration()
- }
- }
- }
-}
diff --git a/ScreenPlay/qml/Settings/Settings.qml b/ScreenPlay/qml/Settings/Settings.qml
index 8f3c5ac5..b1fe542f 100644
--- a/ScreenPlay/qml/Settings/Settings.qml
+++ b/ScreenPlay/qml/Settings/Settings.qml
@@ -169,6 +169,9 @@ Item {
}, {
"value": Settings.De_DE,
"text": "German"
+ }, {
+ "value": Settings.Pl_PL,
+ "text": "Polish"
}, {
"value": Settings.It_IT,
"text": "Italian"
diff --git a/ScreenPlay/qml/Workshop/Forum.qml b/ScreenPlay/qml/Workshop/Forum.qml
index a6a114c8..2b2c5639 100644
--- a/ScreenPlay/qml/Workshop/Forum.qml
+++ b/ScreenPlay/qml/Workshop/Forum.qml
@@ -3,7 +3,6 @@ import QtQuick.Controls
import QtQuick.Controls.Material
import QtQuick.Layouts
import Qt5Compat.GraphicalEffects
-import QtWebEngine
import ScreenPlay 1.0
@@ -51,15 +50,4 @@ Item {
}
}
- WebEngineView {
- id: webView
- anchors {
- top: navWrapper.bottom
- right: parent.right
- bottom: parent.bottom
- left: parent.left
- }
- url:"https://forum.screen-play.app/category/5/wallpaper"
-
- }
}
diff --git a/ScreenPlay/qml/Workshop/Sidebar.qml b/ScreenPlay/qml/Workshop/Sidebar.qml
index ee22d5e7..ec22b013 100644
--- a/ScreenPlay/qml/Workshop/Sidebar.qml
+++ b/ScreenPlay/qml/Workshop/Sidebar.qml
@@ -2,7 +2,6 @@ import QtQuick
import Qt5Compat.GraphicalEffects
import QtQuick.Controls
import QtQuick.Layouts
-import QtWebEngine
import QtQuick.Controls.Material
import Workshop 1.0
import ScreenPlay 1.0
@@ -29,7 +28,6 @@ Drawer {
root.close()
return
}
- webView.opacity = 0
root.publishedFileID = publishedFileID
root.imgUrl = imgUrl
root.subscriptionCount = subscriptionCount
@@ -41,7 +39,6 @@ Drawer {
root.open()
steamWorkshop.requestWorkshopItemDetails(publishedFileID)
- webView.setVideo()
}
edge: Qt.RightEdge
@@ -50,16 +47,6 @@ Drawer {
modal: false
width: 400
interactive: false
- Component.onCompleted: {
- WebEngine.settings.localContentCanAccessFileUrls = true
- WebEngine.settings.localContentCanAccessRemoteUrls = true
- WebEngine.settings.allowRunningInsecureContent = true
- WebEngine.settings.accelerated2dCanvasEnabled = true
- WebEngine.settings.javascriptCanOpenWindows = false
- WebEngine.settings.showScrollBars = false
- WebEngine.settings.playbackRequiresUserGesture = false
- WebEngine.settings.focusOnNavigationEnabled = true
- }
Connections {
function onRequestItemDetailReturned(title, tags, steamIDOwner, description, votesUp, votesDown, url, fileSize, publishedFileId) {
@@ -106,42 +93,7 @@ Drawer {
anchors.fill: parent
}
- WebEngineView {
- id: webView
- property bool ready: false
-
- function getUpdateVideoCommand() {
- let src = ""
- src += "var video = document.getElementById('video');\n"
- src += "video.src = '" + root.videoPreview + "';\n"
- // Incase a workshop item has no gif preview
- src += "video.poster = '" + root.videoPreview + "';\n"
- src += "video.play();\n"
- return src
- }
-
- function setVideo() {
- if (!root.videoPreview.toString().startsWith("https"))
- return
-
- webView.runJavaScript(getUpdateVideoCommand(),
- function (result) {
- webView.opacity = 1
- })
- }
-
- anchors.fill: parent
- opacity: 0
- url: "qrc:/assets/WorkshopPreview.html"
- onUrlChanged: print(url)
-
- Behavior on opacity {
- NumberAnimation {
- duration: 200
- }
- }
- }
LinearGradient {
height: 50
diff --git a/ScreenPlay/src/installedlistmodel.cpp b/ScreenPlay/src/installedlistmodel.cpp
index c132e0e0..65ad38af 100644
--- a/ScreenPlay/src/installedlistmodel.cpp
+++ b/ScreenPlay/src/installedlistmodel.cpp
@@ -200,12 +200,12 @@ void InstalledListModel::append(const QJsonObject& obj, const QString& folderNam
*/
void InstalledListModel::loadInstalledContent()
{
- if (m_loadContentFuture.isRunning()) {
+ if (m_isLoading) {
qInfo() << "loadInstalledContent is already running. Skip.";
return;
}
-
- m_loadContentFuture = QtConcurrent::run([this]() {
+ m_isLoading = true;
+ auto unused = QtConcurrent::run([this]() {
QFileInfoList list = QDir(m_globalVariables->localStoragePath().toLocalFile()).entryInfoList(QDir::NoDotAndDotDot | QDir::AllDirs);
int counter = 0;
@@ -239,6 +239,7 @@ void InstalledListModel::loadInstalledContent()
}
setCount(counter);
emit installedLoadingFinished();
+ m_isLoading = false;
});
}
diff --git a/ScreenPlay/src/installedlistmodel.h b/ScreenPlay/src/installedlistmodel.h
index c20b3476..c552675a 100644
--- a/ScreenPlay/src/installedlistmodel.h
+++ b/ScreenPlay/src/installedlistmodel.h
@@ -124,7 +124,7 @@ private:
QFileSystemWatcher m_fileSystemWatcher;
QVector m_screenPlayFiles;
int m_count { 0 };
- QFuture m_loadContentFuture;
+ std::atomic_bool m_isLoading { false };
const std::shared_ptr& m_globalVariables;
};
diff --git a/ScreenPlay/src/monitorlistmodel.cpp b/ScreenPlay/src/monitorlistmodel.cpp
index cb468956..b2c0cdd6 100644
--- a/ScreenPlay/src/monitorlistmodel.cpp
+++ b/ScreenPlay/src/monitorlistmodel.cpp
@@ -37,15 +37,8 @@ QHash MonitorListModel::roleNames() const
{
static const QHash roles {
{ static_cast(MonitorRole::AppID), "m_appID" },
- { static_cast(MonitorRole::MonitorID), "m_monitorID" },
- { static_cast(MonitorRole::Name), "m_name" },
- { static_cast(MonitorRole::Size), "m_size" },
- { static_cast(MonitorRole::AvailableGeometry), "m_availableGeometry" },
- { static_cast(MonitorRole::AvailableVirtualGeometry), "m_availableVirtualGeometry" },
- { static_cast(MonitorRole::Number), "m_number" },
+ { static_cast(MonitorRole::Index), "m_index" },
{ static_cast(MonitorRole::Geometry), "m_geometry" },
- { static_cast(MonitorRole::Model), "m_model" },
- { static_cast(MonitorRole::Manufacturer), "m_manufacturer" },
{ static_cast(MonitorRole::PreviewImage), "m_previewImage" },
{ static_cast(MonitorRole::InstalledType), "m_installedType" },
};
@@ -86,32 +79,10 @@ QVariant MonitorListModel::data(const QModelIndex& index, int role) const
} else {
return QVariant("");
}
- case MonitorRole::MonitorID: {
- QScreen* screen = m_monitorList.at(row).m_screen;
-
- QVariant id = QString::number(screen->size().width())
- + "x" + QString::number(screen->size().height())
- + "_" + QString::number(screen->availableGeometry().x())
- + "x" + QString::number(screen->availableGeometry().y());
-
- return id;
- }
- case MonitorRole::Name:
- return m_monitorList.at(row).m_screen->name();
- case MonitorRole::Size:
- return m_monitorList.at(row).m_screen->size();
- case MonitorRole::AvailableGeometry:
- return m_monitorList.at(row).m_availableGeometry;
- case MonitorRole::AvailableVirtualGeometry:
- return m_monitorList.at(row).m_screen->availableVirtualGeometry();
- case MonitorRole::Number:
- return m_monitorList.at(row).m_number;
+ case MonitorRole::Index:
+ return m_monitorList.at(row).m_index;
case MonitorRole::Geometry:
- return m_monitorList.at(row).m_screen->geometry();
- case MonitorRole::Model:
- return m_monitorList.at(row).m_screen->model();
- case MonitorRole::Manufacturer:
- return m_monitorList.at(row).m_screen->manufacturer();
+ return m_monitorList.at(row).m_geometry;
case MonitorRole::InstalledType:
if (m_monitorList.at(row).m_activeWallpaper) {
return static_cast(m_monitorList.at(row).m_activeWallpaper->type());
@@ -143,7 +114,9 @@ void MonitorListModel::loadMonitors()
// This offset lets us center the monitor selection view in the center
int offsetX = 0;
int offsetY = 0;
- for (int i = 0; i < monitors.iMonitors.size(); i++) {
+ const int moinitorCount = monitors.iMonitors.size();
+
+ for (int i = 0; i < moinitorCount; i++) {
const int x = monitors.rcMonitors[i].left;
const int y = monitors.rcMonitors[i].top;
if (x < 0) {
@@ -154,18 +127,18 @@ void MonitorListModel::loadMonitors()
}
}
- for (int i = 0; i < monitors.iMonitors.size(); i++) {
+ for (int i = 0; i < moinitorCount; i++) {
const int width = std::abs(monitors.rcMonitors[i].right - monitors.rcMonitors[i].left);
const int height = std::abs(monitors.rcMonitors[i].top - monitors.rcMonitors[i].bottom);
const int x = monitors.rcMonitors[i].left;
const int y = monitors.rcMonitors[i].top;
- QRect availableVirtualGeometry(
+ QRect geometry(
x + offsetX,
y + offsetY,
width,
height);
beginInsertRows(index, m_monitorList.size(), m_monitorList.size());
- m_monitorList.append(Monitor { i, availableVirtualGeometry, QApplication::screens().at(i) });
+ m_monitorList.append(Monitor { i, geometry });
endInsertRows();
}
#else
@@ -190,14 +163,8 @@ void MonitorListModel::loadMonitors()
if (screen->geometry().width() == 0 || screen->geometry().height() == 0)
continue;
- QRect availableVirtualGeometry(
- screen->geometry().x() + offsetX,
- screen->geometry().y() + offsetY,
- screen->geometry().width(),
- screen->geometry().height());
-
beginInsertRows(index, m_monitorList.size(), m_monitorList.size());
- m_monitorList.append(Monitor { i, availableVirtualGeometry, screen });
+ m_monitorList.append(Monitor { i, screen->geometry() });
endInsertRows();
}
#endif
@@ -251,7 +218,7 @@ void MonitorListModel::closeWallpaper(const QString& appID)
* \brief MonitorListModel::getAbsoluteDesktopSize
* \return
*/
-QRect MonitorListModel::getAbsoluteDesktopSize() const
+QRect MonitorListModel::absoluteDesktopSize() const
{
auto* app = static_cast(QGuiApplication::instance());
return app->screens().at(0)->availableVirtualGeometry();
@@ -283,7 +250,7 @@ void MonitorListModel::setWallpaperMonitor(const std::shared_ptr MonitorListModel::getAppIDByMonitorIndex(const int index) const
{
for (auto& monitor : m_monitorList) {
- if (monitor.m_number == index && monitor.m_activeWallpaper) {
+ if (monitor.m_index == index && monitor.m_activeWallpaper) {
return { monitor.m_activeWallpaper->appID() };
}
}
diff --git a/ScreenPlay/src/monitorlistmodel.h b/ScreenPlay/src/monitorlistmodel.h
index 311ec59e..24adcd06 100644
--- a/ScreenPlay/src/monitorlistmodel.h
+++ b/ScreenPlay/src/monitorlistmodel.h
@@ -58,18 +58,15 @@ namespace ScreenPlay {
struct Monitor {
Monitor(
- const int number,
- const QRect& availableGeometry,
- QScreen* screen)
+ const int index,
+ const QRect& geometry)
{
- m_number = number;
- m_availableGeometry = availableGeometry;
- m_screen = screen;
+ m_index = index;
+ m_geometry = geometry;
}
- QRect m_availableGeometry;
- int m_number { 0 };
- QScreen* m_screen { nullptr };
+ int m_index { 0 };
+ QRect m_geometry;
std::shared_ptr m_activeWallpaper { nullptr };
};
@@ -81,15 +78,8 @@ public:
enum class MonitorRole {
AppID = Qt::UserRole,
- MonitorID,
- Name,
- Size,
- AvailableGeometry,
- AvailableVirtualGeometry,
- Number,
+ Index,
Geometry,
- Model,
- Manufacturer,
PreviewImage,
InstalledType,
};
@@ -114,7 +104,7 @@ public slots:
void reset();
void clearActiveWallpaper();
void closeWallpaper(const QString& appID);
- QRect getAbsoluteDesktopSize() const;
+ QRect absoluteDesktopSize() const;
void screenAdded(QScreen* screen)
{
diff --git a/ScreenPlay/src/screenplaymanager.cpp b/ScreenPlay/src/screenplaymanager.cpp
index 29e53f3d..8992ee80 100644
--- a/ScreenPlay/src/screenplaymanager.cpp
+++ b/ScreenPlay/src/screenplaymanager.cpp
@@ -83,22 +83,21 @@ void ScreenPlayManager::init(
if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) {
m_websocketServer = std::make_unique(QStringLiteral("ScreenPlayWebSocket"), QWebSocketServer::SslMode::NonSecureMode);
- const bool success = m_websocketServer->listen(QHostAddress::Any, m_webSocketPort);
- qInfo() << "Open Websocket:" << success << "port:" <listen(QHostAddress::Any, m_webSocketPort);
+ qInfo() << "Open Websocket:" << success << "port:" << m_webSocketPort;
QObject::connect(m_websocketServer.get(), &QWebSocketServer::newConnection, this, [this]() {
qInfo() << "New Websocket Connection";
auto* socket = m_websocketServer->nextPendingConnection();
- QObject::connect(socket, &QWebSocket::textMessageReceived, this, [this](const QString &message) {
- qInfo() << "Message:" << message;
+ QObject::connect(socket, &QWebSocket::textMessageReceived, this, [this](const QString& message) {
+ qInfo() << "Message:" << message;
});
- QObject::connect(socket, &QWebSocket::disconnected, this, [this,socket]() {
- m_connections.removeOne(socket);
- qInfo() << "Disconnected connection count: " << m_connections.count();
+ QObject::connect(socket, &QWebSocket::disconnected, this, [this, socket]() {
+ m_connections.removeOne(socket);
+ qInfo() << "Disconnected connection count: " << m_connections.count();
});
-
m_connections.push_back(socket);
- // socket->flush();
+ // socket->flush();
});
}
@@ -150,8 +149,8 @@ bool ScreenPlayManager::createWallpaper(
const QString path = QUrl::fromUserInput(absoluteStoragePath).toLocalFile();
const QString appID = ScreenPlayUtil::generateRandomString();
- if(m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE){
- if(m_connections.empty())
+ if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) {
+ if (m_connections.empty())
return false;
QJsonObject msg;
@@ -206,11 +205,11 @@ bool ScreenPlayManager::createWallpaper(
QObject::connect(wallpaper.get(), &ScreenPlayWallpaper::requestSave, this, &ScreenPlayManager::requestSaveProfiles);
QObject::connect(wallpaper.get(), &ScreenPlayWallpaper::requestClose, this, &ScreenPlayManager::removeWallpaper);
QObject::connect(wallpaper.get(), &ScreenPlayWallpaper::error, this, &ScreenPlayManager::displayErrorPopup);
- if(m_settings->desktopEnvironment() != Settings::DesktopEnvironment::KDE){
+ if (m_settings->desktopEnvironment() != Settings::DesktopEnvironment::KDE) {
if (!wallpaper->start()) {
return false;
}
- }
+ }
m_screenPlayWallpapers.append(wallpaper);
m_monitorListModel->setWallpaperMonitor(wallpaper, monitorIndex);
increaseActiveWallpaperCounter();
@@ -285,16 +284,15 @@ bool ScreenPlayManager::removeAllWallpapers()
return false;
}
}
- if(m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE){
- for(auto& connection : m_connections){
- QJsonObject obj;
- obj.insert("command", "quit");
- connection->sendTextMessage(QJsonDocument(obj).toJson(QJsonDocument::Compact));
+ if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::KDE) {
+ for (auto& connection : m_connections) {
+ QJsonObject obj;
+ obj.insert("command", "quit");
+ connection->sendTextMessage(QJsonDocument(obj).toJson(QJsonDocument::Compact));
connection->flush();
connection->close();
- }
-
- }
+ }
+ }
emit requestSaveProfiles();
@@ -376,13 +374,30 @@ bool ScreenPlayManager::setWallpaperValueAtMonitorIndex(const int index, const Q
return false;
}
+/*!
+ \brief Set a wallpaper \a fillmode at a given \a index and converts the qml enum (int)
+ into the c++ enum class value.
+*/
+bool ScreenPlayManager::setWallpaperFillModeAtMonitorIndex(const int index, const int fillmode)
+{
+ const auto fillModeTyped = static_cast(fillmode);
+
+ if (auto appID = m_monitorListModel->getAppIDByMonitorIndex(index)) {
+ return setWallpaperValue(*appID, "fillmode", QVariant::fromValue(fillModeTyped).toString());
+ }
+
+ qWarning() << "Could net get appID from m_monitorListModel!";
+ return false;
+}
+
/*!
\brief Convenient function to set a \a value at a given \a index and \a key for all wallaper. For exmaple used to mute all wallpaper.
*/
bool ScreenPlayManager::setAllWallpaperValue(const QString& key, const QString& value)
{
for (auto& wallpaper : m_screenPlayWallpapers) {
- return setWallpaperValue(wallpaper->appID(), key, value);
+ if (!wallpaper->setWallpaperValue(key, value, true))
+ return false;
}
return true;
}
@@ -406,7 +421,7 @@ ScreenPlayWallpaper* ScreenPlayManager::getWallpaperByAppID(const QString& appID
*/
void ScreenPlayManager::newConnection()
{
- qInfo() << "[1/3] SDKConnection incomming";
+ qInfo() << "[1/4] SDKConnection incomming";
auto connection = std::make_unique(m_server->nextPendingConnection());
QObject::connect(connection.get(), &SDKConnection::requestRaise, this, &ScreenPlayManager::requestRaise);
@@ -433,7 +448,7 @@ void ScreenPlayManager::newConnection()
for (int i = 0; i < m_screenPlayWallpapers.size(); ++i) {
if (m_screenPlayWallpapers.at(i)->appID() == matchingConnection->appID()) {
- qInfo() << "Matching Wallpaper found!";
+ qInfo() << "[3/4] Matching Wallpaper found!";
m_screenPlayWallpapers.at(i)->setSDKConnection(std::move(matchingConnection));
return;
}
@@ -441,7 +456,7 @@ void ScreenPlayManager::newConnection()
for (int i = 0; i < m_screenPlayWidgets.size(); ++i) {
if (m_screenPlayWidgets.at(i)->appID() == matchingConnection->appID()) {
- qInfo() << "Matching Widget found!";
+ qInfo() << "[3/4] Matching Widget found!";
m_screenPlayWidgets.at(i)->setSDKConnection(std::move(matchingConnection));
return;
}
@@ -468,9 +483,9 @@ bool ScreenPlayManager::removeWallpaper(const QString& appID)
if (wallpaper->appID() != appID) {
return false;
}
- if(m_settings->desktopEnvironment() == Settings::DesktopEnvironment::Windows ||
- m_settings->desktopEnvironment() == Settings::DesktopEnvironment::OSX)
- wallpaper->messageQuit();
+
+ if (m_settings->desktopEnvironment() == Settings::DesktopEnvironment::Windows || m_settings->desktopEnvironment() == Settings::DesktopEnvironment::OSX)
+ wallpaper->messageKDECloseWallpaper();
qInfo() << "Remove wallpaper " << wallpaper->file() << "at monitor " << wallpaper->screenNumber();
@@ -478,6 +493,8 @@ bool ScreenPlayManager::removeWallpaper(const QString& appID)
// for shared_ptr to release the object.
m_monitorListModel->setWallpaperMonitor({}, wallpaper->screenNumber());
+ wallpaper->close();
+
decreaseActiveWallpaperCounter();
return true;
@@ -507,7 +524,7 @@ bool ScreenPlayManager::removeWidget(const QString& appID)
return false;
}
- widget->messageQuit();
+ widget->close();
qInfo() << "Remove widget " << appID;
diff --git a/ScreenPlay/src/screenplaymanager.h b/ScreenPlay/src/screenplaymanager.h
index 54655562..d0e699d2 100644
--- a/ScreenPlay/src/screenplaymanager.h
+++ b/ScreenPlay/src/screenplaymanager.h
@@ -116,6 +116,7 @@ public slots:
bool requestProjectSettingsAtMonitorIndex(const int index);
bool setWallpaperValueAtMonitorIndex(const int index, const QString& key, const QString& value);
+ bool setWallpaperFillModeAtMonitorIndex(const int index, const int fillmode);
bool setAllWallpaperValue(const QString& key, const QString& value);
bool setWallpaperValue(const QString& appID, const QString& key, const QString& value);
ScreenPlayWallpaper* getWallpaperByAppID(const QString& appID) const;
diff --git a/ScreenPlay/src/screenplaywallpaper.cpp b/ScreenPlay/src/screenplaywallpaper.cpp
index 920b6478..c2e293f3 100644
--- a/ScreenPlay/src/screenplaywallpaper.cpp
+++ b/ScreenPlay/src/screenplaywallpaper.cpp
@@ -138,7 +138,7 @@ QJsonObject ScreenPlayWallpaper::getActiveSettingsJson()
/*!
\brief Sends command quit to the wallpaper.
*/
-void ScreenPlayWallpaper::messageQuit()
+void ScreenPlayWallpaper::close()
{
// When the wallpaper never connected, this is invalid
if (!m_connection) {
@@ -146,9 +146,9 @@ void ScreenPlayWallpaper::messageQuit()
return;
}
- QJsonObject obj;
- obj.insert("command", "quit");
- m_connection->sendMessage(QJsonDocument(obj).toJson(QJsonDocument::Compact));
+ if (m_connection->close()) {
+ m_isExiting = true;
+ }
}
/*!
\brief Prints the exit code if != 0.
@@ -175,6 +175,9 @@ void ScreenPlayWallpaper::processError(QProcess::ProcessError error)
*/
bool ScreenPlayWallpaper::setWallpaperValue(const QString& key, const QString& value, const bool save)
{
+ if (m_isExiting)
+ return false;
+
if (!m_connection) {
qWarning() << "Cannot set value for unconnected wallpaper!";
return false;
@@ -208,8 +211,13 @@ bool ScreenPlayWallpaper::setWallpaperValue(const QString& key, const QString& v
void ScreenPlayWallpaper::setSDKConnection(std::unique_ptr connection)
{
m_connection = std::move(connection);
- qInfo() << "[3/3] SDKConnection (Wallpaper) saved!";
+ qInfo() << "[4/4] SDKConnection (Wallpaper) saved!";
+ setIsConnected(true);
+ QObject::connect(m_connection.get(), &SDKConnection::disconnected, this, [this]() {
+ setIsConnected(false);
+ qInfo() << "disconnecetd;";
+ });
QTimer::singleShot(1000, this, [this]() {
if (playbackRate() != 1.0) {
setWallpaperValue("playbackRate", QString::number(playbackRate()), false);
@@ -240,9 +248,15 @@ void ScreenPlayWallpaper::replace(
const InstalledType::InstalledType type,
const bool checkWallpaperVisible)
{
- if (!m_connection)
+
+ if (m_isExiting)
return;
+ if (!m_connection) {
+ qWarning() << "Cannot replace for unconnected wallpaper!";
+ return;
+ }
+
m_previewImage = previewImage;
m_type = type;
m_fillMode = fillMode;
diff --git a/ScreenPlay/src/screenplaywallpaper.h b/ScreenPlay/src/screenplaywallpaper.h
index 1dde44c3..ab555cf8 100644
--- a/ScreenPlay/src/screenplaywallpaper.h
+++ b/ScreenPlay/src/screenplaywallpaper.h
@@ -44,14 +44,16 @@
#include "globalvariables.h"
#include "projectsettingslistmodel.h"
#include "sdkconnection.h"
-#include "util.h"
#include "settings.h"
+#include "util.h"
namespace ScreenPlay {
class ScreenPlayWallpaper : public QObject {
Q_OBJECT
+ Q_PROPERTY(bool isConnected READ isConnected WRITE setIsConnected NOTIFY isConnectedChanged)
+
Q_PROPERTY(QVector screenNumber READ screenNumber WRITE setScreenNumber NOTIFY screenNumberChanged)
Q_PROPERTY(float volume READ volume WRITE setVolume NOTIFY volumeChanged)
@@ -85,7 +87,6 @@ public:
const std::shared_ptr& settings,
QObject* parent = nullptr);
-
bool start();
void replace(
@@ -112,6 +113,7 @@ public:
bool isLooping() const { return m_isLooping; }
ProjectSettingsListModel* getProjectSettingsListModel() { return &m_projectSettingsListModel; }
float playbackRate() const { return m_playbackRate; }
+ bool isConnected() const { return m_isConnected; }
signals:
void screenNumberChanged(QVector screenNumber);
@@ -125,13 +127,16 @@ signals:
void volumeChanged(float volume);
void isLoopingChanged(bool isLooping);
void playbackRateChanged(float playbackRate);
+ void messageKDECloseWallpaper();
void requestSave();
void requestClose(const QString& appID);
void error(const QString& msg);
+ void isConnectedChanged(bool isConnected);
+
public slots:
- void messageQuit();
+ void close();
void processExit(int exitCode, QProcess::ExitStatus exitStatus);
void processError(QProcess::ProcessError error);
bool setWallpaperValue(const QString& key, const QString& value, const bool save = false);
@@ -229,6 +234,14 @@ public slots:
emit playbackRateChanged(m_playbackRate);
}
+ void setIsConnected(bool isConnected)
+ {
+ if (m_isConnected == isConnected)
+ return;
+ m_isConnected = isConnected;
+ emit isConnectedChanged(m_isConnected);
+ }
+
private:
const std::shared_ptr m_globalVariables;
std::unique_ptr m_connection;
@@ -248,5 +261,9 @@ private:
float m_playbackRate { 1.0f };
QTimer m_pingAliveTimer;
QStringList m_appArgumentsList;
+ bool m_isConnected { false };
+ // There are still cases where we can access the current item
+ // while exiting. This flag is to ignore all setWallpaperValue calls
+ bool m_isExiting { false };
};
}
diff --git a/ScreenPlay/src/screenplaywidget.cpp b/ScreenPlay/src/screenplaywidget.cpp
index b08c0c1b..dee57ac5 100644
--- a/ScreenPlay/src/screenplaywidget.cpp
+++ b/ScreenPlay/src/screenplaywidget.cpp
@@ -73,11 +73,15 @@ bool ScreenPlayWidget::start()
/*!
\brief Sends command quit to the widget.
*/
-void ScreenPlayWidget::messageQuit()
+void ScreenPlayWidget::close()
{
- QJsonObject obj;
- obj.insert("command", "quit");
- m_connection->sendMessage(QJsonDocument(obj).toJson(QJsonDocument::Compact));
+ // When the wallpaper never connected, this is invalid
+ if (!m_connection) {
+ qCritical() << "Cannot request quit, widget never connected!";
+ return;
+ }
+
+ m_connection->close();
}
/*!
diff --git a/ScreenPlay/src/screenplaywidget.h b/ScreenPlay/src/screenplaywidget.h
index 7a10340c..b657273c 100644
--- a/ScreenPlay/src/screenplaywidget.h
+++ b/ScreenPlay/src/screenplaywidget.h
@@ -85,7 +85,7 @@ public:
ProjectSettingsListModel* getProjectSettingsListModel() { return &m_projectSettingsListModel; }
public slots:
- void messageQuit();
+ void close();
QJsonObject getActiveSettingsJson();
void setPreviewImage(QString previewImage)
diff --git a/ScreenPlay/src/sdkconnection.cpp b/ScreenPlay/src/sdkconnection.cpp
index 5ef313d8..c60bd62a 100644
--- a/ScreenPlay/src/sdkconnection.cpp
+++ b/ScreenPlay/src/sdkconnection.cpp
@@ -17,6 +17,8 @@ ScreenPlay::SDKConnection::SDKConnection(QLocalSocket* socket, QObject* parent)
: QObject(parent)
{
m_socket = socket;
+
+ connect(m_socket, &QLocalSocket::disconnected, this, &SDKConnection::disconnected);
connect(m_socket, &QLocalSocket::readyRead, this, &SDKConnection::readyRead);
connect(m_socket, &QLocalSocket::errorOccurred, this, [](QLocalSocket::LocalSocketError socketError) {
qInfo() << "Localsocket error:" << socketError;
@@ -62,7 +64,7 @@ void ScreenPlay::SDKConnection::readyRead()
qCritical() << "Wallpaper type not found. Expected: " << ScreenPlayUtil::getAvailableTypes() << " got: " << msg;
}
- qInfo() << "[2/3] SDKConnection parsed with type: " << m_type << " connected with AppID:" << m_appID;
+ qInfo() << "[2/4] SDKConnection parsed with type: " << m_type << " connected with AppID:" << m_appID;
emit appConnected(this);
@@ -92,6 +94,10 @@ void ScreenPlay::SDKConnection::readyRead()
*/
bool ScreenPlay::SDKConnection::sendMessage(const QByteArray& message)
{
+ if (!m_socket) {
+ qWarning() << "Unable to write to unconnected socket wit message: " << message;
+ return false;
+ }
m_socket->write(message);
return m_socket->waitForBytesWritten();
}
@@ -102,28 +108,15 @@ bool ScreenPlay::SDKConnection::sendMessage(const QByteArray& message)
*/
bool ScreenPlay::SDKConnection::close()
{
+ if (!m_socket) {
+ qWarning() << "Cannot close invalid socket.";
+ return false;
+ }
qInfo() << "Close " << m_type << m_appID << m_socket->state();
+ m_socket->disconnectFromServer();
+ m_socket->close();
- QJsonObject obj;
- obj.insert("command", QJsonValue("quit"));
- QByteArray command = QJsonDocument(obj).toJson();
-
- m_socket->write(command);
- if (!m_socket->waitForBytesWritten()) {
- qWarning("Faild to send quit command to app");
- return false;
- }
-
- if (m_socket->state() == QLocalSocket::ConnectedState) {
- m_socket->disconnectFromServer();
- m_socket->close();
-
- qInfo() << "### Destroy APPID:\t " << m_appID << " State: " << m_socket->state();
- } else {
- qWarning() << "Cannot disconnect app " << m_appID << " with the state:" << m_socket->state();
- return false;
- }
- return true;
+ return m_socket->state() == QLocalSocket::UnconnectedState;
}
}
diff --git a/ScreenPlay/src/sdkconnection.h b/ScreenPlay/src/sdkconnection.h
index 74fbb572..bb576423 100644
--- a/ScreenPlay/src/sdkconnection.h
+++ b/ScreenPlay/src/sdkconnection.h
@@ -78,6 +78,7 @@ public:
QString type() const { return m_type; }
signals:
+ void disconnected();
void requestCloseAt(int at);
void appIDChanged(QString appID);
void monitorChanged(QVector monitor);
diff --git a/ScreenPlay/src/settings.h b/ScreenPlay/src/settings.h
index 0470eee3..00a43fa3 100644
--- a/ScreenPlay/src/settings.h
+++ b/ScreenPlay/src/settings.h
@@ -117,6 +117,7 @@ public:
enum class Language {
En_US,
De_DE,
+ Pl_PL,
It_IT,
Ru_RU,
Fr_FR,
diff --git a/ScreenPlay/src/wizards.cpp b/ScreenPlay/src/wizards.cpp
index 1ad9a541..149c2c2d 100644
--- a/ScreenPlay/src/wizards.cpp
+++ b/ScreenPlay/src/wizards.cpp
@@ -270,7 +270,7 @@ void Wizards::createGifWallpaper(
const QString& file,
const QVector& tags)
{
- QtConcurrent::run([=]() {
+ auto con = QtConcurrent::run([=]() {
std::optional folderName = createTemporaryFolder();
if (!folderName.has_value()) {
diff --git a/ScreenPlay/translations/ScreenPlay_.ts b/ScreenPlay/translations/ScreenPlay_.ts
index 9eb22bf4..53262709 100644
--- a/ScreenPlay/translations/ScreenPlay_.ts
+++ b/ScreenPlay/translations/ScreenPlay_.ts
@@ -70,10 +70,6 @@
-
-
-
-
@@ -82,6 +78,10 @@
+
+
+
+
CommunityNavItem
@@ -680,10 +680,6 @@
-
-
-
-
@@ -692,6 +688,10 @@
+
+
+
+
MonitorsProjectSettingItem
@@ -758,15 +758,29 @@
-
-
- NavigationWallpaperConfiguration
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1005,10 +1019,6 @@
-
-
-
-
@@ -1049,6 +1059,11 @@
+
+
+
+
SettingsExpander
diff --git a/ScreenPlay/translations/ScreenPlay_de_DE.qm b/ScreenPlay/translations/ScreenPlay_de_DE.qm
index 594f6bef..7cc595f4 100644
Binary files a/ScreenPlay/translations/ScreenPlay_de_DE.qm and b/ScreenPlay/translations/ScreenPlay_de_DE.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_de_DE.ts b/ScreenPlay/translations/ScreenPlay_de_DE.ts
index 7f845a5d..3b805295 100644
--- a/ScreenPlay/translations/ScreenPlay_de_DE.ts
+++ b/ScreenPlay/translations/ScreenPlay_de_DE.ts
@@ -70,10 +70,6 @@
Forum
-
-
- Fehler Liste
-
Beitragen
@@ -82,6 +78,10 @@
Steam Workshop
+
+
+
+
CommunityNavItem
@@ -488,98 +488,98 @@
Importh264Convert
- Analysiere Video...
+ AnalyseVideo...
- Erzeuge Vorschaubild...
+ Generating preview image...
- Erzeuge Vorschau-Miniaturbild...
+ Generating preview thumbnail image...
- Generiere ein 5-Sekunden-Vorschau-Video...
+ Generating 5 second preview video...
- Generiere Vorschau-Gif...
+ Generating preview gif...
- Konvertiere Audio...
+ Converting Audio...
- Video wird umgewandelt... Das kann etwas dauern!
+ Converting Video... This can take some time!
- Konvertieren nicht erfolgreich!
+ Converting Video ERROR!
- Analyse des Videos schlug Fehl!
+ Analyse Video ERROR!
- Importiere ein Video zu ein Wallpaper
+ Import a video to a wallpaper
- Generiere Vorschau-Video...
+ Generating preview video...
- Name (erforderlich!)
+ Name (required!)
- Beschreibung
+ Description
- YouTube-URL
+ Youtube URL
- Abbrechen
+ Abort
- Speichern
+ Save
- Speicher Wallpaper...
+ Save Wallpaper...
Importh264Init
-
+ Import a .mp4 video
-
+ ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.
-
+ Invalid file type. Must be valid h264 (*.mp4)!
-
+ Drop a *.mp4 file here or use 'Select file' below.
-
+ Open Documentation
- Datei auswählen
+ Select file
@@ -682,10 +682,6 @@ Bitte Konfiguriere deine Wallpaper noch erneut
Die Auswahl entfernen
-
-
- Entferne
-
Hintergründe
@@ -694,6 +690,10 @@ Bitte Konfiguriere deine Wallpaper noch erneut
Widgets
+
+
+
+
MonitorsProjectSettingItem
@@ -760,16 +760,31 @@ Bitte Konfiguriere deine Wallpaper noch erneut
Einstellungen
-
-
- NavigationWallpaperConfiguration
-
- Konfiguriere aktive Wallpaper oder Widgets
+
+ Mute/Unmute all Wallpaper
-
- Keine aktiven Wallpaper oder Widgets
+
+ Pause/Play all Wallpaper
+
+
+
+ Configure Wallpaper
+
+
+
+ Minimize to Tray
+
+
+
+ Exit
+
+
+
+ Are you sure you want to exit ScreenPlay?
+This will shut down all Wallpaper and Widgets.
@@ -1007,10 +1022,6 @@ Bitte Konfiguriere deine Wallpaper noch erneut
Version
-
-
- ScreenPlay-Build-Version
-
Changelog öffnen
@@ -1051,6 +1062,12 @@ Bitte Konfiguriere deine Wallpaper noch erneut
Datenschutz
+
+
+ ScreenPlay Build Version
+
+
SettingsExpander
@@ -1067,15 +1084,15 @@ Bitte Konfiguriere deine Wallpaper noch erneut
-
+ Video Import h264 (.mp4)
-
+ Video Import VP8 & VP9 (.webm)
-
+ Video import (all types)
@@ -1182,11 +1199,11 @@ Bitte Konfiguriere deine Wallpaper noch erneut
StartInfo
-
+ Free tools to help you to create wallpaper
-
+ Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!
@@ -1577,7 +1594,7 @@ Bitte Konfiguriere deine Wallpaper noch erneut
-
+ Password Required To Kick Session
diff --git a/ScreenPlay/translations/ScreenPlay_es_ES.qm b/ScreenPlay/translations/ScreenPlay_es_ES.qm
index d697ae06..85df5d45 100644
Binary files a/ScreenPlay/translations/ScreenPlay_es_ES.qm and b/ScreenPlay/translations/ScreenPlay_es_ES.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_es_ES.ts b/ScreenPlay/translations/ScreenPlay_es_ES.ts
index 56f5997d..f88433fd 100644
--- a/ScreenPlay/translations/ScreenPlay_es_ES.ts
+++ b/ScreenPlay/translations/ScreenPlay_es_ES.ts
@@ -5,15 +5,15 @@
ColorPicker
- Red
+ Rojo
- Green
+ Verde
- Blue
+ Azul
@@ -45,7 +45,7 @@
- V:
+ V:
@@ -60,7 +60,7 @@
Community
- News
+ Noticias
@@ -68,33 +68,33 @@
- Forum
-
-
-
- Issue List
+ Foro
- Contribute
+ Contribuir
Steam Workshop
+
+
+
+
CommunityNavItem
- Open in browser
+ Abrir en el navegador
CreateWallpaperInit
- Import any video type
+ Importar cualquier tipo de vídeo
- Set your preffered video codec:
+ Establezca su códec de vídeo predeterminado:
- Quality slider. Lower value means better quality.
+ Deslizador de calidad. Un valor más bajo significa una mejor calidad.
- Open Documentation
+ Abrir documentación
- Select file
+ Seleccionar archivo
@@ -164,7 +164,7 @@
- Converting Video... This can take some time!
+ Convirtiendo vídeo... ¡Esto puede tardar un poco!
@@ -192,7 +192,7 @@
- Youtube URL
+ URL de YouTube
@@ -200,7 +200,7 @@
- Save
+ Guardar
@@ -215,7 +215,7 @@
- Playback rate
+ Velocidad de reproducción
@@ -292,7 +292,7 @@
- General
+ General
@@ -300,11 +300,11 @@
- Created By
+ Creado por
- Tags
+ Etiquetas
@@ -315,11 +315,11 @@
- General
+ General
- Wallpaper name
+ Nombre del fondo
@@ -335,14 +335,14 @@
- Preview Image
+ Imagen de previsualización
HTMLWidget
- Create a HTML widget
+ Crear un widget HTML
@@ -350,7 +350,7 @@
- Widget name
+ Nombre del widget
@@ -451,7 +451,7 @@
- Save
+ Guardar
@@ -462,7 +462,7 @@
ImportWebmInit
- Import a .webm video
+ Importar un vídeo .webm
@@ -509,7 +509,7 @@
-
+ Converting Audio...
@@ -533,11 +533,11 @@
-
+ Name (required!)
-
+ Description
@@ -545,7 +545,7 @@
-
+ Abort
@@ -560,19 +560,19 @@
Importh264Init
-
+ Import a .mp4 video
-
+ ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.
-
+ Invalid file type. Must be valid h264 (*.mp4)!
-
+ Drop a *.mp4 file here or use 'Select file' below.
@@ -637,7 +637,7 @@
LicenseSelector
- License
+ Licencia
@@ -683,10 +683,6 @@
Remove selected
-
-
- Remove
-
Wallpapers
@@ -695,6 +691,10 @@
Widgets
+
+
+
+
MonitorsProjectSettingItem
@@ -761,16 +761,31 @@
Settings
-
-
- NavigationWallpaperConfiguration
-
- Configurate active Wallpaper or Widgets
+
+ Mute/Unmute all Wallpaper
-
- No active Wallpaper or Widgets
+
+ Pause/Play all Wallpaper
+
+
+
+ Configure Wallpaper
+
+
+
+ Minimize to Tray
+
+
+
+ Exit
+
+
+
+ Are you sure you want to exit ScreenPlay?
+This will shut down all Wallpaper and Widgets.
@@ -1008,10 +1023,6 @@
Version
-
-
- ScreenPlay Build Version
-
Open Changelog
@@ -1052,6 +1063,12 @@
Privacy
+
+
+ ScreenPlay Build Version
+
+
SettingsExpander
@@ -1068,15 +1085,15 @@
-
+ Video Import h264 (.mp4)
-
+ Video Import VP8 & VP9 (.webm)
-
+ Video import (all types)
@@ -1183,11 +1200,11 @@
StartInfo
-
+ Free tools to help you to create wallpaper
-
+ Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!
@@ -1578,7 +1595,7 @@
-
+ Password Required To Kick Session
diff --git a/ScreenPlay/translations/ScreenPlay_fr_FR.qm b/ScreenPlay/translations/ScreenPlay_fr_FR.qm
index 4049870a..9946b2d0 100644
Binary files a/ScreenPlay/translations/ScreenPlay_fr_FR.qm and b/ScreenPlay/translations/ScreenPlay_fr_FR.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_fr_FR.ts b/ScreenPlay/translations/ScreenPlay_fr_FR.ts
index f12e7b69..34bb32ef 100644
--- a/ScreenPlay/translations/ScreenPlay_fr_FR.ts
+++ b/ScreenPlay/translations/ScreenPlay_fr_FR.ts
@@ -21,7 +21,7 @@
- HSV
+ TSV
@@ -70,10 +70,6 @@
Forum
-
-
- Liste des problèmes
-
Contribuer
@@ -82,6 +78,10 @@
Steam Workshop
+
+
+
+
CommunityNavItem
@@ -265,15 +265,15 @@
Forum
- Download Wallpaper and Widgets from our forums manually. If you want to download Steam Workshop content you have to install ScreenPlay via Steam.
+ Téléchargez manuellement des fond d'écran et des widgets depuis notre forum. Si vous voulez télécharger du contenu Steam Workshop, vous devez installer ScreenPlay via Steam.
- Install Steam Version
+ Installer la version Steam
- Open In Browser
+ Ouvrir dans le navigateur
@@ -365,7 +365,7 @@
HeadlineSection
- Headline Section
+ Section de titre
@@ -427,7 +427,7 @@
- Import a video to a wallpaper
+ Convertir une vidéo en fond d'écran
@@ -466,15 +466,15 @@
- When importing webm we can skip the long conversion. When you get unsatisfying results with the ScreenPlay importer from 'ideo import and convert (all types)' you can also convert via the free and open source HandBrake!
+ Lors de l'importation de webm, vous pouvez ignorer l'étape de conversion. Lorsque vous obtenez des résultats insatisfaisants avec l'importateur de ScreenPlay via 'import et conversion de vidéo (tous types)' vous pouvez convertir au format webm via le logiciel HandBrake. Il est gratuit et open source!
- Invalid file type. Must be valid VP8 or VP9 (*.webm)!
+ Type de fichier invalide. Doit être un VP8 ou VP9 (*.webm)!
- Drop a *.webm file here or use 'Select file' below.
+ Déposez un fichier *.webm ici ou utilisez 'Sélectionner un fichier' ci-dessous.
@@ -489,39 +489,39 @@
Importh264Convert
- AnalyseVidéo...
+ AnalyseVideo...
- Génération de l'image d'aperçu...
+ Generating preview image...
- Génération de la miniature de l’aperçu...
+ Generating preview thumbnail image...
- Génération d’une vidéo d’aperçu de 5 secondes...
+ Generating 5 second preview video...
-
+ Generating preview gif...
- Conversion de l’audio...
+ Converting Audio...
-
+ Converting Video... This can take some time!
-
+ Converting Video ERROR!
- Erreur d'Analyse Vidéo !
+ Analyse Video ERROR!
@@ -529,11 +529,11 @@
- Génération de la vidéo d'aperçu...
+ Generating preview video...
- Nom (requis!)
+ Name (required!)
@@ -541,46 +541,46 @@
- URL Youtube
+ Youtube URL
-
+ Abort
-
+ Save
- Enregistrer le fond d'écran
+ Save Wallpaper...
Importh264Init
-
+ Import a .mp4 video
-
+ ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.
-
+ Invalid file type. Must be valid h264 (*.mp4)!
-
+ Drop a *.mp4 file here or use 'Select file' below.
- Ouvrir la documentation
+ Open Documentation
- Sélectionner un fichier
+ Select file
@@ -595,7 +595,7 @@
- Pull to refresh!
+ Faire glisser pour actualiser!
@@ -645,7 +645,7 @@
- You grant other to remix your work and change the license to their liking.
+ Vous permettez aux autres utilisateurs de réutiliser et altérer votre travail et de changer la licence selon leur souhait.
@@ -657,7 +657,7 @@
- You grant other to remix your work but it must remain under the GPLv3. We recommend this license for all code wallpaper!
+ Vous permettez aux autres utilisateurs de réutiliser et altérer votre travail, mais il doit rester sous licence GPLv3. Nous recommandons cette licence pour tout les fonds d'écrans codé.
@@ -669,224 +669,239 @@
- Your monitor setup changed!
- Please configure your wallpaper again.
+ La configuration de votre écran a changé!
+ Veuillez configurer votre fond d'écran à nouveau.
Monitors
- Wallpaper Configuration
+ Configuration du fond d'écran
- Remove selected
-
-
-
- Remove
+ Retirer l'écran sélectionné
- Wallpapers
+ Fonds d’écran
- Widgets
+ Widgets
+
+
+
+
MonitorsProjectSettingItem
- Set color
+ Définir la couleur
- Please choose a color
+ Veuillez choisir une couleur
Navigation
- All
+ Tout
- Scenes
+ Scènes
- Videos
+ Vidéos
- Widgets
+ Widgets
- Install Date Ascending
+ Date d'installation croissante
- Install Date Descending
+ Date d'installation décroissante
- Subscribed items:
+ Éléments souscrits :
- Upload to the Steam Workshop
+ Uploader sur le Steam Workshop
- Create
+ Créer
- Workshop
+ Workshop
- Installed
+ Installé
- Community
+ Communauté
- Settings
-
-
-
- NavigationWallpaperConfiguration
-
-
- Configurate active Wallpaper or Widgets
+ Paramètres
-
- No active Wallpaper or Widgets
+
+ Mute/Unmute all Wallpaper
+
+
+
+ Pause/Play all Wallpaper
+
+
+
+ Configure Wallpaper
+
+
+
+ Minimize to Tray
+
+
+
+ Exit
+
+
+
+ Are you sure you want to exit ScreenPlay?
+This will shut down all Wallpaper and Widgets.
PopupOffline
- You need to run Steam for this. steamErrorRestart: %1 - steamErrorAPIInit: %2
+ Vous devez exécuter Steam pour cela. steamErrorRestart: %1 - steamErrorAPIInit: %2
- Back
+ Précédent
PopupSteamWorkshopAgreement
- You Need to Agree To The Steam Subscriber Agreement First
+ Vous devez d'abord accepter l'Accord de Souscription Steam
- REQUIRES INTERNET CONNECTION AND FREE STEAM ACCOUNT TO ACTIVATE. Notice: Product offered subject to your acceptance of the Steam Subscriber Agreement (SSA). You must activate this product via the Internet by registering for a Steam account and accepting the SSA. Please see https://store.steampowered.com/subscriber_agreement/ to view the SSA prior to purchase. If you do not agree with the provisions of the SSA, you should return this game unopened to your retailer in accordance with their return policy.
+ REQUIÈRE UNE CONNEXION INTERNET ET UN COMPTE STEAM GRATUIT POUR L'ACTIVATION. Avertissement: Produit offert sous réserve de votre acceptation de l'Accord de Souscription Steam (ASS). Vous devez activer ce produit via Internet en vous enregistrant sur un compte Steam et en acceptant l'ASS. Veuillez consulter https://store.steampowered.com/subscriber_agreement/ pour consulter l'ASS avant l'achat. Si vous n'êtes pas d'accord avec les dispositions de l'ASS, vous devriez retourner ce jeu non ouvert à votre détaillant conformément à leur politique de retour.
- View The Steam Subscriber Agreement
+ Voir l'Accord de Souscription Steam
- Accept Steam Workshop Agreement
+ Accepter l'Accord de Souscription Steam
QMLWallpaper
- Create a QML Wallpaper
+ Créer un fond d'écran QML
- General
+ Général
- Wallpaper name
+ Nom du fond d'écran
- Created By
+ Créé par
- Description
+ Description
- License & Tags
+ Licence & Tags
- Preview Image
+ Image d'aperçu
QMLWidget
- Create a QML widget
+ Créer un widget QML
- General
+ Général
- Widget name
+ Nom du Widget
- Created by
+ Créé par
- Tags
+ Tags
SaveNotification
- Profile saved successfully!
+ Profil enregistré avec succès!
ScreenPlayItem
- NEW
+ NOUVEAU
Search
- Search for Wallpaper & Widgets
+ Recherche de fond d'écran et de widgets
Settings
- General
+ Général
- Autostart
+ Démarrage automatique
@@ -1008,10 +1023,6 @@
Version
-
-
- ScreenPlay Build Version
-
Open Changelog
@@ -1034,30 +1045,36 @@
- If your ScreenPlay missbehaves this is a good way to look for answers. This shows all logs and warning during runtime.
+ Si ScreenPlay ne fonctionne pas correctement, c'est une bonne façon de chercher des réponses. Cela montre tous les logs et les avertissements émis pendant l'exécution.
- Show Logs
+ Afficher les logs
- Data Protection
+ Protection des données
- We use you data very carefully to improve ScreenPlay. We do not sell or share this (anonymous) information with others!
+ Nous utilisons vos données exclusivement pour améliorer ScreenPlay. Nous ne vendons pas ou ne partageons pas ces données (anonyme) avec d'autres !
- Privacy
+ Confidentialité
+
+
+
+ ScreenPlay Build Version
+
SettingsExpander
- Copy text to clipboard
+ Copier le texte dans le presse-papiers
@@ -1068,47 +1085,47 @@
-
+ Video Import h264 (.mp4)
-
+ Video Import VP8 & VP9 (.webm)
-
+ Video import (all types)
- GIF Wallpaper
+ Fond d'écran GIF
- QML Wallpaper
+ Fond d'écran QML
- HTML5 Wallpaper
+ Fond d'écran HTML5
- Website Wallpaper
+ Fond d'écran Site web
- QML Widget
+ Widget QML
- HTML Widget
+ Widget HTML
- Set Wallpaper
+ Définir le fond d'écran
- Set Widget
+ Définir le Widget
@@ -1116,139 +1133,139 @@
- Select a Monitor to display the content
+ Sélectionnez un écran pour afficher le contenu
- Set Volume
+ Régler le volume
- Fill Mode
+ Mode de remplissage
- Stretch
+ Étirer
- Fill
+ Remplir
- Contain
+ Contenir
- Cover
+ Couvrir
- Scale-Down
+ Réduire
- Size:
+ Taille :
- No description...
+ Pas de description ...
- Click here if you like the content
+ Cliquez ici si vous aimez le contenu
- Click here if you do not like the content
+ Cliquez ici si vous n'aimez pas le contenu
- Subscribtions:
+ Abonnements :
- Open In Steam
+ Ouvrir dans Steam
- Subscribed!
+ Abonné!
- Subscribe
+ S'abonner
StartInfo
-
+ Free tools to help you to create wallpaper
-
+ Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!
SteamNotAvailable
- Could not load steam integration!
+ Impossible de charger l'intégration Steam!
SteamProfile
- Back
+ Précédent
- Forward
+ Suivant
SteamWorkshopStartPage
- Loading
+ Chargement
- Download now!
+ Télécharger maintenant!
- Downloading...
+ Téléchargement...
- Details
+ Détails
- Open In Steam
+ Ouvrir dans Steam
- Profile
+ Profil
- Upload
+ Uploader
- Search for Wallpaper and Widgets...
+ Recherche de fond d'écran et de widgets...
- Open Workshop in Steam
+ Ouvrir le Workshop dans Steam
- Ranked By Vote
+ Classé par vote
@@ -1578,7 +1595,7 @@
-
+ Password Required To Kick Session
diff --git a/ScreenPlay/translations/ScreenPlay_it_IT.qm b/ScreenPlay/translations/ScreenPlay_it_IT.qm
index 5c81ce55..f42c72da 100644
Binary files a/ScreenPlay/translations/ScreenPlay_it_IT.qm and b/ScreenPlay/translations/ScreenPlay_it_IT.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_it_IT.ts b/ScreenPlay/translations/ScreenPlay_it_IT.ts
index 4c071d37..3e968092 100644
--- a/ScreenPlay/translations/ScreenPlay_it_IT.ts
+++ b/ScreenPlay/translations/ScreenPlay_it_IT.ts
@@ -70,10 +70,6 @@
Forum
-
-
- Lista Problemi
-
Contribuisci
@@ -82,6 +78,10 @@
Steam Workshop
+
+
+
+
CommunityNavItem
@@ -489,98 +489,98 @@
Importh264Convert
- Analizza Video...
+ AnalyseVideo...
-
+ Generating preview image...
- Generazione miniatura di anteprima...
+ Generating preview thumbnail image...
- Generazione anteprima video di 5 secondi...
+ Generating 5 second preview video...
- Generazione gif di anteprima...
+ Generating preview gif...
- Conversione Audio...
+ Converting Audio...
- Conversione Video... Potrebbe richiedere un po' di tempo!
+ Converting Video... This can take some time!
- Conversione Video ERRORE!
+ Converting Video ERROR!
- Analisi Video ERRORE!
+ Analyse Video ERROR!
- Importa un video in uno sfondo
+ Import a video to a wallpaper
- Generazione video di anteprima...
+ Generating preview video...
- Nome (obbligatorio)
+ Name (required!)
- Descrizione
+ Description
- URL Youtube
+ Youtube URL
- Interrompi
+ Abort
- Salva
+ Save
- Salva sfondo...
+ Save Wallpaper...
Importh264Init
-
+ Import a .mp4 video
-
+ ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.
-
+ Invalid file type. Must be valid h264 (*.mp4)!
-
+ Drop a *.mp4 file here or use 'Select file' below.
- Apri documentazione
+ Open Documentation
- Seleziona file
+ Select file
@@ -683,10 +683,6 @@
Rimuovi selezionati
-
-
- Rimuovi
-
Sfondi
@@ -695,6 +691,10 @@
Widgets
+
+
+
+
MonitorsProjectSettingItem
@@ -761,16 +761,31 @@
Impostazioni
-
-
- NavigationWallpaperConfiguration
-
- Configura Sfondi o Widgets attivi
+
+ Mute/Unmute all Wallpaper
-
- Nessuno Sfondo o Widget attivi
+
+ Pause/Play all Wallpaper
+
+
+
+ Configure Wallpaper
+
+
+
+ Minimize to Tray
+
+
+
+ Exit
+
+
+
+ Are you sure you want to exit ScreenPlay?
+This will shut down all Wallpaper and Widgets.
@@ -1008,10 +1023,6 @@
Versione
-
-
- Versione Build di ScreenPlay
-
Apri Changelog
@@ -1052,6 +1063,12 @@
Privacy
+
+
+ ScreenPlay Build Version
+
+
SettingsExpander
@@ -1068,15 +1085,15 @@
-
+ Video Import h264 (.mp4)
-
+ Video Import VP8 & VP9 (.webm)
-
+ Video import (all types)
@@ -1183,11 +1200,11 @@
StartInfo
-
+ Free tools to help you to create wallpaper
-
+ Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!
@@ -1578,7 +1595,7 @@
-
+ Password Required To Kick Session
diff --git a/ScreenPlay/translations/ScreenPlay_ko_KR.qm b/ScreenPlay/translations/ScreenPlay_ko_KR.qm
index 892b2a8a..9b62f8a8 100644
Binary files a/ScreenPlay/translations/ScreenPlay_ko_KR.qm and b/ScreenPlay/translations/ScreenPlay_ko_KR.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_ko_KR.ts b/ScreenPlay/translations/ScreenPlay_ko_KR.ts
index 93437fca..1b1daaed 100644
--- a/ScreenPlay/translations/ScreenPlay_ko_KR.ts
+++ b/ScreenPlay/translations/ScreenPlay_ko_KR.ts
@@ -70,10 +70,6 @@
게시판
-
-
- 이슈 목록
-
Contribute
@@ -82,6 +78,10 @@
스팀 창작마당
+
+
+
+
CommunityNavItem
@@ -493,27 +493,27 @@
-
+ Generating preview image...
-
+ Generating preview thumbnail image...
-
+ Generating 5 second preview video...
-
+ Generating preview gif...
-
+ Converting Audio...
-
+ Converting Video... This can take some time!
@@ -541,15 +541,15 @@
-
+ Youtube URL
-
+ Abort
-
+ Save
@@ -560,27 +560,27 @@
Importh264Init
-
+ Import a .mp4 video
-
+ ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.
-
+ Invalid file type. Must be valid h264 (*.mp4)!
-
+ Drop a *.mp4 file here or use 'Select file' below.
- 문서 열기
+ Open Documentation
- 파일 선택
+ Select file
@@ -683,10 +683,6 @@
Remove selected
-
-
- Remove
-
Wallpapers
@@ -695,6 +691,10 @@
Widgets
+
+
+
+
MonitorsProjectSettingItem
@@ -761,16 +761,31 @@
Settings
-
-
- NavigationWallpaperConfiguration
-
- Configurate active Wallpaper or Widgets
+
+ Mute/Unmute all Wallpaper
-
- No active Wallpaper or Widgets
+
+ Pause/Play all Wallpaper
+
+
+
+ Configure Wallpaper
+
+
+
+ Minimize to Tray
+
+
+
+ Exit
+
+
+
+ Are you sure you want to exit ScreenPlay?
+This will shut down all Wallpaper and Widgets.
@@ -1008,10 +1023,6 @@
Version
-
-
- ScreenPlay Build Version
-
Open Changelog
@@ -1052,6 +1063,12 @@
Privacy
+
+
+ ScreenPlay Build Version
+
+
SettingsExpander
@@ -1068,15 +1085,15 @@
-
+ Video Import h264 (.mp4)
-
+ Video Import VP8 & VP9 (.webm)
-
+ Video import (all types)
@@ -1183,11 +1200,11 @@
StartInfo
-
+ Free tools to help you to create wallpaper
-
+ Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!
@@ -1578,7 +1595,7 @@
-
+ Password Required To Kick Session
diff --git a/ScreenPlay/translations/ScreenPlay_nl_NL.qm b/ScreenPlay/translations/ScreenPlay_nl_NL.qm
index 77cc5214..3775ad60 100644
Binary files a/ScreenPlay/translations/ScreenPlay_nl_NL.qm and b/ScreenPlay/translations/ScreenPlay_nl_NL.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_nl_NL.ts b/ScreenPlay/translations/ScreenPlay_nl_NL.ts
index 9fc355c1..ee9c10dd 100644
--- a/ScreenPlay/translations/ScreenPlay_nl_NL.ts
+++ b/ScreenPlay/translations/ScreenPlay_nl_NL.ts
@@ -70,10 +70,6 @@
Forum
-
-
- Probleem lijst
-
Bijdragen
@@ -82,6 +78,10 @@
Steam Workshop
+
+
+
+
CommunityNavItem
@@ -110,7 +110,7 @@
- Quality slider. Lower value means better quality.
+ Kwaliteit schuifregelaar. Lagere waarde betekent betere kwaliteit.
@@ -118,18 +118,18 @@
- Select file
+ Selecteer bestand
CreateWallpaperResult
- An error occurred!
+ Er is een fout opgetreden!
- Copy text to clipboard
+ Kopieer tekst naar klembord
@@ -144,94 +144,94 @@
- Generating preview image...
+ Voorbeeld afbeelding aan het genereren...
- Generating preview thumbnail image...
+ Voorbeeld miniatuurafbeelding aan het genereren...
- Generating 5 second preview video...
+ 5 seconden voorbeeldvideo aan het genereren...
- Generating preview gif...
+ Voorbeeld gif aan het genereren...
- Converting Audio...
+ Audio aan het converteren...
- Converting Video... This can take some time!
+ Video aan het converteren... Dit kan even duren!
- Converting Video ERROR!
+ Video Converteren FOUT!
- Analyse Video ERROR!
+ Video Analyse FOUT!
- Convert a video to a wallpaper
+ Converteer een video naar een achtergrond
- Generating preview video...
+ Voorbeeldvideo aan het genereren...
- Name (required!)
+ Naam (verplicht!)
- Description
+ Beschrijving
- Youtube URL
+ Youtube URL
- Abort
+ Breek af
- Save
+ Sla op
- Save Wallpaper...
+ Sla achtergrond op...
DefaultVideoControls
- Volume
+ Volume
- Playback rate
+ Afspeelsnelheid
- Current Video Time
+ Huidige Videotijd
- Fill Mode
+ Vulmodus
- Stretch
+ Rek uit
- Fill
+ Vul
@@ -239,26 +239,26 @@
- Cover
+ Dek
- Scale_Down
+ Schaal_Omlaag
FileSelector
- Clear
+ Wis
- Select File
+ Selecteer bestand
- Please choose a file
+ Kies een bestand
@@ -300,42 +300,42 @@
- Created By
+ Gemaakt door
- Tags
+ Tags
HTMLWallpaper
- Create a HTML Wallpaper
+ Maak een HTML Achtergrond
- General
+ Algemeen
- Wallpaper name
+ Achtergrond naam
- Created By
+ Gemaakt door
- Description
+ Beschrijving
- License & Tags
+ Licentie & Tags
- Preview Image
+ Voorbeeldafbeelding
@@ -560,23 +560,23 @@
Importh264Init
-
+ Import a .mp4 video
-
+ ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.
-
+ Invalid file type. Must be valid h264 (*.mp4)!
-
+ Drop a *.mp4 file here or use 'Select file' below.
-
+ Open Documentation
@@ -683,10 +683,6 @@
Remove selected
-
-
- Remove
-
Wallpapers
@@ -695,6 +691,10 @@
Widgets
+
+
+
+
MonitorsProjectSettingItem
@@ -761,16 +761,31 @@
Settings
-
-
- NavigationWallpaperConfiguration
-
- Configurate active Wallpaper or Widgets
+
+ Mute/Unmute all Wallpaper
-
- No active Wallpaper or Widgets
+
+ Pause/Play all Wallpaper
+
+
+
+ Configure Wallpaper
+
+
+
+ Minimize to Tray
+
+
+
+ Exit
+
+
+
+ Are you sure you want to exit ScreenPlay?
+This will shut down all Wallpaper and Widgets.
@@ -1008,10 +1023,6 @@
Version
-
-
- ScreenPlay Build Version
-
Open Changelog
@@ -1052,6 +1063,12 @@
Privacy
+
+
+ ScreenPlay Build Version
+
+
SettingsExpander
@@ -1068,15 +1085,15 @@
-
+ Video Import h264 (.mp4)
-
+ Video Import VP8 & VP9 (.webm)
-
+ Video import (all types)
@@ -1183,11 +1200,11 @@
StartInfo
-
+ Free tools to help you to create wallpaper
-
+ Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!
@@ -1578,7 +1595,7 @@
-
+ Password Required To Kick Session
diff --git a/ScreenPlay/translations/ScreenPlay_pl_PL.qm b/ScreenPlay/translations/ScreenPlay_pl_PL.qm
new file mode 100644
index 00000000..d00fbca8
Binary files /dev/null and b/ScreenPlay/translations/ScreenPlay_pl_PL.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_pl_PL.ts b/ScreenPlay/translations/ScreenPlay_pl_PL.ts
new file mode 100644
index 00000000..60a26e2d
--- /dev/null
+++ b/ScreenPlay/translations/ScreenPlay_pl_PL.ts
@@ -0,0 +1,1937 @@
+
+
+
+
+ ColorPicker
+
+
+ Czerwony
+
+
+
+ Zielony
+
+
+
+ Niebieski
+
+
+
+ RGB
+
+
+
+ HSV
+
+
+
+ R:
+
+
+
+ G:
+
+
+
+ B:
+
+
+
+ H:
+
+
+
+ S:
+
+
+
+ V:
+
+
+
+ Alfa:
+
+
+
+ #
+
+
+
+ Community
+
+
+ Aktualności
+
+
+
+ Wiki
+
+
+
+ Forum
+
+
+
+ Udziel się
+
+
+
+ Warsztat Steam
+
+
+
+
+
+
+
+ CommunityNavItem
+
+
+ Otwórz w przeglądarce
+
+
+
+ CreateWallpaperInit
+
+
+ Importuj dowolny typ filmu
+
+
+
+ W zależności od konfiguracji Twojego urządzenia zalecamy przekonwertować tapetę do konkretnego kodeka wideo. Jeśli wydajność jest słaba w obu przypadkach, możesz wypróbować tapetę QML! Wspierane są następujące formaty wideo:
+
+*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv
+
+
+
+ Ustaw preferowany kodek wideo:
+
+
+
+ Suwak jakości. Mniejsza wartość oznacza lepszą jakość.
+
+
+
+ Otwórz dokumentację
+
+
+
+ Wybierz plik
+
+
+
+ CreateWallpaperResult
+
+
+ Wystąpił błąd!
+
+
+
+ Skopiuj tekst do schowka
+
+
+
+ Wróć do tworzenia i wyślij raport o błędzie!
+
+
+
+ CreateWallpaperVideoImportConvert
+
+
+
+
+
+
+ Generowanie obrazu podglądu...
+
+
+
+ Generowanie miniaturki podglądu...
+
+
+
+ Generowanie 5-sekundowego podglądu wideo...
+
+
+
+ Generowanie podglądu gif...
+
+
+
+ Konwertowanie dźwięku...
+
+
+
+ Konwertowanie wideo... Może to zająć trochę czasu!
+
+
+
+ BŁĄD konwertowania wideo!
+
+
+
+ BŁĄD analizowania filmu!
+
+
+
+ Konwertuj film na tapetę
+
+
+
+ Generowanie podglądu wideo...
+
+
+
+ Nazwa (wymagane!)
+
+
+
+ Opis
+
+
+
+ Adres URL YouTube
+
+
+
+ Przerwij
+
+
+
+ Zapisz
+
+
+
+ Zapisz tapetę...
+
+
+
+ DefaultVideoControls
+
+
+ Głośność
+
+
+
+ Prędkość odtwarzania
+
+
+
+ Moment filmu
+
+
+
+ Fill Mode
+
+
+
+ Rozciągnięcie
+
+
+
+ Wypełnij
+
+
+
+ Contain
+
+
+
+ Cover
+
+
+
+ Scale_Down
+
+
+
+ FileSelector
+
+
+ Wyczyść
+
+
+
+ Wybierz plik
+
+
+
+ Należy wybrać plik
+
+
+
+ Forum
+
+
+ Pobierz ręcznie tapety i widżety z naszego forum. Jeśli chcesz pobierać treści z Warsztatu Steam, należy zainstalować ScreenPlay przez Steam.
+
+
+
+ Zainstaluj wersję Steam
+
+
+
+ Otwórz w przeglądarce
+
+
+
+ GifWallpaper
+
+
+ Importuj tapetę Gif
+
+
+
+ Przeciągnij tutaj plik *.gif lub naciśnij 'Wybierz plik'.
+
+
+
+ Wybierz swój gif
+
+
+
+ Ogólne
+
+
+
+ Nazwa tapety
+
+
+
+ Utworzone przez
+
+
+
+ Znaczniki
+
+
+
+ HTMLWallpaper
+
+
+ Utwórz tapetę HTML
+
+
+
+ Ogólne
+
+
+
+ Nazwa tapety
+
+
+
+ Utworzone przez
+
+
+
+ Opis
+
+
+
+ Licencja i znaczniki
+
+
+
+ Obraz podglądu
+
+
+
+ HTMLWidget
+
+
+ Utwórz widżet HTML
+
+
+
+ Ogólne
+
+
+
+ Nazwa widżetu
+
+
+
+ Utworzone przez
+
+
+
+ Znaczniki
+
+
+
+ HeadlineSection
+
+
+ Sekcja nagłówka
+
+
+
+ ImageSelector
+
+
+ Ustaw swój obraz podglądu
+
+
+
+ Wyczyść
+
+
+
+ Wybierz obraz podglądu
+
+
+
+ ImportWebmConvert
+
+
+
+
+
+
+ Analizowanie filmu...
+
+
+
+ Generowanie obrazu podglądu...
+
+
+
+ Generowanie miniaturki podglądu...
+
+
+
+ Generowanie 5-sekundowego podglądu wideo...
+
+
+
+ Generowanie podglądu gif...
+
+
+
+ Konwertowanie dźwięku...
+
+
+
+ Konwertowanie wideo... Może to zająć trochę czasu!
+
+
+
+ BŁĄD konwertowania wideo!
+
+
+
+ BŁĄD analizowania filmu!
+
+
+
+ Importowanie filmu jako tapetę
+
+
+
+ Generowanie podglądu wideo...
+
+
+
+ Nazwa (wymagane!)
+
+
+
+ Opis
+
+
+
+ Adres URL YouTube
+
+
+
+ Przerwij
+
+
+
+ Zapisz
+
+
+
+ Zapisz tapetę...
+
+
+
+ ImportWebmInit
+
+
+ Importuj film .webm
+
+
+
+ Importowanie pliku webm pozwala na ominięcie czasochłonnej konwersji. Jeśli rezultat importera ScreenPlay po użyciu opcji 'importuj i konwertuj film (dowolny typ)' nie będzie dla Ciebie satysfakcjonujący, możesz przekonwertować film korzystając z bezpłatnego programu o otwartym źródle o nazwie HandBrake!
+
+
+
+ Nieprawidłowy typ pliku. Należy wybrać plik VP8 lub VP9 (*.webm)!
+
+
+
+ Przeciągnij tutaj plik *.webm lub naciśnij 'Wybierz plik'.
+
+
+
+ Otwórz dokumentację
+
+
+
+ Wybierz plik
+
+
+
+ Importh264Convert
+
+
+ Analizowanie filmu...
+
+
+
+ Generowanie obrazu podglądu...
+
+
+
+ Generowanie miniaturki podglądu...
+
+
+
+ Generowanie 5-sekundowego podglądu wideo...
+
+
+
+ Generowanie podglądu gif...
+
+
+
+ Konwertowanie dźwięku...
+
+
+
+ Konwertowanie wideo... Może to zająć trochę czasu!
+
+
+
+ BŁĄD konwertowania wideo!
+
+
+
+ BŁĄD analizowania filmu!
+
+
+
+ Importowanie filmu jako tapetę
+
+
+
+ Generowanie podglądu wideo...
+
+
+
+ Nazwa (wymagane!)
+
+
+
+ Opis
+
+
+
+ Adres URL YouTube
+
+
+
+ Przerwij
+
+
+
+ Zapisz
+
+
+
+ Zapisz tapetę...
+
+
+
+ Importh264Init
+
+
+ Importuj film .mp4
+
+
+
+ ScreenPlay V0.15 i nowsze mogą odtwarzać pliki *.mp4 (znane również jako h264). Może to poprawić wydajność na starszych systemach.
+
+
+
+ Nieprawidłowy typ pliku. Należy użyć prawidłowy plik h264 (*.mp4)!
+
+
+
+ Przeciągnij tutaj plik *.mp4 lub naciśnij 'Wybierz plik'.
+
+
+
+ Otwórz dokumentację
+
+
+
+ Wybierz plik
+
+
+
+ Installed
+
+
+
+
+
+
+ Odświeżanie!
+
+
+
+ Przesuń, aby odświeżyć!
+
+
+
+ Więcej tapet oraz widżetów dostępne przez Warsztat Steam!
+
+
+
+ Otwórz lokalizację pliku
+
+
+
+ Usuń element
+
+
+
+ Usuń poprzez Warsztat
+
+
+
+ Otwórz stronę Warsztatu
+
+
+
+ Czy na pewno chcesz usunąć ten element?
+
+
+
+ InstalledWelcomeScreen
+
+
+ Uzyskaj bezpłatne widżety i tapety poprzez Warsztat Steam
+
+
+
+ Przeglądaj Warsztat Steam
+
+
+
+ LicenseSelector
+
+
+ Licencja
+
+
+
+ Udostępnianie — możesz kopiować i rozpowszechniać ten materiał w dowolnym formacie na dowolnym nośniku danych. Dostosowywanie — możesz poprawiać, przekształcać oraz używać tego materiału jako bazy pod inne prace w dowolnym celu, nawet komercyjnie.
+
+
+
+ Pozwalasz innym osobom na przekształcanie Twojej treści oraz zmienianie licencji w razie potrzeby.
+
+
+
+ Udostępnianie — możesz kopiować i rozpowszechniać ten materiał w dowolnym formacie na dowolnym nośniku danych. Dostosowywanie — możesz poprawiać, przekształcać oraz używać tego materiału jako bazy pod inne prace. Nie możesz używać tego materiału komercyjnie!
+
+
+
+ Pozwalasz każdemu robić cokolwiek chce z Twoją treścią.
+
+
+
+ Pozwalasz innym osobom na przekształcanie Twojej treści, ale musi pozostać na licencji GPLv3. Zalecamy wybranie tej licencji dla wszystkich tapet napisanych kodem!
+
+
+
+ Zastrzegasz sobie wszystkie prawa i nie pozwalasz nikomu na przekształcanie tej treści (nie zalecane). Możesz użyć tej opcji, aby uznać prawa innych osób.
+
+
+
+ MonitorConfiguration
+
+
+ Konfiguracja Twojego monitora uległa zmianie!
+ Należy ponownie skonfigurować tapetę.
+
+
+
+ Monitors
+
+
+ Konfiguracja tapety
+
+
+
+ Usuń wybrane
+
+
+
+ Tapety
+
+
+
+ Widżety
+
+
+
+
+
+
+
+ MonitorsProjectSettingItem
+
+
+ Ustaw kolor
+
+
+
+ Należy wybrać kolor
+
+
+
+ Navigation
+
+
+ Wszystko
+
+
+
+ Sceny
+
+
+
+ Filmy
+
+
+
+ Widżety
+
+
+
+ Data instalacji: rosnąco
+
+
+
+ Data instalacji: malejąco
+
+
+
+ Subskrybowane:
+
+
+
+ Prześlij do Warsztatu Steam
+
+
+
+ Utwórz
+
+
+
+ Warsztat
+
+
+
+ Zainstalowane
+
+
+
+ Społeczność
+
+
+
+ Ustawienia
+
+
+
+ Wycisz/Anuluj wyciszenie wszystkich tapet
+
+
+
+ Wstrzymaj/Odtwórz wszystkie tapety
+
+
+
+ Konfiguruj tapetę
+
+
+
+ Minimalizuj do paska zadań
+
+
+
+ Wyjdź
+
+
+
+ Czy na pewno chcesz zamknąć ScreenPlay?
+Spowoduje to wyłączenie wszystkich tapet oraz widżetów.
+
+
+
+ PopupOffline
+
+
+ Ta funkcja wymaga uruchomienia Steam. steamErrorRestart: %1 - steamErrorAPIInit: %2
+
+
+
+ Wstecz
+
+
+
+ PopupSteamWorkshopAgreement
+
+
+ Należy zaakceptować Umowę użytkownika Steam
+
+
+
+ DO AKTYWACJI WYMAGANE JEST POŁĄCZENIE Z INTERNETEM ORAZ BEZPŁATNE KONTO STEAM. Uwaga: Oferowany produkt podlega Twojej akceptacji Umowy użytkownika Steam (dalej "Umowa"). Należy aktywować ten produkt przez Internet rejestrując konto Steam oraz akceptująć Umowę. Odwiedź https://store.steampowered.com/subscriber_agreement/, aby zapoznać się z Umową przed zakupem. Jeśli nie zgadzasz się z warunkami Umowy, należy zwrócić tę grę w stanie nieotwartym do Twojego sprzedawcy zgodnie z jego warunkami zwrotów.
+
+
+
+ Wyświetl Umowę użytkownika Steam
+
+
+
+ Zaakceptuj Umowę użytkownika Warsztatu Steam
+
+
+
+ QMLWallpaper
+
+
+ Utwórz tapetę QML
+
+
+
+ Ogólne
+
+
+
+ Nazwa tapety
+
+
+
+ Utworzone przez
+
+
+
+ Opis
+
+
+
+ Licencja i znaczniki
+
+
+
+ Obraz podglądu
+
+
+
+ QMLWidget
+
+
+ Utwórz widżet QML
+
+
+
+ Ogólne
+
+
+
+ Nazwa widżetu
+
+
+
+ Utworzone przez
+
+
+
+ Znaczniki
+
+
+
+ SaveNotification
+
+
+ Profil zapisany pomyślnie!
+
+
+
+ ScreenPlayItem
+
+
+ NOWE
+
+
+
+ Search
+
+
+ Szukaj tapet i widżetów
+
+
+
+ Settings
+
+
+ Ogólne
+
+
+
+ Autostart
+
+
+
+ ScreenPlay zostanie uruchomione przy starcie systemu Windows i ustawi dla Ciebie tapetę za każdym razem.
+
+
+
+ Wysoki priorytet autostartu
+
+
+
+ Ta opcja nadaje ScreenPlay wyższy priorytet autostartu w porównaniu do innych aplikacji.
+
+
+
+ Wysyłaj anonimowe raporty o awariach oraz statystyki
+
+
+
+ Help us make ScreenPlay faster and more stable. All collected data is purely anonymous and only used for development purposes! We use <a href="https://sentry.io">sentry.io</a> to collect and analyze this data. A <b>big thanks to them</b> for providing us with free premium support for open source projects!
+
+
+
+ Ustaw lokalizację zapisu
+
+
+
+ Ustaw lokalizację
+
+
+
+ Ścieżka do pamięci jest pusta!
+
+
+
+ Uwaga: Zmiana tego katalogu nie ma wpływu na ścieżkę pobierania z warsztatu. ScreenPlay wspiera posiadanie tylko jednego folderu na treść!
+
+
+
+ Język
+
+
+
+ Ustaw język interfejsu ScreenPlay
+
+
+
+ Motyw
+
+
+
+ Zmień motyw na jasny/ciemny
+
+
+
+ Systemowy
+
+
+
+ Ciemny
+
+
+
+ Jasny
+
+
+
+ Wydajność
+
+
+
+ Pause wallpaper video rendering while another app is in the foreground
+
+
+
+ We disable the video rendering (not the audio!) for the best performance. If you have problem you can disable this behaviour here. Wallpaper restart required!
+
+
+
+ Domyślny tryb wypełniania
+
+
+
+ To ustawienie określa, w jaki sposób film jest skalowany, aby dopasować go do obszaru docelowego.
+
+
+
+ Rozciągnięcie
+
+
+
+ Wypełnienie
+
+
+
+ Contain
+
+
+
+ Cover
+
+
+
+ Scale-Down
+
+
+
+ Informacje
+
+
+
+ Dziękujemy za wypróbowanie ScreenPlay
+
+
+
+ Cześć, nazywam się Elias Steurer znany również jako Kelteseth i jestem programistą ScreenPlay. Dziękuję Ci za wypróbowanie mojego oprogramowania. Obserwuj mnie, aby być na bieżąco z aktualizacjami ScreenPlay:
+
+
+
+ Wersja
+
+
+
+ Wyświetl listę zmian
+
+
+
+ Oprogramowanie zewnętrzne
+
+
+
+ ScreenPlay would not be possible without the work of others. A big thank you to:
+
+
+
+ Licencje
+
+
+
+ Rejestry
+
+
+
+ Tutaj znajdziesz wyjaśnienie, jeśli ScreenPlay nie działa poprawnie. Wyświetla wszystkie rejestry oraz ostrzeżenia podczas działania.
+
+
+
+ Pokaż rejestry
+
+
+
+ Ochrona danych
+
+
+
+ Bardzo ostrożnie używamy danych w celu rozwoju ScreenPlay. Nie sprzedajemy oraz nie udostępniamy tych (anonimowych) informacji osobom trzecim!
+
+
+
+ Prywatność
+
+
+
+ Wersja kompilacji ScreenPlay
+
+
+
+
+ SettingsExpander
+
+
+ Kopiuj tekst do schowka
+
+
+
+ Sidebar
+
+
+ Przegląd narzędzi
+
+
+
+ Importuj film h264 (.mp4)
+
+
+
+ Importuj film VP8 lub VP9 (.webm)
+
+
+
+ Importuj film (dowolny typ)
+
+
+
+ Tapeta GIF
+
+
+
+ Tapeta QML
+
+
+
+ Tapeta HTML5
+
+
+
+ Website Wallpaper
+
+
+
+ Widżet QML
+
+
+
+ Widżet HTML
+
+
+
+ Ustaw tapetę
+
+
+
+ Ustaw widżet
+
+
+
+ Nagłówek
+
+
+
+ Wybierz monitor do wyświetlania treści
+
+
+
+ Ustaw głośność
+
+
+
+ Tryb wypełnienia
+
+
+
+ Rozciągnięcie
+
+
+
+ Wypełnienie
+
+
+
+ Contain
+
+
+
+ Cover
+
+
+
+ Scale-Down
+
+
+
+ Rozmiar:
+
+
+
+ Brak opisu...
+
+
+
+ Naciśnij tutaj, jeśli lubisz tę treść
+
+
+
+ Naciśnij tutaj, jeśli nie lubisz tej treści
+
+
+
+ Subskrypcje:
+
+
+
+ Otwórz w Steam
+
+
+
+ Subskrybujesz!
+
+
+
+ Subskrybuj
+
+
+
+ StartInfo
+
+
+ Bezpłatne narzędzia ułatwiające tworzenie tapety
+
+
+
+ Poniżej znajdziesz dodatkowe narzędzia do tworzenia tapety poza tymi, które oferuje dla Ciebie ScreenPlay!
+
+
+
+ SteamNotAvailable
+
+
+ Błąd wczytywania integracji Steam!
+
+
+
+ SteamProfile
+
+
+ Wstecz
+
+
+
+ Dalej
+
+
+
+ SteamWorkshopStartPage
+
+
+ Wczytywanie
+
+
+
+ Pobierz teraz!
+
+
+
+ Pobieranie...
+
+
+
+ Szczegóły
+
+
+
+ Otwórz w Steam
+
+
+
+ Profil
+
+
+
+ Prześlij
+
+
+
+ Szukaj tapet i widżetów...
+
+
+
+ Otwórz Warsztat Steam
+
+
+
+ Ilość głosów
+
+
+
+ Data publikacji
+
+
+
+ Popularność
+
+
+
+ Lubiane przez znajomych
+
+
+
+ Utworzone przez znajomych
+
+
+
+ Utworzone przez obserwowane osoby
+
+
+
+ Bez ocen
+
+
+
+ Ilość głosów: rosnąco
+
+
+
+ Głosy pozytywne
+
+
+
+ Łącznie unikalnych subskrypcji
+
+
+
+ Wstecz
+
+
+
+ Dalej
+
+
+
+ TagSelector
+
+
+ Zapisz
+
+
+
+ Dodaj znacznik
+
+
+
+ Anuluj
+
+
+
+ Dodaj znacznik
+
+
+
+ TextField
+
+
+ Etykieta
+
+
+
+ *Wymagane
+
+
+
+ TrayIcon
+
+
+ ScreenPlay - naciśnij dwukrotnie, aby zmienić ustawienia.
+
+
+
+ Otwórz ScreenPlay
+
+
+
+ Wycisz wszystkie
+
+
+
+ Unmute all
+
+
+
+ Wstrzymaj wszystkie
+
+
+
+ Odtwórz wszystkie
+
+
+
+ Wyjdź
+
+
+
+ UploadProject
+
+
+ Prześlij tapetę/widżet do Steam
+
+
+
+ Przerwij
+
+
+
+ Prześlij wybrane projekty
+
+
+
+ Zakończ
+
+
+
+ UploadProjectBigItem
+
+
+ Typ:
+
+
+
+ Otwórz folder
+
+
+
+ Nieprawidłowy projekt!
+
+
+
+ UploadProjectItem
+
+
+ Niepowodzenie
+
+
+
+ Brak połączenia
+
+
+
+ Nieprawidłowe hasło
+
+
+
+ Zalogowano w innym miejscu
+
+
+
+ Nieprawidłowa wersja protokołu
+
+
+
+ Nieprawidłowy parametr
+
+
+
+ Nie znaleziono pliku
+
+
+
+ Zajęte
+
+
+
+ Invalid State
+
+
+
+ Nieprawidłowa nazwa
+
+
+
+ Nieprawidłowy adres e-mail
+
+
+
+ Duplikat nazwy
+
+
+
+ Odmowa dostępu
+
+
+
+ Upłynął limit czasu
+
+
+
+ Zbanowano
+
+
+
+ Nie znaleziono konta
+
+
+
+ Nieprawidłowe SteamID
+
+
+
+ Usługa jest niedostępna
+
+
+
+ Nie zalogowano
+
+
+
+ Pending
+
+
+
+ Błąd szyfrowania
+
+
+
+ Brak uprawnień
+
+
+
+ Limit Exceeded
+
+
+
+ Revoked
+
+
+
+ Expired
+
+
+
+ Already Redeemed
+
+
+
+ Duplicate Request
+
+
+
+ Already Owned
+
+
+
+ IP Not Found
+
+
+
+ Persist Failed
+
+
+
+ Locking Failed
+
+
+
+ Logon Session Replaced
+
+
+
+ Connect Failed
+
+
+
+ Handshake Failed
+
+
+
+ IO Failure
+
+
+
+ Remote Disconnect
+
+
+
+ Shopping Cart Not Found
+
+
+
+ Zablokowane
+
+
+
+ Ignorowane
+
+
+
+ No Match
+
+
+
+ Account Disabled
+
+
+
+ Service ReadOnly
+
+
+
+ Account Not Featured
+
+
+
+ Administrator OK
+
+
+
+ Wersja treści
+
+
+
+ Try Another CM
+
+
+
+ Password Required To Kick Session
+
+
+
+ Already Logged In Elsewhere
+
+
+
+ Wstrzymane
+
+
+
+ Anulowane
+
+
+
+ Data Corruption
+
+
+
+ Disk Full
+
+
+
+ Remote Call Failed
+
+
+
+ Nie ustawiono hasła
+
+
+
+ Odłączone konto zewnętrzne
+
+
+
+ PSN Ticket Invalid
+
+
+
+ Konto zewnętrzne już połączone
+
+
+
+ Remote File Conflict
+
+
+
+ Niedopuszczalne hasło
+
+
+
+ Same As Previous Value
+
+
+
+ Account Logon Denied
+
+
+
+ Nie można użyć poprzedniego hasła
+
+
+
+ Nieprawidłowe logowanie AuthCode
+
+
+
+ Account Logon Denied No Mail
+
+
+
+ Hardware Not Capable Of IPT
+
+
+
+ IPT Init Error
+
+
+
+ Parental Control Restricted
+
+
+
+ Facebook Query Error
+
+
+
+ Expired Login Auth Code
+
+
+
+ IP Login Restriction Failed
+
+
+
+ Account Locked Down
+
+
+
+ Account Logon Denied Verified Email Required
+
+
+
+ No MatchingURL
+
+
+
+ Bad Response
+
+
+
+ Require Password ReEntry
+
+
+
+ Value Out Of Range
+
+
+
+ Unexpecte Error
+
+
+
+ Disabled
+
+
+
+ Invalid CEG Submission
+
+
+
+ Restricted Device
+
+
+
+ Region Locked
+
+
+
+ Rate Limit Exceeded
+
+
+
+ Account Login Denied Need Two Factor
+
+
+
+ Item Deleted
+
+
+
+ Account Login Denied Throttle
+
+
+
+ Błędny kod uwierzytelniania dwuskładnikowego
+
+
+
+ Błędny kod aktywacyjny uwierzytelniania dwuskładnikowego
+
+
+
+ Account Associated To Multiple Partners
+
+
+
+ Not Modified
+
+
+
+ Brak urządzenia mobilnego
+
+
+
+ Time Not Synced
+
+
+
+ Błąd wysyłania kodu SMS
+
+
+
+ Account Limit Exceeded
+
+
+
+ Account Activity Limit Exceeded
+
+
+
+ Phone Activity Limit Exceeded
+
+
+
+ Refund To Wallet
+
+
+
+ Email Send Failure
+
+
+
+ Not Settled
+
+
+
+ Wymagana Captcha
+
+
+
+ GSLT Denied
+
+
+
+ GS Owner Denied
+
+
+
+ Invalid Item Type
+
+
+
+ Zbanowany adres IP
+
+
+
+ GSLT Expired
+
+
+
+ Insufficient Funds
+
+
+
+ Too Many Pending
+
+
+
+ No Site Licenses Found
+
+
+
+ WG Network Send Exceeded
+
+
+
+ Account Not Friends
+
+
+
+ Limited User Account
+
+
+
+ Cant Remove Item
+
+
+
+ Account Deleted
+
+
+
+ Existing User Cancelled License
+
+
+
+ Community Cooldown
+
+
+
+ Status:
+
+
+
+ Postęp przesyłania:
+
+
+
+ WebsiteWallpaper
+
+
+ Create a Website Wallpaper
+
+
+
+ Ogólne
+
+
+
+ Nazwa tapety
+
+
+
+ Utworzone przez
+
+
+
+ Opis
+
+
+
+ Znaczniki
+
+
+
+ Obraz podglądu
+
+
+
+ WizardPage
+
+
+ Zapisz
+
+
+
+ Zapisywanie...
+
+
+
+ WorkshopItem
+
+
+ Pomyślnie subskrybujesz element z Warsztatu!
+
+
+
+ Pobieranie ukończone!
+
+
+
+ XMLNewsfeed
+
+
+ Aktualności i lista zmian
+
+
+
diff --git a/ScreenPlay/translations/ScreenPlay_pt_BR.qm b/ScreenPlay/translations/ScreenPlay_pt_BR.qm
index 0831bef6..39ffdd8e 100644
Binary files a/ScreenPlay/translations/ScreenPlay_pt_BR.qm and b/ScreenPlay/translations/ScreenPlay_pt_BR.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_pt_BR.ts b/ScreenPlay/translations/ScreenPlay_pt_BR.ts
index 474356e9..94149b02 100644
--- a/ScreenPlay/translations/ScreenPlay_pt_BR.ts
+++ b/ScreenPlay/translations/ScreenPlay_pt_BR.ts
@@ -70,10 +70,6 @@
Fórum
-
-
- Lista de Issues
-
Contribuir
@@ -82,6 +78,10 @@
Oficina Steam
+
+
+
+
CommunityNavItem
@@ -493,35 +493,35 @@
-
+ Generating preview image...
-
+ Generating preview thumbnail image...
-
+ Generating 5 second preview video...
-
+ Generating preview gif...
-
+ Converting Audio...
-
+ Converting Video... This can take some time!
-
+ Converting Video ERROR!
-
+ Analyse Video ERROR!
@@ -529,58 +529,58 @@
-
+ Generating preview video...
-
+ Name (required!)
-
+ Description
-
+ Youtube URL
-
+ Abort
-
+ Save
-
+ Save Wallpaper...
Importh264Init
-
+ Import a .mp4 video
-
+ ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.
-
+ Invalid file type. Must be valid h264 (*.mp4)!
-
+ Drop a *.mp4 file here or use 'Select file' below.
-
+ Open Documentation
- Selecionar arquivo
+ Select file
@@ -683,10 +683,6 @@
Remove selected
-
-
- Remove
-
Wallpapers
@@ -695,6 +691,10 @@
Widgets
+
+
+
+
MonitorsProjectSettingItem
@@ -761,16 +761,31 @@
Settings
-
-
- NavigationWallpaperConfiguration
-
- Configurate active Wallpaper or Widgets
+
+ Mute/Unmute all Wallpaper
-
- No active Wallpaper or Widgets
+
+ Pause/Play all Wallpaper
+
+
+
+ Configure Wallpaper
+
+
+
+ Minimize to Tray
+
+
+
+ Exit
+
+
+
+ Are you sure you want to exit ScreenPlay?
+This will shut down all Wallpaper and Widgets.
@@ -1008,10 +1023,6 @@
Version
-
-
- ScreenPlay Build Version
-
Open Changelog
@@ -1052,6 +1063,12 @@
Privacy
+
+
+ ScreenPlay Build Version
+
+
SettingsExpander
@@ -1068,15 +1085,15 @@
-
+ Video Import h264 (.mp4)
-
+ Video Import VP8 & VP9 (.webm)
-
+ Video import (all types)
@@ -1183,11 +1200,11 @@
StartInfo
-
+ Free tools to help you to create wallpaper
-
+ Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!
@@ -1578,7 +1595,7 @@
-
+ Password Required To Kick Session
diff --git a/ScreenPlay/translations/ScreenPlay_ru_RU.qm b/ScreenPlay/translations/ScreenPlay_ru_RU.qm
index 006ec077..39ee6f7c 100644
Binary files a/ScreenPlay/translations/ScreenPlay_ru_RU.qm and b/ScreenPlay/translations/ScreenPlay_ru_RU.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_ru_RU.ts b/ScreenPlay/translations/ScreenPlay_ru_RU.ts
index 7d702092..58ac2f26 100644
--- a/ScreenPlay/translations/ScreenPlay_ru_RU.ts
+++ b/ScreenPlay/translations/ScreenPlay_ru_RU.ts
@@ -70,10 +70,6 @@
Форум
-
-
- Список проблем
-
Внести вклад
@@ -82,6 +78,10 @@
Мастерская Steam
+
+
+
+
CommunityNavItem
@@ -493,35 +493,35 @@
-
+ Generating preview image...
-
+ Generating preview thumbnail image...
-
+ Generating 5 second preview video...
-
+ Generating preview gif...
-
+ Converting Audio...
-
+ Converting Video... This can take some time!
-
+ Converting Video ERROR!
-
+ Analyse Video ERROR!
@@ -529,58 +529,58 @@
-
+ Generating preview video...
-
+ Name (required!)
-
+ Description
-
+ Youtube URL
-
+ Abort
-
+ Save
-
+ Save Wallpaper...
Importh264Init
-
+ Import a .mp4 video
-
+ ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.
-
+ Invalid file type. Must be valid h264 (*.mp4)!
-
+ Drop a *.mp4 file here or use 'Select file' below.
-
+ Open Documentation
-
+ Select file
@@ -683,10 +683,6 @@
Remove selected
-
-
- Remove
-
Wallpapers
@@ -695,6 +691,10 @@
Widgets
+
+
+
+
MonitorsProjectSettingItem
@@ -761,16 +761,31 @@
Settings
-
-
- NavigationWallpaperConfiguration
-
- Configurate active Wallpaper or Widgets
+
+ Mute/Unmute all Wallpaper
-
- No active Wallpaper or Widgets
+
+ Pause/Play all Wallpaper
+
+
+
+ Configure Wallpaper
+
+
+
+ Minimize to Tray
+
+
+
+ Exit
+
+
+
+ Are you sure you want to exit ScreenPlay?
+This will shut down all Wallpaper and Widgets.
@@ -1008,10 +1023,6 @@
Version
-
-
- ScreenPlay Build Version
-
Open Changelog
@@ -1052,6 +1063,12 @@
Privacy
+
+
+ ScreenPlay Build Version
+
+
SettingsExpander
@@ -1068,15 +1085,15 @@
-
+ Video Import h264 (.mp4)
-
+ Video Import VP8 & VP9 (.webm)
-
+ Video import (all types)
@@ -1183,11 +1200,11 @@
StartInfo
-
+ Free tools to help you to create wallpaper
-
+ Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!
@@ -1578,7 +1595,7 @@
-
+ Password Required To Kick Session
diff --git a/ScreenPlay/translations/ScreenPlay_tr_TR.qm b/ScreenPlay/translations/ScreenPlay_tr_TR.qm
index 437f059b..d23bfbd4 100644
Binary files a/ScreenPlay/translations/ScreenPlay_tr_TR.qm and b/ScreenPlay/translations/ScreenPlay_tr_TR.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_tr_TR.ts b/ScreenPlay/translations/ScreenPlay_tr_TR.ts
index e618cd0f..f9578eca 100644
--- a/ScreenPlay/translations/ScreenPlay_tr_TR.ts
+++ b/ScreenPlay/translations/ScreenPlay_tr_TR.ts
@@ -70,10 +70,6 @@
Forum
-
-
- Sorun Listesi
-
Bağış yap
@@ -82,6 +78,10 @@
Steam Atölyesi
+
+
+
+
CommunityNavItem
@@ -489,98 +489,98 @@
Importh264Convert
- VideoAnaliz...
+ AnalyseVideo...
- Önizleme oluşturuluyor...
+ Generating preview image...
- Önizleme küçük resmi oluşturuluyor...
+ Generating preview thumbnail image...
- 5 saniyelik önizleme videosu oluşturuluyor...
+ Generating 5 second preview video...
- Özizleme gifi oluşturuluyor...
+ Generating preview gif...
- Ses Dönüştürülüyor...
+ Converting Audio...
- Video dönüştürülüyor... Biraz zaman alabilir!
+ Converting Video... This can take some time!
- Video Dönüştürülürken Hata Oluştu!
+ Converting Video ERROR!
- Video Hatasını Analiz Edin!
+ Analyse Video ERROR!
- Bir videoyu duvar kağıdına aktarın
+ Import a video to a wallpaper
- Önizleme videosu oluşturuluyor...
+ Generating preview video...
- İsim (gerekli)
+ Name (required!)
-
+ Description
- YouTube URL
+ Youtube URL
-
+ Abort
-
+ Save
- Duvar kağıdını kaydet...
+ Save Wallpaper...
Importh264Init
-
+ Import a .mp4 video
-
+ ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.
-
+ Invalid file type. Must be valid h264 (*.mp4)!
-
+ Drop a *.mp4 file here or use 'Select file' below.
- Belgeyi Aç
+ Open Documentation
- Dosya seç
+ Select file
@@ -683,10 +683,6 @@
Seçilenleri kaldır
-
-
- Kaldır
-
Duvar kağıtları
@@ -695,6 +691,10 @@
Widget’lar
+
+
+
+
MonitorsProjectSettingItem
@@ -761,16 +761,31 @@
Settings
-
-
- NavigationWallpaperConfiguration
-
- Aktif Duvar Kağıdını veya Widget'ları yapılandırın
+
+ Mute/Unmute all Wallpaper
-
- Aktif Duvar Kağıdı veya Widget yok
+
+ Pause/Play all Wallpaper
+
+
+
+ Configure Wallpaper
+
+
+
+ Minimize to Tray
+
+
+
+ Exit
+
+
+
+ Are you sure you want to exit ScreenPlay?
+This will shut down all Wallpaper and Widgets.
@@ -1008,10 +1023,6 @@
Version
-
-
- ScreenPlay Build Version
-
Open Changelog
@@ -1052,6 +1063,12 @@
Privacy
+
+
+ ScreenPlay Build Version
+
+
SettingsExpander
@@ -1068,15 +1085,15 @@
-
+ Video Import h264 (.mp4)
-
+ Video Import VP8 & VP9 (.webm)
-
+ Video import (all types)
@@ -1183,11 +1200,11 @@
StartInfo
-
+ Free tools to help you to create wallpaper
-
+ Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!
@@ -1578,7 +1595,7 @@
-
+ Password Required To Kick Session
diff --git a/ScreenPlay/translations/ScreenPlay_vi_VN.qm b/ScreenPlay/translations/ScreenPlay_vi_VN.qm
index 905f9b6e..a699f1b4 100644
Binary files a/ScreenPlay/translations/ScreenPlay_vi_VN.qm and b/ScreenPlay/translations/ScreenPlay_vi_VN.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_vi_VN.ts b/ScreenPlay/translations/ScreenPlay_vi_VN.ts
index d7c1187a..1bcec9c9 100644
--- a/ScreenPlay/translations/ScreenPlay_vi_VN.ts
+++ b/ScreenPlay/translations/ScreenPlay_vi_VN.ts
@@ -70,10 +70,6 @@
Diễn đàn
-
-
- D.sách lỗi
-
Đóng góp
@@ -82,6 +78,10 @@
Steam Workshop
+
+
+
+
CommunityNavItem
@@ -489,98 +489,98 @@
Importh264Convert
- Đang xử lý video...
+ AnalyseVideo...
- Đang tạo ra ảnh xem trước...
+ Generating preview image...
- Đang tạo ra hình thu nhỏ xem trước...
+ Generating preview thumbnail image...
- Đang tao ra video 5 giây xem trước...
+ Generating 5 second preview video...
- Đang tạo ra gif xem trước...
+ Generating preview gif...
- Đang chuyển đổi dạng âm thanh...
+ Converting Audio...
- Đang chuyển đổi dạng video... Việc này có thể tốn kha khá thời gian!
+ Converting Video... This can take some time!
- Đã có lỗi xảy ra khi chuyển đổi dạng video!
+ Converting Video ERROR!
- Đã có lỗi xảy ra khi đang xử lý video!
+ Analyse Video ERROR!
- Nhập một video vào hình nền
+ Import a video to a wallpaper
- Đang tạo ra video xem trước...
+ Generating preview video...
- Tên (bắt buộc!)
+ Name (required!)
- Mô tả
+ Description
- Link YouTube
+ Youtube URL
- Hủy bỏ
+ Abort
- Lưu
+ Save
- Lưu hình nền...
+ Save Wallpaper...
Importh264Init
-
+ Import a .mp4 video
-
+ ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.
-
+ Invalid file type. Must be valid h264 (*.mp4)!
-
+ Drop a *.mp4 file here or use 'Select file' below.
- Mở tài liệu tham khảo
+ Open Documentation
-
+ Select file
@@ -683,10 +683,6 @@
Xóa mục đã chọn
-
-
- Xóa
-
Ảnh động
@@ -695,6 +691,10 @@
Widgets
+
+
+
+
MonitorsProjectSettingItem
@@ -761,16 +761,31 @@
Settings
-
-
- NavigationWallpaperConfiguration
-
- Thiết lập hình nền hoặc widgets đang hoạt động
+
+ Mute/Unmute all Wallpaper
-
- Không có hình nền hoặc widgets đang hoạt động
+
+ Pause/Play all Wallpaper
+
+
+
+ Configure Wallpaper
+
+
+
+ Minimize to Tray
+
+
+
+ Exit
+
+
+
+ Are you sure you want to exit ScreenPlay?
+This will shut down all Wallpaper and Widgets.
@@ -1008,10 +1023,6 @@
Phiên bản
-
-
- Bản dựng của ScreenPlay
-
Mở nhật kí thay đổi
@@ -1052,6 +1063,12 @@
Quyền riêng tư
+
+
+ ScreenPlay Build Version
+
+
SettingsExpander
@@ -1068,15 +1085,15 @@
-
+ Video Import h264 (.mp4)
-
+ Video Import VP8 & VP9 (.webm)
-
+ Video import (all types)
@@ -1183,11 +1200,11 @@
StartInfo
-
+ Free tools to help you to create wallpaper
-
+ Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you!
@@ -1578,7 +1595,7 @@
-
+ Password Required To Kick Session
diff --git a/ScreenPlay/translations/ScreenPlay_zh_CN.qm b/ScreenPlay/translations/ScreenPlay_zh_CN.qm
index a0aec754..c91bb1b0 100644
Binary files a/ScreenPlay/translations/ScreenPlay_zh_CN.qm and b/ScreenPlay/translations/ScreenPlay_zh_CN.qm differ
diff --git a/ScreenPlay/translations/ScreenPlay_zh_CN.ts b/ScreenPlay/translations/ScreenPlay_zh_CN.ts
index e7b2daa0..8d50def9 100644
--- a/ScreenPlay/translations/ScreenPlay_zh_CN.ts
+++ b/ScreenPlay/translations/ScreenPlay_zh_CN.ts
@@ -70,10 +70,6 @@
论坛
-
-
- 议题列表
-
贡献
@@ -82,6 +78,10 @@
Steam 创意工坊
+
+
+
+
CommunityNavItem
@@ -138,10 +138,6 @@
CreateWallpaperVideoImportConvert
-
-
-
-
生成预览图...
@@ -265,15 +261,15 @@
Forum
- Download Wallpaper and Widgets from our forums manually. If you want to download Steam Workshop content you have to install ScreenPlay via Steam.
+ 从我们的社区手动下载壁纸与部件 如果您想要下载Steam创意工坊内容,您须要通过Steam安装ScreemPlay。
- Install Steam Version
+ 安装Steam版本
- Open In Browser
+ 浏览器中打开
@@ -385,10 +381,6 @@
ImportWebmConvert
-
-
-
-
分析视频...
@@ -489,106 +481,102 @@
Importh264Convert
- 分析视频...
+ 分析视频...
- 生成预览图...
+ 生成预览图...
- 生成预览缩略图...
+ 生成预览缩略图...
- 生成5秒预览视频...
+ 生成5秒预览视频...
-
+ 生成预览GIF...
- 转换音频...
+ 转换音频...
- 转换视频... 这可能需要一些时间!
+ 转换视频... 这可能需要一些时间!
- 转换视频出错!
+ 转换视频出错!
- 分析视频出错!
+ 分析视频出错!
- 将视频导入为壁纸
+ 将视频导入为壁纸
- 生成预览视频...
+ 生成预览视频...
- 名称(必选)
+ 名称(必选)
- 简介
+ 简介
- Youtube 链接
+ Youtube 链接
-
+ 中止
- 保存
+ 保存
- 保存壁纸...
+ 保存壁纸...
Importh264Init
-
+ 导入.mp4视频
-
+ ScreenPlay V0.15以上可播放.mp4(通常称为h264)。这将提升在旧的系统上的性能.
-
+ 无效文件类型,必须为合法的h264(.mp4)!
-
+ 拖入.mp4文件到此处,或者使用下方的“选择文件”
- 打开文档
+ 打开文档
- 选择文件
+ 选择文件
Installed
-
-
-
-
刷新中!
@@ -645,7 +633,7 @@
- You grant other to remix your work and change the license to their liking.
+ 您允许他人重制您的作品及改变许可证
@@ -683,10 +671,6 @@
移除已选择
-
-
- 移除
-
壁纸
@@ -695,6 +679,10 @@
物件
+
+
+
+
MonitorsProjectSettingItem
@@ -743,41 +731,55 @@
- Create
+ 创建
- Workshop
+ 创意工坊
- Installed
+ 已安装
- Community
+ 社区
- Settings
-
-
-
- NavigationWallpaperConfiguration
-
-
- 设置活动壁纸或物件
+ 设置
-
- 没有活动壁纸或物件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
PopupOffline
- You need to run Steam for this. steamErrorRestart: %1 - steamErrorAPIInit: %2
+ 此功能需要启动Steam。 steamErrorRestart: %1 - steamErrorAPIInit: %2
@@ -868,7 +870,7 @@
ScreenPlayItem
- NEW
+ 新
@@ -1009,8 +1011,10 @@
版本
-
- ScreenPlay编译版本
+
+ ScreenPlay编译版本
+
@@ -1068,15 +1072,15 @@
-
+ 视频导入 h264(.mp4)
-
+ 视频导入 VP8 & VP9 (.webm)
-
+ 视频导入 (所有类型)
@@ -1183,11 +1187,11 @@
StartInfo
-
+ 免费的壁纸创建工具
-
+ 在下面有一些创建壁纸的工具,功能比ScreenPlay所提供的更为强大!
@@ -1212,87 +1216,87 @@
SteamWorkshopStartPage
- Loading
+ 正在加载
- Download now!
+ 开始下载
- Downloading...
+ 下载中...
- Details
+ 查看详情
- Open In Steam
+ Steam中打开
- Profile
+ 配置
- Upload
+ 上传
- Search for Wallpaper and Widgets...
+ 搜索壁纸和物件...
- Open Workshop in Steam
+ 在Steam中打开创意工坊
- Ranked By Vote
+ 评分最好
- Publication Date
+ 发布日期
- Ranked By Trend
+ 评分趋势
- Favorited By Friends
+ 好友收藏
- Created By Friends
+ 好友创建
- Created By Followed Users
+ 已关注的
- Not Yet Rated
+ 尚无评分
- Total VotesAsc
+ 按总票数升序
- Votes Up
+ 评分上升
- Total Unique Subscriptions
+ 订阅总数
- Back
+ 后退
- Forward
+ 前进
@@ -1578,7 +1582,7 @@
-
+ 需要密码以启动会话
diff --git a/ScreenPlaySDK/inc/screenplaysdk.h b/ScreenPlaySDK/inc/screenplaysdk.h
index 991c7143..db72753a 100644
--- a/ScreenPlaySDK/inc/screenplaysdk.h
+++ b/ScreenPlaySDK/inc/screenplaysdk.h
@@ -49,33 +49,19 @@
#include
#include
-class ScreenPlaySDK : public QQuickItem {
+class ScreenPlaySDK : public QObject {
Q_OBJECT
- Q_DISABLE_COPY(ScreenPlaySDK)
public:
- ScreenPlaySDK(QQuickItem* parent = nullptr);
- ScreenPlaySDK(const QString& appID, const QString& type, QQuickItem* parent = nullptr);
+ ScreenPlaySDK(const QString& appID, const QString& type);
~ScreenPlaySDK();
-
Q_PROPERTY(QString type READ type WRITE setType NOTIFY typeChanged)
Q_PROPERTY(bool isConnected READ isConnected WRITE setIsConnected NOTIFY isConnectedChanged)
Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged)
- QString type() const
- {
- return m_type;
- }
-
- bool isConnected() const
- {
- return m_isConnected;
- }
-
- QString appID() const
- {
- return m_appID;
- }
+ QString type() const { return m_type; }
+ bool isConnected() const { return m_isConnected; }
+ QString appID() const { return m_appID; }
public slots:
void sendMessage(const QJsonObject& obj);
@@ -140,7 +126,7 @@ signals:
private:
QLocalSocket m_socket;
- QString m_type = "undefined";
+ QString m_type;
bool m_isConnected = false;
QString m_appID;
diff --git a/ScreenPlaySDK/src/screenplaysdk.cpp b/ScreenPlaySDK/src/screenplaysdk.cpp
index 619960a1..bb5b4e3a 100644
--- a/ScreenPlaySDK/src/screenplaysdk.cpp
+++ b/ScreenPlaySDK/src/screenplaysdk.cpp
@@ -15,16 +15,8 @@ static ScreenPlaySDK* global_sdkPtr = nullptr;
\brief .
*/
-ScreenPlaySDK::ScreenPlaySDK(QQuickItem* parent)
- : QQuickItem(parent)
-{
-}
-
-ScreenPlaySDK::ScreenPlaySDK(
- const QString& appID,
- const QString& type,
- QQuickItem* parent)
- : QQuickItem(parent)
+ScreenPlaySDK::ScreenPlaySDK(const QString& appID, const QString& type)
+ : QObject(nullptr)
, m_type { type }
, m_appID { appID }
{
diff --git a/ScreenPlaySysInfo/CMakeLists.txt b/ScreenPlaySysInfo/CMakeLists.txt
index 5c43fb69..6026ab85 100644
--- a/ScreenPlaySysInfo/CMakeLists.txt
+++ b/ScreenPlaySysInfo/CMakeLists.txt
@@ -34,7 +34,14 @@ set(HEADER
add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADER})
-qt_add_qml_module(${PROJECT_NAME} URI ${PROJECT_NAME} VERSION 1.0)
+qt_add_qml_module(
+ ${PROJECT_NAME}
+ OUTPUT_DIRECTORY
+ ${CMAKE_BINARY_DIR}/bin/SysInfo
+ URI
+ ${PROJECT_NAME}
+ VERSION
+ 1.0)
target_compile_definitions(${PROJECT_NAME} PRIVATE $<$,$>:QT_QML_DEBUG>)
diff --git a/ScreenPlayUtil/CMakeLists.txt b/ScreenPlayUtil/CMakeLists.txt
index 3047e2dc..2d66b427 100644
--- a/ScreenPlayUtil/CMakeLists.txt
+++ b/ScreenPlayUtil/CMakeLists.txt
@@ -12,8 +12,10 @@ find_package(
set(SOURCES # cmake-format: sortable
src/util.cpp src/contenttypes.cpp inc/public/ScreenPlayUtil/httpfileserver.cpp)
-set(HEADER # cmake-format: sortable
- inc/public/ScreenPlayUtil/util.h inc/public/ScreenPlayUtil/httpfileserver.h inc/public/ScreenPlayUtil/contenttypes.h inc/public/ScreenPlayUtil/projectfile.h)
+set(HEADER
+ # cmake-format: sortable
+ inc/public/ScreenPlayUtil/util.h inc/public/ScreenPlayUtil/httpfileserver.h inc/public/ScreenPlayUtil/contenttypes.h
+ inc/public/ScreenPlayUtil/projectfile.h)
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADER})
diff --git a/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h b/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h
index 6005a462..0448a21a 100644
--- a/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h
+++ b/ScreenPlayUtil/inc/public/ScreenPlayUtil/util.h
@@ -54,12 +54,11 @@
namespace ScreenPlayUtil {
#if defined(Q_OS_WIN)
struct WinMonitorStats {
- std::vector iMonitors;
- std::vector hMonitors;
- std::vector hdcMonitors;
- std::vector rcMonitors;
- std::vector scaleFactor;
- std::vector> sizes;
+
+ WinMonitorStats()
+ {
+ EnumDisplayMonitors(NULL, NULL, MonitorEnum, (LPARAM)this);
+ }
static BOOL CALLBACK MonitorEnum(HMONITOR hMon, HDC hdc, LPRECT lprcMonitor,
LPARAM pData)
@@ -77,10 +76,19 @@ struct WinMonitorStats {
pThis->hdcMonitors.push_back(hdc);
pThis->rcMonitors.push_back(*lprcMonitor);
pThis->iMonitors.push_back(pThis->hdcMonitors.size());
+
+ //qInfo() << std::abs(lprcMonitor->right - lprcMonitor->left) << std::abs(lprcMonitor->top - lprcMonitor->bottom);
+
return TRUE;
}
- WinMonitorStats() { EnumDisplayMonitors(0, 0, MonitorEnum, (LPARAM)this); }
+ std::vector iMonitors;
+ std::vector hMonitors;
+ std::vector hdcMonitors;
+ std::vector rcMonitors;
+ std::vector scaleFactor;
+ std::vector> sizes;
+ int index = 0;
};
#endif
QJsonArray fillArray(const QVector& items);
diff --git a/ScreenPlayWallpaper/CMakeLists.txt b/ScreenPlayWallpaper/CMakeLists.txt
index 71bd41ce..f3ea021c 100644
--- a/ScreenPlayWallpaper/CMakeLists.txt
+++ b/ScreenPlayWallpaper/CMakeLists.txt
@@ -68,7 +68,7 @@ target_link_libraries(
Qt6::WebEngineCore
Qt6::WebEngineQuick)
-if (UNIX AND NOT APPLE)
+if(UNIX AND NOT APPLE)
include(CopyRecursive)
copy_recursive(${CMAKE_CURRENT_SOURCE_DIR}/kde/ScreenPlay ${CMAKE_BINARY_DIR}/bin/kde/ScreenPlay "*")
endif()
@@ -76,6 +76,7 @@ endif()
if(APPLE)
set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
target_link_libraries(${PROJECT_NAME} PRIVATE "-framework Cocoa")
+ file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/${PROJECT_NAME}.app/Contents/MacOS/)
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
diff --git a/ScreenPlayWallpaper/main.cpp b/ScreenPlayWallpaper/main.cpp
index f2d6512c..899fe96d 100644
--- a/ScreenPlayWallpaper/main.cpp
+++ b/ScreenPlayWallpaper/main.cpp
@@ -32,8 +32,8 @@ int main(int argc, char* argv[])
// For testing purposes when starting the ScreenPlayWallpaper directly.
if (argumentList.length() == 1) {
#if defined(Q_OS_WIN)
- //WinWindow window1({ 0 }, "test", "appID=test", "1", "fill", "videoWallpaper", true, true);
- WinWindow window1({ 0 }, "C:/Program Files (x86)/Steam/steamapps/workshop/content/672870/2453869686", "appID=test", "1", "fill", "videoWallpaper", true, true);
+ // WinWindow window1({ 0 }, "test", "appID=test", "1", "fill", "videoWallpaper", true, true);
+ WinWindow window1({ 0, 1, 2 }, "C:/Program Files (x86)/Steam/steamapps/workshop/content/672870/hordemp4", "appID=test", "1", "fill", "videoWallpaper", true, true);
#elif defined(Q_OS_LINUX)
LinuxWindow window({ 0 }, "test", "appID=test", "1", "fill", "videoWallpaper", false, true);
#elif defined(Q_OS_OSX)
diff --git a/ScreenPlayWallpaper/qml/MultimediaView.qml b/ScreenPlayWallpaper/qml/MultimediaView.qml
index 113dd832..341865fe 100644
--- a/ScreenPlayWallpaper/qml/MultimediaView.qml
+++ b/ScreenPlayWallpaper/qml/MultimediaView.qml
@@ -6,12 +6,15 @@ Item {
id: root
anchors.fill: parent
property bool loops: Wallpaper.loops
+ property bool isPlaying: Wallpaper.isPlaying
+ onIsPlayingChanged: isPlaying ? mediaPlayer.play() : mediaPlayer.pause()
property bool isWindows: Qt.platform.os === "windows"
signal requestFadeIn
MediaPlayer {
id: mediaPlayer
+
source: Wallpaper.projectSourceFileAbsolute
Component.onCompleted: {
mediaPlayer.play()
@@ -35,10 +38,35 @@ Item {
VideoOutput {
id: vo
anchors.fill: parent
+
}
AudioOutput {
id: ao
volume: Wallpaper.volume
+ muted: Wallpaper.muted
+ }
+
+ Connections {
+ function onFillModeChanged(fillMode) {
+ if(fillMode === "stretch"){
+ vo.fillMode = VideoOutput.Stretch
+ return
+ }
+ if(fillMode === "fill"){
+ vo.fillMode = VideoOutput.PreserveAspectFit
+ return
+ }
+ if(fillMode === "contain" || fillMode === "cover" || fillMode === "scale-down"){
+ vo.fillMode = VideoOutput.PreserveAspectCrop
+ }
+ }
+
+ function onCurrentTimeChanged(currentTime) {
+ mediaPlayer.position = currentTime * mediaPlayer.duration
+ }
+
+
+ target: Wallpaper
}
}
diff --git a/ScreenPlayWallpaper/qml/Wallpaper.qml b/ScreenPlayWallpaper/qml/Wallpaper.qml
index 6e870c77..55df1635 100644
--- a/ScreenPlayWallpaper/qml/Wallpaper.qml
+++ b/ScreenPlayWallpaper/qml/Wallpaper.qml
@@ -31,13 +31,16 @@ Rectangle {
if (Qt.platform.os === "windows") {
loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml"
}
+
+ print(loader.source)
fadeIn()
break
case InstalledType.HTMLWallpaper:
- loader.setSource("qrc:/ScreenPlayWallpaper/qml/WebsiteWallpaper.qml", {
- "url": Qt.resolvedUrl(
- Wallpaper.projectSourceFileAbsolute)
- })
+ loader.setSource(
+ "qrc:/ScreenPlayWallpaper/qml/WebsiteWallpaper.qml", {
+ "url": Qt.resolvedUrl(
+ Wallpaper.projectSourceFileAbsolute)
+ })
break
case InstalledType.QMLWallpaper:
loader.source = Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute)
@@ -61,49 +64,50 @@ Rectangle {
}
function fadeIn() {
- Wallpaper.setVisible(true);
+ Wallpaper.setVisible(true)
if (canFadeByWallpaperFillMode && Wallpaper.canFade)
- imgCover.state = "hideDefaultBackgroundImage";
+ imgCover.state = "hideDefaultBackgroundImage"
else
- imgCover.opacity = 0;
+ imgCover.opacity = 0
}
anchors.fill: parent
color: {
if (Qt.platform.os !== "windows")
- return "black";
+ return "black"
else
- return Wallpaper.windowsDesktopProperties.color;
+ return Wallpaper.windowsDesktopProperties.color
}
Component.onCompleted: {
- init();
+ init()
}
Connections {
function onQmlExit() {
if (canFadeByWallpaperFillMode && Wallpaper.canFade)
- imgCover.state = "exit";
+ imgCover.state = "exit"
else
- Wallpaper.terminate();
+ Wallpaper.terminate()
}
function onQmlSceneValueReceived(key, value) {
- var obj2 = 'import QtQuick; Item {Component.onCompleted: loader.item.' + key + ' = ' + value + '; }';
- var newObject = Qt.createQmlObject(obj2.toString(), root, "err");
- newObject.destroy(10000);
+ var obj2 = 'import QtQuick; Item {Component.onCompleted: loader.item.'
+ + key + ' = ' + value + '; }'
+ var newObject = Qt.createQmlObject(obj2.toString(), root, "err")
+ newObject.destroy(10000)
}
// Replace wallpaper with QML Scene
function onReloadQML(oldType) {
- loader.sourceComponent = undefined;
- loader.source = "";
- Wallpaper.clearComponentCache();
- loader.source = Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute);
+ loader.sourceComponent = undefined
+ loader.source = ""
+ Wallpaper.clearComponentCache()
+ loader.source = Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute)
}
// Replace wallpaper with GIF
function onReloadGIF(oldType) {
- init();
+ init()
}
// This function only gets called here (the same function
@@ -113,9 +117,9 @@ Rectangle {
// We need to check if the old type
// was also Video not get called twice
if (oldType === InstalledType.VideoWallpaper)
- return ;
+ return
- loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml";
+ loader.source = "qrc:/ScreenPlayWallpaper/qml/MultimediaView.qml"
}
target: Wallpaper
@@ -130,20 +134,19 @@ Rectangle {
//asynchronous: true
onStatusChanged: {
if (loader.status === Loader.Error) {
- loader.source = "";
- // Wallpaper.terminate();
+ loader.source = ""
+ // Wallpaper.terminate();
}
}
Connections {
function onRequestFadeIn() {
- fadeIn();
+ fadeIn()
}
ignoreUnknownSignals: true
target: loader.item
}
-
}
Image {
@@ -154,40 +157,41 @@ Rectangle {
sourceSize.height: Wallpaper.height
source: {
if (Qt.platform.os === "windows")
- return Qt.resolvedUrl("file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath);
+ return Qt.resolvedUrl(
+ "file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath)
else
return ""
}
-
+
Component.onCompleted: {
if (Qt.platform.os !== "windows") {
- root.canFadeByWallpaperFillMode = false;
- return ;
+ root.canFadeByWallpaperFillMode = false
+ return
}
switch (Wallpaper.windowsDesktopProperties.wallpaperStyle) {
case 10:
- imgCover.fillMode = Image.PreserveAspectCrop;
- break;
+ imgCover.fillMode = Image.PreserveAspectCrop
+ break
case 6:
- imgCover.fillMode = Image.PreserveAspectFit;
- break;
+ imgCover.fillMode = Image.PreserveAspectFit
+ break
case 2:
- break;
+ break
case 0:
if (desktopProperties.isTiled) {
// Tiled
- imgCover.fillMode = Image.Tile;
+ imgCover.fillMode = Image.Tile
} else {
// Center
- imgCover.fillMode = Image.PreserveAspectFit;
- imgCover.anchors.centerIn = parent;
- imgCover.width = sourceSize.width;
- imgCover.height = sourceSize.height;
+ imgCover.fillMode = Image.PreserveAspectFit
+ imgCover.anchors.centerIn = parent
+ imgCover.width = sourceSize.width
+ imgCover.height = sourceSize.height
}
- break;
+ break
case 22:
- root.canFadeByWallpaperFillMode = false;
- break;
+ root.canFadeByWallpaperFillMode = false
+ break
}
}
@@ -206,7 +210,6 @@ Rectangle {
target: imgCover
opacity: 1
}
-
},
State {
name: "hideDefaultBackgroundImage"
@@ -215,7 +218,6 @@ Rectangle {
target: imgCover
opacity: 0
}
-
},
State {
name: "exit"
@@ -224,7 +226,6 @@ Rectangle {
target: imgCover
opacity: 1
}
-
}
]
transitions: [
@@ -243,9 +244,7 @@ Rectangle {
duration: 600
property: "opacity"
}
-
}
-
},
Transition {
from: "hideDefaultBackgroundImage"
@@ -262,9 +261,7 @@ Rectangle {
ScriptAction {
script: Wallpaper.terminate()
}
-
}
-
}
]
}
@@ -294,7 +291,12 @@ Rectangle {
}
Text {
- text: "projectSourceFileAbsolute " + Wallpaper.projectSourceFileAbsolute
+ text: "getApplicationPath " + Wallpaper.getApplicationPath()
+ font.pointSize: 14
+ }
+
+ Text {
+ text: "projectSourceFileAbsolute " + Qt.resolvedUrl(Wallpaper.projectSourceFileAbsolute)
font.pointSize: 14
}
@@ -331,9 +333,10 @@ Rectangle {
Text {
text: {
if (Qt.platform.os === "windows")
- return "imgCover.source " + Qt.resolvedUrl("file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath)
- else
- return ""
+ return "imgCover.source " + Qt.resolvedUrl(
+ "file:///" + Wallpaper.windowsDesktopProperties.wallpaperPath)
+ else
+ return ""
}
font.pointSize: 14
}
@@ -342,13 +345,10 @@ Rectangle {
text: "imgCover.status " + imgCover.status
font.pointSize: 14
}
-
}
background: Rectangle {
opacity: 0.5
}
-
}
-
}
diff --git a/ScreenPlayWallpaper/src/basewindow.cpp b/ScreenPlayWallpaper/src/basewindow.cpp
index de9d2ecb..396e782a 100644
--- a/ScreenPlayWallpaper/src/basewindow.cpp
+++ b/ScreenPlayWallpaper/src/basewindow.cpp
@@ -85,7 +85,13 @@ BaseWindow::BaseWindow(
if (auto typeOpt = ScreenPlayUtil::getInstalledTypeFromString(project.value("type").toString())) {
setType(typeOpt.value());
- if (!project.contains("videoCodec")) {
+ if (this->type() == ScreenPlay::InstalledType::InstalledType::VideoWallpaper) {
+ if (auto videoCodecOpt = ScreenPlayUtil::getVideoCodecFromString(project.value("videoCodec").toString())) {
+ setVideoCodec(videoCodecOpt.value());
+ } else {
+ qCritical() << "Cannot parse Wallpaper video codec from value" << project.value("type");
+ }
+ } else if (!project.contains("videoCodec") && this->type() == ScreenPlay::InstalledType::InstalledType::VideoWallpaper) {
qWarning("No videoCodec was specified inside the json object!");
const QString filename = project.value("file").toString();
if (filename.endsWith(".mp4")) {
@@ -93,14 +99,6 @@ BaseWindow::BaseWindow(
} else if (filename.endsWith(".webm")) {
setVideoCodec(ScreenPlay::VideoCodec::VideoCodec::VP8);
}
- } else {
- if (this->type() == ScreenPlay::InstalledType::InstalledType::VideoWallpaper) {
- if (auto videoCodecOpt = ScreenPlayUtil::getVideoCodecFromString(project.value("videoCodec").toString())) {
- setVideoCodec(videoCodecOpt.value());
- } else {
- qCritical() << "Cannot parse Wallpaper video codec from value" << project.value("type");
- }
- }
}
} else {
diff --git a/ScreenPlayWallpaper/src/winwindow.cpp b/ScreenPlayWallpaper/src/winwindow.cpp
index 2ee42195..9f3935ad 100644
--- a/ScreenPlayWallpaper/src/winwindow.cpp
+++ b/ScreenPlayWallpaper/src/winwindow.cpp
@@ -285,20 +285,43 @@ void WinWindow::setupWallpaperForOneScreen(int activeScreen)
*/
void WinWindow::setupWallpaperForAllScreens()
{
+ ScreenPlayUtil::WinMonitorStats monitors;
QRect rect;
- for (int i = 0; i < QApplication::screens().count(); i++) {
- QScreen* screenTmp = QApplication::screens().at(i);
- rect.setWidth(rect.width() + screenTmp->geometry().width());
- rect.setHeight(rect.height() + screenTmp->geometry().height());
+ for (int i = 0; i < monitors.iMonitors.size(); i++) {
+ const int width = std::abs(monitors.rcMonitors[i].right - monitors.rcMonitors[i].left);
+ const int height = std::abs(monitors.rcMonitors[i].top - monitors.rcMonitors[i].bottom);
+ qInfo() << width << height;
+ rect.setWidth(rect.width() + width);
+ rect.setHeight(rect.height() + height);
}
- m_window.setHeight(rect.height());
- m_window.setWidth(rect.width());
- if (!SetWindowPos(m_windowHandle, HWND_TOPMOST, 0, 0, rect.width(), rect.height(), SWP_NOSIZE | SWP_NOMOVE)) {
+ int offsetX = 0;
+ int offsetY = 0;
+ for (int i = 0; i < monitors.iMonitors.size(); i++) {
+ const int x = monitors.rcMonitors[i].left;
+ const int y = monitors.rcMonitors[i].top;
+ qInfo() << x << y;
+ if (x < offsetX) {
+ offsetX = x;
+ }
+ if (y < offsetY) {
+ offsetY += y;
+ }
+ }
+ if (!SetWindowPos(m_windowHandle, nullptr, offsetX, offsetY, rect.width(), rect.height(), SWP_NOSIZE | SWP_NOMOVE)) {
+ qFatal("Could not set window pos: ");
+ }
+ if (!SetWindowPos(m_windowHandle, nullptr, offsetX, offsetY, rect.width(), rect.height(), SWP_NOSIZE | SWP_NOMOVE)) {
qFatal("Could not set window pos: ");
}
if (SetParent(m_windowHandle, m_windowHandleWorker) == nullptr) {
qFatal("Could not attach to parent window");
}
+ qInfo() << rect.width() << rect.height() << offsetX << offsetY;
+ m_window.setHeight(rect.height());
+ m_window.setWidth(rect.width());
+ m_window.setY(offsetY);
+ m_window.setX(offsetX + 1920);
+ qInfo() << m_window.geometry();
}
/*!
diff --git a/ScreenPlayWorkshop/CMakeLists.txt b/ScreenPlayWorkshop/CMakeLists.txt
index 3d61322f..00211656 100644
--- a/ScreenPlayWorkshop/CMakeLists.txt
+++ b/ScreenPlayWorkshop/CMakeLists.txt
@@ -42,6 +42,7 @@ if(WIN32)
set(STEAM_BIN "${STEAM_LIB_PATH}/win64/steam_api64.dll")
elseif(APPLE)
set(WORKSHOP_PLUGIN_DIR ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/Workshop)
+ set(MACOS_FRAMEWORKS_DIR ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/Frameworks/)
set(STEAM_LIB "${STEAM_LIB_PATH}/osx/libsteam_api.dylib")
set(STEAM_BIN ${STEAM_LIB})
elseif(UNIX)
@@ -50,38 +51,37 @@ elseif(UNIX)
set(STEAM_BIN ${STEAM_LIB})
endif()
+add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADER})
+target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Quick ${STEAM_LIB} ScreenPlayUtil SteamSDK)
+
qt_add_qml_module(
${PROJECT_NAME}
- OUTPUT_DIRECTORY ${WORKSHOP_PLUGIN_DIR}
- URI "Workshop"
- SOURCES ${SOURCES} ${HEADER}
+ OUTPUT_DIRECTORY
+ ${WORKSHOP_PLUGIN_DIR}
+ URI
+ "Workshop"
+ SOURCES
+ ${SOURCES}
+ ${HEADER}
VERSION
1.0)
-if(APPLE)
- if(${SCREENPLAY_STEAM})
- add_custom_command(
- TARGET ${PROJECT_NAME}
- POST_BUILD
- COMMENT "Copying steam_appid.txt into ScreenPlay.app bundle. This is for development only!"
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/steam_appid.txt
- ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/)
+if(${SCREENPLAY_STEAM})
+ if(APPLE)
+ file(MAKE_DIRECTORY ${WORKSHOP_PLUGIN_DIR})
+ file(MAKE_DIRECTORY ${MACOS_FRAMEWORKS_DIR})
- add_custom_command(
- TARGET ${PROJECT_NAME}
- POST_BUILD
- COMMENT "Copying libsteam_api.dylib into ScreenPlay.app bundle."
- COMMAND ${CMAKE_COMMAND} -E copy ${STEAM_LIB}
- ${WORKSHOP_PLUGIN_DIR})
- endif()
-else()
- if(${SCREENPLAY_STEAM})
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/steam_appid.txt ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/ COPYONLY)
+ configure_file(${STEAM_BIN} ${WORKSHOP_PLUGIN_DIR} COPYONLY)
+
+ set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY
+ ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/Workshop)
+ else()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/steam_appid.txt ${CMAKE_BINARY_DIR}/bin/steam_appid.txt COPYONLY)
configure_file(${STEAM_BIN} ${CMAKE_BINARY_DIR}/bin/ COPYONLY)
endif()
endif()
-
# Needed by the automatic generated target missing includes
# https://github.com/qt/qtdeclarative/blob/7a7064e14f094e843e1ee832cc927e86f887621a/src/qml/Qt6QmlMacros.cmake#L2042
target_include_directories(${PROJECT_NAME} PUBLIC src/)
diff --git a/ScreenPlayWorkshop/SteamSDK/CMakeLists.txt b/ScreenPlayWorkshop/SteamSDK/CMakeLists.txt
index 74e908c4..ea23c2fc 100644
--- a/ScreenPlayWorkshop/SteamSDK/CMakeLists.txt
+++ b/ScreenPlayWorkshop/SteamSDK/CMakeLists.txt
@@ -49,9 +49,7 @@ set(HEADER
public/steam/steamnetworkingtypes.h
public/steam/steamps3params.h
public/steam/steamtypes.h
- public/steam/steamuniverse.h
-)
-
+ public/steam/steamuniverse.h)
if(${SCREENPLAY_STEAM})
add_library(${PROJECT_NAME} STATIC ${HEADER})
@@ -59,8 +57,8 @@ if(${SCREENPLAY_STEAM})
target_link_libraries(${PROJECT_NAME})
endif()
-# We allaways need the generated enums as a workaround to register these enums in app.cpp.
-# Registering in the ScreenPlayWorkshop plugin does not work for some reason.
+# We allaways need the generated enums as a workaround to register these enums in app.cpp. Registering in the ScreenPlayWorkshop plugin does
+# not work for some reason.
add_library(SteamSDKQtEnums STATIC public/steam/steam_qt_enums_generated.h)
target_include_directories(SteamSDKQtEnums PUBLIC public/)
target_link_libraries(SteamSDKQtEnums PRIVATE Qt6::Core)
diff --git a/ScreenPlayWorkshop/src/installedlistmodel.cpp b/ScreenPlayWorkshop/src/installedlistmodel.cpp
index 112f7ef7..b7d22c69 100644
--- a/ScreenPlayWorkshop/src/installedlistmodel.cpp
+++ b/ScreenPlayWorkshop/src/installedlistmodel.cpp
@@ -88,8 +88,10 @@ void InstalledListModel::append(const QJsonObject& obj, const QString& folderNam
void InstalledListModel::loadInstalledContent()
{
+ if (m_loadContentFutureWatcher.isRunning())
+ return;
- QtConcurrent::run([this]() {
+ m_loadContentFuture = QtConcurrent::run([this]() {
QFileInfoList list = QDir(m_absoluteStoragePath.toLocalFile()).entryInfoList(QDir::NoDotAndDotDot | QDir::AllDirs);
for (const auto& item : list) {
@@ -117,6 +119,7 @@ void InstalledListModel::loadInstalledContent()
emit installedLoadingFinished();
});
+ m_loadContentFutureWatcher.setFuture(m_loadContentFuture);
}
QVariantMap InstalledListModel::get(QString folderId)
diff --git a/ScreenPlayWorkshop/src/installedlistmodel.h b/ScreenPlayWorkshop/src/installedlistmodel.h
index 90cb1712..b4c90454 100644
--- a/ScreenPlayWorkshop/src/installedlistmodel.h
+++ b/ScreenPlayWorkshop/src/installedlistmodel.h
@@ -89,6 +89,8 @@ signals:
private:
QVector m_screenPlayFiles;
QUrl m_absoluteStoragePath;
+ QFuture m_loadContentFuture;
+ QFutureWatcher m_loadContentFutureWatcher;
};
}
diff --git a/ScreenPlayWorkshop/src/uploadlistmodel.h b/ScreenPlayWorkshop/src/uploadlistmodel.h
index 4ba07d80..2da372ae 100644
--- a/ScreenPlayWorkshop/src/uploadlistmodel.h
+++ b/ScreenPlayWorkshop/src/uploadlistmodel.h
@@ -103,16 +103,16 @@ public slots:
emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::UploadProgressRole) });
});
QObject::connect(item.get(), &SteamWorkshopItem::nameChanged, this, [this]() {
- emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::NameRole) });
+ emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::NameRole) });
});
QObject::connect(item.get(), &SteamWorkshopItem::absolutePreviewImagePathChanged, this, [this]() {
- emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::AbsolutePreviewImagePath) });
+ emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::AbsolutePreviewImagePath) });
});
QObject::connect(item.get(), &SteamWorkshopItem::uploadComplete, this, [this](bool successful) {
- emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::AbsolutePreviewImagePath) });
+ emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::AbsolutePreviewImagePath) });
});
QObject::connect(item.get(), &SteamWorkshopItem::statusChanged, this, [this](ScreenPlayWorkshopSteamEnums::EResult status) {
- emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::Status) });
+ emit this->dataChanged(index(0, 0), index(rowCount() - 1, 0), QVector { static_cast(UploadListModelRole::Status) });
// Check if all items are
diff --git a/Tools/CMakeLists.txt b/Tools/CMakeLists.txt
index 74329d96..7cbb9ccf 100644
--- a/Tools/CMakeLists.txt
+++ b/Tools/CMakeLists.txt
@@ -2,10 +2,8 @@ project(Tools LANGUAGES CXX)
file(GLOB PYTHON *.py)
-set(FILES
- # cmake-format: sortable
- Installer/package.xml
- Installer/installscript.qs)
+set(FILES # cmake-format: sortable
+ Installer/package.xml Installer/installscript.qs)
add_custom_target(
${PROJECT_NAME}
diff --git a/Tools/build.py b/Tools/build.py
index bc552c02..43bb0b39 100644
--- a/Tools/build.py
+++ b/Tools/build.py
@@ -23,6 +23,8 @@ def vs_env_dict():
return dict((e[0].upper(), e[1]) for e in [p.rstrip().split("=", 1) for p in output] if len(e) == 2)
# Based on https://stackoverflow.com/questions/7207309/how-to-run-functions-in-parallel
+
+
def run_io_tasks_in_parallel(tasks):
with ThreadPoolExecutor() as executor:
running_tasks = [executor.submit(task) for task in tasks]
@@ -30,13 +32,12 @@ def run_io_tasks_in_parallel(tasks):
running_task.result()
-
# MAIN
parser = argparse.ArgumentParser(description='Build and Package ScreenPlay')
parser.add_argument('-t', action="store", dest="build_type",
help="Build type. This is either debug or release.")
parser.add_argument('-sign', action="store", dest="sign_build",
- help="Enable if you want to sign the apps. This is macos only for now.")
+ help="Enable if you want to sign the apps. This is macos only for now.")
parser.add_argument('-steam', action="store", dest="steam_build",
help="Enable if you want to build the Steam workshop plugin.")
parser.add_argument('-tests', action="store", dest="build_tests",
@@ -85,7 +86,7 @@ if platform == "win32":
cmake_prefix_path = "c:/Qt/" + qt_version + "/" + windows_msvc
cmake_target_triplet = "x64-windows"
elif platform == "darwin":
- cmake_prefix_path = "~/Qt/" + qt_version + "/clang_64"
+ cmake_prefix_path = "~/Qt/" + qt_version + "/macos"
deploy_command = "{prefix_path}/bin/macdeployqt {app}.app -qmldir=../../{app}/qml -executable={app}.app/Contents/MacOS/{app}"
cmake_target_triplet = "x64-osx"
elif platform == "linux":
@@ -101,7 +102,8 @@ cmake_toolchain_file = (
"'{root_path}/../ScreenPlay-vcpkg/scripts/buildsystems/vcpkg.cmake'").format(root_path=root_path)
print("cmake_toolchain_file: %s " % cmake_toolchain_file)
-build_folder = root_path + "/build-" + cmake_target_triplet + "-" + args.build_type
+build_folder = root_path + "/build-" + \
+ cmake_target_triplet + "-" + args.build_type
if os.path.isdir(build_folder):
print("Remove previous build folder: " + build_folder)
@@ -153,9 +155,6 @@ execute(deploy_command.format(
executable_file_ending=executable_file_ending))
if platform == "darwin" and args.sign_build:
- print("Remove workshop build folder (macos only).")
- shutil.rmtree(build_folder + "/bin/workshop")
-
execute("codesign --deep -f -s \"Developer ID Application: Elias Steurer (V887LHYKRH)\" --timestamp --options \"runtime\" -f --entitlements \"../../ScreenPlay/entitlements.plist\" --deep \"ScreenPlay.app/\"")
execute("codesign --deep -f -s \"Developer ID Application: Elias Steurer (V887LHYKRH)\" --timestamp --options \"runtime\" -f --deep \"ScreenPlayWallpaper.app/\"")
execute("codesign --deep -f -s \"Developer ID Application: Elias Steurer (V887LHYKRH)\" --timestamp --options \"runtime\" -f --deep \"ScreenPlayWidget.app/\"")
@@ -165,9 +164,12 @@ if platform == "darwin" and args.sign_build:
execute("codesign --verify --verbose=4 \"ScreenPlayWidget.app/\"")
run_io_tasks_in_parallel([
- lambda: execute("xcnotary notarize ScreenPlay.app -d kelteseth@gmail.com -k ScreenPlay"),
- lambda: execute("xcnotary notarize ScreenPlayWallpaper.app -d kelteseth@gmail.com -k ScreenPlay"),
- lambda: execute("xcnotary notarize ScreenPlayWidget.app -d kelteseth@gmail.com -k ScreenPlay")
+ lambda: execute(
+ "xcnotary notarize ScreenPlay.app -d kelteseth@gmail.com -k ScreenPlay"),
+ lambda: execute(
+ "xcnotary notarize ScreenPlayWallpaper.app -d kelteseth@gmail.com -k ScreenPlay"),
+ lambda: execute(
+ "xcnotary notarize ScreenPlayWidget.app -d kelteseth@gmail.com -k ScreenPlay")
])
execute("spctl --assess --verbose \"ScreenPlay.app/\"")
@@ -177,7 +179,8 @@ if platform == "darwin" and args.sign_build:
# Some dlls like openssl do no longer get copied automatically.
# Lets just copy all of them into bin.
if platform == "win32":
- vcpkg_bin_path = os.path.abspath(("{root_path}/../ScreenPlay-vcpkg/installed/x64-windows/bin").format(root_path=root_path))
+ vcpkg_bin_path = os.path.abspath(
+ ("{root_path}/../ScreenPlay-vcpkg/installed/x64-windows/bin").format(root_path=root_path))
print(vcpkg_bin_path)
for basename in os.listdir(vcpkg_bin_path):
if basename.endswith('.dll'):