From 14419984355026e33bb481caba840a8f537dfd02 Mon Sep 17 00:00:00 2001 From: Elias Steurer Date: Sun, 22 Oct 2023 17:29:06 +0200 Subject: [PATCH] Add working Windows pipes connection --- .vscode/extensions.json | 4 +- .vscode/tasks.json | 121 +++++++++--------- CMakeLists.txt | 5 +- Content/wallpaper_godot_fjord/Action.gd | 15 ++- Content/wallpaper_qml_particles/main.qml | 2 +- Content/widget_analog_clock/Clock.qml | 6 +- Content/widget_analog_clock/main.qml | 4 +- Content/widget_hello_world/main.qml | 2 +- ScreenPlay/qml/Community/XMLNewsfeed.qml | 2 +- ScreenPlay/qml/Installed/Installed.qml | 4 +- ScreenPlay/src/sdkconnection.cpp | 98 +++++++------- ScreenPlay/translations/ScreenPlay_.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_de_DE.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_es_ES.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_fr_FR.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_it_IT.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_ko_KR.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_nl_NL.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_pl_PL.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_pt_BR.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_ru_RU.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_tr_TR.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_vi_VN.ts | 83 ++++++++---- ScreenPlay/translations/ScreenPlay_zh_CN.ts | 83 ++++++++---- ScreenPlaySDK/src/screenplaysdk.cpp | 4 +- .../GDExtention/cmake/CompilerWarnings.cmake | 2 +- .../Godot/GDExtention/src/CMakeLists.txt | 9 +- .../src/ScreenPlayGodotWallpaper.cpp | 111 +++++----------- .../src/ScreenPlayGodotWallpaper.h | 12 +- .../Godot/GDExtention/src/WindowsPipe.cpp | 77 +++++++++++ .../Godot/GDExtention/src/WindowsPipe.h | 42 ++++++ .../Godot/GDExtention/src/WindowsPipeTest.cpp | 27 ++++ .../GDExtention/src/windowsPipeTestServer.py | 56 ++++++++ .../GDExtention/templates/CMakeLists.txt | 2 +- .../ScreenPlayGodotWallpaper.gdextension | 12 +- .../Godot/ScreenPlayGodot/export_presets.cfg | 2 +- .../Godot/ScreenPlayGodot/main.gd | 68 ++++++---- .../Godot/ScreenPlayGodot/main.tscn | 5 +- .../Godot/ScreenPlayGodot/project.godot | 3 +- .../contents/ui/WaitingForScreenplay.qml | 4 +- .../qml/SteamWorkshopStartPage.qml | 2 +- Tools/setup.py | 3 +- 42 files changed, 1219 insertions(+), 564 deletions(-) create mode 100644 ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipe.cpp create mode 100644 ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipe.h create mode 100644 ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipeTest.cpp create mode 100644 ScreenPlayWallpaper/Godot/GDExtention/src/windowsPipeTestServer.py diff --git a/.vscode/extensions.json b/.vscode/extensions.json index fb694d9a..bda5c7a9 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -5,6 +5,8 @@ "ms-vscode.cpptools-extension-pack", "ms-vscode.cmake-tools", "seanwu.vscode-qt-for-python", - "josetr.cmake-language-support-vscode" + "josetr.cmake-language-support-vscode", + "geequlim.godot-tools", + "stevebushresearch.buildoutputcolorizer" ] } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index a4195a1c..ab23c178 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -15,61 +15,7 @@ }, { "type": "process", - "label": "Format Cpp files", - "command": "python3", - "windows": { - "command": "python" - }, - "group": { - "kind": "build", - "isDefault": true - }, - "options": { - "cwd": "${workspaceFolder}/Tools" - }, - "args": [ - "check_format_cpp.py" - ] - }, - { - "type": "process", - "label": "Format CMake files", - "command": "python3", - "windows": { - "command": "python" - }, - "group": { - "kind": "build", - "isDefault": true - }, - "options": { - "cwd": "${workspaceFolder}/Tools" - }, - "args": [ - "check_format_cmake.py" - ] - }, - { - "type": "process", - "label": "Format Qml files", - "command": "python3", - "windows": { - "command": "python" - }, - "group": { - "kind": "build", - "isDefault": true - }, - "options": { - "cwd": "${workspaceFolder}/Tools" - }, - "args": [ - "check_format_qml.py" - ] - }, - { - "type": "process", - "label": "Run setup.py", + "label": "🛫 Run setup.py", "command": "python3", "windows": { "command": "python" @@ -87,8 +33,11 @@ }, { "type": "process", - "label": "Build Godot", - "command": "python", + "label": "⚙️ Build Godot Wallpaper", + "command": "python3", + "windows": { + "command": "python" + }, "group": { "kind": "build", "isDefault": true @@ -104,7 +53,7 @@ }, { "type": "process", - "label": "Build ScreenPlay release, with deploy and steam enabled", + "label": "⚙️ Build ScreenPlay release, with deploy and steam enabled", "command": "python3", "windows": { "command": "python" @@ -133,7 +82,61 @@ }, { "type": "process", - "label": "Update Qt *.ts translations", + "label": "📃 Format Cpp files", + "command": "python3", + "windows": { + "command": "python" + }, + "group": { + "kind": "build", + "isDefault": true + }, + "options": { + "cwd": "${workspaceFolder}/Tools" + }, + "args": [ + "check_format_cpp.py" + ] + }, + { + "type": "process", + "label": "📃 Format CMake files", + "command": "python3", + "windows": { + "command": "python" + }, + "group": { + "kind": "build", + "isDefault": true + }, + "options": { + "cwd": "${workspaceFolder}/Tools" + }, + "args": [ + "check_format_cmake.py" + ] + }, + { + "type": "process", + "label": "📃 Format Qml files", + "command": "python3", + "windows": { + "command": "python" + }, + "group": { + "kind": "build", + "isDefault": true + }, + "options": { + "cwd": "${workspaceFolder}/Tools" + }, + "args": [ + "check_format_qml.py" + ] + }, + { + "type": "process", + "label": "🗨️ Update Qt *.ts translations", "command": "python3", "windows": { "command": "python" diff --git a/CMakeLists.txt b/CMakeLists.txt index e4aa88de..707144bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,7 +40,6 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_CXX_STANDARD 20) set(THIRD_PARTY_PATH "${CMAKE_CURRENT_SOURCE_DIR}/ThirdParty/") -option(GODOT_WALLPAPER "Godot Wallpaper support" ON) option(OSX_BUNDLE "Enable distribution macOS bundle" OFF) set(CMAKE_OSX_DEPLOYMENT_TARGET "13.0") @@ -72,6 +71,7 @@ option(SCREENPLAY_DEPLOY "Marks this version as an official deploy version. This OFF) option(SCREENPLAY_TESTS "Enables UI tests." ON) option(SCREENPLAY_INSTALLER "Indicates whether an installer via the Qt Installer Framework is created." OFF) +option(SCREENPLAY_GODOT_SUPPORT "Compiles ScreenPlayGodotWallpaper." ON) # Gitlab CI has many ENV variables. We use this one to check if the current build happens inside the CI if(DEFINED ENV{CI_COMMIT_MESSAGE}) @@ -138,7 +138,7 @@ add_subdirectory(ScreenPlayWidget) add_subdirectory(ScreenPlayUtil) add_subdirectory(ScreenPlayWeather) -if(GODOT_WALLPAPER) +if(${SCREENPLAY_GODOT_SUPPORT}) add_subdirectory(ScreenPlayWallpaper/Godot) endif() @@ -176,6 +176,7 @@ message(STATUS "[OPTION] SCREENPLAY_DEPLOY = ${SCREENPLAY_DEPLOY}") message(STATUS "[OPTION] SCREENPLAY_INSTALLER = ${SCREENPLAY_INSTALLER}") message(STATUS "[OPTION] SCREENPLAY_STEAM = ${SCREENPLAY_STEAM}") message(STATUS "[OPTION] SCREENPLAY_TESTS = ${SCREENPLAY_TESTS}") +message(STATUS "[OPTION] SCREENPLAY_GODOT_SUPPORT = ${SCREENPLAY_GODOT_SUPPORT}") message(STATUS "[DEFINE] BUILD_TYPE = ${CMAKE_BUILD_TYPE}") message(STATUS "[DEFINE] GIT_COMMIT_HASH = ${GIT_COMMIT_HASH}") message(STATUS "[CPP DEFINE] DEPLOY_VERSION = ${DEPLOY_VERSION}") diff --git a/Content/wallpaper_godot_fjord/Action.gd b/Content/wallpaper_godot_fjord/Action.gd index b43a03cf..74593f7c 100644 --- a/Content/wallpaper_godot_fjord/Action.gd +++ b/Content/wallpaper_godot_fjord/Action.gd @@ -8,6 +8,7 @@ var screenplaywallpaper var appID = "" # Speed of the movement along the path var speed = 0.8 +var path = "/root/Wallpaper/ScreenPlayGodotWallpaper" func _process(delta): @@ -17,10 +18,10 @@ func _process(delta): # Loop back to the start if we've reached the end of the path if path_follow.progress >= 18.81: path_follow.progress = 0.0 - - screenplaywallpaper = get_node("/root/Wallpaper/ScreenPlayGodotWallpaper") - if screenplaywallpaper: - appID = screenplaywallpaper.get_appID() - else: - appID = "404" - label.text = "Godot Wallpaper\n" + Time.get_time_string_from_system() + "\nAppID: " + appID + return + if has_node(path): + if get_node(path): + appID = screenplaywallpaper.get_appID() + else: + appID = "404" + label.text = "Godot Wallpaper\n" + Time.get_time_string_from_system() + "\nAppID: " + appID diff --git a/Content/wallpaper_qml_particles/main.qml b/Content/wallpaper_qml_particles/main.qml index 9f2b561f..08d76ead 100644 --- a/Content/wallpaper_qml_particles/main.qml +++ b/Content/wallpaper_qml_particles/main.qml @@ -119,7 +119,7 @@ Item { bottom: parent.bottom bottomMargin: -width * .65 } - SequentialAnimation on opacity { + SequentialAnimation on opacity { loops: Animation.Infinite OpacityAnimator { diff --git a/Content/widget_analog_clock/Clock.qml b/Content/widget_analog_clock/Clock.qml index b50a08f2..5ce745a8 100644 --- a/Content/widget_analog_clock/Clock.qml +++ b/Content/widget_analog_clock/Clock.qml @@ -63,7 +63,7 @@ Item { origin.x: 7.5 origin.y: 73 angle: (clock.hours * 30) + (clock.minutes * 0.5) - Behavior on angle { + Behavior on angle { SpringAnimation { spring: 2 damping: 0.2 @@ -82,7 +82,7 @@ Item { origin.x: 6.5 origin.y: 83 angle: clock.minutes * 6 - Behavior on angle { + Behavior on angle { SpringAnimation { spring: 2 damping: 0.2 @@ -101,7 +101,7 @@ Item { origin.x: 2.5 origin.y: 80 angle: clock.seconds * 6 - Behavior on angle { + Behavior on angle { SpringAnimation { spring: 2 damping: 0.2 diff --git a/Content/widget_analog_clock/main.qml b/Content/widget_analog_clock/main.qml index a9bdae7b..2aa9119a 100644 --- a/Content/widget_analog_clock/main.qml +++ b/Content/widget_analog_clock/main.qml @@ -62,7 +62,7 @@ Item { source: "arrow.png" rotation: -90 opacity: clockview.atXBeginning ? 0 : 0.5 - Behavior on opacity { + Behavior on opacity { NumberAnimation { duration: 500 } @@ -76,7 +76,7 @@ Item { source: "arrow.png" rotation: 90 opacity: clockview.atXEnd ? 0 : 0.5 - Behavior on opacity { + Behavior on opacity { NumberAnimation { duration: 500 } diff --git a/Content/widget_hello_world/main.qml b/Content/widget_hello_world/main.qml index 5b263a10..810b292a 100644 --- a/Content/widget_hello_world/main.qml +++ b/Content/widget_hello_world/main.qml @@ -23,7 +23,7 @@ Item { // to the opacity of the rectangle opacity: sizeSlider.value // Animate the opacity change to make it smooth - Behavior on opacity { + Behavior on opacity { NumberAnimation { duration: 100 } diff --git a/ScreenPlay/qml/Community/XMLNewsfeed.qml b/ScreenPlay/qml/Community/XMLNewsfeed.qml index dcbd43fc..f0e13477 100644 --- a/ScreenPlay/qml/Community/XMLNewsfeed.qml +++ b/ScreenPlay/qml/Community/XMLNewsfeed.qml @@ -105,7 +105,7 @@ Item { source: image opacity: status === Image.Ready ? 1 : 0 - Behavior on opacity { + Behavior on opacity { PropertyAnimation { duration: 250 } diff --git a/ScreenPlay/qml/Installed/Installed.qml b/ScreenPlay/qml/Installed/Installed.qml index c8600802..5ca7e255 100644 --- a/ScreenPlay/qml/Installed/Installed.qml +++ b/ScreenPlay/qml/Installed/Installed.qml @@ -177,7 +177,7 @@ Item { font.pointSize: 18 } - PropertyAnimation on opacity { + PropertyAnimation on opacity { id: animFadeIn from: 0 @@ -211,7 +211,7 @@ Item { } } - PropertyAnimation on opacity { + PropertyAnimation on opacity { id: animFadeInTxtFooter from: 0 diff --git a/ScreenPlay/src/sdkconnection.cpp b/ScreenPlay/src/sdkconnection.cpp index 99fa4812..b022aab6 100644 --- a/ScreenPlay/src/sdkconnection.cpp +++ b/ScreenPlay/src/sdkconnection.cpp @@ -37,56 +37,60 @@ ScreenPlay::SDKConnection::SDKConnection(QLocalSocket* socket, QObject* parent) */ void ScreenPlay::SDKConnection::readyRead() { - - auto msg = QString(m_socket->readAll()); - - if (msg == "ping") { - emit pingAliveReceived(); - return; - } - - // The first message allways contains the appID - if (msg.startsWith("appID=")) { - QStringList args = msg.split(","); - // Only use the first 32 chars for the appID - QString appID = args.at(0); - m_appID = appID.remove("appID="); - - bool typeFound = false; - for (const QString& type : ScreenPlayUtil::getAvailableTypes()) { - if (msg.contains(type, Qt::CaseInsensitive)) { - m_type = type; - typeFound = true; - break; - } - } - - if (!typeFound) { - qCritical() << "Wallpaper type not found. Expected: " << ScreenPlayUtil::getAvailableTypes() << " got: " << msg; - } - - qInfo() << "[2/4] SDKConnection parsed with type: " << m_type << " connected with AppID:" << m_appID; - - emit appConnected(this); - - } else if (msg.startsWith("command=")) { - msg.remove("command="); - if (msg == "requestRaise") { - qInfo() << "Another ScreenPlay instance reuqested this one to raise!"; - emit requestRaise(); - } - } else if (msg.startsWith("{") && msg.endsWith("}")) { - QJsonObject obj; - QJsonParseError err {}; - QJsonDocument doc = QJsonDocument::fromJson(QByteArray { msg.toUtf8() }, &err); - - if (err.error != QJsonParseError::NoError) + // Split all messages by semicolon. This fixes double messages like pingping + // when we get messages to fast + const QString read = QString(m_socket->readAll()); + const QStringList messages = read.split(";"); + for (const QString& msg : messages) { + if (msg == "ping") { + emit pingAliveReceived(); return; + } - emit jsonMessageReceived(doc.object()); + // The first message allways contains the appID + if (msg.startsWith("appID=")) { + QStringList args = msg.split(","); + // Only use the first 32 chars for the appID + QString appID = args.at(0); + m_appID = appID.remove("appID="); - } else { - qInfo() << "### Message from: " << m_appID << ": " << msg; + bool typeFound = false; + for (const QString& type : ScreenPlayUtil::getAvailableTypes()) { + if (msg.contains(type, Qt::CaseInsensitive)) { + m_type = type; + typeFound = true; + break; + } + } + + if (!typeFound) { + qCritical() << "Wallpaper type not found. Expected: " << ScreenPlayUtil::getAvailableTypes() << " got: " << msg; + } + + qInfo() << "[2/4] SDKConnection parsed with type: " << m_type << " connected with AppID:" << m_appID; + + emit appConnected(this); + + } else if (msg.startsWith("command=")) { + QString command = msg; + command.remove("command="); + if (msg == "requestRaise") { + qInfo() << "Another ScreenPlay instance reuqested this one to raise!"; + emit requestRaise(); + } + } else if (msg.startsWith("{") && msg.endsWith("}")) { + QJsonObject obj; + QJsonParseError err {}; + QJsonDocument doc = QJsonDocument::fromJson(QByteArray { msg.toUtf8() }, &err); + + if (err.error != QJsonParseError::NoError) + return; + + emit jsonMessageReceived(doc.object()); + + } else { + qInfo() << "### Message from: " << m_appID << ": " << msg; + } } } diff --git a/ScreenPlay/translations/ScreenPlay_.ts b/ScreenPlay/translations/ScreenPlay_.ts index c92587d9..3fc2a569 100644 --- a/ScreenPlay/translations/ScreenPlay_.ts +++ b/ScreenPlay/translations/ScreenPlay_.ts @@ -622,6 +622,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -815,14 +819,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. - - High priority Autostart - - - - This options grants ScreenPlay a higher autostart priority than other apps. - - Send anonymous crash reports and statistics @@ -875,22 +871,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light - - Performance - - - - 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! - - - - Default Fill Mode - - Set this property to define how the video is scaled to fit the target area. @@ -971,6 +951,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1037,6 +1041,37 @@ ScreenPlay will only quit if no Wallpaper are running. + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_de_DE.ts b/ScreenPlay/translations/ScreenPlay_de_DE.ts index 92da3d3c..c5dac152 100644 --- a/ScreenPlay/translations/ScreenPlay_de_DE.ts +++ b/ScreenPlay/translations/ScreenPlay_de_DE.ts @@ -624,6 +624,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -817,14 +821,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay startet mit Windows und richtet deinen Desktop jedes Mal für dich ein. - - High priority Autostart - Hohe Priorität für Autostart - - - This options grants ScreenPlay a higher autostart priority than other apps. - Diese Option gewährt ScreenPlay eine höhere Autostartpriorität als anderen Anwendungen. - Send anonymous crash reports and statistics Sende anonyme Absturzberichte und Statistiken @@ -877,22 +873,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Hell - - Performance - Leistung - - - Pause wallpaper video rendering while another app is in the foreground - Pausiere Wallpaper Video Rendering wenn eine andere App im Vordergrund ist - - - 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! - Wir deaktivieren das Video Rendering (Aber nicht die Sounds) für die beste Leistung. Wenn du damit probleme haben solltest kannst dieses Verhalten hier ausschalten. Ein Neustart wird aber von Nöten sein! - - - Default Fill Mode - Standard-Füllmodus - Set this property to define how the video is scaled to fit the target area. Lege diese Eigenschaft fest, um zu definieren, wie das Video skaliert wird, damit es in den Zielbereich passt. @@ -973,6 +953,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Datenschutz + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1039,6 +1043,37 @@ ScreenPlay will only quit if no Wallpaper are running. Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_es_ES.ts b/ScreenPlay/translations/ScreenPlay_es_ES.ts index 119b93e7..b23da173 100644 --- a/ScreenPlay/translations/ScreenPlay_es_ES.ts +++ b/ScreenPlay/translations/ScreenPlay_es_ES.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay will start with Windows and will setup your Desktop every time for you. - - High priority Autostart - High priority Autostart - - - This options grants ScreenPlay a higher autostart priority than other apps. - This options grants ScreenPlay a higher autostart priority than other apps. - Send anonymous crash reports and statistics Send anonymous crash reports and statistics @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Light - - Performance - Performance - - - Pause wallpaper video rendering while another app is in the foreground - 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! - 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! - - - Default Fill Mode - Default Fill Mode - Set this property to define how the video is scaled to fit the target area. Set this property to define how the video is scaled to fit the target area. @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Privacy + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_fr_FR.ts b/ScreenPlay/translations/ScreenPlay_fr_FR.ts index f23c9ce9..ef49b2d5 100644 --- a/ScreenPlay/translations/ScreenPlay_fr_FR.ts +++ b/ScreenPlay/translations/ScreenPlay_fr_FR.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay démarrera avec Windows et configurera votre bureau à chaque fois pour vous. - - High priority Autostart - Démarrage automatique haute priorité - - - This options grants ScreenPlay a higher autostart priority than other apps. - Cette option accorde à ScreenPlay une priorité de démarrage automatique plus élevée que les autres applications. - Send anonymous crash reports and statistics Envoyer des rapports d'incidents et des statistiques anonymes @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Clair - - Performance - Performance - - - Pause wallpaper video rendering while another app is in the foreground - Mettre en pause le rendu vidéo du fond d'écran quand une autre application est en premier plan - - - 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! - Nous désactivons le rendu vidéo (pas l'audio) pour obtenir les meilleures performances. Si vous rencontrez des problèmes, vous pouvez désactiver ce comportement ici. Redémarrage du fond d'écran requis ! - - - Default Fill Mode - Mode de remplissage par défaut - Set this property to define how the video is scaled to fit the target area. Définissez cette propriété afin de déterminer la façon dont la vidéo est mise à l'échelle pour s'adapter à la zone cible. @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Confidentialité + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. Vous trouverez ci-dessous des outils pour créer des fonds d'écran, au-delà des outils que ScreenPlay met à votre disposition ! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_it_IT.ts b/ScreenPlay/translations/ScreenPlay_it_IT.ts index 3de0eb35..a8668e70 100644 --- a/ScreenPlay/translations/ScreenPlay_it_IT.ts +++ b/ScreenPlay/translations/ScreenPlay_it_IT.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay si avvierà con Windows e configurerà il desktop ogni volta per te. - - High priority Autostart - Avvio automatico ad alta priorità - - - This options grants ScreenPlay a higher autostart priority than other apps. - Questa opzione garantisce a ScreenPlay una priorità di avvio automatico più alta di altre applicazioni. - Send anonymous crash reports and statistics Invia report e statistiche anonime sui crash @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Chiaro - - Performance - Prestazioni - - - Pause wallpaper video rendering while another app is in the foreground - Metti in pausa il rendering video dello sfondo mentre un'altra app è in primo piano - - - 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! - Disattiviamo il rendering video (non l'audio!) per migliori prestazioni. Se hai problemi puoi disabilitare questa opzione qui. È necessario riavviare lo sfondo! - - - Default Fill Mode - Modalità riempimento predefinita - Set this property to define how the video is scaled to fit the target area. Imposta questa proprietà per definire come il video viene adattato all'area di destinazione. @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Privacy + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_ko_KR.ts b/ScreenPlay/translations/ScreenPlay_ko_KR.ts index 723603ff..5ee20bbd 100644 --- a/ScreenPlay/translations/ScreenPlay_ko_KR.ts +++ b/ScreenPlay/translations/ScreenPlay_ko_KR.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay will start with Windows and will setup your Desktop every time for you. - - High priority Autostart - High priority Autostart - - - This options grants ScreenPlay a higher autostart priority than other apps. - This options grants ScreenPlay a higher autostart priority than other apps. - Send anonymous crash reports and statistics Send anonymous crash reports and statistics @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Light - - Performance - Performance - - - Pause wallpaper video rendering while another app is in the foreground - 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! - 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! - - - Default Fill Mode - Default Fill Mode - Set this property to define how the video is scaled to fit the target area. Set this property to define how the video is scaled to fit the target area. @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Privacy + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_nl_NL.ts b/ScreenPlay/translations/ScreenPlay_nl_NL.ts index c1e78717..94801792 100644 --- a/ScreenPlay/translations/ScreenPlay_nl_NL.ts +++ b/ScreenPlay/translations/ScreenPlay_nl_NL.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay will start with Windows and will setup your Desktop every time for you. - - High priority Autostart - High priority Autostart - - - This options grants ScreenPlay a higher autostart priority than other apps. - This options grants ScreenPlay a higher autostart priority than other apps. - Send anonymous crash reports and statistics Send anonymous crash reports and statistics @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Light - - Performance - Performance - - - Pause wallpaper video rendering while another app is in the foreground - 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! - 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! - - - Default Fill Mode - Default Fill Mode - Set this property to define how the video is scaled to fit the target area. Set this property to define how the video is scaled to fit the target area. @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Privacy + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_pl_PL.ts b/ScreenPlay/translations/ScreenPlay_pl_PL.ts index a3a0a647..aaa896cf 100644 --- a/ScreenPlay/translations/ScreenPlay_pl_PL.ts +++ b/ScreenPlay/translations/ScreenPlay_pl_PL.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay zostanie uruchomione przy starcie systemu Windows i ustawi dla Ciebie tapetę za każdym razem. - - High priority Autostart - Wysoki priorytet autostartu - - - This options grants ScreenPlay a higher autostart priority than other apps. - Ta opcja nadaje ScreenPlay wyższy priorytet autostartu w porównaniu do innych aplikacji. - Send anonymous crash reports and statistics Wysyłaj anonimowe raporty o awariach oraz statystyki @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Jasny - - Performance - Wydajność - - - Pause wallpaper video rendering while another app is in the foreground - Wstrzymaj renderowanie tapety wideo, gdy inna aplikacja jest na pierwszym planie - - - 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! - Wyłączamy renderowanie wideo (dźwięk zostaje!) dla najlepszej wydajności. W przypadku problemów, możesz wyłączyć tę funkcję tutaj. Wymaga ponownego uruchomienia tapety! - - - Default Fill Mode - Domyślny tryb wypełniania - Set this property to define how the video is scaled to fit the target area. To ustawienie określa, w jaki sposób film jest skalowany, aby dopasować go do obszaru docelowego. @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Prywatność + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. Poniżej znajdziesz dodatkowe narzędzia do tworzenia tapety poza tymi, które oferuje dla Ciebie ScreenPlay! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_pt_BR.ts b/ScreenPlay/translations/ScreenPlay_pt_BR.ts index 210eecfe..577a8fce 100644 --- a/ScreenPlay/translations/ScreenPlay_pt_BR.ts +++ b/ScreenPlay/translations/ScreenPlay_pt_BR.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay will start with Windows and will setup your Desktop every time for you. - - High priority Autostart - High priority Autostart - - - This options grants ScreenPlay a higher autostart priority than other apps. - This options grants ScreenPlay a higher autostart priority than other apps. - Send anonymous crash reports and statistics Send anonymous crash reports and statistics @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Light - - Performance - Performance - - - Pause wallpaper video rendering while another app is in the foreground - 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! - 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! - - - Default Fill Mode - Default Fill Mode - Set this property to define how the video is scaled to fit the target area. Set this property to define how the video is scaled to fit the target area. @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Privacy + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_ru_RU.ts b/ScreenPlay/translations/ScreenPlay_ru_RU.ts index 815643b8..b4515b15 100644 --- a/ScreenPlay/translations/ScreenPlay_ru_RU.ts +++ b/ScreenPlay/translations/ScreenPlay_ru_RU.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay will start with Windows and will setup your Desktop every time for you. - - High priority Autostart - High priority Autostart - - - This options grants ScreenPlay a higher autostart priority than other apps. - This options grants ScreenPlay a higher autostart priority than other apps. - Send anonymous crash reports and statistics Send anonymous crash reports and statistics @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Light - - Performance - Performance - - - Pause wallpaper video rendering while another app is in the foreground - 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! - 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! - - - Default Fill Mode - Default Fill Mode - Set this property to define how the video is scaled to fit the target area. Set this property to define how the video is scaled to fit the target area. @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Privacy + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_tr_TR.ts b/ScreenPlay/translations/ScreenPlay_tr_TR.ts index c82601eb..764a5518 100644 --- a/ScreenPlay/translations/ScreenPlay_tr_TR.ts +++ b/ScreenPlay/translations/ScreenPlay_tr_TR.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay, Windows ile başlayacak ve her seferinde sizin için Masaüstünüzü kuracaktır. - - High priority Autostart - Yüksek öncelikli Otomatik başlatma - - - This options grants ScreenPlay a higher autostart priority than other apps. - Bu seçenekler, ScreenPlay'e diğer uygulamalardan daha yüksek bir otomatik başlatma önceliği verir. - Send anonymous crash reports and statistics Send anonymous crash reports and statistics @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Aydınlık - - Performance - Performans - - - Pause wallpaper video rendering while another app is in the foreground - Başka bir uygulama ön plandayken duvar kağıdı video oluşturmayı duraklatın - - - 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! - En iyi performans için video oluşturmayı (sesi değil!) devre dışı bırakıyoruz. Sorun yaşıyorsanız, bu davranışı buradan devre dışı bırakabilirsiniz. Duvar kağıdının yeniden başlatılması gerekiyor! - - - Default Fill Mode - Varsayılan Doldurma Modu - Set this property to define how the video is scaled to fit the target area. Videonun hedef alana sığacak şekilde nasıl ölçeklendirileceğini tanımlamak için bu özelliği ayarlayın. @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Privacy + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_vi_VN.ts b/ScreenPlay/translations/ScreenPlay_vi_VN.ts index 692d6c67..4ad437cb 100644 --- a/ScreenPlay/translations/ScreenPlay_vi_VN.ts +++ b/ScreenPlay/translations/ScreenPlay_vi_VN.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay sẽ chạy cùng với Windows và sẽ thiết lập màn hình nền cho bạn. - - High priority Autostart - Tự động mở ưu tiên hơn - - - This options grants ScreenPlay a higher autostart priority than other apps. - Tùy chọn này cho phép ScreenPlay quyền tự động chạy ưu tiên hơn những ứng dụng khác. - Send anonymous crash reports and statistics Gửi báo cáo sự cố và só liệu thống kê ẩn danh @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light Sáng - - Performance - Hiệu suất - - - Pause wallpaper video rendering while another app is in the foreground - Tạm dừng ảnh nền video khi có một ứng dụng khác đang mở phía trước - - - 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! - Chúng tôi tắt hiển thị video (không phải âm thanh!) Để có hiệu suất tốt nhất. Nếu bạn gặp sự cố, bạn có thể vô hiệu hóa hành vi này tại đây. Yêu cầu khởi động lại hình nền! - - - Default Fill Mode - Cách lấp đầy mặc định - Set this property to define how the video is scaled to fit the target area. Đặt thuộc tính này để xác định cách chia tỷ lệ video để phù hợp với khu vực mục tiêu. @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy Quyền riêng tư + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. Below you can find tools to create wallaper, beyond the tools that ScreenPlay provides for you! + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlay/translations/ScreenPlay_zh_CN.ts b/ScreenPlay/translations/ScreenPlay_zh_CN.ts index 205a158a..7f71130e 100644 --- a/ScreenPlay/translations/ScreenPlay_zh_CN.ts +++ b/ScreenPlay/translations/ScreenPlay_zh_CN.ts @@ -625,6 +625,10 @@ ScreenPlay will only quit if no Wallpaper are running. Widgets Widgets + + Search for Wallpaper & Widgets + + InstalledWelcomeScreen @@ -818,14 +822,6 @@ ScreenPlay will only quit if no Wallpaper are running. ScreenPlay will start with Windows and will setup your Desktop every time for you. ScreenPlay将在操作系统启动时启动,并会设置您的桌面。 - - High priority Autostart - 高优先级自启动 - - - This options grants ScreenPlay a higher autostart priority than other apps. - 这个选项赋予ScreenPlay比其他应用程序更高的自启动优先级。 - Send anonymous crash reports and statistics 发送匿名崩溃报告和统计数据 @@ -878,22 +874,6 @@ ScreenPlay will only quit if no Wallpaper are running. Light - - Performance - 性能 - - - 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! - 我们禁用视频渲染(不是音频)以获得最佳性能。如果您有问题,可以在此处禁用此行为。 需要重启壁纸! - - - Default Fill Mode - 默认填充模式 - Set this property to define how the video is scaled to fit the target area. 设置此属性可定义视频的缩放方式以适应目标区域。 @@ -974,6 +954,30 @@ ScreenPlay will only quit if no Wallpaper are running. Privacy 隐私 + + Show default installed content + + + + ScreenPlay will show build in content. + + + + Wallpaper and Widgets + + + + Pause wallpaper video rendering while another app is in the foreground. + + + + Limitations: This setting is Windows only, currently only works if you have exactly one monitor connected, and is limited to wallpapers with no audio. Wallpaper restart is required, when changing this setting! + + + + Default Wallpaper Fill Mode + + SettingsExpander @@ -1040,6 +1044,37 @@ ScreenPlay will only quit if no Wallpaper are running. 下面是一些非ScreenPlay提供的壁纸创建工具 + + TrayIcon + + ScreenPlay - Double click to change you settings. + + + + Open ScreenPlay + + + + Mute all + + + + Unmute all + + + + Pause all + + + + Play all + + + + Quit ScreenPlay + + + WebsiteWallpaper diff --git a/ScreenPlaySDK/src/screenplaysdk.cpp b/ScreenPlaySDK/src/screenplaysdk.cpp index 4caec706..1847890e 100644 --- a/ScreenPlaySDK/src/screenplaysdk.cpp +++ b/ScreenPlaySDK/src/screenplaysdk.cpp @@ -63,7 +63,7 @@ void ScreenPlaySDK::connected() return; } - QByteArray welcomeMessage = QString("appID=" + m_appID + "," + m_type).toUtf8(); + QByteArray welcomeMessage = QString("appID=" + m_appID + "," + m_type + ";").toUtf8(); m_socket.write(welcomeMessage); if (!m_socket.waitForBytesWritten()) { disconnected(); @@ -164,7 +164,7 @@ void ScreenPlaySDK::redirectMessage(QByteArray& msg) void ScreenPlaySDK::pingAlive() { - m_socket.write("ping"); + m_socket.write("ping;"); if (!m_socket.waitForBytesWritten(500)) { qInfo() << "Cannot ping to main application. Closing!"; emit sdkDisconnected(); diff --git a/ScreenPlayWallpaper/Godot/GDExtention/cmake/CompilerWarnings.cmake b/ScreenPlayWallpaper/Godot/GDExtention/cmake/CompilerWarnings.cmake index bee0550f..78aab1e7 100644 --- a/ScreenPlayWallpaper/Godot/GDExtention/cmake/CompilerWarnings.cmake +++ b/ScreenPlayWallpaper/Godot/GDExtention/cmake/CompilerWarnings.cmake @@ -7,7 +7,7 @@ if ( NOT MSVC ) option( ${PROJECT_NAME_UPPERCASE}_WARN_EVERYTHING "Turn on all warnings (not recommended - used for lib development)" OFF ) endif() -option( ${PROJECT_NAME_UPPERCASE}_WARNING_AS_ERROR "Treat warnings as errors" ON ) +option( ${PROJECT_NAME_UPPERCASE}_WARNING_AS_ERROR "Treat warnings as errors" OFF ) # Add warnings based on compiler # Set some helper variables for readability diff --git a/ScreenPlayWallpaper/Godot/GDExtention/src/CMakeLists.txt b/ScreenPlayWallpaper/Godot/GDExtention/src/CMakeLists.txt index 22634324..b2480007 100644 --- a/ScreenPlayWallpaper/Godot/GDExtention/src/CMakeLists.txt +++ b/ScreenPlayWallpaper/Godot/GDExtention/src/CMakeLists.txt @@ -4,10 +4,17 @@ target_sources(${PROJECT_NAME} PRIVATE ScreenPlayGodotWallpaper.h ScreenPlayGodotWallpaper.cpp + WindowsPipe.h + WindowsPipe.cpp RegisterExtension.cpp ) - +find_package(Catch2 CONFIG REQUIRED) target_include_directories(${PROJECT_NAME} PRIVATE "src" ) + +# Test app. Start WindowsPipeTestServer.py! +add_executable(WindowsPipeTest WindowsPipeTest.cpp WindowsPipe.h WindowsPipe.cpp) +target_link_libraries(WindowsPipeTest PRIVATE Catch2::Catch2 Catch2::Catch2WithMain) +target_include_directories(WindowsPipeTest PRIVATE "src") \ No newline at end of file diff --git a/ScreenPlayWallpaper/Godot/GDExtention/src/ScreenPlayGodotWallpaper.cpp b/ScreenPlayWallpaper/Godot/GDExtention/src/ScreenPlayGodotWallpaper.cpp index 32369628..dfff013d 100644 --- a/ScreenPlayWallpaper/Godot/GDExtention/src/ScreenPlayGodotWallpaper.cpp +++ b/ScreenPlayWallpaper/Godot/GDExtention/src/ScreenPlayGodotWallpaper.cpp @@ -10,8 +10,14 @@ //// ScreenPlayWallpaper using namespace godot; -int ScreenPlayGodotWallpaper::sInstanceCount = 0; -int ScreenPlayGodotWallpaper::sLastID = 0; + +ScreenPlayGodotWallpaper::ScreenPlayGodotWallpaper() +{ +} + +ScreenPlayGodotWallpaper::~ScreenPlayGodotWallpaper() +{ +} void ScreenPlayGodotWallpaper::_bind_methods() { @@ -22,7 +28,7 @@ void ScreenPlayGodotWallpaper::_bind_methods() ClassDB::bind_method(godot::D_METHOD("get_screenPlayConnected"), &ScreenPlayGodotWallpaper::get_screenPlayConnected); ClassDB::bind_method(godot::D_METHOD("get_pipeConnected"), &ScreenPlayGodotWallpaper::get_pipeConnected); ClassDB::bind_method(godot::D_METHOD("read_from_pipe"), &ScreenPlayGodotWallpaper::read_from_pipe); - ClassDB::bind_method(godot::D_METHOD("ping_alive_screenplay"), &ScreenPlayGodotWallpaper::ping_alive_screenplay); + ClassDB::bind_method(godot::D_METHOD("send_ping"), &ScreenPlayGodotWallpaper::send_ping); ClassDB::bind_method(godot::D_METHOD("exit"), &ScreenPlayGodotWallpaper::exit); ClassDB::bind_method(godot::D_METHOD("get_activeScreensList"), &ScreenPlayGodotWallpaper::get_activeScreensList); @@ -49,24 +55,6 @@ void ScreenPlayGodotWallpaper::hideFromTaskbar(HWND hwnd) SetWindowLong(hwnd, GWL_EXSTYLE, lExStyle); } -ScreenPlayGodotWallpaper::ScreenPlayGodotWallpaper() -{ - mID = ++sLastID; - sInstanceCount++; - - UtilityFunctions::print( - "ScreenPlayWallpaper ", itos(mID), - " created, current instance count: ", itos(sInstanceCount)); -} - -ScreenPlayGodotWallpaper::~ScreenPlayGodotWallpaper() -{ - sInstanceCount--; - UtilityFunctions::print( - "ScreenPlayWallpaper ", itos(mID), - " destroyed, current instance count: ", itos(sInstanceCount)); -} - bool ScreenPlayGodotWallpaper::configureWindowGeometry() { if (!m_hook->searchWorkerWindowToParentTo()) { @@ -141,66 +129,39 @@ bool ScreenPlayGodotWallpaper::init(int activeScreen) bool ScreenPlayGodotWallpaper::connect_to_named_pipe() { - m_pipeConnected = false; - String pipeName = "ScreenPlay"; - String fullPipeName = "\\\\.\\pipe\\" + pipeName; - std::wstring wPipeName = std::wstring(fullPipeName.wide_string()); - - m_hPipe = CreateFileW( - wPipeName.c_str(), - GENERIC_READ | GENERIC_WRITE, - 0, - NULL, - OPEN_EXISTING, - 0, - NULL); - - if (m_hPipe == INVALID_HANDLE_VALUE) { - m_pipeConnected = false; - UtilityFunctions::print("CreateFile failed, error code: " + String::num_int64(GetLastError())); - return false; - } - - m_pipeConnected = true; - return true; + m_windowsPipe.setPipeName(L"ScreenPlay"); + m_pipeConnected = m_windowsPipe.start(); + return m_pipeConnected; } godot::String ScreenPlayGodotWallpaper::read_from_pipe() { - char buffer[128]; - DWORD bytesRead; - String result; - - if (ReadFile(m_hPipe, buffer, sizeof(buffer) - 1, &bytesRead, NULL)) { - buffer[bytesRead] = '\0'; - result = String(buffer); - } else { - UtilityFunctions::print("ReadFile from pipe failed, error code: " + String::num_int64(GetLastError())); + std::string outMsg; + if (!m_windowsPipe.readFromPipe(outMsg)) { + UtilityFunctions::print("Unable to read from pipe"); + return ""; } - - return result; + return godot::String(outMsg.c_str()); } -bool ScreenPlayGodotWallpaper::ping_alive_screenplay() +bool ScreenPlayGodotWallpaper::writeToPipe(const godot::String& message) { - if (m_hPipe == INVALID_HANDLE_VALUE) { - UtilityFunctions::print("INVALID_HANDLE_VALUE"); - return false; - } + std::string stdMessage = message.utf8().get_data(); + return m_windowsPipe.writeToPipe(stdMessage); +} + +bool ScreenPlayGodotWallpaper::send_ping() +{ if (!m_screenPlayConnected || !m_pipeConnected) { UtilityFunctions::print("ScreenPlay hasn't connected to us yet!"); return false; } - - const std::string message = "ping"; - DWORD bytesWritten; - WriteFile(m_hPipe, message.c_str(), static_cast(message.size()), &bytesWritten, NULL); - - if (bytesWritten != message.size()) { - UtilityFunctions::print("Unable to send alive ping"); + const godot::String msg = "ping;"; + if (!writeToPipe(msg)) { return false; } + return true; } @@ -214,19 +175,12 @@ bool ScreenPlayGodotWallpaper::send_welcome() // Construct welcome message and write to the named pipe // See void ScreenPlay::SDKConnection::readyRead() - godot::String welcomeMessage = godot::String("appID=") + m_appID + ",godotWallpaper"; - - std::string stdMessage = welcomeMessage.utf8().get_data(); - DWORD bytesWritten; - WriteFile(m_hPipe, stdMessage.c_str(), static_cast(stdMessage.size()), &bytesWritten, NULL); - - if (bytesWritten != stdMessage.size()) { - UtilityFunctions::print("Unable to send welcome message:", welcomeMessage); + godot::String msg = godot::String("appID=") + m_appID + ",godotWallpaper;"; + if (!writeToPipe(msg)) { return false; } m_screenPlayConnected = true; - // m_pingAliveTimer->start(); return true; } @@ -273,7 +227,6 @@ bool ScreenPlayGodotWallpaper::get_pipeConnected() const } bool ScreenPlayGodotWallpaper::exit() { - // Somehow this gets called at editor startup // so just return if not initialized if (m_hook) { @@ -282,12 +235,8 @@ bool ScreenPlayGodotWallpaper::exit() // Force refresh so that we display the regular // desktop wallpaper again - ShowWindow(m_hook->windowHandleWorker, SW_HIDE); ShowWindow(m_hook->windowHandleWorker, SW_SHOW); - } - // Destructor - if (m_hPipe != INVALID_HANDLE_VALUE) { - CloseHandle(m_hPipe); + ShowWindow(m_hook->windowHandleWorker, SW_HIDE); } return true; } diff --git a/ScreenPlayWallpaper/Godot/GDExtention/src/ScreenPlayGodotWallpaper.h b/ScreenPlayWallpaper/Godot/GDExtention/src/ScreenPlayGodotWallpaper.h index 916a6ad6..7a184eb8 100644 --- a/ScreenPlayWallpaper/Godot/GDExtention/src/ScreenPlayGodotWallpaper.h +++ b/ScreenPlayWallpaper/Godot/GDExtention/src/ScreenPlayGodotWallpaper.h @@ -15,6 +15,7 @@ #include "ScreenPlayGodotWallpaper.h" #include "windowshook.h" +#include "WindowsPipe.h" class ScreenPlayGodotWallpaper : public godot::Node { GDCLASS(ScreenPlayGodotWallpaper, Node) @@ -26,6 +27,7 @@ public: bool init(int activeScreen); bool connect_to_named_pipe(); bool send_welcome(); + bool writeToPipe(const godot::String& message); godot::String read_from_pipe(); void messageReceived(const std::string& key, const std::string& value); @@ -41,7 +43,7 @@ public: void set_checkWallpaperVisible(bool visible); bool get_screenPlayConnected() const; bool get_pipeConnected() const; - bool ping_alive_screenplay(); + bool send_ping(); bool exit(); protected: @@ -52,17 +54,17 @@ private: void hideFromTaskbar(HWND hwnd); private: - static int sInstanceCount; - static int sLastID; - int mID; + OVERLAPPED overlappedRead = {}; + OVERLAPPED overlappedWrite = {}; + godot::String m_appID = ""; godot::String m_projectPath = ""; std::unique_ptr m_hook; - HANDLE m_hPipe; double m_timesinceLastRead = 0.0; bool m_pipeConnected = false; bool m_screenPlayConnected = false; + WindowsPipe m_windowsPipe; godot::PackedInt64Array m_activeScreensList; float m_volume = 0.0; diff --git a/ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipe.cpp b/ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipe.cpp new file mode 100644 index 00000000..1668ec6a --- /dev/null +++ b/ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipe.cpp @@ -0,0 +1,77 @@ +#include "WindowsPipe.h" + +bool WindowsPipe::connectToPipe() { + if (m_pipeName.empty()) { + std::cerr << "Pipe name not set." << std::endl; + return false; + } + + std::wstring fullPipeName = L"\\\\.\\pipe\\" + m_pipeName; + + m_hPipe = CreateFileW( + fullPipeName.c_str(), + GENERIC_READ | GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, + NULL); + + if (m_hPipe == INVALID_HANDLE_VALUE) { + std::cerr << "Failed to connect to pipe. Error code: " << GetLastError() << std::endl; + return false; + } + + return true; +} + +bool WindowsPipe::readFromPipe(std::string& outMessage) { + char buffer[128]; + DWORD bytesRead; + + if (!ReadFile(m_hPipe, buffer, sizeof(buffer) - 1, &bytesRead, &m_overlapped)) { + DWORD error = GetLastError(); + if (error == ERROR_IO_PENDING) { + // Check if the overlapped read operation is complete without waiting + if (!GetOverlappedResult(m_hPipe, &m_overlapped, &bytesRead, FALSE)) { + if (GetLastError() == ERROR_IO_INCOMPLETE) { + // The I/O operation is still pending (no data available yet) + return false; + } + std::cerr << "Overlapped ReadFile failed. Error code: " << GetLastError() << std::endl; + return false; + } + } else { + std::cerr << "ReadFile from pipe failed. Error code: " << error << std::endl; + return false; + } + } + + buffer[bytesRead] = '\0'; + outMessage = buffer; + return true; +} + + +bool WindowsPipe::writeToPipe(const std::string& message) { + DWORD bytesWritten; + + if (!WriteFile(m_hPipe, message.c_str(), static_cast(message.size()), &bytesWritten, &m_overlapped)) { + if (GetLastError() != ERROR_IO_PENDING) { + std::cerr << "WriteFile to pipe failed. Error code: " << GetLastError() << std::endl; + return false; + } + WaitForSingleObject(m_overlapped.hEvent, INFINITE); + if (!GetOverlappedResult(m_hPipe, &m_overlapped, &bytesWritten, FALSE)) { + std::cerr << "Overlapped WriteFile failed. Error code: " << GetLastError() << std::endl; + return false; + } + } + + if (static_cast(bytesWritten) != message.size()) { + std::cerr << "Bytes written mismatch." << std::endl; + return false; + } + + return true; +} diff --git a/ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipe.h b/ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipe.h new file mode 100644 index 00000000..65c57c60 --- /dev/null +++ b/ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipe.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#include + +class WindowsPipe { +public: + WindowsPipe() + : m_hPipe(INVALID_HANDLE_VALUE) + { + memset(&m_overlapped, 0, sizeof(m_overlapped)); + m_overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // Manual reset event + } + + void setPipeName(const std::wstring& pipeName) { + m_pipeName = pipeName; + } + + bool start() { + return connectToPipe(); + } + + bool readFromPipe(std::string& outMessage); + bool writeToPipe(const std::string& message); + + ~WindowsPipe() { + if (m_hPipe != INVALID_HANDLE_VALUE) { + CloseHandle(m_hPipe); + } + CloseHandle(m_overlapped.hEvent); + } + +private: + bool connectToPipe(); + +private: + HANDLE m_hPipe; + OVERLAPPED m_overlapped; + std::wstring m_pipeName; + +}; diff --git a/ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipeTest.cpp b/ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipeTest.cpp new file mode 100644 index 00000000..f64231cf --- /dev/null +++ b/ScreenPlayWallpaper/Godot/GDExtention/src/WindowsPipeTest.cpp @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: LicenseRef-EliasSteurerTachiom OR AGPL-3.0-only + +#include "WindowsPipe.h" + +#define CATCH_CONFIG_MAIN +#include + +TEST_CASE("Test WindowsPipe with Python echo server", "[WindowsPipe]") +{ + WindowsPipe client; + client.setPipeName(L"ScreenPlay"); + REQUIRE(client.start()); + const int count = 100; + + SECTION("Ping server and expect ping back") + { + for (size_t i = 0; i < count; i++) { + std::string message = "ping;"; + REQUIRE(client.writeToPipe(message)); + + std::string response; + REQUIRE(client.readFromPipe(response)); + REQUIRE(response == "pong;"); + std::cout << response <<"ok\n"; + } + } +} diff --git a/ScreenPlayWallpaper/Godot/GDExtention/src/windowsPipeTestServer.py b/ScreenPlayWallpaper/Godot/GDExtention/src/windowsPipeTestServer.py new file mode 100644 index 00000000..f8f76ca6 --- /dev/null +++ b/ScreenPlayWallpaper/Godot/GDExtention/src/windowsPipeTestServer.py @@ -0,0 +1,56 @@ + +# python -m pip install pywin32 +import win32pipe +import win32file +import pywintypes +import time + +PIPE_NAME = 'ScreenPlay' + +def create_pipe(): + return win32pipe.CreateNamedPipe( + r'\\.\pipe\{}'.format(PIPE_NAME), + win32pipe.PIPE_ACCESS_DUPLEX, + win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_READMODE_MESSAGE | win32pipe.PIPE_WAIT, + 1, # max instances + 65536, # out buffer size + 65536, # in buffer size + 0, # default timeout + None # security attributes + ) + +def main(): + print("Starting Python Pipe Server...") + pipe_handle = create_pipe() + print("Waiting for a client to connect...") + win32pipe.ConnectNamedPipe(pipe_handle, None) + + while True: + try: + # Reading from the client + result, data = win32file.ReadFile(pipe_handle, 4096) + if result == 0: # 0 means the read operation completed successfully + print("Received:", data.decode()) + + # Sending a response back to the client + response = "pong;" + win32file.WriteFile(pipe_handle, response.encode()) + + except pywintypes.error as e: + if e.args[0] == 109: # ERROR_BROKEN_PIPE + print("Client disconnected.") + # Disconnect and close the current pipe handle + win32pipe.DisconnectNamedPipe(pipe_handle) + win32file.CloseHandle(pipe_handle) + + # Create a new pipe instance for the next client + pipe_handle = create_pipe() + + else: + print("Error occurred:", e) + + + #time.sleep(0.01) + +if __name__ == '__main__': + main() diff --git a/ScreenPlayWallpaper/Godot/GDExtention/templates/CMakeLists.txt b/ScreenPlayWallpaper/Godot/GDExtention/templates/CMakeLists.txt index f6217afd..e5cb7fcf 100644 --- a/ScreenPlayWallpaper/Godot/GDExtention/templates/CMakeLists.txt +++ b/ScreenPlayWallpaper/Godot/GDExtention/templates/CMakeLists.txt @@ -28,7 +28,7 @@ endif() # Generate our project's .gdextension file from the template set(OUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../ScreenPlayGodot/${PROJECT_NAME}/) set(GD_EXTENSION_FILE ${PROJECT_NAME}.gdextension) -configure_file(${GD_EXTENSION_FILE_INPUT} ${OUT_PATH}/${GD_EXTENSION_FILE}) +#configure_file(${GD_EXTENSION_FILE_INPUT} ${OUT_PATH}/${GD_EXTENSION_FILE}) unset(ALLOWED_BUILDS) unset(BUILD_TYPE) diff --git a/ScreenPlayWallpaper/Godot/ScreenPlayGodot/ScreenPlayGodotWallpaper/ScreenPlayGodotWallpaper.gdextension b/ScreenPlayWallpaper/Godot/ScreenPlayGodot/ScreenPlayGodotWallpaper/ScreenPlayGodotWallpaper.gdextension index 918cdd9a..5cd17ebe 100644 --- a/ScreenPlayWallpaper/Godot/ScreenPlayGodot/ScreenPlayGodotWallpaper/ScreenPlayGodotWallpaper.gdextension +++ b/ScreenPlayWallpaper/Godot/ScreenPlayGodot/ScreenPlayGodotWallpaper/ScreenPlayGodotWallpaper.gdextension @@ -5,9 +5,9 @@ compatibility_minimum = 4.1 [libraries] -linux.debug.x86_64 = "lib/Linux-x86_64/libScreenPlayGodotWallpaper-d.so" -macos.debug = "lib/Darwin-Universal/libScreenPlayGodotWallpaper-d.dylib" -windows.debug.x86_64 = "lib/Windows-AMD64/ScreenPlayGodotWallpaper-d.dll" -linux.release.x86_64 = "lib/Linux-x86_64/libScreenPlayGodotWallpaper.so" -macos.release = "lib/Darwin-universal/libScreenPlayGodotWallpaper.dylib" -windows.release.x86_64 = "lib/Windows-AMD64/ScreenPlayGodotWallpaper.dll" \ No newline at end of file +macos.release = "res://ScreenPlayGodotWallpaper/lib/Darwin-universal/libScreenPlayGodotWallpaper.dylib" +macos.debug = "res://ScreenPlayGodotWallpaper/lib/Darwin-Universal/libScreenPlayGodotWallpaper-d.dylib" +linux.release.x86_64 = "res://ScreenPlayGodotWallpaper/lib/Linux-x86_64/libScreenPlayGodotWallpaper.so" +linux.debug.x86_64 = "res://ScreenPlayGodotWallpaper/lib/Linux-x86_64/libScreenPlayGodotWallpaper-d.so" +windows.release.x86_64 = "res://ScreenPlayGodotWallpaper/lib/Windows-AMD64/ScreenPlayGodotWallpaper.dll" +windows.debug.x86_64 = "res://ScreenPlayGodotWallpaper/lib/Windows-AMD64/ScreenPlayGodotWallpaper-d.dll" \ No newline at end of file diff --git a/ScreenPlayWallpaper/Godot/ScreenPlayGodot/export_presets.cfg b/ScreenPlayWallpaper/Godot/ScreenPlayGodot/export_presets.cfg index da086714..88e962f2 100644 --- a/ScreenPlayWallpaper/Godot/ScreenPlayGodot/export_presets.cfg +++ b/ScreenPlayWallpaper/Godot/ScreenPlayGodot/export_presets.cfg @@ -8,7 +8,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="./ScreenPlayWallpaperGodot.exe" +export_path="" encryption_include_filters="" encryption_exclude_filters="" encrypt_pck=false diff --git a/ScreenPlayWallpaper/Godot/ScreenPlayGodot/main.gd b/ScreenPlayWallpaper/Godot/ScreenPlayGodot/main.gd index a95b8b5e..08a227d6 100644 --- a/ScreenPlayWallpaper/Godot/ScreenPlayGodot/main.gd +++ b/ScreenPlayWallpaper/Godot/ScreenPlayGodot/main.gd @@ -1,24 +1,41 @@ extends Node3D -@onready var screen_play_wallpaper = $ScreenPlayGodotWallpaper +@onready var screen_play_wallpaper: ScreenPlayGodotWallpaper = $ScreenPlayGodotWallpaper +@onready var ping_alive_timer: Timer = $PingAliveTimer +@onready var check_messages_timer: Timer = $CheckMessagesTimer +var send_welcome: bool = false -@onready var alive_timer = $AliveTimer +# Pings main ScreenPlay application that +# this wallpaper is still active +func ping_alive(): + print("GD: ping_alive") + var success = screen_play_wallpaper.send_ping() + print("1 ping_alive_screenplay: ", success) + if not success: + terminate() -func ping_alive_screenplay(): - var ping_alive_screenplay = screen_play_wallpaper.ping_alive_screenplay() - var msg = screen_play_wallpaper.read_from_pipe() - if not msg.isEmpty(): - print("message", msg) - if "quit" in msg: - var exit = screen_play_wallpaper.exit() - print("exit ", exit) - get_tree().quit() - return - - #print("ping_alive_screenplay: ", ping_alive_screenplay) +func terminate(): + var exit = screen_play_wallpaper.exit() + print("exit ", exit) + get_tree().quit() +# Checks for messages from the main ScreenPlay instance +# for example for propery changes or commands like quit +func check_messages(): + print("GD: check_messages") + var msg = screen_play_wallpaper.read_from_pipe() + if not msg.is_empty(): + print("message: ", msg) + if "quit" in msg: + return terminate() + + func _ready(): - alive_timer.timeout.connect(ping_alive_screenplay) + ping_alive_timer.wait_time = 0.5 + ping_alive_timer.timeout.connect(ping_alive) + + check_messages_timer.wait_time = 0.5 + check_messages_timer.timeout.connect(check_messages) if not screen_play_wallpaper: printerr("ERROR INVALID SCREENPLAY OBJECT") @@ -41,18 +58,25 @@ func _ready(): get_tree().quit() return Engine.set_max_fps(24) + var ok = screen_play_wallpaper.init(screen_play_wallpaper.get_activeScreensList()[0]) + print("init ", ok) if not screen_play_wallpaper.get_pipeConnected(): print("connect to ScreenPlay") - var ok_connect_to_named_pipe = screen_play_wallpaper.connect_to_named_pipe() + var ok_connect_to_named_pipe = screen_play_wallpaper.connect_to_named_pipe() print("connection: ", ok_connect_to_named_pipe) - if not screen_play_wallpaper.get_screenPlayConnected(): - print("send_welcome") - var send_welcome = screen_play_wallpaper.send_welcome() - print("send_welcome: ", send_welcome) - if send_welcome: - alive_timer.start() + +func _process(delta): + + if not send_welcome: + if not screen_play_wallpaper.get_screenPlayConnected(): + print("send_welcome") + send_welcome = screen_play_wallpaper.send_welcome() + print("send_welcome: ", send_welcome) + if send_welcome: + check_messages_timer.start() + ping_alive_timer.start() func load_scene(path): diff --git a/ScreenPlayWallpaper/Godot/ScreenPlayGodot/main.tscn b/ScreenPlayWallpaper/Godot/ScreenPlayGodot/main.tscn index ed5dff7d..6958b3e3 100644 --- a/ScreenPlayWallpaper/Godot/ScreenPlayGodot/main.tscn +++ b/ScreenPlayWallpaper/Godot/ScreenPlayGodot/main.tscn @@ -7,5 +7,8 @@ script = ExtResource("1_ceeuk") [node name="ScreenPlayGodotWallpaper" type="ScreenPlayGodotWallpaper" parent="."] -[node name="AliveTimer" type="Timer" parent="."] +[node name="PingAliveTimer" type="Timer" parent="."] +wait_time = 0.5 + +[node name="CheckMessagesTimer" type="Timer" parent="."] wait_time = 0.5 diff --git a/ScreenPlayWallpaper/Godot/ScreenPlayGodot/project.godot b/ScreenPlayWallpaper/Godot/ScreenPlayGodot/project.godot index a735cac4..e719c85d 100644 --- a/ScreenPlayWallpaper/Godot/ScreenPlayGodot/project.godot +++ b/ScreenPlayWallpaper/Godot/ScreenPlayGodot/project.godot @@ -13,6 +13,7 @@ config_version=5 config/name="ScreenPlay" run/main_scene="res://main.tscn" config/features=PackedStringArray("4.1", "Mobile") +run/flush_stdout_on_print=true boot_splash/bg_color=Color(0.141176, 0.141176, 0.141176, 0) boot_splash/show_image=false boot_splash/fullsize=false @@ -29,7 +30,7 @@ window/size/borderless=true [editor] -run/main_run_args="\"0\" \"C:/Code/cpp/ScreenPlay/ScreenPlay/Content/wallpaper_godot_fjord\" \"appID=vin6wuDQclPPJmFdouKukfGUKLrVBDCZ\" \"1\" \"Cover\" \"GodotWallpaper\" \"1\"" +run/main_run_args="\"0\" \"C:/Code/Cpp/ScreenPlay/ScreenPlay/Content/wallpaper_godot_fjord\" \"appID=test\" \"1\" \"Cover\" \"GodotWallpaper\" \"1\"" [filesystem] diff --git a/ScreenPlayWallpaper/kde/ScreenPlay/contents/ui/WaitingForScreenplay.qml b/ScreenPlayWallpaper/kde/ScreenPlay/contents/ui/WaitingForScreenplay.qml index e4662751..be30b31e 100644 --- a/ScreenPlayWallpaper/kde/ScreenPlay/contents/ui/WaitingForScreenplay.qml +++ b/ScreenPlayWallpaper/kde/ScreenPlay/contents/ui/WaitingForScreenplay.qml @@ -20,7 +20,7 @@ Rectangle { font.pixelSize: 50 } - OpacityAnimator on opacity { + OpacityAnimator on opacity { id: createAnimation from: 0 to: 1 @@ -54,7 +54,7 @@ Rectangle { font.pixelSize: 50 } - OpacityAnimator on opacity { + OpacityAnimator on opacity { id: destroyAnimation from: 1 to: 0 diff --git a/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml b/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml index b2ea7101..76669a91 100644 --- a/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml +++ b/ScreenPlayWorkshop/qml/SteamWorkshopStartPage.qml @@ -512,7 +512,7 @@ Item { } } - Behavior on contentHeight { + Behavior on contentHeight { PropertyAnimation { duration: 400 property: "contentHeight" diff --git a/Tools/setup.py b/Tools/setup.py index 24d29c2f..b47be968 100755 --- a/Tools/setup.py +++ b/Tools/setup.py @@ -114,7 +114,8 @@ def main(): vcpkg_packages_list = [ "curl", "cpp-httplib", - "libarchive" + "libarchive", + "catch2" ] if not args.skip_aqt: setup_qt()