1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-11-07 03:22:33 +01:00

Merge branch '174-add-godot-wallpaper-support' into 'master'

Draft: Resolve "Add Godot Wallpaper support"

Closes #174

See merge request kelteseth/ScreenPlay!108
This commit is contained in:
Elias Steurer 2023-12-08 10:51:42 +00:00
commit 11992efb55
270 changed files with 10158 additions and 6004 deletions

1
.gitignore vendored
View File

@ -262,3 +262,4 @@ cython_debug/
/ThirdParty/qml-plausible/ /ThirdParty/qml-plausible/
/ThirdParty/ffmpeg/** /ThirdParty/ffmpeg/**
/ThirdParty/qt-layer-shell/** /ThirdParty/qt-layer-shell/**
/ThirdParty/Godot/Godot_*.*

View File

@ -18,6 +18,7 @@ stages:
- check - check
documentation: documentation:
dependencies: []
stage: .post stage: .post
script: script:
- curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=master https://gitlab.com/api/v4/projects/15800262/trigger/pipeline - curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=master https://gitlab.com/api/v4/projects/15800262/trigger/pipeline

View File

@ -4,6 +4,8 @@
- python -m pip install -U pip wheel - python -m pip install -U pip wheel
- python -m pip install -r Tools/requirements.txt - python -m pip install -r Tools/requirements.txt
- python Tools/setup.py - python Tools/setup.py
- git submodule sync --recursive
- git submodule update --init --recursive
tags: tags:
- windows10 - windows10
artifacts: artifacts:
@ -33,11 +35,13 @@
- cd .. - cd ..
- git clone https://invent.kde.org/plasma/layer-shell-qt.git - git clone https://invent.kde.org/plasma/layer-shell-qt.git
- cd layer-shell-qt - cd layer-shell-qt
- cmake configure . -DCMAKE_PREFIX_PATH="./../../../aqt/6.5.2/gcc_64" - cmake configure . -DCMAKE_PREFIX_PATH="./../../../aqt/6.6.1/gcc_64"
- make - make
- make install - make install
- cd .. - cd ..
- cd .. - cd ..
- git submodule sync --recursive
- git submodule update --init --recursive
image: image:
name: ubuntu:22.04 name: ubuntu:22.04
tags: tags:
@ -53,9 +57,7 @@
- pip3 install -U pip - pip3 install -U pip
- pip3 install -r Tools/requirements.txt - pip3 install -r Tools/requirements.txt
- python3 Tools/setup.py - python3 Tools/setup.py
- git submodule sync --recursive
- git submodule update --init --recursive
tags: tags:
- osx - osx
artifacts:
expire_in: "2 weeks"
paths:
- build-64-osx-universal-release/bin/

View File

@ -10,7 +10,12 @@ standalone_osx:
extends: extends:
- .base_osx_build - .base_osx_build
script: script:
- python3 Tools/build.py --type=release --use-aqt --deploy-version --sign_osx - python3 Tools/build.py --type=release --use-aqt --installer --deploy-version --sign_osx
- mv build-64-osx-universal-release/ScreenPlay-Installer-ScreenPlayComponent.dmg build-64-osx-universal-release/ScreenPlay-Installer.dmg
artifacts:
expire_in: "2 weeks"
paths:
- build-64-osx-universal-release/ScreenPlay-Installer.dmg
standalone_linux: standalone_linux:
stage: build stage: build
@ -32,10 +37,14 @@ steam_osx:
- .base_osx_build - .base_osx_build
script: script:
- python3 Tools/build.py --type=release -steam --use-aqt --deploy-version --sign_osx - python3 Tools/build.py --type=release -steam --use-aqt --deploy-version --sign_osx
artifacts:
expire_in: "2 weeks"
paths:
- build-64-osx-universal-release/bin/ScreenPlay.app
steam_linux: steam_linux:
stage: build_steam stage: build_steam
extends: extends:
- .base_linux_build - .base_linux_build
script: script:
- python3 Tools/build.py --type=release -steam --deploy-version --use-aqt --installer - python3 Tools/build.py --type=release -steam --use-aqt --deploy-version

View File

@ -1,18 +1,20 @@
formatting: formatting:
dependencies: [] dependencies: []
stage: check stage: check
allow_failure: true
image: image:
name: ubuntu:23.10 name: ubuntu:23.10
tags: tags:
- gitlab-org-docker - gitlab-org-docker
before_script:
- apt-get update -y
- apt-get install python3-pip python-is-python3 clang clang-format -y
script: script:
- python -m pip install -U pip wheel --break-system-packages - apt update -y
- python -m pip install -U cmakelang --break-system-packages # For Ubuntu 22.04 and newer we need to create an virutal env
- apt install python3.11 python3.11-venv clang clang-format -y
# Run this command in the ScreenPlay source root folder:
- python3 -m venv env
- source env/bin/activate
- python3 -m pip install -U pip wheel
- python3 -m pip install -U cmakelang
- cd Tools - cd Tools
- python check_format_cmake.py --check - python3 check_format_cmake.py --check
- python check_format_cpp.py --check - python3 check_format_cpp.py --check
#- python check_format_qml.py --check #- python check_format_qml.py --check

4
.gitmodules vendored Normal file
View File

@ -0,0 +1,4 @@
[submodule "ScreenPlayWallpaper/Godot/GDExtention/extern/godot-cpp"]
path = ScreenPlayWallpaper/Godot/GDExtention/extern/godot-cpp
url = https://github.com/godotengine/godot-cpp.git
branch = 4.1

View File

@ -6,6 +6,9 @@
"ms-vscode.cmake-tools", "ms-vscode.cmake-tools",
"seanwu.vscode-qt-for-python", "seanwu.vscode-qt-for-python",
"mhutchie.git-graph", "mhutchie.git-graph",
"vadimcn.vscode-lldb" "vadimcn.vscode-lldb",
"josetr.cmake-language-support-vscode",
"geequlim.godot-tools",
"stevebushresearch.buildoutputcolorizer"
] ]
} }

14
.vscode/launch.json vendored
View File

@ -5,7 +5,7 @@
"version": "0.2.0", "version": "0.2.0",
"configurations": [ "configurations": [
{ {
"name": "Windows Launch", "name": "🪟 Windows Launch",
"type": "cppvsdbg", "type": "cppvsdbg",
"request": "launch", "request": "launch",
"program": "${command:cmake.launchTargetPath}", "program": "${command:cmake.launchTargetPath}",
@ -17,18 +17,26 @@
"environment": [ "environment": [
{ {
"name": "Path", "name": "Path",
"value": "${env:Path};${workspaceFolder}\\..\\aqt\\6.5.2\\msvc2019_64\\bin\\;${workspaceFolder}\\..\\aqt\\6.5.2\\msvc2019_64\\modules\\;${workspaceFolder}\\..\\aqt\\6.5.2\\msvc2019_64\\qml\\;${workspaceFolder}\\..\\vcpkg\\installed\\x64-windows\\debug\\bin;" "value": "${env:Path};${workspaceFolder}\\..\\aqt\\6.6.1\\msvc2019_64\\bin\\;${workspaceFolder}\\..\\aqt\\6.6.1\\msvc2019_64\\modules\\;${workspaceFolder}\\..\\aqt\\6.6.1\\msvc2019_64\\qml\\;${workspaceFolder}\\..\\vcpkg\\installed\\x64-windows\\debug\\bin;"
} }
], ],
"visualizerFile": "${workspaceFolder}/.vscode/qt.natvis.xml" "visualizerFile": "${workspaceFolder}/.vscode/qt.natvis.xml"
}, },
{ {
"name": "macOS/linux Launch", "name": "🍏macOS & 🐧linux Launch",
"type": "lldb", "type": "lldb",
"request": "launch", "request": "launch",
"program": "${command:cmake.launchTargetPath}", "program": "${command:cmake.launchTargetPath}",
"args": [], "args": [],
"cwd": "${command:cmake.buildDirectory}/bin", "cwd": "${command:cmake.buildDirectory}/bin",
},
{
"name": "🐍 Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true
} }
] ]
} }

276
.vscode/qt.natvis.xml vendored
View File

@ -6,14 +6,14 @@
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="##NAMESPACE##::QPropertyData&lt;*&gt;"> <Type Name="QPropertyData&lt;*&gt;">
<DisplayString>{val}</DisplayString> <DisplayString>{val}</DisplayString>
<Expand> <Expand>
<Item Name="[value]">val</Item> <Item Name="[value]">val</Item>
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QQuickItemPrivate"> <Type Name="QQuickItemPrivate">
<Intrinsic Name="_hasExtraData" Expression="extra.d.d != 0" /> <Intrinsic Name="_hasExtraData" Expression="extra.d.d != 0" />
<Intrinsic Name="_extraData" Expression="(*(ExtraData*)extra.d.d)" /> <Intrinsic Name="_extraData" Expression="(*(ExtraData*)extra.d.d)" />
<Intrinsic Name="_objectName" Expression="(extraData-&gt;objectName).val.d.ptr" /> <Intrinsic Name="_objectName" Expression="(extraData-&gt;objectName).val.d.ptr" />
@ -38,32 +38,32 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QQuickItem"> <Type Name="QQuickItem">
<DisplayString>{d_ptr.d,na}</DisplayString> <DisplayString>{d_ptr.d,na}</DisplayString>
<Expand> <Expand>
<ExpandedItem>d_ptr.d</ExpandedItem> <ExpandedItem>d_ptr.d</ExpandedItem>
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QUuid"> <Type Name="QUuid">
<DisplayString>{{{data1,Xb}-{data2,Xb}-{data3,Xb}-{(data4[0]),nvoXb}{(data4[1]),nvoXb}-{(data4[2]),nvoXb}{(data4[3]),nvoXb}{(data4[4]),nvoXb}{(data4[5]),nvoXb}{(data4[6]),nvoXb}{(data4[7]),nvoXb}}}</DisplayString> <DisplayString>{{{data1,Xb}-{data2,Xb}-{data3,Xb}-{(data4[0]),nvoXb}{(data4[1]),nvoXb}-{(data4[2]),nvoXb}{(data4[3]),nvoXb}{(data4[4]),nvoXb}{(data4[5]),nvoXb}{(data4[6]),nvoXb}{(data4[7]),nvoXb}}}</DisplayString>
</Type> </Type>
<Type Name="##NAMESPACE##::QSpecialInteger&lt;*&gt;"> <Type Name="QSpecialInteger&lt;*&gt;">
<DisplayString>{val}</DisplayString> <DisplayString>{val}</DisplayString>
<Expand> <Expand>
<Item Name="[value]">val</Item> <Item Name="[value]">val</Item>
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QBasicAtomicInteger&lt;*&gt;"> <Type Name="QBasicAtomicInteger&lt;*&gt;">
<DisplayString>{_q_value}</DisplayString> <DisplayString>{_q_value}</DisplayString>
<Expand> <Expand>
<Item Name="[value]">_q_value</Item> <Item Name="[value]">_q_value</Item>
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QBasicAtomicPointer&lt;*&gt;"> <Type Name="QBasicAtomicPointer&lt;*&gt;">
<Intrinsic Name="isNull" Expression="value()==0" /> <Intrinsic Name="isNull" Expression="value()==0" />
<Intrinsic Name="value" Expression="_q_value.value()" /> <Intrinsic Name="value" Expression="_q_value.value()" />
<DisplayString Condition="isNull()">empty</DisplayString> <DisplayString Condition="isNull()">empty</DisplayString>
@ -73,8 +73,8 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QPoint"> <Type Name="QPoint">
<AlternativeType Name="##NAMESPACE##::QPointF"/> <AlternativeType Name="QPointF"/>
<DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString> <DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString>
<Expand> <Expand>
<Item Name="[x]">xp</Item> <Item Name="[x]">xp</Item>
@ -82,7 +82,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QRect"> <Type Name="QRect">
<DisplayString>{{ x = {x1}, y = {y1}, width = {x2 - x1 + 1}, height = {y2 - y1 + 1} }}</DisplayString> <DisplayString>{{ x = {x1}, y = {y1}, width = {x2 - x1 + 1}, height = {y2 - y1 + 1} }}</DisplayString>
<Expand> <Expand>
<Item Name="[x]">x1</Item> <Item Name="[x]">x1</Item>
@ -92,7 +92,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QRectF"> <Type Name="QRectF">
<DisplayString>{{ x = {xp}, y = {yp}, width = {w}, height = {h} }}</DisplayString> <DisplayString>{{ x = {xp}, y = {yp}, width = {w}, height = {h} }}</DisplayString>
<Expand> <Expand>
<Item Name="[x]">xp</Item> <Item Name="[x]">xp</Item>
@ -102,8 +102,8 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QSize"> <Type Name="QSize">
<AlternativeType Name="##NAMESPACE##::QSizeF"/> <AlternativeType Name="QSizeF"/>
<DisplayString>{{ width = {wd}, height = {ht} }}</DisplayString> <DisplayString>{{ width = {wd}, height = {ht} }}</DisplayString>
<Expand> <Expand>
<Item Name="[width]">wd</Item> <Item Name="[width]">wd</Item>
@ -111,8 +111,8 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QLine"> <Type Name="QLine">
<AlternativeType Name="##NAMESPACE##::QLineF"/> <AlternativeType Name="QLineF"/>
<DisplayString>{{ start point = {pt1}, end point = {pt2} }}</DisplayString> <DisplayString>{{ start point = {pt1}, end point = {pt2} }}</DisplayString>
<Expand> <Expand>
<Synthetic Name="[start point]"> <Synthetic Name="[start point]">
@ -131,7 +131,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QPolygon"> <Type Name="QPolygon">
<DisplayString>{{ size={d-&gt;size} }}</DisplayString> <DisplayString>{{ size={d-&gt;size} }}</DisplayString>
<Expand> <Expand>
<Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item> <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
@ -142,7 +142,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QPolygonF"> <Type Name="QPolygonF">
<DisplayString>{{ size={d-&gt;size} }}</DisplayString> <DisplayString>{{ size={d-&gt;size} }}</DisplayString>
<Expand> <Expand>
<Item Name="[closed]"> <Item Name="[closed]">
@ -160,7 +160,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QVector2D"> <Type Name="QVector2D">
<DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString> <DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString>
<Expand> <Expand>
<Item Name="[x]">xp</Item> <Item Name="[x]">xp</Item>
@ -168,7 +168,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QVector3D"> <Type Name="QVector3D">
<DisplayString>{{ x = {xp}, y = {yp}, z = {zp} }}</DisplayString> <DisplayString>{{ x = {xp}, y = {yp}, z = {zp} }}</DisplayString>
<Expand> <Expand>
<Item Name="[x]">xp</Item> <Item Name="[x]">xp</Item>
@ -177,7 +177,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QVector4D"> <Type Name="QVector4D">
<DisplayString>{{ x = {xp}, y = {yp}, z = {zp}, w = {wp} }}</DisplayString> <DisplayString>{{ x = {xp}, y = {yp}, z = {zp}, w = {wp} }}</DisplayString>
<Expand> <Expand>
<Item Name="[x]">xp</Item> <Item Name="[x]">xp</Item>
@ -187,7 +187,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QMatrix"> <Type Name="QMatrix">
<DisplayString> <DisplayString>
{{ m11 = {_m11}, m12 = {_m12}, m21 = {_m21}, m22 = {_m22}, ... }} {{ m11 = {_m11}, m12 = {_m12}, m21 = {_m21}, m22 = {_m22}, ... }}
</DisplayString> </DisplayString>
@ -201,7 +201,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QMatrix4x4"> <Type Name="QMatrix4x4">
<DisplayString> <DisplayString>
{{ m11 = {m[0][0]}, m12 = {m[1][0]}, m13 = {m[2][0]}, m14 = {m[3][0]}, ... }} {{ m11 = {m[0][0]}, m12 = {m[1][0]}, m13 = {m[2][0]}, m14 = {m[3][0]}, ... }}
</DisplayString> </DisplayString>
@ -225,7 +225,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QSizePolicy"> <Type Name="QSizePolicy">
<DisplayString> <DisplayString>
{{ horizontal = {static_cast&lt;Policy&gt;(bits.horPolicy)}, vertical = {static_cast&lt;Policy&gt;(bits.verPolicy)}, type = {ControlType(1 &lt;&lt; bits.ctype)} }} {{ horizontal = {static_cast&lt;Policy&gt;(bits.horPolicy)}, vertical = {static_cast&lt;Policy&gt;(bits.verPolicy)}, type = {ControlType(1 &lt;&lt; bits.ctype)} }}
</DisplayString> </DisplayString>
@ -256,7 +256,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QChar"> <Type Name="QChar">
<DisplayString>{ucs,c}</DisplayString> <DisplayString>{ucs,c}</DisplayString>
<StringView>ucs,c</StringView> <StringView>ucs,c</StringView>
<Expand> <Expand>
@ -265,7 +265,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QString"> <Type Name="QString">
<DisplayString>&quot;{(reinterpret_cast&lt;unsigned short*&gt;(d.ptr)),sub}&quot;</DisplayString> <DisplayString>&quot;{(reinterpret_cast&lt;unsigned short*&gt;(d.ptr)),sub}&quot;</DisplayString>
<StringView>(reinterpret_cast&lt;unsigned short*&gt;(d.ptr)),sub</StringView> <StringView>(reinterpret_cast&lt;unsigned short*&gt;(d.ptr)),sub</StringView>
<Expand> <Expand>
@ -277,7 +277,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QStringRef"> <Type Name="QStringRef">
<DisplayString Condition="m_string == nullptr">{m_string,[m_size]} u""</DisplayString> <DisplayString Condition="m_string == nullptr">{m_string,[m_size]} u""</DisplayString>
<DisplayString Condition="m_string != nullptr">{m_string-&gt;d.ptr+m_position,[m_size]}</DisplayString> <DisplayString Condition="m_string != nullptr">{m_string-&gt;d.ptr+m_position,[m_size]}</DisplayString>
<StringView Condition="m_string == nullptr">""</StringView> <StringView Condition="m_string == nullptr">""</StringView>
@ -292,7 +292,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QStringView"> <Type Name="QStringView">
<DisplayString>{m_data,[m_size]}</DisplayString> <DisplayString>{m_data,[m_size]}</DisplayString>
<StringView>m_data,[m_size]</StringView> <StringView>m_data,[m_size]</StringView>
<Expand> <Expand>
@ -304,7 +304,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QByteArray"> <Type Name="QByteArray">
<DisplayString>&quot;{((reinterpret_cast&lt;char*&gt;(d.ptr))),sb}&quot;</DisplayString> <DisplayString>&quot;{((reinterpret_cast&lt;char*&gt;(d.ptr))),sb}&quot;</DisplayString>
<StringView>((reinterpret_cast&lt;char*&gt;(d.ptr))),sb</StringView> <StringView>((reinterpret_cast&lt;char*&gt;(d.ptr))),sb</StringView>
<Expand> <Expand>
@ -316,7 +316,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QUrl"> <Type Name="QUrl">
<Intrinsic Name="isEmpty" Expression="size==0"> <Intrinsic Name="isEmpty" Expression="size==0">
<Parameter Name="size" Type="int"/> <Parameter Name="size" Type="int"/>
</Intrinsic> </Intrinsic>
@ -344,11 +344,11 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QDate"> <Type Name="QDate">
<DisplayString>{{ julian day = {jd} }}</DisplayString> <DisplayString>{{ julian day = {jd} }}</DisplayString>
</Type> </Type>
<Type Name="##NAMESPACE##::QTime"> <Type Name="QTime">
<Intrinsic Name="hour" Expression="mds / 3600000" /> <Intrinsic Name="hour" Expression="mds / 3600000" />
<Intrinsic Name="minute" Expression="(mds % 3600000) / 60000" /> <Intrinsic Name="minute" Expression="(mds % 3600000) / 60000" />
<Intrinsic Name="second" Expression="(mds / 1000) % 60" /> <Intrinsic Name="second" Expression="(mds / 1000) % 60" />
@ -375,7 +375,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QPair&lt;*,*&gt;"> <Type Name="QPair&lt;*,*&gt;">
<DisplayString>({first}, {second})</DisplayString> <DisplayString>({first}, {second})</DisplayString>
<Expand> <Expand>
<Item Name="[first]">first</Item> <Item Name="[first]">first</Item>
@ -383,8 +383,8 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QList&lt;*&gt;"> <Type Name="QList&lt;*&gt;">
<AlternativeType Name="##NAMESPACE##::QVector&lt;*&gt;"/> <AlternativeType Name="QVector&lt;*&gt;"/>
<DisplayString>{{ size={d.size} }}</DisplayString> <DisplayString>{{ size={d.size} }}</DisplayString>
<Expand> <Expand>
<ArrayItems> <ArrayItems>
@ -394,7 +394,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QVarLengthArray&lt;*&gt;"> <Type Name="QVarLengthArray&lt;*&gt;">
<DisplayString>{{ size={s} }}</DisplayString> <DisplayString>{{ size={s} }}</DisplayString>
<Expand> <Expand>
<Item Name="[capacity]">a</Item> <Item Name="[capacity]">a</Item>
@ -405,8 +405,8 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QMap&lt;*,*&gt;"> <Type Name="QMap&lt;*,*&gt;">
<AlternativeType Name="##NAMESPACE##::QMultiMap&lt;*,*&gt;"/> <AlternativeType Name="QMultiMap&lt;*,*&gt;"/>
<DisplayString>{{ size={d.d-&gt;m._Mypair._Myval2._Myval2._Mysize} }}</DisplayString> <DisplayString>{{ size={d.d-&gt;m._Mypair._Myval2._Myval2._Mysize} }}</DisplayString>
<Expand> <Expand>
<TreeItems> <TreeItems>
@ -423,7 +423,7 @@
<DisplayString>{second}</DisplayString> <DisplayString>{second}</DisplayString>
</Type> </Type>
<Type Name="##NAMESPACE##::QHashPrivate::Node&lt;*,*&gt;"> <Type Name="QHashPrivate::Node&lt;*,*&gt;">
<DisplayString>{value}</DisplayString> <DisplayString>{value}</DisplayString>
<Expand> <Expand>
<Item Name="key">key</Item> <Item Name="key">key</Item>
@ -431,7 +431,7 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QHashPrivate::MultiNode&lt;*,*&gt;"> <Type Name="QHashPrivate::MultiNode&lt;*,*&gt;">
<DisplayString Condition="value-&gt;next == 0">{value-&gt;value}</DisplayString> <DisplayString Condition="value-&gt;next == 0">{value-&gt;value}</DisplayString>
<DisplayString Condition="value-&gt;next != 0 &amp;&amp; value-&gt;next-&gt;next == 0">({value-&gt;value}, {value-&gt;next-&gt;value})</DisplayString> <DisplayString Condition="value-&gt;next != 0 &amp;&amp; value-&gt;next-&gt;next == 0">({value-&gt;value}, {value-&gt;next-&gt;value})</DisplayString>
<DisplayString Condition="value-&gt;next != 0 &amp;&amp; value-&gt;next-&gt;next != 0">({value-&gt;value}, {value-&gt;next-&gt;value}, ...)</DisplayString> <DisplayString Condition="value-&gt;next != 0 &amp;&amp; value-&gt;next-&gt;next != 0">({value-&gt;value}, {value-&gt;next-&gt;value}, ...)</DisplayString>
@ -444,8 +444,8 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QHash&lt;*,*&gt;"> <Type Name="QHash&lt;*,*&gt;">
<AlternativeType Name="##NAMESPACE##::QMultiHash&lt;*,*&gt;"/> <AlternativeType Name="QMultiHash&lt;*,*&gt;"/>
<Intrinsic Name="getOffset" Category="Method" Expression="d-&gt;spans[span].offsets[offset]"> <Intrinsic Name="getOffset" Category="Method" Expression="d-&gt;spans[span].offsets[offset]">
<Parameter Name="span" Type="int" /> <Parameter Name="span" Type="int" />
<Parameter Name="offset" Type="int" /> <Parameter Name="offset" Type="int" />
@ -602,15 +602,15 @@
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QSet&lt;*&gt;"> <Type Name="QSet&lt;*&gt;">
<DisplayString>{{ size={q_hash.d-&gt;size} }}</DisplayString> <DisplayString>{{ size={q_hash.d-&gt;size} }}</DisplayString>
<Expand> <Expand>
<ExpandedItem>q_hash</ExpandedItem> <ExpandedItem>q_hash</ExpandedItem>
</Expand> </Expand>
</Type> </Type>
<Type Name="##NAMESPACE##::QVariant"> <Type Name="QVariant">
<Intrinsic Name="typeId" Expression="*(int*)(&amp;((const ##NAMESPACE##::QtPrivate::QMetaTypeInterface *)(d.packedType &lt;&lt; 2))->typeId)"> <Intrinsic Name="typeId" Expression="*(int*)(&amp;((const QtPrivate::QMetaTypeInterface *)(d.packedType &lt;&lt; 2))->typeId)">
</Intrinsic> </Intrinsic>
<Intrinsic Name="dataStar" Expression="(&amp;(d.data.data))"> <Intrinsic Name="dataStar" Expression="(&amp;(d.data.data))">
</Intrinsic> </Intrinsic>
@ -620,115 +620,115 @@
<DisplayString Condition="d.is_null">(null)</DisplayString> <DisplayString Condition="d.is_null">(null)</DisplayString>
<!-- Static core pointers --> <!-- Static core pointers -->
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QObjectStar">QObject*</DisplayString> <DisplayString Condition="typeId() == QMetaType::QObjectStar">QObject*</DisplayString>
<!-- Static core template classes --> <!-- Static core template classes -->
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QVariantMap">{*(QMap&lt;QString,QVariant&gt;*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QVariantMap">{*(QMap&lt;QString,QVariant&gt;*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QVariantList">{*(QList&lt;QVariant&gt;*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QVariantList">{*(QList&lt;QVariant&gt;*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QVariantHash">{*(QHash&lt;QString,QVariant&gt;*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QVariantHash">{*(QHash&lt;QString,QVariant&gt;*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QVariantPair">QVariantPair</DisplayString> <DisplayString Condition="typeId() == QMetaType::QVariantPair">QVariantPair</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QByteArrayList">{*(QList&lt;QByteArray&gt;*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QByteArrayList">{*(QList&lt;QByteArray&gt;*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QStringList">{*(QList&lt;QString&gt;*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QStringList">{*(QList&lt;QString&gt;*) sharedDataStar()}</DisplayString>
<!-- Static primitives--> <!-- Static primitives-->
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::Bool">{*(bool*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::Bool">{*(bool*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::Int">{*(int*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::Int">{*(int*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::UInt">{*(unsigned int*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::UInt">{*(unsigned int*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::LongLong">{*(long long*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::LongLong">{*(long long*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::ULongLong">{*(unsigned long long*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::ULongLong">{*(unsigned long long*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::Double">{*(double*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::Double">{*(double*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::VoidStar">{*(void**) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::VoidStar">{*(void**) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::Long">{*(long*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::Long">{*(long*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::Short">{*(short*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::Short">{*(short*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::Char">{*(char*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::Char">{*(char*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::Char16">{*(char16_t*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::Char16">{*(char16_t*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::Char32">{*(char32_t*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::Char32">{*(char32_t*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::ULong">{*(unsigned long*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::ULong">{*(unsigned long*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::UShort">{*(unsigned short*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::UShort">{*(unsigned short*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::UChar">{*(unsigned char*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::UChar">{*(unsigned char*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::Float">{*(float*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::Float">{*(float*) dataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::SChar">{*(signed char*) dataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::SChar">{*(signed char*) dataStar()}</DisplayString>
<!-- Static core classes --> <!-- Static core classes -->
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QChar">{*(QChar*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QChar">{*(QChar*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QString">{*(QString*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QString">{*(QString*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QByteArray">{*(QByteArray*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QByteArray">{*(QByteArray*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QDate">{*(QDate*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QDate">{*(QDate*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QTime">{*(QTime*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QTime">{*(QTime*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QDateTime">QDateTime</DisplayString> <DisplayString Condition="typeId() == QMetaType::QDateTime">QDateTime</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QUrl">QUrl</DisplayString> <DisplayString Condition="typeId() == QMetaType::QUrl">QUrl</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QLocale">QLocale</DisplayString> <DisplayString Condition="typeId() == QMetaType::QLocale">QLocale</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QRect">{*(QRect*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QRect">{*(QRect*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QRectF">{*(QRectF*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QRectF">{*(QRectF*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QSize">{*(QSize*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QSize">{*(QSize*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QSizeF">{*(QSizeF*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QSizeF">{*(QSizeF*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QLine">{*(QLine*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QLine">{*(QLine*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QLineF">{*(QLineF*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QLineF">{*(QLineF*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QPoint">{*(QPoint*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QPoint">{*(QPoint*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QPointF">{*(QPointF*) sharedDataStar()}</DisplayString> <DisplayString Condition="typeId() == QMetaType::QPointF">{*(QPointF*) sharedDataStar()}</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QEasingCurve">EasingCurve</DisplayString> <DisplayString Condition="typeId() == QMetaType::QEasingCurve">EasingCurve</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QUuid">Uuid</DisplayString> <DisplayString Condition="typeId() == QMetaType::QUuid">Uuid</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QRegularExpression">RegularExpression</DisplayString> <DisplayString Condition="typeId() == QMetaType::QRegularExpression">RegularExpression</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QJsonValue">QJsonValue</DisplayString> <DisplayString Condition="typeId() == QMetaType::QJsonValue">QJsonValue</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QJsonObject">QJsonObject</DisplayString> <DisplayString Condition="typeId() == QMetaType::QJsonObject">QJsonObject</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QJsonArray">QJsonArray</DisplayString> <DisplayString Condition="typeId() == QMetaType::QJsonArray">QJsonArray</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QJsonDocument">QJsonDocument</DisplayString> <DisplayString Condition="typeId() == QMetaType::QJsonDocument">QJsonDocument</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QCborValue">QCborValue</DisplayString> <DisplayString Condition="typeId() == QMetaType::QCborValue">QCborValue</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QCborArray">QCborArray</DisplayString> <DisplayString Condition="typeId() == QMetaType::QCborArray">QCborArray</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QCborMap">QCborMap</DisplayString> <DisplayString Condition="typeId() == QMetaType::QCborMap">QCborMap</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QModelIndex">ModelIndex</DisplayString> <DisplayString Condition="typeId() == QMetaType::QModelIndex">ModelIndex</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QPersistentModelIndex">QPersistentModelIndex</DisplayString> <DisplayString Condition="typeId() == QMetaType::QPersistentModelIndex">QPersistentModelIndex</DisplayString>
<!-- Static gui classes --> <!-- Static gui classes -->
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QFont">QFont</DisplayString> <DisplayString Condition="typeId() == QMetaType::QFont">QFont</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QPixmap">QPixmap</DisplayString> <DisplayString Condition="typeId() == QMetaType::QPixmap">QPixmap</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QBrush">QBrush</DisplayString> <DisplayString Condition="typeId() == QMetaType::QBrush">QBrush</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QColor">QColor</DisplayString> <DisplayString Condition="typeId() == QMetaType::QColor">QColor</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QPalette">QPalette</DisplayString> <DisplayString Condition="typeId() == QMetaType::QPalette">QPalette</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QIcon">QIcon</DisplayString> <DisplayString Condition="typeId() == QMetaType::QIcon">QIcon</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QImage">QImage</DisplayString> <DisplayString Condition="typeId() == QMetaType::QImage">QImage</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QPolygon">QPolygon</DisplayString> <DisplayString Condition="typeId() == QMetaType::QPolygon">QPolygon</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QRegion">QRegion</DisplayString> <DisplayString Condition="typeId() == QMetaType::QRegion">QRegion</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QBitmap">QBitmap</DisplayString> <DisplayString Condition="typeId() == QMetaType::QBitmap">QBitmap</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QCursor">QCursor</DisplayString> <DisplayString Condition="typeId() == QMetaType::QCursor">QCursor</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QKeySequence">QKeySequence</DisplayString> <DisplayString Condition="typeId() == QMetaType::QKeySequence">QKeySequence</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QPen">QPen</DisplayString> <DisplayString Condition="typeId() == QMetaType::QPen">QPen</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QTextLength">QTextLength</DisplayString> <DisplayString Condition="typeId() == QMetaType::QTextLength">QTextLength</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QTextFormat">QTextFormat</DisplayString> <DisplayString Condition="typeId() == QMetaType::QTextFormat">QTextFormat</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QTransform">QTransform</DisplayString> <DisplayString Condition="typeId() == QMetaType::QTransform">QTransform</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QMatrix4x4">QMatrix4x4</DisplayString> <DisplayString Condition="typeId() == QMetaType::QMatrix4x4">QMatrix4x4</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QVector2D">QVector2D</DisplayString> <DisplayString Condition="typeId() == QMetaType::QVector2D">QVector2D</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QVector3D">QVector3D</DisplayString> <DisplayString Condition="typeId() == QMetaType::QVector3D">QVector3D</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QVector4D">QVector4D</DisplayString> <DisplayString Condition="typeId() == QMetaType::QVector4D">QVector4D</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QQuaternion">QQuaternion</DisplayString> <DisplayString Condition="typeId() == QMetaType::QQuaternion">QQuaternion</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QPolygonF">QPolygonF</DisplayString> <DisplayString Condition="typeId() == QMetaType::QPolygonF">QPolygonF</DisplayString>
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QColorSpace">QColorSpace</DisplayString> <DisplayString Condition="typeId() == QMetaType::QColorSpace">QColorSpace</DisplayString>
<!-- Static widget classes --> <!-- Static widget classes -->
<DisplayString Condition="typeId() == ##NAMESPACE##::QMetaType::QSizePolicy">QSizePolicy</DisplayString> <DisplayString Condition="typeId() == QMetaType::QSizePolicy">QSizePolicy</DisplayString>
<!-- Unhandled : display the typeId--> <!-- Unhandled : display the typeId-->
<DisplayString>##NAMESPACE##::QMetaType::Type ({typeId()})</DisplayString> <DisplayString>QMetaType::Type ({typeId()})</DisplayString>
<Expand> <Expand>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QString">*(QString*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QString">*(QString*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QByteArray">*(QByteArray*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QByteArray">*(QByteArray*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QDate">*(QDate*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QDate">*(QDate*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QTime">*(QTime*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QTime">*(QTime*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QRect">*(QRect*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QRect">*(QRect*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QRectF">*(QRectF*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QRectF">*(QRectF*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QSize">*(QSize*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QSize">*(QSize*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QSizeF">*(QSizeF*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QSizeF">*(QSizeF*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QLine">*(QLine*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QLine">*(QLine*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QLineF">*(QLineF*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QLineF">*(QLineF*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QPoint">*(QPoint*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QPoint">*(QPoint*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QPointF">*(QPointF*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QPointF">*(QPointF*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QVariantMap">*(QMap&lt;QString,QVariant&gt;*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QVariantMap">*(QMap&lt;QString,QVariant&gt;*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QVariantList">*(QList&lt;QVariant&gt;*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QVariantList">*(QList&lt;QVariant&gt;*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QVariantHash">*(QHash&lt;QString,QVariant&gt;*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QVariantHash">*(QHash&lt;QString,QVariant&gt;*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QByteArrayList">*(QList&lt;QByteArray&gt;*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QByteArrayList">*(QList&lt;QByteArray&gt;*) sharedDataStar()</ExpandedItem>
<ExpandedItem Condition="typeId() == ##NAMESPACE##::QMetaType::QStringList">*(QList&lt;QString&gt;*) sharedDataStar()</ExpandedItem> <ExpandedItem Condition="typeId() == QMetaType::QStringList">*(QList&lt;QString&gt;*) sharedDataStar()</ExpandedItem>
</Expand> </Expand>
</Type> </Type>

134
.vscode/tasks.json vendored
View File

@ -15,61 +15,7 @@
}, },
{ {
"type": "process", "type": "process",
"label": "Format Cpp files", "label": "🛫 Run setup.py",
"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",
"command": "python3", "command": "python3",
"windows": { "windows": {
"command": "python" "command": "python"
@ -87,7 +33,27 @@
}, },
{ {
"type": "process", "type": "process",
"label": "Build ScreenPlay release, with deploy and steam enabled", "label": "⚙️ Build Godot Wallpaper",
"command": "python3",
"windows": {
"command": "python"
},
"group": {
"kind": "build",
"isDefault": true
},
"options": {
"cwd": "${workspaceFolder}/Tools"
},
"args": [
"build_godot.py",
"--build_path",
"${command:cmake.buildDirectory}/bin"
]
},
{
"type": "process",
"label": "⚙️ Build ScreenPlay release, with deploy and steam enabled",
"command": "python3", "command": "python3",
"windows": { "windows": {
"command": "python" "command": "python"
@ -116,7 +82,61 @@
}, },
{ {
"type": "process", "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", "command": "python3",
"windows": { "windows": {
"command": "python" "command": "python"

View File

@ -1,3 +1,14 @@
#pragma once #pragma once
#define SCREENPLAY_SOURCE_DIR "@SOURCE_DIR@" #define SCREENPLAY_VERSION "@SCREENPLAY_VERSION@"
#define SCREENPLAY_SOURCE_DIR "@SCREENPLAY_SOURCE_DIR@"
#define SCREENPLAY_GODOT_VERSION "@SCREENPLAY_GODOT_VERSION@"
#define SCREENPLAY_GODOT_VERSION_MAJOR @SCREENPLAY_GODOT_VERSION_MAJOR@
#define SCREENPLAY_GODOT_VERSION_MINOR @SCREENPLAY_GODOT_VERSION_MINOR@
#define SCREENPLAY_GODOT_RELEASE_TYPE "@SCREENPLAY_GODOT_RELEASE_TYPE@"
#define SCREENPLAY_BUILD_TYPE "@SCREENPLAY_BUILD_TYPE@"
#define SCREENPLAY_GIT_BRANCH_NAME "@SCREENPLAY_GIT_BRANCH_NAME@"
#define SCREENPLAY_GIT_COMMIT_HASH "@SCREENPLAY_GIT_COMMIT_HASH@"
#define SCREENPLAY_DEPLOY_VERSION @SCREENPLAY_DEPLOY_VERSION@
#define SCREENPLAY_BUILD_DATE "@SCREENPLAY_BUILD_DATE@"
#define SCREENPLAY_STEAM_VERSION @SCREENPLAY_STEAM_VERSION@

View File

@ -22,7 +22,7 @@ function(copy_recursive SOURCE_PATH DESTINATION_PATH REGEX)
file(RELATIVE_PATH RELATIVE_FILE_PATH ${SOURCE_PATH} ${file}) file(RELATIVE_PATH RELATIVE_FILE_PATH ${SOURCE_PATH} ${file})
get_filename_component(FOLDER ${RELATIVE_FILE_PATH} DIRECTORY ${SOURCE_PATH}) get_filename_component(FOLDER ${RELATIVE_FILE_PATH} DIRECTORY ${SOURCE_PATH})
file(MAKE_DIRECTORY ${DESTINATION_PATH}/${FOLDER} ) file(MAKE_DIRECTORY ${DESTINATION_PATH}/${FOLDER} )
message(STATUS "${file} - ${DESTINATION_PATH}/${RELATIVE_FILE_PATH}") #message(STATUS "${file} - ${DESTINATION_PATH}/${RELATIVE_FILE_PATH}")
configure_file(${file} "${DESTINATION_PATH}/${RELATIVE_FILE_PATH}" COPYONLY) configure_file(${file} "${DESTINATION_PATH}/${RELATIVE_FILE_PATH}" COPYONLY)
endforeach() endforeach()

View File

@ -1,22 +1,41 @@
message(STATUS "[DMG INSTALLER ENABLED]: Configuring. This can take some time...") message(STATUS "[DMG INSTALLER ENABLED]: Configuring. This can take some time...")
set(CPACK_PACKAGE_VENDOR "Elias Steurer Tachiom")
set(CPACK_PACKAGE_NAME "ScreenPlay")
set(CPACK_PACKAGE_CONTACT "Elias Steurer <eli@kelteseth.com>")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "ScreenPlay is an Open Source Live-Wallpaper app for Windows and OSX. ")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.md")
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_GENERATOR "DragNDrop") set(CPACK_GENERATOR "DragNDrop")
set(CPACK_DMG_FORMAT "UDBZ") set(MACOSX_BUNDLE_BUNDLE_NAME ${CPACK_PACKAGE_NAME})
set(CPACK_DMG_VOLUME_NAME "ScreenPlay") set(MACOSX_BUNDLE_BUNDLE_GUI_IDENTIFIER "app.screenplay.screenplay")
set(CPACK_DMG_VOLUME_NAME ${CPACK_PACKAGE_NAME})
set(CPACK_SYSTEM_NAME "OSX") set(CPACK_SYSTEM_NAME "OSX")
set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/ScreenPlay/assets/icons/app.ico")
set(CPACK_COMPONENTS_GROUPING IGNORE) set(CPACK_COMPONENTS_GROUPING IGNORE)
set(CPACK_PACKAGE_NAME "ScreenPlay") set(CPACK_PACKAGING_INSTALL_PREFIX "/")
set(CPACK_PACKAGE_FILE_NAME "ScreenPlay-Installer") set(CPACK_PACKAGE_FILE_NAME "ScreenPlay-Installer")
set(CPACK_PACKAGE_VENDOR "Elias Steurer") set(CPACK_COMPONENTS_ALL "ScreenPlayComponent")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}") set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}") set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON)
include(CPack) set(MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
set(MACOSX_BUNDLE_ICON_FILE "${CMAKE_SOURCE_DIR}/ScreenPlay/assets/icons/ScreenPlay.icns")
set(CPACK_DMG_DS_STORE_SETUP_SCRIPT "${CMAKE_SOURCE_DIR}/CMake/DS_Store.scpt")
set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/CMake/dmg_background.png")
set(MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/CMake/MacOSXBundleInfo.plist.in")
set_source_files_properties(${CMAKE_SOURCE_DIR}/CMake/exampleApp.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
# Install all files from /bin # Install all files from /bin
install( install(
DIRECTORY "${CMAKE_BINARY_DIR}/bin/" DIRECTORY "${CMAKE_BINARY_DIR}/bin/"
COMPONENT ScreenPlay COMPONENT ScreenPlayComponent
DESTINATION "./") DESTINATION "./")
include(CPack)

41
CMake/DS_Store.scpt Normal file
View File

@ -0,0 +1,41 @@
on run argv
-- Constants for window dimensions
set BG_W to 780
set BG_H to 390
set TITLE_BAR_H to 22
set diskImage to item 1 of argv
tell application "Finder"
tell disk diskImage
-- Must call open and close to set window options later
open
-- Setup background and icon arrangement
set current view of container window to icon view
set theViewOptions to the icon view options of container window
-- Note: CMake automatically renames the file to background.<ext>
set background picture of theViewOptions to file ".background:background.png"
set arrangement of theViewOptions to not arranged
set icon size of theViewOptions to 72
-- Attempt to hide sidebar and toolbar
set toolbar visible of container window to false
set statusbar visible of container window to false
set sidebar width of container window to 0
-- Get current position of the window
set {currentX, currentY} to position of container window
-- Set the new bounds of the window
set bounds of container window to {currentX, currentY, currentX + BG_W, currentY + BG_H + TITLE_BAR_H}
-- Set icon positions
set position of item "ScreenPlay.app" to {137, 99}
set position of item "Applications" to {287, 99}
-- Update and apply changes
update without registering applications
delay 5
close
end tell
end tell
end run

View File

@ -1,16 +1,42 @@
#! generate_cmake_variable_header : Generates a header CmakeVariables.h that contains defines for the variables specified in CmakeVariables.h.in! # ! generate_cmake_variable_header : Generates a header CmakeVariables.h that contains defines for the variables specified in
# CmakeVariables.h.in!
# #
# The generated CmakeVariables.h header can then be used to access e.g. the PROJECT_NAME define in C++ code. # The generated CmakeVariables.h header can then be used to access e.g. the PROJECT_NAME define in C++ code.
# #
# Example # Example generate_cmake_variable_header(${PROJECT_NAME})
# generate_cmake_variable_header(${PROJECT_NAME})
# #
function(generate_cmake_variable_header TARGET) function(generate_cmake_variable_header TARGET)
set(SOURCE_DIR ${CMAKE_SOURCE_DIR}) # Also add to CMakeVariables.h.in
set(SCREENPLAY_SOURCE_DIR ${CMAKE_SOURCE_DIR})
# Like v4.2-beta3 or v5.0.1-stable
set(SCREENPLAY_GODOT_VERSION ${GODOT_VERSION})
# Only single numbers
set(SCREENPLAY_GODOT_VERSION_MAJOR ${GODOT_VERSION_MAJOR})
set(SCREENPLAY_GODOT_VERSION_MINOR ${GODOT_VERSION_MINOR})
# stable, rc1 or beta5
set(SCREENPLAY_GODOT_RELEASE_TYPE ${GODOT_RELEASE_TYPE})
set(SCREENPLAY_BUILD_TYPE "${CMAKE_BUILD_TYPE}")
set(SCREENPLAY_BUILD_DATE "${BUILD_DATE}")
set(SCREENPLAY_VERSION "${SCREENPLAY_VERSION}")
set(SCREENPLAY_GIT_BRANCH_NAME "${GIT_BRANCH_NAME}")
set(SCREENPLAY_GIT_COMMIT_HASH "${GIT_COMMIT_HASH}")
set(SCREENPLAY_DEPLOY_VERSION 0)
if(${SCREENPLAY_DEPLOY})
set(SCREENPLAY_DEPLOY_VERSION 1)
endif()
set(SCREENPLAY_STEAM_VERSION 0)
if(${SCREENPLAY_STEAM})
set(SCREENPLAY_STEAM_VERSION 1)
endif()
# Specify the configuration file from which the header file will be generated # Specify the configuration file from which the header file will be generated
configure_file(${CMAKE_SOURCE_DIR}/CMake/CMakeVariables.h.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/CMakeVariables.h @ONLY) configure_file(${CMAKE_SOURCE_DIR}/CMake/CMakeVariables.h.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/CMakeVariables.h @ONLY)
message(STATUS "GENERATE: ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/CMakeVariables.h and add ${TARGET} to ${CMAKE_CURRENT_BINARY_DIR}") message(
STATUS "GENERATE: ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/CMakeVariables.h and add ${TARGET} to ${CMAKE_CURRENT_BINARY_DIR}")
# Add the directory containing the generated header # Add the directory containing the generated header
target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
endfunction() endfunction()

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
<key>CFBundleGetInfoString</key>
<string>${MACOSX_BUNDLE_INFO_STRING}</string>
<key>CFBundleIconFile</key>
<string>${MACOSX_BUNDLE_ICON_FILE}</string>
<key>CFBundleIdentifier</key>
<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleLongVersionString</key>
<string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string>
<key>CFBundleName</key>
<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
<key>NSHumanReadableCopyright</key>
<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
<key>NSHighResolutionCapable</key>
<string>True</string>
<key>NSSupportsAutomaticGraphicsSwitching</key>
<true/>
</dict>
</plist>

BIN
CMake/dmg_background.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

View File

@ -2,11 +2,18 @@ cmake_minimum_required(VERSION 3.22.0)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH}) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})
include(GetProjectVersion) include(GetProjectVersion)
get_project_version(PROJECT_VERSION) get_project_version(SCREENPLAY_VERSION)
# This must be set before project()
if(APPLE)
set(CMAKE_OSX_ARCHITECTURES
"arm64;x86_64"
CACHE STRING "" FORCE)
endif()
project( project(
ScreenPlay ScreenPlay
VERSION ${PROJECT_VERSION} VERSION ${SCREENPLAY_VERSION}
DESCRIPTION "Modern, Cross Plattform, Live Wallpaper, Widgets and AppDrawer!" DESCRIPTION "Modern, Cross Plattform, Live Wallpaper, Widgets and AppDrawer!"
HOMEPAGE_URL "https://screen-play.app/" HOMEPAGE_URL "https://screen-play.app/"
LANGUAGES CXX) LANGUAGES CXX)
@ -27,13 +34,6 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD 20)
set(THIRD_PARTY_PATH "${CMAKE_CURRENT_SOURCE_DIR}/ThirdParty") set(THIRD_PARTY_PATH "${CMAKE_CURRENT_SOURCE_DIR}/ThirdParty")
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH}) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})
list(APPEND CMAKE_MODULE_PATH "${THIRD_PARTY_PATH}/ecm/modules")
list(APPEND CMAKE_MODULE_PATH "${THIRD_PARTY_PATH}/ecm/find-modules")
list(APPEND CMAKE_MODULE_PATH "${THIRD_PARTY_PATH}/ecm/kde-modules")
message(STATUS "[PROJECT] CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}")
option(OSX_BUNDLE "Enable distribution macOS bundle" OFF)
set(CMAKE_OSX_DEPLOYMENT_TARGET "13.0") set(CMAKE_OSX_DEPLOYMENT_TARGET "13.0")
# This is needed for OSX: Because we bundle ScreenPlay and ScreenPlayWallpaper into .app they both need other QML dependencies like # This is needed for OSX: Because we bundle ScreenPlay and ScreenPlayWallpaper into .app they both need other QML dependencies like
@ -45,7 +45,6 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET "13.0")
set(SCREENPLAY_QML_MODULES_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qml") set(SCREENPLAY_QML_MODULES_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qml")
if(APPLE) if(APPLE)
set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")
set(SCREENPLAY_QML_MODULES_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ScreenPlay.app/Contents/MacOS/qml") set(SCREENPLAY_QML_MODULES_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ScreenPlay.app/Contents/MacOS/qml")
endif() endif()
@ -59,11 +58,37 @@ set(VCPKG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../vcpkg")
set(VCPKG_INSTALLED_PATH "${VCPKG_PATH}/installed/${VCPKG_ARCH}") set(VCPKG_INSTALLED_PATH "${VCPKG_PATH}/installed/${VCPKG_ARCH}")
set(VCPKG_BIN_PATH "${VCPKG_INSTALLED_PATH}/bin") set(VCPKG_BIN_PATH "${VCPKG_INSTALLED_PATH}/bin")
# Godot Editor
set(GODOT_VERSION_MAJOR "4")
set(GODOT_VERSION_MINOR "2")
set(GODOT_VERSION_PATCH "")
set(GODOT_RELEASE_TYPE "stable")
# Use an if statement to check if GODOT_VERSION_PATCH is empty or not
if(GODOT_VERSION_PATCH STREQUAL "")
# If patch version is empty, don't include it and the preceding dot
set(GODOT_VERSION "v${GODOT_VERSION_MAJOR}.${GODOT_VERSION_MINOR}-${GODOT_RELEASE_TYPE}")
else()
# If patch version is not empty, include it and the preceding dot
set(GODOT_VERSION "v${GODOT_VERSION_MAJOR}.${GODOT_VERSION_MINOR}.${GODOT_VERSION_PATCH}-${GODOT_RELEASE_TYPE}")
endif()
if(WIN32)
set(GODOT_EDITOR_NAME "Godot_${GODOT_VERSION}_win64.exe")
elseif(APPLE)
set(GODOT_EDITOR_NAME "Godot.app")
elseif(UNIX)
set(GODOT_EDITOR_NAME "Godot_${GODOT_VERSION}_linux.x86_64")
else()
message(FATAL_ERROR "Unsupported OS")
endif()
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_DEPLOY "Marks this version as an official deploy version. This version uses different import paths and other settings." option(SCREENPLAY_DEPLOY "Marks this version as an official deploy version. This version uses different import paths and other settings."
OFF) OFF)
option(SCREENPLAY_TESTS "Enables UI tests." ON) option(SCREENPLAY_TESTS "Enables UI tests." ON)
option(SCREENPLAY_INSTALLER "Indicates whether an installer via the Qt Installer Framework is created." OFF) option(SCREENPLAY_INSTALLER "Indicates whether an installer via the Qt Installer Framework is created." OFF)
option(SCREENPLAY_GODOT "Compiles ScreenPlayGodotWallpaper." ON)
# Gitlab CI has many ENV variables. We use this one to check if the current build happens inside the CI # 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}) if(DEFINED ENV{CI_COMMIT_MESSAGE})
@ -72,13 +97,8 @@ endif()
file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
add_compile_definitions(COMPILE_INFO="Build Date: ${BUILD_DATE}. Git Hash: ${GIT_COMMIT_HASH}. ")
add_compile_definitions(SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
if(${SCREENPLAY_DEPLOY})
add_compile_definitions(DEPLOY_VERSION)
endif()
find_package(Git REQUIRED) find_package(Git REQUIRED)
if(WIN32) if(WIN32)
set(DATE_COMMAND "CMD") set(DATE_COMMAND "CMD")
set(DATE_ARG "/c date /t") set(DATE_ARG "/c date /t")
@ -87,14 +107,12 @@ else()
set(DATE_ARG "") set(DATE_ARG "")
endif() endif()
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
# Fixes QWebEngine linker errors on Ubuntu 22.04 # Fixes QWebEngine linker errors on Ubuntu 22.04
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
endif() endif()
execute_process( execute_process(
COMMAND ${DATE_COMMAND} ${DATE_ARG} COMMAND ${DATE_COMMAND} ${DATE_ARG}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
@ -113,24 +131,21 @@ execute_process(
OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_VARIABLE GIT_COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
add_compile_definitions(BUILD_TYPE="${CMAKE_BUILD_TYPE}") if(${SCREENPLAY_TESTS})
add_compile_definitions(BUILD_DATE="${BUILD_DATE}") enable_testing()
add_compile_definitions(GIT_BRANCH_NAME="${GIT_BRANCH_NAME}") endif()
add_compile_definitions(GIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
add_subdirectory(ThirdParty)
set(ECM_DIR "${THIRD_PARTY_PATH}/ecm")
add_subdirectory(CMake)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
# Needs to be append, because we include ecm as third party on linux # Needs to be append, because we include ecm as third party on linux
set(ECM_DIR "${THIRD_PARTY_PATH}/ecm")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
list(APPEND CMAKE_MODULE_PATH "${ECM_DIR}") list(APPEND CMAKE_MODULE_PATH "${ECM_DIR}")
list(APPEND CMAKE_MODULE_PATH "${ECM_DIR}/cmake") list(APPEND CMAKE_MODULE_PATH "${ECM_DIR}/cmake")
else()
endif() endif()
add_subdirectory(Tools)
add_subdirectory(ThirdParty)
add_subdirectory(CMake)
add_subdirectory(Tools)
add_subdirectory(ScreenPlay) add_subdirectory(ScreenPlay)
add_subdirectory(ScreenPlaySDK) add_subdirectory(ScreenPlaySDK)
add_subdirectory(ScreenPlayShader) add_subdirectory(ScreenPlayShader)
@ -139,12 +154,13 @@ add_subdirectory(ScreenPlayWidget)
add_subdirectory(ScreenPlayUtil) add_subdirectory(ScreenPlayUtil)
add_subdirectory(ScreenPlayWeather) add_subdirectory(ScreenPlayWeather)
if(${SCREENPLAY_TESTS}) if(${SCREENPLAY_GODOT})
enable_testing() add_subdirectory(ScreenPlayWallpaper/Godot)
endif() endif()
# Only add target SteamSDKQtEnums # Only add target SteamSDKQtEnums
add_subdirectory(ScreenPlayWorkshop/SteamSDK) add_subdirectory(ScreenPlayWorkshop/SteamSDK)
if(${SCREENPLAY_STEAM}) if(${SCREENPLAY_STEAM})
add_subdirectory(ScreenPlayWorkshop) add_subdirectory(ScreenPlayWorkshop)
endif() endif()
@ -161,7 +177,7 @@ if(${SCREENPLAY_INSTALLER})
endif() endif()
endif() endif()
message(STATUS "[PROJECT] PROJECT_VERSION = ${PROJECT_VERSION}") message(STATUS "[PROJECT] CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}")
message(STATUS "[PROJECT] CMAKE_VERSION = ${CMAKE_VERSION}") message(STATUS "[PROJECT] CMAKE_VERSION = ${CMAKE_VERSION}")
message(STATUS "[PROJECT] SCREENPLAY_QML_MODULES_PATH = ${SCREENPLAY_QML_MODULES_PATH}") message(STATUS "[PROJECT] SCREENPLAY_QML_MODULES_PATH = ${SCREENPLAY_QML_MODULES_PATH}")
message(STATUS "[PROJECT] CMAKE_TOOLCHAIN_FILE = ${CMAKE_TOOLCHAIN_FILE}") message(STATUS "[PROJECT] CMAKE_TOOLCHAIN_FILE = ${CMAKE_TOOLCHAIN_FILE}")
@ -169,10 +185,14 @@ message(STATUS "[PROJECT] VCPKG_PATH = ${VCPKG_PATH}")
message(STATUS "[PROJECT] CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}") message(STATUS "[PROJECT] CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}")
message(STATUS "[PROJECT] VCPKG_TARGET_TRIPLET = ${VCPKG_TARGET_TRIPLET}") message(STATUS "[PROJECT] VCPKG_TARGET_TRIPLET = ${VCPKG_TARGET_TRIPLET}")
message(STATUS "[PROJECT] CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}") message(STATUS "[PROJECT] CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}")
message(STATUS "[PROJECT] GODOT_VERSION = ${GODOT_VERSION}")
message(STATUS "[PROJECT] GODOT_EDITOR_NAME = ${GODOT_EDITOR_NAME}")
message(STATUS "[PROJECT] SCREENPLAY_VERSION = ${SCREENPLAY_VERSION}")
message(STATUS "[OPTION] SCREENPLAY_DEPLOY = ${SCREENPLAY_DEPLOY}") message(STATUS "[OPTION] SCREENPLAY_DEPLOY = ${SCREENPLAY_DEPLOY}")
message(STATUS "[OPTION] SCREENPLAY_INSTALLER = ${SCREENPLAY_INSTALLER}") message(STATUS "[OPTION] SCREENPLAY_INSTALLER = ${SCREENPLAY_INSTALLER}")
message(STATUS "[OPTION] SCREENPLAY_STEAM = ${SCREENPLAY_STEAM}") message(STATUS "[OPTION] SCREENPLAY_STEAM = ${SCREENPLAY_STEAM}")
message(STATUS "[OPTION] SCREENPLAY_TESTS = ${SCREENPLAY_TESTS}") message(STATUS "[OPTION] SCREENPLAY_TESTS = ${SCREENPLAY_TESTS}")
message(STATUS "[OPTION] SCREENPLAY_GODOT = ${SCREENPLAY_GODOT}")
message(STATUS "[DEFINE] BUILD_TYPE = ${CMAKE_BUILD_TYPE}") message(STATUS "[DEFINE] BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
message(STATUS "[DEFINE] GIT_COMMIT_HASH = ${GIT_COMMIT_HASH}") message(STATUS "[DEFINE] GIT_COMMIT_HASH = ${GIT_COMMIT_HASH}")
message(STATUS "[CPP DEFINE] DEPLOY_VERSION = ${DEPLOY_VERSION}") message(STATUS "[CPP DEFINE] DEPLOY_VERSION = ${DEPLOY_VERSION}")

View File

@ -19,7 +19,7 @@
}, },
"environment": { "environment": {
"qt_path": "${sourceDir}/../aqt", "qt_path": "${sourceDir}/../aqt",
"qt_version": "6.5.2" "qt_version": "6.6.1"
}, },
"toolset": { "toolset": {
"value": "host=x64", "value": "host=x64",
@ -38,47 +38,58 @@
} }
}, },
{ {
"name": "windows-debug-qt-6.5.2", "name": "windows-debug-qt-6.6.1",
"inherits": "default-windows", "inherits": "default-windows",
"displayName": "MSVC SP Qt 6.5.2 Debug", "displayName": "MSVC SP Qt 6.6.1 Debug",
"binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.5.2_MSVC_Debug", "binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.6.1_MSVC_Debug",
"environment": { "environment": {
"qt_version": "6.5.2" "qt_version": "6.6.1"
}, },
"cacheVariables": { "cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug" "CMAKE_BUILD_TYPE": "Debug"
} }
}, },
{ {
"name": "windows-relwithdebinfo-qt-6.5.2", "name": "windows-relwithdebinfo-qt-6.6.1",
"inherits": "default-windows", "inherits": "default-windows",
"displayName": "MSVC SP Qt 6.5.2 RelWithDebInfo", "displayName": "MSVC SP Qt 6.6.1 RelWithDebInfo",
"binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.5.2_MSVC_RelWithDebInfo", "binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.6.1_MSVC_RelWithDebInfo",
"environment": { "environment": {
"qt_version": "6.5.2" "qt_version": "6.6.1"
}, },
"cacheVariables": { "cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo" "CMAKE_BUILD_TYPE": "RelWithDebInfo"
} }
}, },
{ {
"name": "windows-release-qt-6.5.2", "name": "windows-release-qt-6.6.1",
"inherits": "default-windows", "inherits": "default-windows",
"displayName": "MSVC SP Qt 6.5.2 Release", "displayName": "MSVC SP Qt 6.6.1 Release",
"binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.5.2_MSVC_Release", "binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.6.1_MSVC_Release",
"environment": { "environment": {
"qt_version": "6.5.2" "qt_version": "6.6.1"
}, },
"cacheVariables": { "cacheVariables": {
"CMAKE_BUILD_TYPE": "Release" "CMAKE_BUILD_TYPE": "Release"
} }
}, },
{
"name": "windows-release-qt-6.6.1-release-deploy",
"inherits": "windows-release-qt-6.6.1",
"displayName": "MSVC SP Qt 6.6.1 Release Steam Deploy",
"binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.6.1_MSVC_Release_Steam_Deploy",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"SCREENPLAY_DEPLOY": "ON",
"SCREENPLAY_STEAM": "ON"
}
},
{ {
"name": "linux-generic-debug", "name": "linux-generic-debug",
"displayName": "ScreenPlay 64bit Debug Linux", "displayName": "ScreenPlay 64bit Debug Linux",
"description": "Linux only!", "description": "Linux only!",
"generator": "Ninja", "generator": "Ninja",
"binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.5.2_GCC_Debug", "binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.6.1_GCC_Debug",
"condition": { "condition": {
"type": "equals", "type": "equals",
"lhs": "${hostSystemName}", "lhs": "${hostSystemName}",
@ -102,7 +113,7 @@
"name": "linux-relwithdebinfo", "name": "linux-relwithdebinfo",
"displayName": "ScreenPlay 64bit RelWithDebInfo Linux", "displayName": "ScreenPlay 64bit RelWithDebInfo Linux",
"inherits": "linux-generic-debug", "inherits": "linux-generic-debug",
"binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.5.2_GCC_RelWithDebInfo", "binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.6.1_GCC_RelWithDebInfo",
"cacheVariables": { "cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo" "CMAKE_BUILD_TYPE": "RelWithDebInfo"
} }
@ -112,7 +123,7 @@
"displayName": "ScreenPlay 64bit Debug Linux using aqt", "displayName": "ScreenPlay 64bit Debug Linux using aqt",
"description": "Linux only!", "description": "Linux only!",
"generator": "Ninja", "generator": "Ninja",
"binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.5.2_GCC_Debug", "binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.6.1_GCC_Debug",
"condition": { "condition": {
"type": "equals", "type": "equals",
"lhs": "${hostSystemName}", "lhs": "${hostSystemName}",
@ -129,7 +140,7 @@
"CMAKE_CXX_COMPILER": "g++", "CMAKE_CXX_COMPILER": "g++",
"CMAKE_C_COMPILER": "gcc", "CMAKE_C_COMPILER": "gcc",
"CMAKE_BUILD_TYPE": "Debug", "CMAKE_BUILD_TYPE": "Debug",
"CMAKE_PREFIX_PATH": "$env{qt_path}/6.5.2/gcc_64", "CMAKE_PREFIX_PATH": "$env{qt_path}/6.6.1/gcc_64",
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../vcpkg/scripts/buildsystems/vcpkg.cmake", "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../vcpkg/scripts/buildsystems/vcpkg.cmake",
"VCPKG_TARGET_TRIPLET": "x64-linux" "VCPKG_TARGET_TRIPLET": "x64-linux"
} }
@ -138,7 +149,7 @@
"name": "linux-aqt-relwithdebinfo", "name": "linux-aqt-relwithdebinfo",
"displayName": "ScreenPlay 64bit RelWithDebInfo Linux using aqt", "displayName": "ScreenPlay 64bit RelWithDebInfo Linux using aqt",
"inherits": "linux-ubuntu-debug", "inherits": "linux-ubuntu-debug",
"binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.5.2_GCC_RelWithDebInfo", "binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.6.1_GCC_RelWithDebInfo",
"cacheVariables": { "cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo" "CMAKE_BUILD_TYPE": "RelWithDebInfo"
} }
@ -148,7 +159,7 @@
"displayName": "ScreenPlay 64bit Debug osx", "displayName": "ScreenPlay 64bit Debug osx",
"description": "Osx only!", "description": "Osx only!",
"generator": "Ninja", "generator": "Ninja",
"binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.5.2_Clang_Debug", "binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.6.1_Clang_Debug",
"condition": { "condition": {
"type": "equals", "type": "equals",
"lhs": "${hostSystemName}", "lhs": "${hostSystemName}",
@ -163,7 +174,7 @@
"CMAKE_CXX_COMPILER": "clang++", "CMAKE_CXX_COMPILER": "clang++",
"CMAKE_C_COMPILER": "clang", "CMAKE_C_COMPILER": "clang",
"CMAKE_BUILD_TYPE": "Debug", "CMAKE_BUILD_TYPE": "Debug",
"CMAKE_PREFIX_PATH": "$env{qt_path}/6.5.2/macos", "CMAKE_PREFIX_PATH": "$env{qt_path}/6.6.1/macos",
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../vcpkg/scripts/buildsystems/vcpkg.cmake" "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../vcpkg/scripts/buildsystems/vcpkg.cmake"
} }
}, },
@ -171,7 +182,7 @@
"name": "osx-relwithdebinfo", "name": "osx-relwithdebinfo",
"displayName": "ScreenPlay 64bit RelWithDebInfo osx", "displayName": "ScreenPlay 64bit RelWithDebInfo osx",
"inherits": "osx-debug", "inherits": "osx-debug",
"binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.5.2_Clang_RelWithDebInfo", "binaryDir": "${sourceDir}/../build_ScreenPlay_Qt_6.6.1_Clang_RelWithDebInfo",
"cacheVariables": { "cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo" "CMAKE_BUILD_TYPE": "RelWithDebInfo"
} }
@ -190,5 +201,13 @@
"name": "osx-debug", "name": "osx-debug",
"configurePreset": "osx-debug" "configurePreset": "osx-debug"
} }
],
"testPresets": [
{
"name": "Test",
"description": "",
"displayName": "",
"configurePreset": "windows-release-qt-6.6.1"
}
] ]
} }

View File

@ -0,0 +1,2 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf

View File

@ -0,0 +1,2 @@
# Godot 4+ specific ignores
.godot/

View File

@ -0,0 +1,27 @@
extends Node
# Reference to the PathFollow node
@onready var path_follow = $Path3D/PathFollow3D
@onready var label = $Label3D
var debug_path
var screenplaywallpaper
var appID = ""
# Speed of the movement along the path
var speed = 0.8
var path = "/root/Wallpaper/ScreenPlayGodotWallpaper"
func _process(delta):
# Update the offset to move the object along the path
path_follow.progress += speed * 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
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

View File

@ -0,0 +1,17 @@
extends Path3D
# Reference to the PathFollow node
@onready var path_follow = $PathFollow3D
@onready var path_follow =
# Speed of the movement along the path
var speed = 0.8
func _process(delta):
# Update the offset to move the object along the path
path_follow.progress += speed * 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

View File

@ -0,0 +1,61 @@
[preset.0]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=true
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"

View File

@ -0,0 +1 @@
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 813 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H447l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c3 34 55 34 58 0v-86c-3-34-55-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg>

After

Width:  |  Height:  |  Size: 950 B

View File

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://boex5vkldqpl5"
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.svg"
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b50wk45iaak85"
path="res://.godot/imported/preview.png-b4838d23de224c84c7c9b5588b6708a6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://preview.png"
dest_files=["res://.godot/imported/preview.png-b4838d23de224c84c7c9b5588b6708a6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@ -0,0 +1,20 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5
[application]
config/name="Fjord"
run/main_scene="res://wallpaper.tscn"
config/features=PackedStringArray("4.2", "Mobile")
config/icon="res://icon.svg"
[rendering]
renderer/rendering_method="mobile"

View File

@ -0,0 +1,11 @@
{
"description": "Godot",
"file": "main.qml",
"preview": "preview.png",
"tags": [
"Godot"
],
"title": "Godot Wallpaper",
"type": "godotWallpaper",
"visibility": "public"
}

View File

@ -0,0 +1,39 @@
[gd_scene load_steps=3 format=3 uid="uid://dp883pjlm7gk8"]
[ext_resource type="Script" path="res://Action.gd" id="1_p251a"]
[sub_resource type="Curve3D" id="Curve3D_8adw4"]
bake_interval = 2.4
_data = {
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.82099, -0.143238, -1.14419, 0, 0, 0, 0, 0, 0, -0.837192, 0.205974, -1.5077, 0, 0, 0, 0, 0, 0, 2.26923, 2.38419e-07, -1.10178, 0, 0, 0, 0, 0, 0, 3.0406, -0.00296563, 0.345948, 0, 0, 0, 0, 0, 0, 0.398976, -0.117547, 1.42909, 0, 0, 0, 0, 0, 0, -2.74903, -0.071628, 0.795209, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0)
}
point_count = 8
[node name="Node3D" type="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0123152, 0)
script = ExtResource("1_p251a")
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.04825, 4.0185)
[node name="CSGBox3D" type="CSGBox3D" parent="."]
transform = Transform3D(3.5774, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.223695, 0)
size = Vector3(7.59119, 0.0764128, 5.75358)
[node name="Path3D" type="Path3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.1394, 0, 0.705414)
curve = SubResource("Curve3D_8adw4")
[node name="PathFollow3D" type="PathFollow3D" parent="Path3D"]
transform = Transform3D(0.375854, -0.0435545, 0.925652, -3.72525e-09, 0.998895, 0.0470007, -0.926666, -0.0176657, 0.375443, 0, 0, 0)
[node name="OmniLight3D" type="OmniLight3D" parent="Path3D/PathFollow3D"]
light_color = Color(0.921569, 0.52549, 0.32549, 1)
[node name="Label3D" type="Label3D" parent="."]
transform = Transform3D(0.997247, 0, 0, 0, 0.997247, 0, 0, 0, 0.997247, 0.030704, 1.238, -1.40679)
shaded = true
text = "GODO WALLPAPER"
font_size = 126
outline_size = 42

View File

@ -3,6 +3,7 @@ import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Controls.Material import QtQuick.Controls.Material
import ScreenPlayWallpaper
Rectangle { Rectangle {
id: root id: root
@ -23,5 +24,16 @@ Rectangle {
Layout.fillWidth: true Layout.fillWidth: true
onClicked: root.counter++ onClicked: root.counter++
} }
TextField {
placeholderText: "Edit me"
}
Button {
text: "Exit"
onClicked: {
Qt.callLater(function () {
Wallpaper.terminate();
});
}
}
} }
} }

View File

@ -120,3 +120,23 @@ Error: HTTP status code: 403. A required agreement is missing or has expired. Th
``` ```
Go to [appstoreconnect.apple.com](https://appstoreconnect.apple.com) and accept the updated 'Apple Developer Program License Agreement'. Go to [appstoreconnect.apple.com](https://appstoreconnect.apple.com) and accept the updated 'Apple Developer Program License Agreement'.
## Dmg signing
Ensure you have both a Developer ID Application certificate and a Developer ID Installer certificate in your Keychain. You can check this in the Keychain Access app.
- Developer ID Application Certificate:
- Used for code signing the application itself. This ensures that the app is from a known developer and hasn't been tampered with since it was signed.
- Developer ID Installer Certificate:
- Used specifically for signing installer packages like PKG files or disk images (DMGs). This is separate from the application certificate and is specifically for the installer.
1. Check Your Certificates at https://developer.apple.com/account/resources/certificates/list and create a new one `Mac Installer Distribution
This certificate is used to sign your app's Installer Package for submission to the Mac App Store.`
2. `Upload a Certificate Signing Request`. To manually generate a Certificate, you need a Certificate Signing Request (CSR) file from your Mac. https://developer.apple.com/help/account/create-certificates/create-a-certificate-signing-request
1. Launch Keychain Access located in /Applications/Utilities.
1. Choose Keychain Access > Certificate Assistant > Request a Certificate from a Certificate Authority.
1. In the Certificate Assistant dialog, enter an email address in the User Email Address field.
1. In the Common Name field, enter a name for the key (for example, Gita Kumar Dev Key).
1. Leave the CA Email Address field empty.
1. Choose “Saved to disk,” call it something like `CertificateSigningRequest_Tachiom_Installer_Certificate` then click Continue.
3. Download the new certificate
4. Download your certificate to your Mac, then double click the .cer file to install in Keychain Access. IMPORTANT: Select `Keychan: Login` in the dropdown! Make sure to save a backup copy of your private and public keys somewhere secure.
- The "login" keychain is tied to your user account and unlocks when you log in, making it a convenient location for development-related certificates. The "System" keychain is more restrictive and requires admin permissions for access, while the "Local Items" keychain is specific to iCloud Keychain items.
5. This should now be displayed like `3rd Party Mac Developer Installer: Elias Steurer (V887LHYKRH)` and be valid one year.

View File

@ -5,6 +5,9 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_AUTORCC ON) set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
# ##### USE CMAKE VARIABLES IN CODE #####
include(GenerateCMakeVariableHeader)
set(SOURCES set(SOURCES
# cmake-format: sort # cmake-format: sort
src/app.cpp src/app.cpp
@ -21,7 +24,6 @@ set(SOURCES
src/screenplaywidget.cpp src/screenplaywidget.cpp
src/sdkconnection.cpp src/sdkconnection.cpp
src/settings.cpp src/settings.cpp
src/util.cpp
src/wizards.cpp) src/wizards.cpp)
set(HEADER set(HEADER
@ -42,21 +44,21 @@ set(HEADER
inc/public/ScreenPlay/screenplaywidget.h inc/public/ScreenPlay/screenplaywidget.h
inc/public/ScreenPlay/sdkconnection.h inc/public/ScreenPlay/sdkconnection.h
inc/public/ScreenPlay/settings.h inc/public/ScreenPlay/settings.h
inc/public/ScreenPlay/util.h
inc/public/ScreenPlay/wizards.h) inc/public/ScreenPlay/wizards.h)
set(QML set(QML
# cmake-format: sort # cmake-format: sort
main.qml main.qml
qml/Community/Community.qml
qml/Community/CommunityNavItem.qml qml/Community/CommunityNavItem.qml
qml/Community/CommunityView.qml
qml/Community/XMLNewsfeed.qml qml/Community/XMLNewsfeed.qml
qml/Create/Create.qml
qml/Create/CreateSidebar.qml qml/Create/CreateSidebar.qml
qml/Create/CreateView.qml
qml/Create/StartInfo.qml qml/Create/StartInfo.qml
qml/Create/StartInfoLinkImage.qml qml/Create/StartInfoLinkImage.qml
qml/Create/Wizard.qml qml/Create/Wizard.qml
qml/Create/Wizards/GifWallpaper.qml qml/Create/Wizards/GifWallpaper.qml
qml/Create/Wizards/GodotWallpaper.qml
qml/Create/Wizards/HTMLWallpaper.qml qml/Create/Wizards/HTMLWallpaper.qml
qml/Create/Wizards/HTMLWidget.qml qml/Create/Wizards/HTMLWidget.qml
qml/Create/Wizards/Importh264/Importh264.qml qml/Create/Wizards/Importh264/Importh264.qml
@ -73,32 +75,30 @@ set(QML
qml/Create/Wizards/QMLWidget.qml qml/Create/Wizards/QMLWidget.qml
qml/Create/Wizards/WebsiteWallpaper.qml qml/Create/Wizards/WebsiteWallpaper.qml
qml/Create/Wizards/WizardPage.qml qml/Create/Wizards/WizardPage.qml
qml/Create/WizardsFiles/QMLWallpaperMain.qml
qml/Create/WizardsFiles/QMLWidgetMain.qml
qml/Installed/Installed.qml
qml/Installed/InstalledNavigation.qml qml/Installed/InstalledNavigation.qml
qml/Installed/InstalledView.qml
qml/Installed/InstalledWelcomeScreen.qml qml/Installed/InstalledWelcomeScreen.qml
qml/Installed/ScreenPlayItem.qml qml/Installed/ScreenPlayItem.qml
qml/Installed/ScreenPlayItemImage.qml qml/Installed/ScreenPlayItemImage.qml
qml/Installed/Sidebar.qml qml/Installed/Sidebar.qml
qml/Monitors/DefaultVideoControls.qml qml/Monitors/DefaultVideoControls.qml
qml/Monitors/Monitors.qml
qml/Monitors/MonitorSelection.qml qml/Monitors/MonitorSelection.qml
qml/Monitors/MonitorSelectionItem.qml qml/Monitors/MonitorSelectionItem.qml
qml/Monitors/MonitorsProjectSettingItem.qml qml/Monitors/MonitorsProjectSettingItem.qml
qml/Monitors/MonitorsView.qml
qml/Monitors/SaveNotification.qml qml/Monitors/SaveNotification.qml
qml/Navigation/ExitPopup.qml qml/Navigation/ExitPopup.qml
qml/Navigation/Navigation.qml qml/Navigation/Navigation.qml
qml/Settings/SettingBool.qml qml/Settings/SettingBool.qml
qml/Settings/Settings.qml
qml/Settings/SettingsButton.qml qml/Settings/SettingsButton.qml
qml/Settings/SettingsComboBox.qml qml/Settings/SettingsComboBox.qml
qml/Settings/SettingsExpander.qml qml/Settings/SettingsExpander.qml
qml/Settings/SettingsHeader.qml qml/Settings/SettingsHeader.qml
qml/Settings/SettingsHorizontalSeperator.qml qml/Settings/SettingsHorizontalSeperator.qml
qml/Settings/SettingsPage.qml qml/Settings/SettingsPage.qml
qml/Settings/SettingsView.qml
qml/TrayIcon.qml qml/TrayIcon.qml
qml/Workshop/Workshop.qml) qml/Workshop/WorkshopView.qml)
set(TS_FILES set(TS_FILES
# cmake-format: sort # cmake-format: sort
@ -135,6 +135,7 @@ set(RESOURCES
assets/icons/icon_build.svg assets/icons/icon_build.svg
assets/icons/icon_cake.afdesign assets/icons/icon_cake.afdesign
assets/icons/icon_cake.svg assets/icons/icon_cake.svg
assets/icons/icon_cancel_presentation.svg
assets/icons/icon_close.svg assets/icons/icon_close.svg
assets/icons/icon_code.svg assets/icons/icon_code.svg
assets/icons/icon_community.svg assets/icons/icon_community.svg
@ -143,6 +144,7 @@ set(RESOURCES
assets/icons/icon_document.svg assets/icons/icon_document.svg
assets/icons/icon_done.svg assets/icons/icon_done.svg
assets/icons/icon_download.svg assets/icons/icon_download.svg
assets/icons/icon_edit.svg
assets/icons/icon_emptyWidget.svg assets/icons/icon_emptyWidget.svg
assets/icons/icon_folder_open.svg assets/icons/icon_folder_open.svg
assets/icons/icon_forum.svg assets/icons/icon_forum.svg
@ -156,6 +158,7 @@ set(RESOURCES
assets/icons/icon_movie.svg assets/icons/icon_movie.svg
assets/icons/icon_new_releases.svg assets/icons/icon_new_releases.svg
assets/icons/icon_open_in_new.svg assets/icons/icon_open_in_new.svg
assets/icons/icon_open_in_new_black.svg
assets/icons/icon_pause.svg assets/icons/icon_pause.svg
assets/icons/icon_people.svg assets/icons/icon_people.svg
assets/icons/icon_play.svg assets/icons/icon_play.svg
@ -172,7 +175,7 @@ set(RESOURCES
assets/icons/icon_thumb_down.svg assets/icons/icon_thumb_down.svg
assets/icons/icon_thumb_up.svg assets/icons/icon_thumb_up.svg
assets/icons/icon_upload.svg assets/icons/icon_upload.svg
assets/icons/icon_video_settings_black_24dp.svg assets/icons/icon_video_settings.svg
assets/icons/icon_volume.svg assets/icons/icon_volume.svg
assets/icons/icon_volume_mute.svg assets/icons/icon_volume_mute.svg
assets/icons/icon_volume_up.svg assets/icons/icon_volume_up.svg
@ -198,9 +201,6 @@ set(RESOURCES
assets/licenses/Apache2.txt assets/licenses/Apache2.txt
assets/licenses/OFL.txt assets/licenses/OFL.txt
assets/macos/app.screenplay.plist assets/macos/app.screenplay.plist
assets/particle/backgroundGlow.png
assets/particle/dot.png
assets/shader/movingcolorramp.fsh
assets/startinfo/blender.png assets/startinfo/blender.png
assets/startinfo/flaticon.png assets/startinfo/flaticon.png
assets/startinfo/forums.png assets/startinfo/forums.png
@ -229,7 +229,6 @@ set(RESOURCES
assets/wizards/License_CC_Attribution-ShareAlike_4.0.txt assets/wizards/License_CC_Attribution-ShareAlike_4.0.txt
assets/wizards/License_CC_Attribution_4.0.txt assets/wizards/License_CC_Attribution_4.0.txt
assets/wizards/License_GPL_3.0.txt assets/wizards/License_GPL_3.0.txt
assets/wizards/QmlProject.qmlproject
assets/WorkshopPreview.html assets/WorkshopPreview.html
legal/DataProtection.txt legal/DataProtection.txt
legal/gpl-3.0.txt legal/gpl-3.0.txt
@ -237,9 +236,16 @@ set(RESOURCES
legal/OFL.txt legal/OFL.txt
legal/OpenSSL.txt legal/OpenSSL.txt
profiles.json profiles.json
qml/Create/WizardsFiles/Godot_v5/export_presets.cfg
qml/Create/WizardsFiles/Godot_v5/project.godot
qml/Create/WizardsFiles/Godot_v5/spinner.gd
qml/Create/WizardsFiles/Godot_v5/wallpaper.tscn
qml/Create/WizardsFiles/HTMLWallpaperMain.html qml/Create/WizardsFiles/HTMLWallpaperMain.html
qml/Create/WizardsFiles/HTMLWidgetMain.html qml/Create/WizardsFiles/HTMLWidgetMain.html
qml/Create/WizardsFiles/QmlProject.qmlproject
qml/Create/WizardsFiles/QMLWallpaperMain.qml qml/Create/WizardsFiles/QMLWallpaperMain.qml
qml/Create/WizardsFiles/QMLWallpaperMain.qml
qml/Create/WizardsFiles/QMLWidgetMain.qml
qml/Create/WizardsFiles/QMLWidgetMain.qml qml/Create/WizardsFiles/QMLWidgetMain.qml
qtquickcontrols2.conf) qtquickcontrols2.conf)
@ -268,8 +274,17 @@ find_package(
Test) Test)
add_library(ScreenPlayApp STATIC) add_library(ScreenPlayApp STATIC)
target_include_directories(
ScreenPlayApp
PUBLIC inc/public/
PRIVATE src/)
# Note making this public is so that *_qmltyperegistrations.cpp can find the needed include
target_include_directories(ScreenPlayApp PUBLIC src/ inc/public/ScreenPlay) target_include_directories(ScreenPlayApp PUBLIC src/ inc/public/ScreenPlay)
# ScreenPlayApp is our qml module needed for compiling of all classes and most importanly for QML_ELEMENT. So our app is mostly a module
# that then link to ScreenPlay executable.
qt_add_qml_module( qt_add_qml_module(
ScreenPlayApp ScreenPlayApp
URI URI
@ -296,7 +311,6 @@ target_link_libraries(
ScreenPlayUtilplugin ScreenPlayUtilplugin
QArchive QArchive
Plausibleplugin Plausibleplugin
SteamSDKQtEnums
Threads::Threads Threads::Threads
Qt6::Quick Qt6::Quick
Qt6::Gui Qt6::Gui
@ -308,7 +322,6 @@ target_link_libraries(
Qt6::Xml) Qt6::Xml)
if(${SCREENPLAY_STEAM}) if(${SCREENPLAY_STEAM})
target_compile_definitions(ScreenPlayApp PRIVATE SCREENPLAY_STEAM)
target_link_libraries(ScreenPlayApp PUBLIC ScreenPlayWorkshopplugin ScreenPlayWorkshop) target_link_libraries(ScreenPlayApp PUBLIC ScreenPlayWorkshopplugin ScreenPlayWorkshop)
endif() endif()
@ -318,26 +331,16 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ScreenPlayApp ScreenPlayAppplugin)
if(${SCREENPLAY_TESTS}) if(${SCREENPLAY_TESTS})
add_executable(tst_ScreenPlay tests/tst_main.cpp) add_executable(tst_ScreenPlay tests/tst_main.cpp)
target_link_libraries(tst_ScreenPlay PRIVATE ScreenPlayApp ScreenPlayAppplugin Qt6::Test) target_link_libraries(tst_ScreenPlay PRIVATE ScreenPlayApp ScreenPlayAppplugin Qt6::Test)
generate_cmake_variable_header(tst_ScreenPlay)
if(${SCREENPLAY_STEAM}) if(${SCREENPLAY_STEAM})
target_compile_definitions(tst_ScreenPlay PRIVATE SCREENPLAY_STEAM)
target_link_libraries(tst_ScreenPlay PUBLIC ScreenPlayWorkshopplugin ScreenPlayWorkshop) target_link_libraries(tst_ScreenPlay PUBLIC ScreenPlayWorkshopplugin ScreenPlayWorkshop)
endif() endif()
if(APPLE)
set_target_properties(tst_ScreenPlay PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/")
endif()
endif() endif()
if(APPLE AND NOT OSX_BUNDLE)
set_source_files_properties(
${TS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.app/Contents/Resources/translations")
else()
set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/translations")
endif()
qt_add_lrelease(${PROJECT_NAME} TS_FILES ${TS_FILES})
target_include_directories(
ScreenPlayApp
PUBLIC inc/public/
PRIVATE src/)
if(WIN32 if(WIN32
OR UNIX OR UNIX
AND NOT APPLE) AND NOT APPLE)
@ -349,7 +352,7 @@ if(WIN32
endif() endif()
if(WIN32) if(WIN32)
target_link_libraries(ScreenPlayApp PUBLIC CURL::libcurl sentry::sentry) target_link_libraries(ScreenPlayApp PUBLIC CURL::libcurl sentry::sentry ScreenPlayWallpaperLib)
# Icon # Icon
target_sources(${PROJECT_NAME} PRIVATE ScreenPlay.rc) target_sources(${PROJECT_NAME} PRIVATE ScreenPlay.rc)
@ -375,30 +378,22 @@ if(WIN32)
endif() endif()
if(APPLE AND OSX_BUNDLE) if(APPLE)
# Set the installation destination
install(TARGETS "ScreenPlay" DESTINATION /Applications)
include(InstallRequiredSystemLibraries) # Set the path to the icon file
set(CPACK_GENERATOR "Bundle") set(APP_ICON_MACOSX ${CMAKE_CURRENT_SOURCE_DIR}/assets/icons/ScreenPlay.icns)
set(CPACK_BINARY_DRAGNDROP ON)
set(CPACK_BUNDLE_NAME "ScreenPlay")
set(CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/assets/icons/app.ico")
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/assets/icons/app.ico")
set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist")
set(CPACK_BUNDLE_APPLE_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/entitlements.plist")
set(CPACK_PACKAGE_FILE_NAME "ScreenPlay-0.15")
include(CPack)
# Install all files from /bin # Tell CMake where to find the icon
install( set_source_files_properties(${APP_ICON_MACOSX} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
DIRECTORY "${CMAKE_BINARY_DIR}/bin/"
COMPONENT ScreenPlay
DESTINATION "./")
endif() set(RESOURCES_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ScreenPlay.app/Contents/Resources")
file(MAKE_DIRECTORY ${RESOURCES_DIR})
# Specify the name of the icon file for the bundle
set(MACOSX_BUNDLE_ICON_FILE ScreenPlay.icns) # Only the file name
# Fore some reason this only works with maually copy
configure_file(${APP_ICON_MACOSX} "${RESOURCES_DIR}/ScreenPlay.icns" COPYONLY)
if(APPLE AND NOT OSX_BUNDLE)
# Creates a ScreenPlay.app # Creates a ScreenPlay.app
set_target_properties( set_target_properties(
${PROJECT_NAME} ${PROJECT_NAME}
@ -406,9 +401,9 @@ if(APPLE AND NOT OSX_BUNDLE)
MACOSX_BUNDLE TRUE MACOSX_BUNDLE TRUE
MACOSX_RPATH TRUE MACOSX_RPATH TRUE
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
MACOSX_FRAMEWORK_IDENTIFIER screen-play.app MACOSX_FRAMEWORK_IDENTIFIER app.screenplay
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@loader_path/Libraries" XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@loader_path/Libraries"
RESOURCE "${RESOURCE_FILES}" RESOURCE "${RESOURCE_FILES};${APP_ICON_MACOSX}" # Include the icon in the resources
XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME TRUE XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME TRUE
XCODE_ATTRIBUTE_EXECUTABLE_NAME ${PROJECT_NAME}) XCODE_ATTRIBUTE_EXECUTABLE_NAME ${PROJECT_NAME})
@ -424,29 +419,23 @@ if(APPLE AND NOT OSX_BUNDLE)
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/ffmpeg/ffprobe COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/ffmpeg/ffprobe
${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/) ${CMAKE_BINARY_DIR}/bin/ScreenPlay.app/Contents/MacOS/)
# tst_ScreenPlay needs ffmpeg in the base path
if(${SCREENPLAY_TESTS})
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/ffmpeg/ffmpeg ${CMAKE_BINARY_DIR}/bin/)
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/ffmpeg/ffprobe ${CMAKE_BINARY_DIR}/bin/)
endif()
# fonts # fonts
include(CopyRecursive) include(CopyRecursive)
set(FONTS_OUT_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ScreenPlay.app/Contents/Resources/fonts/) set(FONTS_OUT_DIR "${RESOURCES_DIR}/fonts")
file(MAKE_DIRECTORY ${FONTS_OUT_DIR}) file(MAKE_DIRECTORY ${FONTS_OUT_DIR})
copy_recursive(${CMAKE_CURRENT_SOURCE_DIR}/assets/fonts ${FONTS_OUT_DIR} "*.ttf") copy_recursive(${CMAKE_CURRENT_SOURCE_DIR}/assets/fonts ${FONTS_OUT_DIR} "*.ttf")
copy_recursive(${CMAKE_CURRENT_SOURCE_DIR}/assets/fonts ${FONTS_OUT_DIR} "*.otf") copy_recursive(${CMAKE_CURRENT_SOURCE_DIR}/assets/fonts ${FONTS_OUT_DIR} "*.otf")
# .qm translations
set(QM_OUT_DIR "${RESOURCES_DIR}/translations")
file(MAKE_DIRECTORY ${QM_OUT_DIR})
set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION ${QM_OUT_DIR})
endif() endif()
# ##### USE CMAKE VARIABLES IN CODE ##### # Must be called here, because we need to change the OUTPUT_LOCATION for macos
include(GenerateCMakeVariableHeader) qt_add_lrelease(${PROJECT_NAME} TS_FILES ${TS_FILES})
# Note: Must not be ${PROJECT_NAME}, but ScreenPlayApp to work!
# Note: We need the variables in the lib and exe!
generate_cmake_variable_header(${PROJECT_NAME})
generate_cmake_variable_header(ScreenPlayApp) generate_cmake_variable_header(ScreenPlayApp)

View File

@ -7,9 +7,9 @@
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>ScreenPlay</string> <string>ScreenPlay</string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string></string> <string>ScreenPlay</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>app.screen-play</string> <string>app.screenplay</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>

View File

@ -0,0 +1,33 @@
Create icons. Replace `\` with `^` on windows.
```
convert app.png -resize 16x16 ScreenPlay.iconset/icon_16x16.png \
&& convert app.png -resize 32x32 ScreenPlay.iconset/icon_16x16@2x.png \
&& convert app.png -resize 32x32 ScreenPlay.iconset/icon_32x32.png \
&& convert app.png -resize 64x64 ScreenPlay.iconset/icon_32x32@2x.png \
&& convert app.png -resize 128x128 ScreenPlay.iconset/icon_128x128.png \
&& convert app.png -resize 256x256 ScreenPlay.iconset/icon_128x128@2x.png \
&& convert app.png -resize 256x256 ScreenPlay.iconset/icon_256x256.png \
&& convert app.png -resize 512x512 ScreenPlay.iconset/icon_256x256@2x.png \
&& convert app.png -resize 512x512 ScreenPlay.iconset/icon_512x512.png \
&& convert app.png -resize 1024x1024 ScreenPlay.iconset/icon_512x512@2x.png
// Convert to .icns
iconutil -c icns ScreenPlay.iconset
```
Convert for Windows .ico
```
magick convert app.png \
\( -clone 0 -resize 16x16 \) \
\( -clone 0 -resize 32x32 \) \
\( -clone 0 -resize 48x48 \) \
\( -clone 0 -resize 64x64 \) \
\( -clone 0 -resize 128x128 \) \
\( -clone 0 -resize 256x256 \) \
-delete 0 -background transparent app.ico
```
Make the 1k logo smaller
```
convert app.png -resize 512x512 app_icon.png
```

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 128 KiB

BIN
ScreenPlay/assets/icons/app.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m376-320 104-104 104 104 56-56-104-104 104-104-56-56-104 104-104-104-56 56 104 104-104 104 56 56ZM160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm0-80h640v-480H160v480Zm0 0v-480 480Z"/></svg>

After

Width:  |  Height:  |  Size: 358 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M200-200h57l391-391-57-57-391 391v57Zm-80 80v-170l528-527q12-11 26.5-17t30.5-6q16 0 31 6t26 18l55 56q12 11 17.5 26t5.5 30q0 16-5.5 30.5T817-647L290-120H120Zm640-584-56-56 56 56Zm-141 85-28-29 57 57-29-28Z"/></svg>

After

Width:  |  Height:  |  Size: 310 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h280v80H200v560h560v-280h80v280q0 33-23.5 56.5T760-120H200Zm188-212-56-56 372-372H560v-80h280v280h-80v-144L388-332Z"/></svg>

After

Width:  |  Height:  |  Size: 281 B

View File

@ -1 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><path id="steam-square" d="M413.982,173.02c0,-35.325 -28.99,-64.336 -64.656,-64.336c-35.326,0 -64.336,28.99 -64.336,64.336c0,35.667 28.989,64.336 64.336,64.336c35.666,0 64.656,-28.669 64.656,-64.336Zm-203.312,195.995c0,36.669 -29.33,65.999 -65.999,65.999c-25.342,0 -47.335,-14.334 -58.321,-35.325c11.007,4.331 21.673,8.661 32.659,13.333c26.664,10.665 57.339,-2.326 68.325,-29.331c10.666,-26.665 -2.325,-57.34 -29.331,-67.984l-27.326,-11.007c4.33,-1.003 9.343,-1.664 13.994,-1.664c36.669,0 65.999,29.331 65.999,66l0,-0.021Zm301.309,-272.98l0,319.973c0,52.988 -43.005,95.992 -95.992,95.992l-319.974,0c-52.987,0 -95.992,-43.004 -95.992,-95.992l0,-51.004l57.34,22.996c8.66,40.338 44.668,70.671 87.331,70.671c46.652,0 84.985,-35.666 89.336,-80.996l114.999,-84.003c66.661,0 120.331,-53.991 120.331,-119.99c0,-66.662 -53.67,-120.332 -120.331,-120.332c-65.659,0 -119.329,53.329 -119.99,118.988l-75.002,107.319c-3.008,-0.342 -5.994,-0.342 -9.343,-0.342c-16.66,0 -32.339,4.331 -45.671,12.33l-99,-39.655l0,-155.998c0,-52.988 43.005,-95.992 95.992,-95.992l319.974,0c52.987,0 95.992,43.004 95.992,95.992l0,0.043Zm-82.319,77.668c0,44.327 -35.986,80.334 -80.654,80.334c-44.327,0 -80.335,-35.986 -80.335,-80.334c0,-44.668 35.986,-80.655 80.335,-80.655c44.668,0 80.654,35.987 80.654,80.655Z" style="fill:#bebebe;fill-rule:nonzero;"/></svg> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<path id="steam-square" d="M413.982,173.02C413.982,137.695 384.992,108.684 349.326,108.684C314,108.684 284.99,137.674 284.99,173.02C284.99,208.687 313.979,237.356 349.326,237.356C384.992,237.356 413.982,208.687 413.982,173.02ZM210.67,369.015C210.67,405.684 181.34,435.014 144.671,435.014C119.329,435.014 97.336,420.68 86.35,399.689C97.357,404.02 108.023,408.35 119.009,413.022C145.673,423.687 176.348,410.696 187.334,383.691C198,357.026 185.009,326.351 158.003,315.707L130.677,304.7C135.007,303.697 140.02,303.036 144.671,303.036C181.34,303.036 210.67,332.367 210.67,369.036L210.67,369.015ZM511.979,95.992L511.979,416.008C511.979,468.996 468.974,512 415.987,512L96.013,512C43.026,512 0.021,468.996 0.021,416.008L0.021,365.004L57.361,388C66.021,428.338 102.029,458.671 144.692,458.671C191.344,458.671 229.677,423.005 234.028,377.675L349.027,293.672C415.688,293.672 469.358,239.681 469.358,173.682C469.358,107.02 415.688,53.35 349.027,53.35C283.368,53.35 229.698,106.679 229.037,172.338L154.035,279.657C151.027,279.315 148.041,279.315 144.692,279.315C128.032,279.315 112.353,283.646 99.021,291.645L0.021,251.99L0.021,95.992C0.021,43.004 43.026,-0 96.013,-0L415.987,-0C468.974,-0 511.979,43.004 511.979,95.992ZM429.66,173.703C429.66,218.03 393.674,254.037 349.006,254.037C304.679,254.037 268.671,218.051 268.671,173.703C268.671,129.035 304.657,93.048 349.006,93.048C393.674,93.048 429.66,129.035 429.66,173.703Z" style="fill-rule:nonzero;"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -1,18 +0,0 @@
uniform float time;
uniform float shaderOpacity;
uniform vec2 resolution;
void main( void ) {
vec2 position = ( gl_FragCoord.xy / resolution.xy );
vec3 color1 = vec3(1.0, 0.6, 0.01);
vec3 color2 = vec3(0.97, 0.24, 0.24);
float mixValue = distance(position,vec2(0,1));
vec3 color = mix( color1, color2, mixValue);
gl_FragColor = vec4(color,mixValue) * shaderOpacity;
}

View File

@ -25,8 +25,8 @@
#include "ScreenPlay/profilelistmodel.h" #include "ScreenPlay/profilelistmodel.h"
#include "ScreenPlay/screenplaymanager.h" #include "ScreenPlay/screenplaymanager.h"
#include "ScreenPlay/settings.h" #include "ScreenPlay/settings.h"
#include "ScreenPlay/util.h"
#include "ScreenPlay/wizards.h" #include "ScreenPlay/wizards.h"
#include "ScreenPlayUtil/util.h"
#include <memory> #include <memory>
@ -101,10 +101,8 @@ public slots:
void setMainWindowEngine(QQmlApplicationEngine* mainWindowEngine); void setMainWindowEngine(QQmlApplicationEngine* mainWindowEngine);
void setWizards(Wizards* wizards); void setWizards(Wizards* wizards);
private: private:
QNetworkAccessManager m_networkAccessManager; QNetworkAccessManager m_networkAccessManager;
QElapsedTimer m_continuousIntegrationMetricsTimer;
std::unique_ptr<QQmlApplicationEngine> m_mainWindowEngine; std::unique_ptr<QQmlApplicationEngine> m_mainWindowEngine;
std::unique_ptr<Create> m_create; std::unique_ptr<Create> m_create;

View File

@ -24,6 +24,7 @@
#include <memory> #include <memory>
#include "ScreenPlay/createimportstates.h"
#include "ScreenPlay/createimportvideo.h" #include "ScreenPlay/createimportvideo.h"
#include "ScreenPlay/globalvariables.h" #include "ScreenPlay/globalvariables.h"
@ -32,6 +33,8 @@ namespace ScreenPlay {
class Create : public QObject { class Create : public QObject {
Q_OBJECT Q_OBJECT
QML_ELEMENT QML_ELEMENT
QML_UNCREATABLE("")
Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
Q_PROPERTY(QString workingDir READ workingDir WRITE setWorkingDir NOTIFY workingDirChanged) Q_PROPERTY(QString workingDir READ workingDir WRITE setWorkingDir NOTIFY workingDirChanged)
Q_PROPERTY(float progress READ progress WRITE setProgress NOTIFY progressChanged) Q_PROPERTY(float progress READ progress WRITE setProgress NOTIFY progressChanged)
@ -55,7 +58,7 @@ public:
QString ffmpegOutput() const { return m_ffmpegOutput; } QString ffmpegOutput() const { return m_ffmpegOutput; }
signals: signals:
void createWallpaperStateChanged(ImportVideoState::ImportVideoState state); void createWallpaperStateChanged(Import::State state);
void progressChanged(float progress); void progressChanged(float progress);
void abortCreateWallpaper(); void abortCreateWallpaper();
void workingDirChanged(QString workingDir); void workingDirChanged(QString workingDir);
@ -112,7 +115,6 @@ public slots:
} }
private: private:
void init();
void reset(); void reset();
private: private:

View File

@ -3,17 +3,16 @@
#pragma once #pragma once
#include <QObject> #include <QObject>
#include <QQmlEngine>
namespace ScreenPlay { namespace ScreenPlay {
/*!
\namespace ScreenPlay::ImportVideoState
\inmodule ScreenPlay
\brief Global enum for ImportVideoState.
*/
namespace ImportVideoState {
Q_NAMESPACE
enum class ImportVideoState { class Import : public QObject {
Q_OBJECT
QML_ELEMENT
Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
public:
enum class State {
Idle, Idle,
Started, Started,
AnalyseVideo, AnalyseVideo,
@ -49,6 +48,6 @@ namespace ImportVideoState {
Finished, Finished,
Failed, Failed,
}; };
Q_ENUM_NS(ImportVideoState) Q_ENUM(State)
} };
} }

View File

@ -24,24 +24,27 @@ namespace ScreenPlay {
class CreateImportVideo : public QObject { class CreateImportVideo : public QObject {
Q_OBJECT Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("") QML_UNCREATABLE("")
Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
Q_PROPERTY(float progress READ progress WRITE setProgress NOTIFY progressChanged) Q_PROPERTY(float progress READ progress WRITE setProgress NOTIFY progressChanged)
public: public:
explicit CreateImportVideo(const QString& videoPath, const QString& exportPath, const QString& codec, const int quality, std::atomic<bool>& interrupt); explicit CreateImportVideo(const QString& videoPath, const QString& exportPath, const QString& codec, const int quality, std::atomic<bool>& interrupt);
explicit CreateImportVideo(const QString& videoPath, const QString& exportPath, std::atomic<bool>& interrupt); explicit CreateImportVideo(const QString& videoPath, const QString& exportPath, std::atomic<bool>& interrupt);
enum class Executable {
FFMPEG,
FFPROBE
};
Q_ENUM(Executable)
float progress() const { return m_progress; } float progress() const { return m_progress; }
bool m_skipAudio { false }; bool m_skipAudio { false };
// If the video is < 1s in duration we cannot create a 5s preview // If the video is < 1s in duration we cannot create a 5s preview
bool m_smallVideo { false }; bool m_smallVideo { false };
// We do not get many infos with this // We do not get many infos with this
bool m_isWebm { false }; bool m_isWebm { false };
float m_progress { 0.0F }; float m_progress { 0.0F };
QString m_videoPath; QString m_videoPath;
@ -54,13 +57,8 @@ public:
int m_length { 0 }; int m_length { 0 };
int m_framerate { 0 }; int m_framerate { 0 };
enum class Executable {
FFMPEG,
FFPROBE
};
signals: signals:
void createWallpaperStateChanged(ImportVideoState::ImportVideoState state); void createWallpaperStateChanged(ScreenPlay::Import::State state);
void processOutput(QString text); void processOutput(QString text);
void finished(); void finished();
void abortAndCleanup(); void abortAndCleanup();
@ -104,4 +102,3 @@ private:
std::atomic<bool>& m_interrupt; std::atomic<bool>& m_interrupt;
}; };
} }
Q_DECLARE_METATYPE(ScreenPlay::ImportVideoState::ImportVideoState)

View File

@ -16,22 +16,24 @@ namespace ScreenPlay {
class GlobalVariables : public QObject { class GlobalVariables : public QObject {
Q_OBJECT Q_OBJECT
QML_ELEMENT QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(QVersionNumber version READ version CONSTANT) Q_PROPERTY(QVersionNumber version READ version CONSTANT)
Q_PROPERTY(QUrl localStoragePath READ localStoragePath WRITE setLocalStoragePath NOTIFY localStoragePathChanged) Q_PROPERTY(QUrl localStoragePath READ localStoragePath WRITE setLocalStoragePath NOTIFY localStoragePathChanged FINAL)
Q_PROPERTY(QUrl localSettingsPath READ localSettingsPath WRITE setLocalSettingsPath NOTIFY localSettingsPathChanged) Q_PROPERTY(QUrl localSettingsPath READ localSettingsPath WRITE setLocalSettingsPath NOTIFY localSettingsPathChanged FINAL)
Q_PROPERTY(QUrl wallpaperExecutablePath READ wallpaperExecutablePath WRITE setWallpaperExecutablePath NOTIFY wallpaperExecutablePathChanged) Q_PROPERTY(QUrl wallpaperExecutablePath READ wallpaperExecutablePath WRITE setWallpaperExecutablePath NOTIFY wallpaperExecutablePathChanged FINAL)
Q_PROPERTY(QUrl widgetExecutablePath READ widgetExecutablePath WRITE setWidgetExecutablePath NOTIFY widgetExecutablePathChanged) Q_PROPERTY(QUrl widgetExecutablePath READ widgetExecutablePath WRITE setWidgetExecutablePath NOTIFY widgetExecutablePathChanged FINAL)
Q_PROPERTY(QUrl godotWallpaperExecutablePath READ godotWallpaperExecutablePath WRITE setGodotWallpaperExecutablePath NOTIFY godotWallpaperExecutablePathChanged FINAL)
Q_PROPERTY(QUrl godotEditorExecutablePath READ godotEditorExecutablePath WRITE setGodotEditorExecutablePath NOTIFY godotEditorExecutablePathChanged FINAL)
public: public:
explicit GlobalVariables(QObject* parent = nullptr); explicit GlobalVariables(QObject* parent = nullptr);
/*! /*!
\brief We need to check if there was an error in the Wallpaper/Widgets. \property GlobalVariables::m_version
For this we ping it every 3s. \brief Returns the current app version. Not yet used.
*/ */
static const int contentPingAliveIntervalMS = 3000; QVersionNumber version() const { return m_version; }
/*! /*!
\property GlobalVariables::localStoragePath \property GlobalVariables::localStoragePath
\brief Returns the localStoragePath. \brief Returns the localStoragePath.
@ -56,51 +58,35 @@ public:
\property GlobalVariables::m_version \property GlobalVariables::m_version
\brief Returns the current app version. Not yet used. \brief Returns the current app version. Not yet used.
*/ */
QVersionNumber version() const { return m_version; } QUrl godotWallpaperExecutablePath() const { return m_godotWallpaperExecutablePath; }
/*!
\property GlobalVariables::m_version
\brief Returns the current app version. Not yet used.
*/
QUrl godotEditorExecutablePath() const { return m_godotEditorExecutablePath; }
signals: signals:
void localStoragePathChanged(QUrl localStoragePath); void localStoragePathChanged(QUrl localStoragePath);
void localSettingsPathChanged(QUrl localSettingsPath); void localSettingsPathChanged(QUrl localSettingsPath);
void wallpaperExecutablePathChanged(QUrl wallpaperExecutablePath); void wallpaperExecutablePathChanged(QUrl wallpaperExecutablePath);
void widgetExecutablePathChanged(QUrl widgetExecutablePath); void widgetExecutablePathChanged(QUrl widgetExecutablePath);
void godotWallpaperExecutablePathChanged(QUrl godotWallpaperExecutablePath);
void godotEditorExecutablePathChanged(QUrl godotEditorExecutablePath);
public slots: public slots:
void setLocalStoragePath(QUrl localStoragePath);
void setLocalSettingsPath(QUrl localSettingsPath);
void setWallpaperExecutablePath(QUrl wallpaperExecutablePath);
void setWidgetExecutablePath(QUrl widgetExecutablePath);
void setGodotWallpaperExecutablePath(QUrl godotWallpaperExecutablePath);
void setGodotEditorExecutablePath(QUrl godotEditorExecutablePath);
void setLocalStoragePath(QUrl localStoragePath) public:
{ /*!
if (m_localStoragePath == localStoragePath) \brief We need to check if there was an error in the Wallpaper/Widgets.
return; For this we ping it every 3s.
*/
m_localStoragePath = localStoragePath; static const int contentPingAliveIntervalMS = 3000;
emit localStoragePathChanged(m_localStoragePath);
}
void setLocalSettingsPath(QUrl localSettingsPath)
{
if (m_localSettingsPath == localSettingsPath)
return;
m_localSettingsPath = localSettingsPath;
emit localSettingsPathChanged(m_localSettingsPath);
}
void setWallpaperExecutablePath(QUrl wallpaperExecutablePath)
{
if (m_wallpaperExecutablePath == wallpaperExecutablePath)
return;
m_wallpaperExecutablePath = wallpaperExecutablePath;
emit wallpaperExecutablePathChanged(m_wallpaperExecutablePath);
}
void setWidgetExecutablePath(QUrl widgetExecutablePath)
{
if (m_widgetExecutablePath == widgetExecutablePath)
return;
m_widgetExecutablePath = widgetExecutablePath;
emit widgetExecutablePathChanged(m_widgetExecutablePath);
}
private: private:
QUrl m_localStoragePath; QUrl m_localStoragePath;
@ -108,5 +94,7 @@ private:
QUrl m_wallpaperExecutablePath; QUrl m_wallpaperExecutablePath;
QUrl m_widgetExecutablePath; QUrl m_widgetExecutablePath;
QVersionNumber m_version { 1, 0, 0 }; QVersionNumber m_version { 1, 0, 0 };
QUrl m_godotWallpaperExecutablePath;
QUrl m_godotEditorExecutablePath;
}; };
} }

View File

@ -19,7 +19,7 @@ public:
InstalledListFilter(const std::shared_ptr<InstalledListModel>& ilm); InstalledListFilter(const std::shared_ptr<InstalledListModel>& ilm);
public slots: public slots:
void sortBySearchType(const ScreenPlay::SearchType::SearchType searchType); void sortBySearchType(const ScreenPlay::ContentTypes::SearchType searchType);
void setSortOrder(const Qt::SortOrder sortOrder); void setSortOrder(const Qt::SortOrder sortOrder);
void sortByName(const QString& name); void sortByName(const QString& name);
void resetFilter(); void resetFilter();
@ -29,7 +29,7 @@ signals:
private: private:
const std::shared_ptr<InstalledListModel> m_ilm; const std::shared_ptr<InstalledListModel> m_ilm;
ScreenPlay::SearchType::SearchType m_searchType = ScreenPlay::SearchType::SearchType::All; ScreenPlay::ContentTypes::SearchType m_searchType = ScreenPlay::ContentTypes::SearchType::All;
Qt::SortOrder m_sortOrder = Qt::SortOrder::DescendingOrder; Qt::SortOrder m_sortOrder = Qt::SortOrder::DescendingOrder;
}; };
} }

View File

@ -25,8 +25,8 @@
#include "ScreenPlay/globalvariables.h" #include "ScreenPlay/globalvariables.h"
#include "ScreenPlay/profilelistmodel.h" #include "ScreenPlay/profilelistmodel.h"
#include "ScreenPlay/settings.h" #include "ScreenPlay/settings.h"
#include "ScreenPlay/util.h"
#include "ScreenPlayUtil/projectfile.h" #include "ScreenPlayUtil/projectfile.h"
#include "ScreenPlayUtil/util.h"
#include <memory> #include <memory>
@ -77,7 +77,7 @@ public slots:
void append(const QString& projectJsonFilePath); void append(const QString& projectJsonFilePath);
void reset(); void reset();
void init(); void init();
void deinstallItemAt(const QString& absoluteStoragePath); bool deinstallItemAt(const QString& absoluteStoragePath);
void setCount(int count) void setCount(int count)
{ {
@ -96,6 +96,7 @@ private:
QFileSystemWatcher m_fileSystemWatcher; QFileSystemWatcher m_fileSystemWatcher;
QVector<ProjectFile> m_screenPlayFiles; QVector<ProjectFile> m_screenPlayFiles;
int m_count { 0 }; int m_count { 0 };
QTimer m_reloadLimiter;
std::atomic_bool m_isLoading { false }; std::atomic_bool m_isLoading { false };
const std::shared_ptr<GlobalVariables>& m_globalVariables; const std::shared_ptr<GlobalVariables>& m_globalVariables;

View File

@ -41,6 +41,8 @@ struct Monitor {
class MonitorListModel : public QAbstractListModel { class MonitorListModel : public QAbstractListModel {
Q_OBJECT Q_OBJECT
QML_ELEMENT QML_ELEMENT
QML_UNCREATABLE("")
Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
public: public:
explicit MonitorListModel(QObject* parent = nullptr); explicit MonitorListModel(QObject* parent = nullptr);

View File

@ -11,7 +11,7 @@
#include <QJsonObject> #include <QJsonObject>
#include <QVector> #include <QVector>
#include "ScreenPlay/util.h" #include "ScreenPlayUtil/util.h"
namespace ScreenPlay { namespace ScreenPlay {
@ -59,7 +59,7 @@ public:
Q_ENUM(ProjectSettingsRole) Q_ENUM(ProjectSettingsRole)
QJsonObject getActiveSettingsJson(); QJsonObject getActiveSettingsJson();
void init(const InstalledType::InstalledType& type, const QJsonObject& properties); void init(const ContentTypes::InstalledType& type, const QJsonObject& properties);
void append(const SettingsItem&& item); void append(const SettingsItem&& item);
public slots: public slots:

View File

@ -24,6 +24,7 @@ namespace ScreenPlay {
class ScreenPlayManager : public QObject { class ScreenPlayManager : public QObject {
Q_OBJECT Q_OBJECT
QML_ELEMENT QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(int activeWallpaperCounter READ activeWallpaperCounter WRITE setActiveWallpaperCounter NOTIFY activeWallpaperCounterChanged) Q_PROPERTY(int activeWallpaperCounter READ activeWallpaperCounter WRITE setActiveWallpaperCounter NOTIFY activeWallpaperCounterChanged)
Q_PROPERTY(int activeWidgetsCounter READ activeWidgetsCounter WRITE setActiveWidgetsCounter NOTIFY activeWidgetsCounterChanged) Q_PROPERTY(int activeWidgetsCounter READ activeWidgetsCounter WRITE setActiveWidgetsCounter NOTIFY activeWidgetsCounterChanged)
@ -40,7 +41,6 @@ public:
int activeWidgetsCounter() const { return m_activeWidgetsCounter; } int activeWidgetsCounter() const { return m_activeWidgetsCounter; }
bool isAnotherScreenPlayInstanceRunning() { return m_isAnotherScreenPlayInstanceRunning; } bool isAnotherScreenPlayInstanceRunning() { return m_isAnotherScreenPlayInstanceRunning; }
signals: signals:
void activeWallpaperCounterChanged(int activeWallpaperCounter); void activeWallpaperCounterChanged(int activeWallpaperCounter);
void activeWidgetsCounterChanged(int activeWidgetsCounter); void activeWidgetsCounterChanged(int activeWidgetsCounter);
@ -58,8 +58,8 @@ private slots:
public slots: public slots:
// moc needs full enum namespace info see QTBUG-58454 // moc needs full enum namespace info see QTBUG-58454
bool createWallpaper( bool createWallpaper(
const ScreenPlay::InstalledType::InstalledType type, const ScreenPlay::ContentTypes::InstalledType type,
const ScreenPlay::FillMode::FillMode fillMode, const ScreenPlay::Video::FillMode fillMode,
const QString& absoluteStoragePath, const QString& absoluteStoragePath,
const QString& previewImage, const QString& previewImage,
const QString& file, const QString& file,
@ -70,7 +70,7 @@ public slots:
const bool saveToProfilesConfigFile); const bool saveToProfilesConfigFile);
bool createWidget( bool createWidget(
const ScreenPlay::InstalledType::InstalledType type, const ScreenPlay::ContentTypes::InstalledType type,
const QPoint& position, const QPoint& position,
const QString& absoluteStoragePath, const QString& absoluteStoragePath,
const QString& previewImage, const QString& previewImage,

View File

@ -3,10 +3,13 @@
#pragma once #pragma once
#include <QDebug> #include <QDebug>
#include <QDir>
#include <QFileInfoList>
#include <QJsonObject> #include <QJsonObject>
#include <QObject> #include <QObject>
#include <QProcess> #include <QProcess>
#include <QString>
#include <QStringList>
#include <memory> #include <memory>
#include "ScreenPlay/globalvariables.h" #include "ScreenPlay/globalvariables.h"
@ -19,27 +22,21 @@ namespace ScreenPlay {
class ScreenPlayWallpaper : public QObject { class ScreenPlayWallpaper : public QObject {
Q_OBJECT Q_OBJECT
QML_ELEMENT QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(bool isConnected READ isConnected WRITE setIsConnected NOTIFY isConnectedChanged) Q_PROPERTY(bool isConnected READ isConnected WRITE setIsConnected NOTIFY isConnectedChanged)
Q_PROPERTY(QVector<int> screenNumber READ screenNumber WRITE setScreenNumber NOTIFY screenNumberChanged) Q_PROPERTY(QVector<int> screenNumber READ screenNumber WRITE setScreenNumber NOTIFY screenNumberChanged)
Q_PROPERTY(float volume READ volume WRITE setVolume NOTIFY volumeChanged) Q_PROPERTY(float volume READ volume WRITE setVolume NOTIFY volumeChanged)
Q_PROPERTY(float playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged) Q_PROPERTY(float playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged)
Q_PROPERTY(bool isLooping READ isLooping WRITE setIsLooping NOTIFY isLoopingChanged) Q_PROPERTY(bool isLooping READ isLooping WRITE setIsLooping NOTIFY isLoopingChanged)
Q_PROPERTY(QString file READ file WRITE setFile NOTIFY fileChanged) Q_PROPERTY(QString file READ file WRITE setFile NOTIFY fileChanged)
Q_PROPERTY(QString absolutePath READ absolutePath WRITE setAbsolutePath NOTIFY absolutePathChanged) Q_PROPERTY(QString absolutePath READ absolutePath WRITE setAbsolutePath NOTIFY absolutePathChanged)
Q_PROPERTY(QString previewImage READ previewImage WRITE setPreviewImage NOTIFY previewImageChanged) Q_PROPERTY(QString previewImage READ previewImage WRITE setPreviewImage NOTIFY previewImageChanged)
Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged) Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged)
Q_PROPERTY(Video::FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged)
Q_PROPERTY(FillMode::FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged) Q_PROPERTY(ContentTypes::InstalledType type READ type WRITE setType NOTIFY typeChanged)
Q_PROPERTY(InstalledType::InstalledType type READ type WRITE setType NOTIFY typeChanged)
public: public:
// Default constructor needed for qml engine
ScreenPlayWallpaper() { }
explicit ScreenPlayWallpaper( explicit ScreenPlayWallpaper(
const QVector<int>& screenNumber, const QVector<int>& screenNumber,
const std::shared_ptr<GlobalVariables>& globalVariables, const std::shared_ptr<GlobalVariables>& globalVariables,
@ -49,8 +46,8 @@ public:
const QString& file, const QString& file,
const float volume, const float volume,
const float playbackRate, const float playbackRate,
const FillMode::FillMode fillMode, const Video::FillMode fillMode,
const InstalledType::InstalledType type, const ContentTypes::InstalledType type,
const QJsonObject& properties, const QJsonObject& properties,
const std::shared_ptr<Settings>& settings, const std::shared_ptr<Settings>& settings,
QObject* parent = nullptr); QObject* parent = nullptr);
@ -62,8 +59,8 @@ public:
const QString& previewImage, const QString& previewImage,
const QString& file, const QString& file,
const float volume, const float volume,
const FillMode::FillMode fillMode, const Video::FillMode fillMode,
const InstalledType::InstalledType type, const ContentTypes::InstalledType type,
const bool checkWallpaperVisible); const bool checkWallpaperVisible);
void setSDKConnection(std::unique_ptr<SDKConnection> connection); void setSDKConnection(std::unique_ptr<SDKConnection> connection);
@ -73,9 +70,9 @@ public:
QVector<int> screenNumber() const { return m_screenNumber; } QVector<int> screenNumber() const { return m_screenNumber; }
QString previewImage() const { return m_previewImage; } QString previewImage() const { return m_previewImage; }
QString appID() const { return m_appID; } QString appID() const { return m_appID; }
InstalledType::InstalledType type() const { return m_type; } ContentTypes::InstalledType type() const { return m_type; }
QString file() const { return m_file; } QString file() const { return m_file; }
FillMode::FillMode fillMode() const { return m_fillMode; } Video::FillMode fillMode() const { return m_fillMode; }
QString absolutePath() const { return m_absolutePath; } QString absolutePath() const { return m_absolutePath; }
float volume() const { return m_volume; } float volume() const { return m_volume; }
bool isLooping() const { return m_isLooping; } bool isLooping() const { return m_isLooping; }
@ -87,9 +84,9 @@ signals:
void screenNumberChanged(QVector<int> screenNumber); void screenNumberChanged(QVector<int> screenNumber);
void previewImageChanged(QString previewImage); void previewImageChanged(QString previewImage);
void appIDChanged(QString appID); void appIDChanged(QString appID);
void typeChanged(InstalledType::InstalledType type); void typeChanged(ContentTypes::InstalledType type);
void fileChanged(QString file); void fileChanged(QString file);
void fillModeChanged(FillMode::FillMode fillMode); void fillModeChanged(Video::FillMode fillMode);
void absolutePathChanged(QString absolutePath); void absolutePathChanged(QString absolutePath);
void profileJsonObjectChanged(QJsonObject profileJsonObject); void profileJsonObjectChanged(QJsonObject profileJsonObject);
void volumeChanged(float volume); void volumeChanged(float volume);
@ -135,7 +132,7 @@ public slots:
emit appIDChanged(m_appID); emit appIDChanged(m_appID);
} }
void setType(InstalledType::InstalledType type) void setType(ContentTypes::InstalledType type)
{ {
if (m_type == type) if (m_type == type)
return; return;
@ -153,7 +150,7 @@ public slots:
emit fileChanged(m_file); emit fileChanged(m_file);
} }
void setFillMode(FillMode::FillMode fillMode) void setFillMode(Video::FillMode fillMode)
{ {
if (m_fillMode == fillMode) if (m_fillMode == fillMode)
return; return;
@ -209,17 +206,21 @@ public slots:
emit isConnectedChanged(m_isConnected); emit isConnectedChanged(m_isConnected);
} }
private:
bool exportGodotProject();
private: private:
const std::shared_ptr<GlobalVariables> m_globalVariables; const std::shared_ptr<GlobalVariables> m_globalVariables;
std::unique_ptr<SDKConnection> m_connection; std::unique_ptr<SDKConnection> m_connection;
const std::shared_ptr<Settings> m_settings; const std::shared_ptr<Settings> m_settings;
ProjectSettingsListModel m_projectSettingsListModel; ProjectSettingsListModel m_projectSettingsListModel;
QJsonObject m_projectJson;
QVector<int> m_screenNumber; QVector<int> m_screenNumber;
QProcess m_process; QProcess m_process;
QString m_previewImage; QString m_previewImage;
InstalledType::InstalledType m_type; ContentTypes::InstalledType m_type;
FillMode::FillMode m_fillMode; Video::FillMode m_fillMode;
QString m_appID; QString m_appID;
QString m_absolutePath; QString m_absolutePath;
QString m_file; QString m_file;

View File

@ -23,12 +23,13 @@ namespace ScreenPlay {
class ScreenPlayWidget : public QObject { class ScreenPlayWidget : public QObject {
Q_OBJECT Q_OBJECT
QML_ELEMENT QML_ELEMENT
QML_UNCREATABLE("")
Q_PROPERTY(QString absolutePath READ absolutePath WRITE setAbsolutePath NOTIFY absolutePathChanged) Q_PROPERTY(QString absolutePath READ absolutePath WRITE setAbsolutePath NOTIFY absolutePathChanged)
Q_PROPERTY(QString previewImage READ previewImage WRITE setPreviewImage NOTIFY previewImageChanged) Q_PROPERTY(QString previewImage READ previewImage WRITE setPreviewImage NOTIFY previewImageChanged)
Q_PROPERTY(QPoint position READ position WRITE setPosition NOTIFY positionChanged) Q_PROPERTY(QPoint position READ position WRITE setPosition NOTIFY positionChanged)
Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged) Q_PROPERTY(QString appID READ appID WRITE setAppID NOTIFY appIDChanged)
Q_PROPERTY(InstalledType::InstalledType type READ type WRITE setType NOTIFY typeChanged) Q_PROPERTY(ContentTypes::InstalledType type READ type WRITE setType NOTIFY typeChanged)
public: public:
explicit ScreenPlayWidget( explicit ScreenPlayWidget(
@ -37,7 +38,7 @@ public:
const QPoint& position, const QPoint& position,
const QString& absolutePath, const QString& absolutePath,
const QString& previewImage, const QJsonObject& properties, const QString& previewImage, const QJsonObject& properties,
const InstalledType::InstalledType type); const ContentTypes::InstalledType type);
bool start(); bool start();
@ -47,7 +48,7 @@ public:
QPoint position() const { return m_position; } QPoint position() const { return m_position; }
QString absolutePath() const { return m_absolutePath; } QString absolutePath() const { return m_absolutePath; }
QString appID() const { return m_appID; } QString appID() const { return m_appID; }
InstalledType::InstalledType type() const { return m_type; } ContentTypes::InstalledType type() const { return m_type; }
void setSDKConnection(std::unique_ptr<SDKConnection> connection); void setSDKConnection(std::unique_ptr<SDKConnection> connection);
@ -84,7 +85,7 @@ public slots:
emit appIDChanged(m_appID); emit appIDChanged(m_appID);
} }
void setType(InstalledType::InstalledType type) void setType(ContentTypes::InstalledType type)
{ {
if (m_type == type) if (m_type == type)
return; return;
@ -106,7 +107,7 @@ signals:
void previewImageChanged(QString previewImage); void previewImageChanged(QString previewImage);
void positionChanged(QPoint position); void positionChanged(QPoint position);
void appIDChanged(QString appID); void appIDChanged(QString appID);
void typeChanged(InstalledType::InstalledType type); void typeChanged(ContentTypes::InstalledType type);
void absolutePathChanged(QString absolutePath); void absolutePathChanged(QString absolutePath);
void requestSave(); void requestSave();
@ -122,7 +123,7 @@ private:
QString m_previewImage; QString m_previewImage;
QString m_appID; QString m_appID;
QPoint m_position; QPoint m_position;
InstalledType::InstalledType m_type; ContentTypes::InstalledType m_type;
QString m_absolutePath; QString m_absolutePath;
QTimer m_pingAliveTimer; QTimer m_pingAliveTimer;
QStringList m_appArgumentsList; QStringList m_appArgumentsList;

View File

@ -14,7 +14,6 @@
#include <QWebSocketServer> #include <QWebSocketServer>
#include "ScreenPlay/globalvariables.h" #include "ScreenPlay/globalvariables.h"
#include "ScreenPlay/util.h"
#include "ScreenPlayUtil/util.h" #include "ScreenPlayUtil/util.h"
#include <memory> #include <memory>

View File

@ -33,7 +33,7 @@
#include <QtGlobal> #include <QtGlobal>
#include "ScreenPlay/globalvariables.h" #include "ScreenPlay/globalvariables.h"
#include "ScreenPlay/util.h" #include "ScreenPlayUtil/util.h"
#include <memory> #include <memory>
#include <optional> #include <optional>
@ -43,7 +43,9 @@ class ActiveProfile;
class Settings : public QObject { class Settings : public QObject {
Q_OBJECT Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("") QML_UNCREATABLE("")
Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
Q_PROPERTY(bool showDefaultContent READ showDefaultContent WRITE setShowDefaultContent NOTIFY showDefaultContentChanged) Q_PROPERTY(bool showDefaultContent READ showDefaultContent WRITE setShowDefaultContent NOTIFY showDefaultContentChanged)
Q_PROPERTY(bool anonymousTelemetry READ anonymousTelemetry WRITE setAnonymousTelemetry NOTIFY anonymousTelemetryChanged) Q_PROPERTY(bool anonymousTelemetry READ anonymousTelemetry WRITE setAnonymousTelemetry NOTIFY anonymousTelemetryChanged)
@ -54,10 +56,10 @@ class Settings : public QObject {
Q_PROPERTY(bool offlineMode READ offlineMode WRITE setOfflineMode NOTIFY offlineModeChanged) Q_PROPERTY(bool offlineMode READ offlineMode WRITE setOfflineMode NOTIFY offlineModeChanged)
Q_PROPERTY(bool steamVersion READ steamVersion WRITE setSteamVersion NOTIFY steamVersionChanged) Q_PROPERTY(bool steamVersion READ steamVersion WRITE setSteamVersion NOTIFY steamVersionChanged)
Q_PROPERTY(ScreenPlay::FillMode::FillMode videoFillMode READ videoFillMode WRITE setVideoFillMode NOTIFY videoFillModeChanged) Q_PROPERTY(ScreenPlay::Video::FillMode videoFillMode READ videoFillMode WRITE setVideoFillMode NOTIFY videoFillModeChanged)
Q_PROPERTY(DesktopEnvironment desktopEnvironment READ desktopEnvironment WRITE setDesktopEnvironment NOTIFY desktopEnvironmentChanged) Q_PROPERTY(ScreenPlay::Settings::DesktopEnvironment desktopEnvironment READ desktopEnvironment WRITE setDesktopEnvironment NOTIFY desktopEnvironmentChanged)
Q_PROPERTY(Language language READ language WRITE setLanguage NOTIFY languageChanged) Q_PROPERTY(ScreenPlay::Settings::Language language READ language WRITE setLanguage NOTIFY languageChanged)
Q_PROPERTY(Theme theme READ theme WRITE setTheme NOTIFY themeChanged) Q_PROPERTY(ScreenPlay::Settings::Theme theme READ theme WRITE setTheme NOTIFY themeChanged)
Q_PROPERTY(QString decoder READ decoder WRITE setDecoder NOTIFY decoderChanged) Q_PROPERTY(QString decoder READ decoder WRITE setDecoder NOTIFY decoderChanged)
Q_PROPERTY(QString buildInfos READ buildInfos WRITE setBuildInfos NOTIFY buildInfosChanged) Q_PROPERTY(QString buildInfos READ buildInfos WRITE setBuildInfos NOTIFY buildInfosChanged)
@ -83,6 +85,7 @@ public:
Unity, Unity,
XFCE, XFCE,
}; };
Q_ENUM(DesktopEnvironment)
enum class Language { enum class Language {
En_US, En_US,
@ -116,12 +119,12 @@ public:
bool silentStart() const { return m_silentStart; } bool silentStart() const { return m_silentStart; }
bool anonymousTelemetry() const { return m_anonymousTelemetry; } bool anonymousTelemetry() const { return m_anonymousTelemetry; }
bool checkWallpaperVisible() const { return m_checkWallpaperVisible; } bool checkWallpaperVisible() const { return m_checkWallpaperVisible; }
ScreenPlay::FillMode::FillMode videoFillMode() const { return m_videoFillMode; } ScreenPlay::Video::FillMode videoFillMode() const { return m_videoFillMode; }
Language language() const { return m_language; } ScreenPlay::Settings::Language language() const { return m_language; }
QString font() const { return m_font; } QString font() const { return m_font; }
Theme theme() const { return m_theme; } ScreenPlay::Settings::Theme theme() const { return m_theme; }
bool steamVersion() const { return m_steamVersion; } bool steamVersion() const { return m_steamVersion; }
DesktopEnvironment desktopEnvironment() const { return m_desktopEnvironment; } ScreenPlay::Settings::DesktopEnvironment desktopEnvironment() const { return m_desktopEnvironment; }
const QString& buildInfos() const { return m_buildInfos; } const QString& buildInfos() const { return m_buildInfos; }
bool showDefaultContent() const { return m_showDefaultContent; } bool showDefaultContent() const { return m_showDefaultContent; }
@ -137,12 +140,12 @@ signals:
void silentStartChanged(bool silentStart); void silentStartChanged(bool silentStart);
void anonymousTelemetryChanged(bool anonymousTelemetry); void anonymousTelemetryChanged(bool anonymousTelemetry);
void checkWallpaperVisibleChanged(bool checkWallpaperVisible); void checkWallpaperVisibleChanged(bool checkWallpaperVisible);
void videoFillModeChanged(ScreenPlay::FillMode::FillMode videoFillMode); void videoFillModeChanged(ScreenPlay::Video::FillMode videoFillMode);
void languageChanged(ScreenPlay::Settings::Language language); void languageChanged(ScreenPlay::Settings::Language language);
void fontChanged(QString font); void fontChanged(QString font);
void themeChanged(ScreenPlay::Settings::Theme theme); void themeChanged(ScreenPlay::Settings::Theme theme);
void steamVersionChanged(bool steamVersion); void steamVersionChanged(bool steamVersion);
void desktopEnvironmentChanged(DesktopEnvironment desktopEnvironment); void desktopEnvironmentChanged(ScreenPlay::Settings::DesktopEnvironment desktopEnvironment);
void buildInfosChanged(const QString& buildInfos); void buildInfosChanged(const QString& buildInfos);
void showDefaultContentChanged(bool showDefaultContent); void showDefaultContentChanged(bool showDefaultContent);
@ -152,306 +155,23 @@ public slots:
void setupWidgetAndWindowPaths(); void setupWidgetAndWindowPaths();
bool retranslateUI(); bool retranslateUI();
void setShowDefaultContent(bool showDefaultContent) void setShowDefaultContent(bool showDefaultContent);
{ void setqSetting(const QString& key, const QVariant& value);
if (m_showDefaultContent == showDefaultContent) void setAutostart(bool autostart);
return; void setHighPriorityStart(bool highPriorityStart);
m_showDefaultContent = showDefaultContent; void setLocalStoragePath(QUrl localStoragePath);
emit showDefaultContentChanged(showDefaultContent); void setDecoder(QString decoder);
} void setOfflineMode(bool offlineMode);
void setSilentStart(bool silentStart);
void setqSetting(const QString& key, const QVariant& value) void setAnonymousTelemetry(bool anonymousTelemetry);
{ void setCheckWallpaperVisible(bool checkWallpaperVisible);
m_qSettings.setValue(key, value); void setVideoFillMode(ScreenPlay::Video::FillMode videoFillMode);
m_qSettings.sync(); void setLanguage(ScreenPlay::Settings::Language language);
} void setFont(QString font);
void setTheme(ScreenPlay::Settings::Theme theme);
void setAutostart(bool autostart) void setSteamVersion(bool steamVersion);
{ void setDesktopEnvironment(ScreenPlay::Settings::DesktopEnvironment desktopEnvironment);
if (desktopEnvironment() == DesktopEnvironment::Windows) { void setBuildInfos(const QString& buildInfos);
QSettings settings("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
if (autostart) {
settings.setValue("ScreenPlay", QDir::toNativeSeparators(QCoreApplication::applicationFilePath()) + " -silent");
settings.sync();
} else {
settings.remove("ScreenPlay");
}
}
if (desktopEnvironment() == DesktopEnvironment::OSX) {
const QString plistFileName = "app.screenplay.plist";
QFile defaultPListFile(":/qml/ScreenPlayApp/assets/macos/" + plistFileName);
defaultPListFile.open(QIODevice::ReadOnly);
QString settingsPlistContent = defaultPListFile.readAll();
if (!settingsPlistContent.contains("{{SCREENPLAY_PATH}}")) {
qCritical() << "Unable to load plist settings template from qrc to set autostart!";
return;
}
QDir workingDir(QGuiApplication::applicationDirPath());
workingDir.cdUp();
workingDir.cdUp();
workingDir.cdUp();
const QString screenPlayPath = QUrl::fromUserInput(workingDir.path() + "/ScreenPlay.app/Contents/MacOS/ScreenPlay").toLocalFile();
settingsPlistContent.replace("{{SCREENPLAY_PATH}}", screenPlayPath);
settingsPlistContent.replace("{{SCREENPLAY_AUTOSTART}}", autostart ? "true" : "false");
const QString homePath = QDir::homePath();
QFile settingsPlist(homePath + "/Library/LaunchAgents/" + plistFileName);
if (settingsPlist.exists()) {
QDomDocument doc;
if (!doc.setContent(&settingsPlist)) {
settingsPlist.close();
return;
}
settingsPlist.close();
QDomElement root = doc.firstChildElement();
QDomNodeList dictList = root.elementsByTagName("dict");
if (dictList.size() > 1 && dictList.size() < 1) {
return;
}
// Check if autostart and corresponding path is set and abort if so. This is needed since osx 13.0 Ventura
// because it displays an annoying message every time we change the file.
bool isCorrectPath = false;
bool isAutostartEnabled = false;
QDomNode dictNode = dictList.at(0);
if (dictNode.isElement()) {
QDomElement dictElement = dictNode.toElement();
QDomNodeList keyList = dictElement.elementsByTagName("key");
for (int j = 0; j < keyList.size(); j++) {
QDomNode keyNode = keyList.at(j);
if (keyNode.isElement()) {
QDomElement keyElement = keyNode.toElement();
if (keyElement.text() == "ProgramArguments") {
QDomNode valueNode = keyNode.nextSibling();
if (valueNode.isElement()) {
QDomElement valueElement = valueNode.toElement();
QDomNodeList stringList = valueElement.elementsByTagName("string");
if (!stringList.isEmpty()) {
QDomNode stringNode = stringList.at(0);
if (stringNode.isElement()) {
QDomElement stringElement = stringNode.toElement();
const QString path = stringElement.text();
if (path == screenPlayPath) {
isCorrectPath = true;
}
}
}
}
}
}
}
}
if (dictNode.isElement()) {
QDomElement dictElement = dictNode.toElement();
QDomNodeList keyList = dictElement.elementsByTagName("key");
for (int j = 0; j < keyList.size(); j++) {
QDomNode keyNode = keyList.at(j);
if (keyNode.isElement()) {
QDomElement keyElement = keyNode.toElement();
if (keyElement.text() == "RunAtLoad") {
QDomNode valueNode = keyNode.nextSibling();
if (valueNode.isElement()) {
QDomElement valueElement = valueNode.toElement();
if (valueElement.tagName() == "true") {
isAutostartEnabled = true;
}
}
}
}
}
}
// Nothing to do. Autostart has the same value and the path is also correct.
if (isAutostartEnabled == autostart && isCorrectPath)
return;
if (!settingsPlist.remove()) {
qCritical() << "Unable to remove: " << settingsPlist.fileName();
}
}
settingsPlist.open(QIODevice::WriteOnly | QIODevice::Truncate);
QTextStream out(&settingsPlist);
out.setEncoding(QStringConverter::Utf8);
out << settingsPlistContent;
settingsPlist.flush();
settingsPlist.close();
qInfo() << "Set autostart enabled: " << autostart;
}
setqSetting("Autostart", autostart);
m_autostart = autostart;
emit autostartChanged(m_autostart);
}
void setHighPriorityStart(bool highPriorityStart)
{
if (m_highPriorityStart == highPriorityStart)
return;
setqSetting("HighPriorityStart", highPriorityStart);
const QString app = "'" + QGuiApplication::applicationDirPath() + "/WindowsServiceHelper.exe" + "'";
QStringList args { "-Command", QString("Start-Process %1 -Verb runAs").arg(app), "-ArgumentList" };
// Because we must use powershell, we need to add an extra 'var' and ,
auto appendAsString = [&](const QString& string, const bool isLast = false) {
QString arg = "'" + string + "'";
if (!isLast)
arg += ",";
args.append(arg);
};
appendAsString("--t");
appendAsString("create");
appendAsString("--sn");
appendAsString("ScreenPlayService");
appendAsString("--dn");
appendAsString("ScreenPlayService");
appendAsString("--a");
appendAsString(QVariant(highPriorityStart).toString(), true);
QProcess process;
process.start(QStringLiteral("powershell"), args);
process.waitForFinished(5000);
m_highPriorityStart = highPriorityStart;
emit highPriorityStartChanged(m_highPriorityStart);
}
void setLocalStoragePath(QUrl localStoragePath)
{
// Remove: "file:///"
QJsonValue cleanedPath = QJsonValue(localStoragePath.toString());
setqSetting("ScreenPlayContentPath", cleanedPath);
m_globalVariables->setLocalStoragePath(cleanedPath.toString());
emit resetInstalledListmodel();
}
void setDecoder(QString decoder)
{
if (m_decoder == decoder)
return;
m_decoder = decoder;
emit decoderChanged(m_decoder);
}
void setOfflineMode(bool offlineMode)
{
if (m_offlineMode == offlineMode)
return;
m_offlineMode = offlineMode;
emit offlineModeChanged(m_offlineMode);
}
void setSilentStart(bool silentStart)
{
if (m_silentStart == silentStart)
return;
m_silentStart = silentStart;
emit silentStartChanged(m_silentStart);
}
void setAnonymousTelemetry(bool anonymousTelemetry)
{
if (m_anonymousTelemetry == anonymousTelemetry)
return;
setqSetting("AnonymousTelemetry", anonymousTelemetry);
m_anonymousTelemetry = anonymousTelemetry;
emit anonymousTelemetryChanged(m_anonymousTelemetry);
}
void setCheckWallpaperVisible(bool checkWallpaperVisible)
{
if (m_checkWallpaperVisible == checkWallpaperVisible)
return;
setqSetting("CheckWallpaperVisible", checkWallpaperVisible);
m_checkWallpaperVisible = checkWallpaperVisible;
emit checkWallpaperVisibleChanged(m_checkWallpaperVisible);
}
void setVideoFillMode(ScreenPlay::FillMode::FillMode videoFillMode)
{
if (m_videoFillMode == videoFillMode)
return;
setqSetting("VideoFillMode", QVariant::fromValue(videoFillMode).toString());
m_videoFillMode = videoFillMode;
emit videoFillModeChanged(m_videoFillMode);
}
void setLanguage(ScreenPlay::Settings::Language language)
{
if (m_language == language)
return;
setqSetting("Language", QVariant::fromValue(language).toString());
m_language = language;
emit languageChanged(m_language);
}
void setFont(QString font)
{
if (m_font == font)
return;
m_font = font;
emit fontChanged(m_font);
}
void setTheme(ScreenPlay::Settings::Theme theme)
{
if (m_theme == theme)
return;
setqSetting("Theme", QVariant::fromValue(theme).toString());
m_theme = theme;
emit themeChanged(m_theme);
}
void setSteamVersion(bool steamVersion)
{
if (m_steamVersion == steamVersion)
return;
m_steamVersion = steamVersion;
emit steamVersionChanged(m_steamVersion);
}
void setDesktopEnvironment(DesktopEnvironment desktopEnvironment)
{
if (m_desktopEnvironment == desktopEnvironment)
return;
m_desktopEnvironment = desktopEnvironment;
emit desktopEnvironmentChanged(m_desktopEnvironment);
}
void setBuildInfos(const QString& buildInfos)
{
if (m_buildInfos == buildInfos)
return;
m_buildInfos = buildInfos;
emit buildInfosChanged(m_buildInfos);
}
private: private:
void restoreDefault(const QString& appConfigLocation, const QString& settingsFileType); void restoreDefault(const QString& appConfigLocation, const QString& settingsFileType);
@ -473,13 +193,13 @@ private:
bool m_anonymousTelemetry { true }; bool m_anonymousTelemetry { true };
bool m_showDefaultContent { false }; bool m_showDefaultContent { false };
QString m_decoder; ScreenPlay::Video::FillMode m_videoFillMode { ScreenPlay::Video::FillMode::Cover };
ScreenPlay::FillMode::FillMode m_videoFillMode { ScreenPlay::FillMode::FillMode::Cover }; ScreenPlay::Settings::Language m_language { Language::En_US };
Language m_language { Language::En_US }; ScreenPlay::Settings::Theme m_theme { Theme::System };
Theme m_theme { Theme::System }; ScreenPlay::Settings::DesktopEnvironment m_desktopEnvironment { DesktopEnvironment::Unknown };
QString m_font { "Roboto" }; QString m_font { "Roboto" };
QString m_decoder;
bool m_steamVersion { false }; bool m_steamVersion { false };
DesktopEnvironment m_desktopEnvironment = DesktopEnvironment::Unknown;
QString m_buildInfos; QString m_buildInfos;
}; };
} }

View File

@ -1,132 +0,0 @@
// SPDX-License-Identifier: LicenseRef-EliasSteurerTachiom OR AGPL-3.0-only
#pragma once
#include <QClipboard>
#include <QCoreApplication>
#include <QDateTime>
#include <QDebug>
#include <QDir>
#include <QJsonDocument>
#include <QJsonObject>
#include <QMetaType>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QObject>
#include <QProcess>
#include <QQmlEngine>
#include <QScopeGuard>
#include <QString>
#include <QTextStream>
#include <QVersionNumber>
#include <QtConcurrent/QtConcurrent>
#include "ScreenPlay/globalvariables.h"
#include "ScreenPlayUtil/contenttypes.h"
#include "ScreenPlayUtil/util.h"
#include <fstream>
#include <iostream>
#include <optional>
namespace QArchive {
class DiskCompressor;
class DiskExtractor;
}
namespace ScreenPlay {
template <typename T>
T QStringToEnum(const QString& key, const T defaultValue)
{
auto metaEnum = QMetaEnum::fromType<T>();
bool ok = false;
T wantedEnum = static_cast<T>(metaEnum.keyToValue(key.toUtf8(), &ok));
if (ok) {
return wantedEnum;
} else {
qWarning() << "Unable to convert QStringToEnum. Key: " << key;
}
return defaultValue;
}
class Util : public QObject {
Q_OBJECT
Q_PROPERTY(QString debugMessages READ debugMessages NOTIFY debugMessagesChanged)
public:
Util();
~Util();
QString debugMessages() const { return m_debugMessages; }
signals:
void extractionProgressChanged(QString file, int proc, int total, qint64 br, qint64 bt);
void extractionFinished();
void compressionProgressChanged(QString file, int proc, int total, qint64 br, qint64 bt);
void compressionFinished();
void requestNavigation(QString nav);
void requestNavigationActive(bool isActive);
void requestToggleWallpaperConfiguration();
void setSidebarItem(QString folderName, ScreenPlay::InstalledType::InstalledType type);
void allLicenseLoaded(QString licensesText);
void allDataProtectionLoaded(QString dataProtectionText);
void debugMessagesChanged(QString debugMessages);
public slots:
void copyToClipboard(const QString& text) const;
void openFolderInExplorer(const QString& url) const;
QString toLocal(const QString& url) const;
bool exportProject(QString contentPath, QString exportFileName);
bool importProject(QString archivePath, QString extractionPath);
void requestAllLicenses();
void requestDataProtection();
bool fileExists(const QString& filePath) const;
static void logToGui(QtMsgType type, const QMessageLogContext& context, const QString& msg);
static bool writeJsonObjectToFile(const QString& absoluteFilePath, const QJsonObject& object, bool truncate = true);
static bool writeSettings(const QJsonObject& obj, const QString& absolutePath);
static bool writeFile(const QString& text, const QString& absolutePath);
static bool writeFileFromQrc(const QString& qrcPath, const QString& absolutePath);
static bool copyPreviewThumbnail(QJsonObject& obj, const QString& previewThumbnail, const QString& destination);
void setNavigation(QString nav)
{
emit requestNavigation(nav);
}
// When we create a wallpaper the main navigation gets disabled
void setNavigationActive(bool isActive)
{
emit requestNavigationActive(isActive);
}
void setToggleWallpaperConfiguration()
{
emit requestToggleWallpaperConfiguration();
}
void appendDebugMessages(QString debugMessages)
{
if (m_debugMessages.size() > 10000) {
m_debugMessages = "###### DEBUG CLEARED ######";
}
m_debugMessages += debugMessages;
emit debugMessagesChanged(m_debugMessages);
}
private:
QString m_debugMessages {};
QFuture<void> m_requestAllLicensesFuture;
std::unique_ptr<QArchive::DiskCompressor> m_compressor;
std::unique_ptr<QArchive::DiskExtractor> m_extractor;
};
// Used for redirect content from static logToGui to setDebugMessages
static Util* utilPointer { nullptr };
}

View File

@ -2,6 +2,7 @@
#pragma once #pragma once
#include <QColor>
#include <QDir> #include <QDir>
#include <QFile> #include <QFile>
#include <QFileInfo> #include <QFileInfo>
@ -24,7 +25,7 @@
#include "ScreenPlay/createimportvideo.h" #include "ScreenPlay/createimportvideo.h"
#include "ScreenPlay/globalvariables.h" #include "ScreenPlay/globalvariables.h"
#include "ScreenPlay/util.h" #include "ScreenPlayUtil/util.h"
#include <memory> #include <memory>
#include <optional> #include <optional>
@ -34,9 +35,11 @@ namespace ScreenPlay {
class Wizards : public QObject { class Wizards : public QObject {
Q_OBJECT Q_OBJECT
QML_ELEMENT QML_ELEMENT
QML_UNCREATABLE("CPP ONLY")
public: public:
explicit Wizards(const std::shared_ptr<GlobalVariables>& globalVariables, QObject* parent = nullptr); explicit Wizards(
Wizards() { } const std::shared_ptr<GlobalVariables>& globalVariables,
QObject* parent = nullptr);
enum class WizardResult { enum class WizardResult {
Ok, Ok,
@ -82,6 +85,14 @@ public slots:
const QString& previewThumbnail, const QString& previewThumbnail,
const QVector<QString>& tags); const QVector<QString>& tags);
void createGodotWallpaper(
const QString& title,
const QString& licenseName,
const QString& licenseFile,
const QString& createdBy,
const QString& previewThumbnail,
const QVector<QString>& tags);
void createGifWallpaper( void createGifWallpaper(
const QString& title, const QString& title,
const QString& licenseName, const QString& licenseName,
@ -103,8 +114,17 @@ signals:
private: private:
const std::shared_ptr<GlobalVariables> m_globalVariables; const std::shared_ptr<GlobalVariables> m_globalVariables;
const std::optional<QString> createTemporaryFolder() const; const std::optional<QString> createTemporaryFolder() const;
void createPreviewImage(const QString& name, const QString& targetPath);
private: private:
QFuture<void> m_wizardFuture; QFuture<void> m_wizardFuture;
QVector<QColor> m_gradientColors = {
QColor("#B71C1C"),
QColor("#1B5E20"),
QColor("#0D47A1"),
QColor("#FFD600"),
QColor("#4A148C")
};
Util m_util;
}; };
} }

View File

@ -1,6 +1,8 @@
// SPDX-License-Identifier: LicenseRef-EliasSteurerTachiom OR AGPL-3.0-only // SPDX-License-Identifier: LicenseRef-EliasSteurerTachiom OR AGPL-3.0-only
#include "ScreenPlay/CMakeVariables.h"
#include "ScreenPlay/app.h" #include "ScreenPlay/app.h"
#include "ScreenPlayUtil/logginghandler.h"
#include <QCommandLineParser> #include <QCommandLineParser>
#include <QDebug> #include <QDebug>
#include <QGuiApplication> #include <QGuiApplication>
@ -30,12 +32,14 @@ int main(int argc, char* argv[])
if (app.m_isAnotherScreenPlayInstanceRunning) { if (app.m_isAnotherScreenPlayInstanceRunning) {
return 0; return 0;
} else { }
auto logging = std::make_unique<const ScreenPlayUtil::LoggingHandler>("ScreenPlay");
app.init(); app.init();
const int status = qtGuiApp.exec(); const int status = qtGuiApp.exec();
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
sentry_shutdown(); sentry_shutdown();
#endif #endif
logging.reset();
return status; return status;
}
} }

View File

@ -7,7 +7,6 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import Settings
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
import Qt5Compat.GraphicalEffects import Qt5Compat.GraphicalEffects
import Plausible 1.0 import Plausible 1.0
@ -22,13 +21,13 @@ ApplicationWindow {
function setTheme(theme) { function setTheme(theme) {
switch (theme) { switch (theme) {
case Settings.System: case Settings.Theme.System:
root.Material.theme = Material.System; root.Material.theme = Material.System;
break; break;
case Settings.Dark: case Settings.Theme.Dark:
root.Material.theme = Material.Dark; root.Material.theme = Material.Dark;
break; break;
case Settings.Light: case Settings.Theme.Light:
root.Material.theme = Material.Light; root.Material.theme = Material.Light;
break; break;
} }
@ -40,14 +39,15 @@ ApplicationWindow {
App.installedListModel.reset(); App.installedListModel.reset();
} }
if (name === "Installed") { if (name === "Installed") {
stackView.replace("qrc:/qml/ScreenPlayApp/qml/Installed/Installed.qml", { stackView.replace("qrc:/qml/ScreenPlayApp/qml/Installed/InstalledView.qml", {
"sidebar": sidebar "sidebar": sidebar
}); });
return; return;
} }
stackView.replace("qrc:/qml/ScreenPlayApp/qml/" + name + "/" + name + ".qml", { stackView.replace("qrc:/qml/ScreenPlayApp/qml/" + name + "/" + name + "View.qml", {
"modalSource": content "modalSource": content
}); });
nav.setNavigation(name);
sidebar.state = "inactive"; sidebar.state = "inactive";
} }
@ -56,7 +56,7 @@ ApplicationWindow {
visible: false visible: false
width: 1400 width: 1400
height: 810 height: 810
title: "ScreenPlay Alpha - V" + App.version() title: "ScreenPlay Alpha - v" + App.version()
minimumHeight: 450 minimumHeight: 450
minimumWidth: 1050 minimumWidth: 1050
@ -72,9 +72,10 @@ ApplicationWindow {
// https://bugreports.qt.io/browse/QTBUG-86047 // https://bugreports.qt.io/browse/QTBUG-86047
Material.accent: Material.color(Material.Orange) Material.accent: Material.color(Material.Orange)
onVisibilityChanged: { onVisibilityChanged: {
if (root.visibility === 2) if (root.visibility !== 2)
App.installedListModel.reset(); return;
} }
onClosing: close => { onClosing: close => {
close.accepted = false; close.accepted = false;
if (App.screenPlayManager.activeWallpaperCounter === 0 && App.screenPlayManager.activeWidgetsCounter === 0) { if (App.screenPlayManager.activeWallpaperCounter === 0 && App.screenPlayManager.activeWidgetsCounter === 0) {
@ -103,14 +104,17 @@ ApplicationWindow {
} }
Component.onCompleted: { Component.onCompleted: {
print("Settings.Language.Pl_PL", Settings.Language.Pl_PL);
print(App.settings.theme, Settings.Theme.Light);
setTheme(App.settings.theme); setTheme(App.settings.theme);
stackView.push("qrc:/qml/ScreenPlayApp/qml/Installed/Installed.qml", { stackView.push("qrc:/qml/ScreenPlayApp/qml/Installed/InstalledView.qml", {
"sidebar": sidebar "sidebar": sidebar
}); });
if (!App.settings.silentStart) { if (!App.settings.silentStart) {
App.showDockIcon(true); App.showDockIcon(true);
root.show(); root.show();
} }
App.installedListModel.reset();
} }
Item { Item {
@ -129,7 +133,7 @@ ApplicationWindow {
modalSource: content modalSource: content
} }
Monitors.Monitors { Monitors.MonitorsView {
id: monitors id: monitors
modalSource: content modalSource: content
} }

View File

@ -6,7 +6,6 @@ import Qt5Compat.GraphicalEffects
import QtQuick.Controls.Material.impl import QtQuick.Controls.Material.impl
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil import ScreenPlayUtil
Rectangle { Rectangle {
@ -42,9 +41,7 @@ Rectangle {
function onWizardExited() { function onWizardExited() {
root.expanded = true; root.expanded = true;
stackView.clear(StackView.PushTransition); App.util.setNavigation("Installed");
stackView.push("qrc:/qml/ScreenPlayApp/qml/Create/StartInfo.qml");
listView.currentIndex = 0;
App.util.setNavigationActive(true); App.util.setNavigationActive(true);
} }
@ -87,6 +84,13 @@ Rectangle {
objectName: "" objectName: ""
} }
ListElement {
headline: qsTr("3D Engine Wallpaper (Godot 4.2)")
source: "qrc:/qml/ScreenPlayApp/qml/Create/Wizards/GodotWallpaper.qml"
category: "Code Wallpaper"
objectName: ""
}
ListElement { ListElement {
headline: qsTr("QML Wallpaper") headline: qsTr("QML Wallpaper")
source: "qrc:/qml/ScreenPlayApp/qml/Create/Wizards/QMLWallpaper.qml" source: "qrc:/qml/ScreenPlayApp/qml/Create/Wizards/QMLWallpaper.qml"

View File

@ -6,7 +6,6 @@ import Qt5Compat.GraphicalEffects
import QtQuick.Controls.Material.impl import QtQuick.Controls.Material.impl
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil import ScreenPlayUtil
Item { Item {

View File

@ -6,7 +6,6 @@ import Qt5Compat.GraphicalEffects
import QtQuick.Controls.Material.impl import QtQuick.Controls.Material.impl
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
Item { Item {

View File

@ -6,7 +6,6 @@ import Qt5Compat.GraphicalEffects
import QtQuick.Controls.Material.impl import QtQuick.Controls.Material.impl
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil import ScreenPlayUtil
Item { Item {

View File

@ -5,7 +5,6 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil import ScreenPlayUtil
Item { Item {

View File

@ -0,0 +1,100 @@
import QtQuick
import Qt5Compat.GraphicalEffects
import QtQuick.Controls
import QtQuick.Controls.Material
import QtQuick.Layouts
import ScreenPlayApp
import ScreenPlay
import ScreenPlayUtil as Util
WizardPage {
id: root
sourceComponent: ColumnLayout {
id: rightWrapper
function create() {
App.wizards.createGodotWallpaper(tfTitle.text, cbLicense.name, cbLicense.licenseFile, tfCreatedBy.text, previewSelector.imageSource, tagSelector.getTags());
}
spacing: 10
anchors {
top: parent.top
right: parent.right
left: parent.left
}
Util.Headline {
text: qsTr("Create a Godot Wallpaper")
Layout.fillWidth: true
}
Util.HeadlineSection {
text: qsTr("General")
}
RowLayout {
spacing: 20
Util.TextField {
id: tfTitle
Layout.fillWidth: true
placeholderText: qsTr("Wallpaper name")
required: true
onTextChanged: root.ready = text.length >= 1
}
Util.TextField {
id: tfCreatedBy
Layout.fillWidth: true
placeholderText: qsTr("Created By")
}
}
Util.TextField {
id: tfDescription
Layout.fillWidth: true
placeholderText: qsTr("Description")
}
Item {
height: 30
}
Util.HeadlineSection {
text: qsTr("License & Tags")
}
RowLayout {
spacing: 20
Util.LicenseSelector {
id: cbLicense
}
Util.TagSelector {
id: tagSelector
Layout.fillWidth: true
}
}
Item {
height: 30
}
Util.HeadlineSection {
text: qsTr("Preview Image")
}
Util.ImageSelector {
id: previewSelector
Layout.fillWidth: true
}
}
}

View File

@ -5,7 +5,6 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
WizardPage { WizardPage {

View File

@ -5,7 +5,6 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
Item { Item {
id: root id: root

View File

@ -6,7 +6,6 @@ import QtQuick.Layouts
import QtQuick.Dialogs import QtQuick.Dialogs
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
Item { Item {
@ -59,10 +58,6 @@ Item {
} }
ComboBox { ComboBox {
// ListElement {
// text: "AV1 (NVidia 3000, AMD 6000 or newer). ULTRA SLOW ENCODING!"
// value: Create.AV1
// }
id: comboBoxCodec id: comboBoxCodec
Layout.preferredWidth: 400 Layout.preferredWidth: 400
@ -76,14 +71,13 @@ Item {
ListElement { ListElement {
text: "VP8 (Better for older hardware)" text: "VP8 (Better for older hardware)"
value: Create.VP9 value: Util.Video.VideoCodec.VP9
} }
ListElement { ListElement {
text: "VP9 (Better for newer hardware 2018+)" text: "VP9 (Better for newer hardware 2018+)"
value: Create.VP8 value: Util.Video.VideoCodec.VP8
} }
// Import works but the QWebEngine cannot display AV1 :(
} }
} }
} }

View File

@ -5,7 +5,6 @@ import QtQuick.Layouts
import Qt5Compat.GraphicalEffects import Qt5Compat.GraphicalEffects
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
Item { Item {
id: wrapperError id: wrapperError

View File

@ -5,8 +5,6 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlay.Enums.ImportVideoState
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
Item { Item {

View File

@ -5,7 +5,6 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
Item { Item {
id: root id: root

View File

@ -5,8 +5,6 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlay.Enums.ImportVideoState
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
Item { Item {
@ -329,7 +327,7 @@ Item {
onClicked: { onClicked: {
if (conversionFinishedSuccessful) { if (conversionFinishedSuccessful) {
btnSave.enabled = false; btnSave.enabled = false;
App.create.saveWallpaper(textFieldName.text, textFieldDescription.text, root.filePath, previewSelector.imageSource, textFieldYoutubeURL.text, Create.VP9, textFieldTags.getTags()); App.create.saveWallpaper(textFieldName.text, textFieldDescription.text, root.filePath, previewSelector.imageSource, textFieldYoutubeURL.text, Util.Video.VideoCodec.VP9, textFieldTags.getTags());
savePopup.open(); savePopup.open();
} }
} }

View File

@ -6,7 +6,6 @@ import QtQuick.Layouts
import QtQuick.Dialogs import QtQuick.Dialogs
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
import "../../" import "../../"

View File

@ -5,7 +5,6 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
Item { Item {
id: root id: root

View File

@ -5,8 +5,6 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlay.Enums.ImportVideoState
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
Item { Item {

View File

@ -6,7 +6,6 @@ import QtQuick.Layouts
import QtQuick.Dialogs import QtQuick.Dialogs
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
import "../../" import "../../"
@ -46,7 +45,7 @@ Item {
Text { Text {
id: txtDescription id: txtDescription
text: qsTr("ScreenPlay V0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.") text: qsTr("ScreenPlay v0.15 and up can play *.mp4 (also more known as h264). This can improove performance on older systems.")
color: Material.primaryTextColor color: Material.primaryTextColor
Layout.fillWidth: true Layout.fillWidth: true
font.pointSize: 13 font.pointSize: 13

View File

@ -5,7 +5,6 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
WizardPage { WizardPage {

View File

@ -5,21 +5,25 @@ import QtQuick.Controls.Material
import QtQuick.Layouts import QtQuick.Layouts
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
import ScreenPlayUtil as Util import ScreenPlayUtil as Util
WizardPage { WizardPage {
id: root id: root
function isValidURL(string) {
var res = string.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g);
return (res !== null);
}
sourceComponent: ColumnLayout { sourceComponent: ColumnLayout {
property bool ready: tfTitle.text.length >= 1 && tfUrl.text.length > 1 id: layout
function validate() {
root.ready = tfTitle.text.length >= 1 && root.isValidURL(tfUrl.text);
}
function create() { function create() {
App.wizards.createWebsiteWallpaper(tfTitle.text, previewSelector.imageSource, tfUrl.text, tagSelector.getTags()); App.wizards.createWebsiteWallpaper(tfTitle.text, previewSelector.imageSource, tfUrl.text, tagSelector.getTags());
} }
spacing: 10 spacing: 10
onReadyChanged: root.ready = ready
anchors { anchors {
top: parent.top top: parent.top
@ -41,11 +45,10 @@ WizardPage {
Util.TextField { Util.TextField {
id: tfTitle id: tfTitle
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: qsTr("Wallpaper name") placeholderText: qsTr("Wallpaper name")
required: true required: true
onTextChanged: root.ready = text.length >= 1 onTextChanged: layout.validate()
} }
Util.TextField { Util.TextField {
@ -65,10 +68,10 @@ WizardPage {
Util.TextField { Util.TextField {
id: tfUrl id: tfUrl
Layout.fillWidth: true Layout.fillWidth: true
required: true required: true
text: "https://" text: "https://"
onTextChanged: layout.validate()
} }
Item { Item {

View File

@ -6,7 +6,6 @@ import QtQuick.Layouts
import QtQuick.Window import QtQuick.Window
import ScreenPlayApp import ScreenPlayApp
import ScreenPlay import ScreenPlay
import ScreenPlay.Create
FocusScope { FocusScope {
id: root id: root

View File

@ -0,0 +1,15 @@
[preset.0]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false

Some files were not shown because too many files have changed in this diff Show More