Compare commits
280 Commits
v5.0.0-bet
...
feature/su
Author | SHA1 | Date | |
---|---|---|---|
![]() |
05d2019f80 | ||
![]() |
049483dbbd | ||
![]() |
b8270eb55e | ||
![]() |
e737ab2443 | ||
![]() |
7fe3fa1c6f | ||
![]() |
8d0ba97fbf | ||
![]() |
0be7ee859a | ||
![]() |
eeeafff2b2 | ||
![]() |
2bccc31cbb | ||
![]() |
60bb4ad69f | ||
![]() |
fdfe7b35f6 | ||
![]() |
457940ab04 | ||
![]() |
c9a90b2b77 | ||
![]() |
4e23c46ca1 | ||
![]() |
a98575133f | ||
![]() |
b7e85078d1 | ||
![]() |
1494a474f1 | ||
![]() |
c7ba85ce03 | ||
![]() |
327be156f3 | ||
![]() |
2d850b0798 | ||
![]() |
7d144f19c0 | ||
![]() |
6496095d7c | ||
![]() |
1778aa1bc3 | ||
![]() |
7769c02a86 | ||
![]() |
a97486b92b | ||
![]() |
6315857651 | ||
![]() |
99238a099d | ||
![]() |
58db3beaf8 | ||
![]() |
ccb18a0da4 | ||
![]() |
89ac323c8e | ||
![]() |
3073b9f44d | ||
![]() |
32dd269d18 | ||
![]() |
b96fda0f8c | ||
![]() |
4b85f23969 | ||
![]() |
e670563c92 | ||
![]() |
1e9dab2117 | ||
![]() |
aac867f960 | ||
![]() |
9e89f51a59 | ||
![]() |
2d31e910fa | ||
![]() |
6332230c4c | ||
![]() |
3161f641d8 | ||
![]() |
6dba9d9031 | ||
![]() |
433dc763d1 | ||
![]() |
99416e93cc | ||
![]() |
68e01e253e | ||
![]() |
b764fbbde7 | ||
![]() |
73121d5d53 | ||
![]() |
0a14872660 | ||
![]() |
78834cbbfc | ||
![]() |
7b69d41857 | ||
![]() |
668bd6a983 | ||
![]() |
2353815fdf | ||
![]() |
9bbc5e426c | ||
![]() |
7925e75652 | ||
![]() |
13bc2a5cd8 | ||
![]() |
bf8d1a6a28 | ||
![]() |
338f062781 | ||
![]() |
2cf2622b9e | ||
![]() |
6d92430e76 | ||
![]() |
9b5a6d8bf0 | ||
![]() |
90c3f4f72b | ||
![]() |
c3794950ab | ||
![]() |
e7516baa0b | ||
![]() |
88366b3362 | ||
![]() |
dd93cecbcf | ||
![]() |
359159b402 | ||
![]() |
14b30677db | ||
![]() |
9f3dd50f99 | ||
![]() |
1503b8eabd | ||
![]() |
f3a86e93fd | ||
![]() |
c4b20ea7a4 | ||
![]() |
abf9321ed0 | ||
![]() |
ce9df3b57b | ||
![]() |
680c42c113 | ||
![]() |
a648248680 | ||
![]() |
1693d863d3 | ||
![]() |
ccc29ef416 | ||
![]() |
b9680e26e7 | ||
![]() |
d444ed7e39 | ||
![]() |
bb94cb2200 | ||
![]() |
eaf9494f91 | ||
![]() |
d7abf86050 | ||
![]() |
e8f4cfda85 | ||
![]() |
e85c7dce01 | ||
![]() |
87adc2cab9 | ||
![]() |
d59f40ff5d | ||
![]() |
edd98d8bd5 | ||
![]() |
a8a6f2dfe9 | ||
![]() |
73d9604107 | ||
![]() |
04267acabc | ||
![]() |
20e90e699c | ||
![]() |
7f0033989a | ||
![]() |
1de33312f3 | ||
![]() |
d1c6347f3d | ||
![]() |
0ba44a4620 | ||
![]() |
db753e75cc | ||
![]() |
db93a25b33 | ||
![]() |
1940b0cccd | ||
![]() |
b101549c5b | ||
![]() |
fefd862fbd | ||
![]() |
6333df011a | ||
![]() |
d127cefdfb | ||
![]() |
5e325af153 | ||
![]() |
f57907c3d3 | ||
![]() |
64b59fd204 | ||
![]() |
ee53a59d69 | ||
![]() |
bf632c4c62 | ||
![]() |
5add209ccf | ||
![]() |
480fc0dd4e | ||
![]() |
d9b22112c0 | ||
![]() |
9c4c2135d9 | ||
![]() |
1fca0e29ff | ||
![]() |
b313b12004 | ||
![]() |
37a3cf96b4 | ||
![]() |
59c2167f55 | ||
![]() |
42cbe3534f | ||
![]() |
0a8ba7b838 | ||
![]() |
4e00dcf5ec | ||
![]() |
098ec4941e | ||
![]() |
0b3b6f1b94 | ||
![]() |
9a64092244 | ||
![]() |
bc4fee0121 | ||
![]() |
b5e5db7755 | ||
![]() |
c172d52116 | ||
![]() |
b7b94a18fb | ||
![]() |
62858bbb68 | ||
![]() |
f078ad02f3 | ||
![]() |
1c7d11a302 | ||
![]() |
20a62ef2dd | ||
![]() |
74e2aa1d24 | ||
![]() |
18a99c664b | ||
![]() |
dde8d08693 | ||
![]() |
de1a47b013 | ||
![]() |
75eaf911a2 | ||
![]() |
1dba4bbda8 | ||
![]() |
9d14afa671 | ||
![]() |
fd23daa3d2 | ||
![]() |
9ba461675f | ||
![]() |
0623cb2aaf | ||
![]() |
ec6f8d04ed | ||
![]() |
06a4d30223 | ||
![]() |
a27d0705a4 | ||
![]() |
60d7c8ca1e | ||
![]() |
4b037c2543 | ||
![]() |
13302d7b30 | ||
![]() |
596845cd76 | ||
![]() |
89316cbf50 | ||
![]() |
3cf8a8ea65 | ||
![]() |
137a23b86a | ||
![]() |
3dae2c50e6 | ||
![]() |
e288414684 | ||
![]() |
0d965fc23c | ||
![]() |
728188114e | ||
![]() |
72a61be8ec | ||
![]() |
3e822e4ef0 | ||
![]() |
29f7501dcf | ||
![]() |
2544c71f30 | ||
![]() |
6c629f6d68 | ||
![]() |
fa022747e2 | ||
![]() |
d0a2491acd | ||
![]() |
816513ad85 | ||
![]() |
b36cb17e4c | ||
![]() |
4fb27b6135 | ||
![]() |
96674f36b4 | ||
![]() |
c31de12048 | ||
![]() |
aaeaa8338b | ||
![]() |
f5827d4a48 | ||
![]() |
afe9d18b03 | ||
![]() |
175e12b25b | ||
![]() |
c4bb03d360 | ||
![]() |
acc34e8bda | ||
![]() |
edecc01e14 | ||
![]() |
808721a29f | ||
![]() |
b57316b4f4 | ||
![]() |
8d57aa5353 | ||
![]() |
2ce1c56005 | ||
![]() |
fc7c092cfb | ||
![]() |
e100b6f2c3 | ||
![]() |
ac2867f1a7 | ||
![]() |
3166daf041 | ||
![]() |
0c2d58e70b | ||
![]() |
af9ab09b3b | ||
![]() |
0c8560e60d | ||
![]() |
5a44fd8b9f | ||
![]() |
20ce83ccfe | ||
![]() |
0cc4543948 | ||
![]() |
5ff045d74a | ||
![]() |
0fdf123f8d | ||
![]() |
ec0b934557 | ||
![]() |
7fa1e50c17 | ||
![]() |
9a7c5ead3a | ||
![]() |
72282d4e6d | ||
![]() |
be950a7779 | ||
![]() |
d37ef30041 | ||
![]() |
53360bc189 | ||
![]() |
bfd6712a93 | ||
![]() |
6902f1495d | ||
![]() |
156fd3bc19 | ||
![]() |
b1303b4ad6 | ||
![]() |
2fa3bb7b1b | ||
![]() |
fca6f7627a | ||
![]() |
e7bca87063 | ||
![]() |
a7afaa1241 | ||
![]() |
e98f25255c | ||
![]() |
b4bd225f78 | ||
![]() |
2c0253fafa | ||
![]() |
c8201949df | ||
![]() |
0426bcb2a6 | ||
![]() |
9025d055a0 | ||
![]() |
bef6f04f89 | ||
![]() |
800d4f7098 | ||
![]() |
e8d9d4fa4b | ||
![]() |
c9e2d3f4e0 | ||
![]() |
43230003b8 | ||
![]() |
725069026c | ||
![]() |
7729137a72 | ||
![]() |
3c81b3decb | ||
![]() |
460946e8f4 | ||
![]() |
6908ab9b3f | ||
![]() |
0286f97145 | ||
![]() |
a40ba2551d | ||
![]() |
02c65bcf66 | ||
![]() |
ecf5401626 | ||
![]() |
8866719ef0 | ||
![]() |
6a02f1b3c5 | ||
![]() |
02d7c84e17 | ||
![]() |
0a9fb45841 | ||
![]() |
6ddace1ec4 | ||
![]() |
fc4107107b | ||
![]() |
30da9e6556 | ||
![]() |
939de1e928 | ||
![]() |
c8b3572cd8 | ||
![]() |
d350243b2e | ||
![]() |
ea68c31c07 | ||
![]() |
0dd837d127 | ||
![]() |
b5c019ae6b | ||
![]() |
b4337d3746 | ||
![]() |
afc0a86903 | ||
![]() |
2e6821d231 | ||
![]() |
ea8a827937 | ||
![]() |
bc352424e1 | ||
![]() |
8e83f1581e | ||
![]() |
ba593b46dd | ||
![]() |
d8cfead994 | ||
![]() |
cf7db809ac | ||
![]() |
26dd33854f | ||
![]() |
1ed530d946 | ||
![]() |
b85008c269 | ||
![]() |
08ddb6e519 | ||
![]() |
d37c55e86f | ||
![]() |
e2c7e1a145 | ||
![]() |
6ebf40647e | ||
![]() |
ed42f1c54a | ||
![]() |
c94097acfb | ||
![]() |
9c6c8564fa | ||
![]() |
4b33373296 | ||
![]() |
7ce11c5252 | ||
![]() |
0d864ce6a7 | ||
![]() |
a6360152cd | ||
![]() |
827fdbf05a | ||
![]() |
a4c372d945 | ||
![]() |
93708cb2f3 | ||
![]() |
3035bc9386 | ||
![]() |
4c789967c3 | ||
![]() |
75797f2c41 | ||
![]() |
571686f180 | ||
![]() |
df68978adc | ||
![]() |
7a87fd9924 | ||
![]() |
8d1502cb20 | ||
![]() |
34b5038bd5 | ||
![]() |
a9e1120f00 | ||
![]() |
b14238c692 | ||
![]() |
dfe4a75fbd | ||
![]() |
4fd88072e9 | ||
![]() |
f2e6f19c34 | ||
![]() |
66029c62ed | ||
![]() |
43d78a74bd | ||
![]() |
0ec6ebad07 | ||
![]() |
8743672038 | ||
![]() |
3fd032d898 |
@@ -5,22 +5,14 @@
|
||||
-DGD_IDE_ONLY
|
||||
-DMACOS
|
||||
-DRELEASE
|
||||
-DWXUSINGDLL
|
||||
-D_FILE_OFFSET_BITS=64
|
||||
-D__WXMAC__
|
||||
-D__WXOSX_COCOA__
|
||||
-D__WXOSX__
|
||||
-DwxDEBUG_LEVEL=0
|
||||
-D_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_
|
||||
-Wno-potentially-evaluated-expression
|
||||
-std=gnu++11
|
||||
-I/usr/local/Cellar/wxmac/3.0.2/include/wx-3.0
|
||||
-DNDEBUG
|
||||
-fPIC
|
||||
-I/Users/florian/Projects/F/GD/ExtLibs/SFML/include
|
||||
-I/Users/florian/Projects/F/GD/Core
|
||||
-I/usr/local/Cellar/wxmac/3.0.2/lib/wx/include/osx_cocoa-unicode-3.0
|
||||
-I/usr/local/Cellar/wxmac/3.0.2/include/wx-3.0
|
||||
-I/Users/florian/Projects/F/GD/GDCpp/.
|
||||
-I/Users/florian/Projects/F/GD/GDJS/.
|
||||
-F/Users/florian/Projects/F/GD/ExtLibs/SFML/extlibs/libs-osx/Frameworks
|
||||
-I./ExtLibs/SFML/include
|
||||
-I./Core
|
||||
-I./GDCpp/.
|
||||
-I./GDJS/.
|
||||
-F./ExtLibs/SFML/extlibs/libs-osx/Frameworks
|
||||
|
1
.github/ISSUE_TEMPLATE/--bug-report.md
vendored
@@ -21,4 +21,5 @@ Steps to reproduce the behavior:
|
||||
|
||||
## Other details
|
||||
* Include any OS/browser version/smartphone that you're using
|
||||
* Which version of GDevelop are you using? The desktop app or the web-app?
|
||||
* Add any other context about the problem here.
|
||||
|
12
.gitignore
vendored
@@ -3,12 +3,11 @@
|
||||
/docs/GDJS Documentation
|
||||
/docs/GDCpp Documentation
|
||||
/docs/GDCore Documentation
|
||||
/ExtLibs/wxwidgets
|
||||
/ExtLibs/wxWidgets
|
||||
/ExtLibs/SFML
|
||||
/ExtLibs/*.7z
|
||||
/scripts/Repository keys
|
||||
/scripts/logs/*.txt
|
||||
/scripts/gdcore-gdcpp-gdjs-extensions-messages.pot
|
||||
/Binaries/.build*
|
||||
/Binaries/.embuild*
|
||||
/Binaries/build*
|
||||
@@ -19,14 +18,6 @@
|
||||
/Binaries/Releases/**/*.tar.lzma
|
||||
/Binaries/Releases/**/*.zip
|
||||
/Binaries/Releases/**/*.deb
|
||||
Binaries/Packaging/debian-source-package/gdevelop/
|
||||
Binaries/Packaging/opensuse-build-service/gdevelop/
|
||||
Binaries/Packaging/opensuse-build-service/final/
|
||||
Binaries/Packaging/GDevelop.app
|
||||
Binaries/Packaging/GDevelop.zip
|
||||
Binaries/Packaging/GDevelop.pkg
|
||||
Binaries/Packaging/logs
|
||||
/GDevelop.js
|
||||
*.depend
|
||||
*.layout
|
||||
*.xgdwe
|
||||
@@ -45,7 +36,6 @@ Binaries/Packaging/logs
|
||||
/Binaries/Output/Release_Linux/**
|
||||
/Binaries/Output/Debug_Darwin/**
|
||||
/Binaries/Output/Release_Darwin/**
|
||||
/Binaries/Output/Frameworks/
|
||||
!/Binaries/Output/Release_Linux/StartGDevelop.sh
|
||||
!/Binaries/Output/Release_Linux/CppPlatform/
|
||||
/Binaries/**/MinGW32
|
||||
|
64
.travis.yml
@@ -9,23 +9,27 @@ cache:
|
||||
directories:
|
||||
- $HOME/.npm
|
||||
|
||||
git:
|
||||
depth: 999999
|
||||
|
||||
env:
|
||||
global:
|
||||
- GCC_VERSION="4.8"
|
||||
|
||||
addons:
|
||||
artifacts:
|
||||
s3_region: "us-east-1"
|
||||
target_paths:
|
||||
- /$(git rev-parse HEAD)
|
||||
paths:
|
||||
- Binaries/Output/libGD.js/Release
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
#Build dependencies:
|
||||
- cmake
|
||||
# Build dependencies:
|
||||
# (Cmake 3+ is required by Emscripten)
|
||||
- cmake3
|
||||
- p7zip-full
|
||||
- g++-4.8
|
||||
#SFML dependencies:
|
||||
# SFML dependencies:
|
||||
- libopenal-dev
|
||||
- libjpeg-dev
|
||||
- libglew-dev
|
||||
@@ -35,43 +39,63 @@ addons:
|
||||
- libglu1-mesa-dev
|
||||
- libfreetype6-dev
|
||||
|
||||
#Activate X Virtual Framebuffer to allow tests to
|
||||
#use SFML.
|
||||
before_install:
|
||||
#Activate X Virtual Framebuffer to allow tests to
|
||||
#use SFML.
|
||||
- "export DISPLAY=:99.0"
|
||||
- "sh -e /etc/init.d/xvfb start"
|
||||
# This workaround is required to avoid libstdc++ errors (Emscripten requires a recent version of libstdc++)
|
||||
- wget -q -O libstdc++6 http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb
|
||||
- sudo dpkg --force-all -i libstdc++6
|
||||
|
||||
install:
|
||||
#Get the correct version of gcc/g++
|
||||
- if [ "$CXX" = "g++" ]; then export CXX="g++-${GCC_VERSION}" CC="gcc-${GCC_VERSION}"; fi
|
||||
#Compile the tests only for GDCore and GDCpp
|
||||
- mkdir .build-tests
|
||||
- cd .build-tests
|
||||
- cmake -DBUILD_GDJS=FALSE -DBUILD_TESTS=TRUE -DCMAKE_CXX_COMPILER=$(which $CXX) -DCMAKE_C_COMPILER=$(which $CC) ..
|
||||
- make -j 4
|
||||
- cd ..
|
||||
# Install Emscripten (for GDevelop.js)
|
||||
- git clone https://github.com/juj/emsdk.git
|
||||
- cd emsdk
|
||||
- ./emsdk install sdk-1.37.37-64bit
|
||||
- ./emsdk activate sdk-1.37.37-64bit
|
||||
- source ./emsdk_env.sh
|
||||
- cd ..
|
||||
# Install GDevelop.js dependencies and compile it
|
||||
- cd GDevelop.js
|
||||
- npm install -g grunt-cli
|
||||
- npm install
|
||||
- npm run build
|
||||
- cd ..
|
||||
#Install newIDE tests dependencies
|
||||
- cd newIDE/app && npm install
|
||||
- cd ../..
|
||||
#Install GDJS tests dependencies
|
||||
- cd GDJS/tests && npm install
|
||||
- cd ../..
|
||||
#Get the correct version of gcc/g++
|
||||
- if [ "$CXX" = "g++" ]; then export CXX="g++-${GCC_VERSION}" CC="gcc-${GCC_VERSION}"; fi
|
||||
#Compile the tests only
|
||||
- mkdir .build-tests
|
||||
- cd .build-tests
|
||||
- cmake -DBUILD_GDJS=FALSE -DBUILD_IDE=FALSE -DBUILD_TESTS=TRUE -DNO_GUI=TRUE -DCMAKE_CXX_COMPILER=$(which $CXX) -DCMAKE_C_COMPILER=$(which $CC) ..
|
||||
- make -j 4
|
||||
- cd ..
|
||||
|
||||
script:
|
||||
#GDCore and GDCpp game engine tests:
|
||||
# GDCore and GDCpp game engine tests:
|
||||
- cd .build-tests
|
||||
- Core/GDCore_tests
|
||||
- GDCpp/GDCpp_tests
|
||||
- Extensions/PathfindingBehavior/PathfindingBehavior_Runtime_tests
|
||||
- Extensions/LinkedObjects/LinkedObjects_Runtime_tests
|
||||
- cd ..
|
||||
#newIDE tests:
|
||||
# GDevelop.js tests
|
||||
- cd GDevelop.js
|
||||
- npm test
|
||||
- cd ..
|
||||
# newIDE tests:
|
||||
- cd newIDE/app
|
||||
- npm test
|
||||
- npm run flow
|
||||
- npm run check-format
|
||||
- cd ../..
|
||||
#GDJS game engine tests, disabled on Travis CI because ChromeHeadless can't be started.
|
||||
#See them running on Semaphore-CI instead: https://semaphoreci.com/4ian/gd
|
||||
# GDJS game engine tests, disabled on Travis CI because ChromeHeadless can't be started.
|
||||
# See them running on Semaphore-CI instead: https://semaphoreci.com/4ian/gd
|
||||
# - cd GDJS/tests && npm test
|
||||
# - cd ../..
|
||||
|
25
.vscode/c_cpp_properties.json
vendored
@@ -4,7 +4,6 @@
|
||||
"name": "Mac",
|
||||
"includePath": [
|
||||
"${workspaceRoot}",
|
||||
"${workspaceRoot}/IDE",
|
||||
"${workspaceRoot}/GDCpp",
|
||||
"${workspaceRoot}/GDJS",
|
||||
"${workspaceRoot}/Extensions",
|
||||
@@ -12,29 +11,21 @@
|
||||
"${workspaceRoot}/ExtLibs/SFML/include",
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1",
|
||||
"/usr/local/include",
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/include",
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
|
||||
"/usr/include",
|
||||
"/usr/local/lib/wx/include/osx_cocoa-unicode-3.0",
|
||||
"/usr/local/include/wx-3.0",
|
||||
"${workspaceRoot}"
|
||||
],
|
||||
"defines": [
|
||||
"GD_IDE_ONLY",
|
||||
"__WXMAC__",
|
||||
"__WXOSX__",
|
||||
"__WXOSX_COCOA__",
|
||||
"GD_CORE_API=/* Macro used to export classes on Windows, please ignore */",
|
||||
"GD_API=/* Macro used to export classes on Windows, please ignore */",
|
||||
"GD_EXTENSION_API=/* Macro used to export classes on Windows, please ignore */",
|
||||
"WXUSINGDLL"
|
||||
"GD_EXTENSION_API=/* Macro used to export classes on Windows, please ignore */"
|
||||
],
|
||||
"intelliSenseMode": "clang-x64",
|
||||
"browse": {
|
||||
"path": [
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1",
|
||||
"/usr/local/include",
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/include",
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
|
||||
"/usr/include",
|
||||
"${workspaceRoot}"
|
||||
@@ -66,13 +57,9 @@
|
||||
],
|
||||
"defines": [
|
||||
"GD_IDE_ONLY",
|
||||
"__WXMAC__",
|
||||
"__WXOSX__",
|
||||
"__WXOSX_COCOA__",
|
||||
"GD_CORE_API=/* Macro used to export classes on Windows, please ignore */",
|
||||
"GD_API=/* Macro used to export classes on Windows, please ignore */",
|
||||
"GD_EXTENSION_API=/* Macro used to export classes on Windows, please ignore */",
|
||||
"WXUSINGDLL"
|
||||
"GD_EXTENSION_API=/* Macro used to export classes on Windows, please ignore */"
|
||||
],
|
||||
"intelliSenseMode": "clang-x64",
|
||||
"browse": {
|
||||
@@ -102,13 +89,9 @@
|
||||
"_DEBUG",
|
||||
"UNICODE",
|
||||
"GD_IDE_ONLY",
|
||||
"__WXMAC__",
|
||||
"__WXOSX__",
|
||||
"__WXOSX_COCOA__",
|
||||
"GD_CORE_API=/* Macro used to export classes on Windows, please ignore */",
|
||||
"GD_API=/* Macro used to export classes on Windows, please ignore */",
|
||||
"GD_EXTENSION_API=/* Macro used to export classes on Windows, please ignore */",
|
||||
"WXUSINGDLL"
|
||||
"GD_EXTENSION_API=/* Macro used to export classes on Windows, please ignore */"
|
||||
],
|
||||
"intelliSenseMode": "msvc-x64",
|
||||
"browse": {
|
||||
@@ -122,4 +105,4 @@
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
}
|
||||
|
8
.vscode/settings.json
vendored
@@ -77,7 +77,10 @@
|
||||
"cstdint": "cpp",
|
||||
"forward_list": "cpp",
|
||||
"mutex": "cpp",
|
||||
"__hash": "cpp"
|
||||
"__hash": "cpp",
|
||||
"__debug": "cpp",
|
||||
"__threading_support": "cpp",
|
||||
"any": "cpp"
|
||||
},
|
||||
"files.exclude": {
|
||||
"Binaries/*build*": true,
|
||||
@@ -94,10 +97,9 @@
|
||||
"newIDE/app/resources/GDJS": true,
|
||||
"newIDE/electron-app/app/www": true
|
||||
},
|
||||
// Support for Flowtype:
|
||||
// Support for Flowtype (for newIDE):
|
||||
"javascript.validate.enable": false,
|
||||
"flow.useNPMPackagedFlow": true,
|
||||
"flow.useLSP": false, // As we are in a monorepo, see https://github.com/flowtype/flow-for-vscode/issues/301
|
||||
|
||||
// Clang format styling (duplicated in scripts/CMakeClangUtils.txt)
|
||||
"C_Cpp.clang_format_style": "{BasedOnStyle: Google, BinPackParameters: false, BinPackArguments: false}"
|
||||
|
@@ -0,0 +1,147 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 16.933333 16.933334"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="tween_behavior.svg"
|
||||
inkscape:export-filename="/home/matthias/Programme/GD_MyFork/tween_example/icons/tween_behavior16.png"
|
||||
inkscape:export-xdpi="22.500002"
|
||||
inkscape:export-ydpi="22.500002">
|
||||
<defs
|
||||
id="defs2">
|
||||
<mask
|
||||
maskUnits="userSpaceOnUse"
|
||||
id="mask1103">
|
||||
<rect
|
||||
style="opacity:1;fill:#e8e7e7;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
id="rect1105"
|
||||
width="4.5836725"
|
||||
height="17.212158"
|
||||
x="35.265717"
|
||||
y="5.1149116" />
|
||||
</mask>
|
||||
<mask
|
||||
maskUnits="userSpaceOnUse"
|
||||
id="mask1131">
|
||||
<path
|
||||
style="opacity:1;fill:#64b1df;fill-opacity:1;stroke:none;stroke-width:12.09194851;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
d="M 60.625098,21.909981 V 4.9766519 H 43.691765 v 0.006 l 16.92765,16.9276491 z"
|
||||
id="path1133"
|
||||
inkscape:connector-curvature="0" />
|
||||
</mask>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="6.0786873"
|
||||
inkscape:cx="29.846777"
|
||||
inkscape:cy="20.519613"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="false"
|
||||
units="px"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1026"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid898" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Ebene1">
|
||||
<rect
|
||||
style="opacity:1;fill:#fefefe;fill-opacity:1;stroke:none;stroke-width:0.82572281;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
id="rect1051"
|
||||
width="8.598958"
|
||||
height="1.9843749"
|
||||
x="-12.36927"
|
||||
y="20.174479" />
|
||||
<g
|
||||
id="g3096"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
transform="translate(-43.691765,34.049609)">
|
||||
<rect
|
||||
style="opacity:1;fill:#4e9ac8;fill-opacity:1;stroke:none;stroke-width:12.09194851;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
id="rect3023"
|
||||
width="16.933332"
|
||||
height="16.933332"
|
||||
x="43.691765"
|
||||
y="-34.04929" />
|
||||
<path
|
||||
style="opacity:1;fill:#64b1df;fill-opacity:1;stroke:none;stroke-width:12.09194851;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
d="m 60.625099,-17.11628 0,-16.933329 -16.933333,0 0,0.006 16.92765,16.927649 z"
|
||||
id="path3025"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#2c377f;stroke-width:1.60085762;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 47.198745,-30.887909 c 0,0 -3.27652,10.208224 0.152002,9.725277 3.410478,-0.480401 4.160872,-11.690975 8.651528,-9.26606 2.221298,1.19948 -0.281976,8.77544 -0.281976,8.77544"
|
||||
id="path3027"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssc" />
|
||||
<circle
|
||||
r="2.0333519"
|
||||
cy="-30.52846"
|
||||
cx="46.924824"
|
||||
id="circle3045"
|
||||
style="opacity:1;fill:#fefefe;fill-opacity:1;stroke:#424e96;stroke-width:0.80506569;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke" />
|
||||
<path
|
||||
style="opacity:1;fill:#e8e7e7;fill-opacity:1;stroke:none;stroke-width:0.64737606;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
d="m 45.769334,-31.686878 a 1.6231118,1.6471276 0 0 0 -0.472882,1.159772 1.6231118,1.6471276 0 0 0 1.623544,1.646848 1.6231118,1.6471276 0 0 0 1.142863,-0.479161 z"
|
||||
id="path3047"
|
||||
inkscape:connector-curvature="0" />
|
||||
<circle
|
||||
style="opacity:1;fill:#fefefe;fill-opacity:1;stroke:#424e96;stroke-width:1.28624356;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
id="circle3049"
|
||||
cx="56.002975"
|
||||
cy="-21.696535"
|
||||
r="3.2486615" />
|
||||
<path
|
||||
style="opacity:1;fill:#e8e7e7;fill-opacity:1;stroke:none;stroke-width:1.03112972;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
|
||||
d="m 54.141521,-23.515865 a 2.6043208,2.6043208 0 0 0 -0.760798,1.837285 2.6043208,2.6043208 0 0 0 2.604334,2.604333 2.6043208,2.6043208 0 0 0 1.837287,-0.760795 z"
|
||||
id="path3051"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 776 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 19.1 16" style="enable-background:new 0 0 19.1 16;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#27AAE1;}
|
||||
.st1{fill:#2B3990;}
|
||||
.st2{fill:#FFFFFF;}
|
||||
.st3{opacity:0.1;}
|
||||
</style>
|
||||
<rect id="base" x="2.9" y="1" class="st0" width="14" height="14"/>
|
||||
<rect id="frame" x="3.9" y="3.7" class="st1" width="12" height="8.6"/>
|
||||
<g id="hole">
|
||||
<rect x="14.5" y="4.3" class="st2" width="1" height="0.9"/>
|
||||
<rect x="4.4" y="4.3" class="st2" width="1" height="0.9"/>
|
||||
<rect x="12" y="4.3" class="st2" width="1" height="0.9"/>
|
||||
<rect x="6.9" y="4.3" class="st2" width="1" height="0.9"/>
|
||||
<rect x="9.4" y="4.3" class="st2" width="1" height="0.9"/>
|
||||
</g>
|
||||
<g id="hole_1_">
|
||||
<rect x="14.5" y="10.7" class="st2" width="1" height="0.9"/>
|
||||
<rect x="4.4" y="10.7" class="st2" width="1" height="0.9"/>
|
||||
<rect x="12" y="10.7" class="st2" width="1" height="0.9"/>
|
||||
<rect x="6.9" y="10.7" class="st2" width="1" height="0.9"/>
|
||||
<rect x="9.4" y="10.7" class="st2" width="1" height="0.9"/>
|
||||
</g>
|
||||
<polygon id="triangle_1_" class="st2" points="8.6,9.6 12.1,7.9 8.6,6.3 "/>
|
||||
<g id="highlight">
|
||||
<g class="st3">
|
||||
<polygon points="16.9,15 2.9,1 2.9,15 "/>
|
||||
<polygon class="st2" points="16.9,1 2.9,1 16.9,15 "/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.app-sandbox</key> <false/>
|
||||
<key>com.apple.security.device.usb</key> <true/>
|
||||
</dict>
|
||||
</plist>
|
@@ -1,120 +0,0 @@
|
||||
#!/bin/sh
|
||||
#Simply copy the entire GDevelop release directory into the bundle...
|
||||
rm -rf GDevelop.app 2>&1 >/dev/null
|
||||
cp -r macos-bundle-skeleton GDevelop.app
|
||||
cp -r ../Output/Release_Darwin/ GDevelop.app/Contents/Resources/
|
||||
cp -R ../../ExtLibs/SFML/extlibs/libs-osx/Frameworks GDevelop.app/Contents/
|
||||
mkdir -p GDevelop.app/Contents/MacOS
|
||||
mv GDevelop.app/Contents/Resources/GDIDE_launcher GDevelop.app/Contents/MacOS/GDIDE_launcher
|
||||
|
||||
type dylibbundler >/dev/null 2>&1 || { echo >&2 "Can't find dylibbundler, required to change libraries install names. Aborting..."; exit 1; }
|
||||
|
||||
#...and modify the internal paths to wxWidgets libraries:
|
||||
#they are hardcoded in the executable (to /usr/local/lib or wherever they
|
||||
#are installed).
|
||||
#We use dylibbundler, that call install_name_tool to update the path to
|
||||
#the external libs we depend one (i.e: wxWidgets). It also copy these
|
||||
#libs into the 'libs' folder.
|
||||
cd GDevelop.app/Contents/Resources/
|
||||
echo . | dylibbundler -x GDIDE -b -cd -od -of -p '@executable_path/' > /dev/null
|
||||
mv libs/* .
|
||||
rm -rf libs
|
||||
|
||||
#Do the same for wxWidgets libs, to ensure that each wx library has
|
||||
#the other local libraries as dependencies instead of the ones in /usr/local/[...].
|
||||
for file in `ls libwx*`
|
||||
do
|
||||
echo . | dylibbundler -x $file -cd -od -of -p '@executable_path/'
|
||||
done
|
||||
|
||||
#Do the same for GDCore and GDCpp.
|
||||
#We don't need -b flag anymore as all external libs have already being copied.
|
||||
echo . | dylibbundler -x libGDCpp.dylib -cd -od -of -p '@executable_path/' > /dev/null
|
||||
echo . | dylibbundler -x libGDCore.dylib -cd -od -of -p '@executable_path/' > /dev/null
|
||||
|
||||
#Do the same for GDJS
|
||||
cat <<EOF | dylibbundler -x JsPlatform/libGDJS.dylib -cd -od -of -p '@executable_path/' > /dev/null
|
||||
JsPlatform
|
||||
.
|
||||
quit
|
||||
EOF
|
||||
|
||||
#Do the same for all extensions
|
||||
for file in `ls CppPlatform/Extensions/*.xgde`
|
||||
do
|
||||
echo "Updating libraries for $file..."
|
||||
cat <<EOF | dylibbundler -x $file -cd -od -of -p '@executable_path/' > /dev/null
|
||||
JsPlatform
|
||||
CppPlatform/Extensions/
|
||||
.
|
||||
JsPlatform
|
||||
CppPlatform/Extensions/
|
||||
.
|
||||
quit
|
||||
EOF
|
||||
done
|
||||
for file in `ls JsPlatform/Extensions/*.xgde`
|
||||
do
|
||||
echo "Updating libraries for $file..."
|
||||
cat <<EOF | dylibbundler -x $file -cd -od -of -p '@executable_path/' > /dev/null
|
||||
JsPlatform
|
||||
JsPlatform/Extensions/
|
||||
.
|
||||
JsPlatform
|
||||
JsPlatform/Extensions/
|
||||
.
|
||||
quit
|
||||
EOF
|
||||
done
|
||||
|
||||
|
||||
###Code signing and pkg building
|
||||
#See http://kuvacode.com/blog/building-for-the-mac-app-store for more information
|
||||
cd ../../..
|
||||
|
||||
#TODO:
|
||||
rm -rf GDevelop.app/Contents/Resources/CppPlatform/Extensions/include/CommonDialogs/dlib-18.16/
|
||||
rm -rf GDevelop.app/Contents/Resources/CppPlatform/Extensions/include/PhysicsBehavior/Box2D/Contributions
|
||||
rm -rf GDevelop.app/Contents/Resources/CppPlatform/Extensions/Runtime/.xgd
|
||||
rm -rf GDevelop.app/Contents/Resources/JsPlatform/Runtime/Extensions/CommonDialogs/dlib-18.16/
|
||||
rm -rf GDevelop.app/Contents/Resources/JsPlatform/Runtime/Extensions/PhysicsBehavior/Box2D/Contributions
|
||||
rm GDevelop.app/Contents/Resources/7zS.sfx
|
||||
|
||||
#Now sign the package:
|
||||
function sign {
|
||||
codesign -f -v --deep -s "Developer ID Application: Florian Rival" $1 --entitlements GDevelop.entitlements
|
||||
}
|
||||
|
||||
for file in `ls GDevelop.app/Contents/Resources/*.dylib`
|
||||
do
|
||||
sign $file
|
||||
done
|
||||
|
||||
for file in `ls GDevelop.app/Contents/Resources/CppPlatform/Extensions/*.{xgde,dylib}`
|
||||
do
|
||||
sign $file
|
||||
done
|
||||
|
||||
for file in `ls GDevelop.app/Contents/Resources/JsPlatform/Extensions/*.{xgde,dylib}`
|
||||
do
|
||||
sign $file
|
||||
done
|
||||
|
||||
for file in `ls GDevelop.app/Contents/Resources/CppPlatform/Extensions/Runtime/*.xgd`
|
||||
do
|
||||
sign $file
|
||||
done
|
||||
|
||||
sign "GDevelop.app/Contents/Resources/CppPlatform/Runtime/ExeLinux"
|
||||
sign "GDevelop.app/Contents/Resources/CppPlatform/Runtime/libGDCpp.dylib"
|
||||
|
||||
sign "GDevelop.app/Contents/Resources/JsPlatform/libGDJS.dylib"
|
||||
|
||||
sign "GDevelop.app/Contents/Resources/GDIDE"
|
||||
sign "GDevelop.app/Contents/MacOS/GDIDE_launcher"
|
||||
sign "GDevelop.app/Contents/Frameworks/sndfile.framework/Versions/Current"
|
||||
sign "GDevelop.app/Contents/Frameworks/freetype.framework/Versions/Current"
|
||||
sign "GDevelop.app"
|
||||
|
||||
#And create the pkg:
|
||||
productbuild --component "GDevelop.app" /Applications --sign "Developer ID Installer: Florian Rival" --product "GDevelop.app/Contents/Info.plist" GDevelop.pkg
|
@@ -1,91 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "This script will add the files needed by OBS in :\n'$PWD/opensuse-build-service/final'"
|
||||
echo "Before that, enter those information:"
|
||||
|
||||
#Auto-detect last GDevelop version and current branch
|
||||
(git tag -l *.*.* | sort -V -r) > versions
|
||||
read autoversion < versions
|
||||
(git rev-parse --abbrev-ref HEAD) > branch
|
||||
read autobranch < branch
|
||||
|
||||
printf " GDevelop version ([ENTER] to use auto-detected [$autoversion]): "
|
||||
read GD_VERSION
|
||||
printf "$GD_VERSION"
|
||||
if [ "$GD_VERSION" == "" ]; then
|
||||
GD_VERSION="$autoversion"
|
||||
fi
|
||||
|
||||
printf " Package revision (number): "
|
||||
read PACKAGE_REV
|
||||
|
||||
printf " Git branch to use ([ENTER] to use current [$autobranch]): "
|
||||
read BRANCH
|
||||
if [ "$BRANCH" == "" ]; then
|
||||
BRANCH="$autobranch"
|
||||
fi
|
||||
|
||||
DATE=$(LC_ALL=C date +'%a, %d %b %Y %T %z')
|
||||
GD_BASE_DIR=$(pwd)/../../
|
||||
CUR_DIR=$(pwd)
|
||||
|
||||
echo "Started the OBS packaging process, using latest '$BRANCH' git tree"
|
||||
|
||||
#Remove old folders
|
||||
printf " Preparing folders... "
|
||||
if [ -d "opensuse-build-service/gdevelop" ]; then
|
||||
rm -rf opensuse-build-service/gdevelop
|
||||
fi
|
||||
if [ -d "opensuse-build-service/final" ]; then
|
||||
rm -rf opensuse-build-service/final
|
||||
fi
|
||||
mkdir -p opensuse-build-service/gdevelop
|
||||
mkdir -p opensuse-build-service/final
|
||||
echo "[OK]"
|
||||
|
||||
#Create the tar.gz containing the source
|
||||
printf " Getting the sources... "
|
||||
cd $GD_BASE_DIR
|
||||
git archive --format tar.gz --output $CUR_DIR/opensuse-build-service/gdevelop/gdevelop_$GD_VERSION.orig.tar.gz --prefix=gdevelop-$GD_VERSION/ $BRANCH
|
||||
cd $CUR_DIR/opensuse-build-service/gdevelop
|
||||
tar zxf gdevelop_$GD_VERSION.orig.tar.gz
|
||||
echo "[OK]"
|
||||
|
||||
#We need to include ExtLibs/SFML.7z because the buildbot do not have access to internet
|
||||
printf " Copying SFML archive... "
|
||||
cp -rf $GD_BASE_DIR/ExtLibs/SFML gdevelop-$GD_VERSION/ExtLibs/
|
||||
echo "[OK]"
|
||||
|
||||
#Recreate the tar.gz with the added sources
|
||||
printf " Creating the source archive... "
|
||||
rm gdevelop_$GD_VERSION.orig.tar.gz
|
||||
tar -zcf ../final/gdevelop_$GD_VERSION.orig.tar.gz gdevelop-$GD_VERSION/
|
||||
echo "[OK]"
|
||||
|
||||
#Process SPEC and PKGBUILD files
|
||||
cd ..
|
||||
m4 -DMACRO_GD_VERSION=$GD_VERSION -DMACRO_PACKAGE_REV=$PACKAGE_REV gdevelop.spec >> final/gdevelop.spec
|
||||
m4 -DMACRO_GD_VERSION=$GD_VERSION -DMACRO_PACKAGE_REV=$PACKAGE_REV PKGBUILD >> final/PKGBUILD
|
||||
cp gdevelop-rpmlintrc final
|
||||
cp PKGBUILD.install final
|
||||
|
||||
#Create the changelog and open an editor to edit it
|
||||
echo -n "* " >> changelog.tmp
|
||||
echo -n `LC_TIME=en_US date +"%a %b %e %Y"` >> changelog.tmp
|
||||
echo -n " " >> changelog.tmp
|
||||
echo -n `git config --get user.name` >> changelog.tmp
|
||||
echo -n " <" >> changelog.tmp
|
||||
echo -n `git config --get user.email` >> changelog.tmp
|
||||
echo "> $GD_VERSION-$PACKAGE_REV" >> changelog.tmp
|
||||
echo -n "- " >> changelog.tmp
|
||||
|
||||
"${EDITOR:-nano}" changelog.tmp
|
||||
|
||||
#Add the changelog at the end of the spec and as a separate file for PKGBUILD
|
||||
mapfile < changelog.tmp
|
||||
echo "${MAPFILE[@]}" >> final/gdevelop.spec
|
||||
mv changelog.tmp final/PKGBUILD.changelog
|
||||
|
||||
#End
|
||||
|
||||
echo "Packaging process finished."
|
@@ -1,63 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
GPG_PUBLIC_KEY=0xA8025399
|
||||
GD_VERSION=3.6.78
|
||||
GD_VERSION_WITH_REV="$GD_VERSION"002
|
||||
DISTRO=utopic
|
||||
BRANCH=master
|
||||
DATE=$(LC_ALL=C date +'%a, %d %b %Y %T %z')
|
||||
GD_BASE_DIR=$(pwd)/../../
|
||||
CUR_DIR=$(pwd)
|
||||
UPLOAD="true"
|
||||
DEBUILD_ARGS=""
|
||||
|
||||
while test $# -gt 0
|
||||
do
|
||||
case "$1" in
|
||||
--no-upload) UPLOAD="false"
|
||||
;;
|
||||
--no-orig-tar-upload) DEBUILD_ARGS="-sd"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
echo "Started the debian source packaging process, using latest '$BRANCH' git tree"
|
||||
|
||||
#Create the changelog file
|
||||
echo "gdevelop ($GD_VERSION_WITH_REV-1~$DISTRO) $DISTRO; urgency=low" > debian-source-package/extra-files/debian/changelog
|
||||
echo "" >> debian-source-package/extra-files/debian/changelog
|
||||
echo " * Released $GD_VERSION" >> debian-source-package/extra-files/debian/changelog
|
||||
echo "" >> debian-source-package/extra-files/debian/changelog
|
||||
echo " -- Florian <Florian.Rival@gmail.com> $DATE" >> debian-source-package/extra-files/debian/changelog
|
||||
|
||||
if [ -d "debian-source-package/gdevelop" ]; then
|
||||
rm -rf debian-source-package/gdevelop
|
||||
fi
|
||||
mkdir -p debian-source-package/gdevelop
|
||||
|
||||
#Create the tar.gz containing the source
|
||||
cd $GD_BASE_DIR
|
||||
git archive --format tar.gz --output $CUR_DIR/debian-source-package/gdevelop/gdevelop_$GD_VERSION_WITH_REV.orig.tar.gz --prefix=gdevelop-$GD_VERSION_WITH_REV/ $BRANCH
|
||||
cd $CUR_DIR/debian-source-package/gdevelop
|
||||
tar zxvf gdevelop_$GD_VERSION_WITH_REV.orig.tar.gz
|
||||
|
||||
#We need to include ExtLibs/SFML.7z because buildbot do not have access to internet
|
||||
cp $GD_BASE_DIR/ExtLibs/SFML.7z gdevelop-$GD_VERSION_WITH_REV/ExtLibs/
|
||||
|
||||
#Recreate the tar.gz with the added sources
|
||||
rm gdevelop_$GD_VERSION_WITH_REV.orig.tar.gz
|
||||
tar -zcvf gdevelop_$GD_VERSION_WITH_REV.orig.tar.gz gdevelop-$GD_VERSION_WITH_REV
|
||||
|
||||
#Add the debian folder
|
||||
cp -r $CUR_DIR/debian-source-package/extra-files/debian gdevelop-$GD_VERSION_WITH_REV/
|
||||
|
||||
#Launch debuild
|
||||
cd gdevelop-$GD_VERSION_WITH_REV/
|
||||
debuild -S -sa -k$GPG_PUBLIC_KEY $DEBUILD_ARGS
|
||||
cd ..
|
||||
|
||||
#Send ppa
|
||||
if [ "$UPLOAD" = "true" ]; then
|
||||
dput ppa:florian-rival/gdevelop gdevelop_$GD_VERSION_WITH_REV-1~"$DISTRO"_source.changes
|
||||
fi;
|
@@ -1,53 +0,0 @@
|
||||
@echo off > %TEMP%\#
|
||||
md logs
|
||||
setLocal EnableDelayedExpansion
|
||||
|
||||
echo Script for packaging GDevelop for Windows
|
||||
echo.
|
||||
|
||||
::Try to find Inno Setup
|
||||
set INNOSETUP_EXE=C:\Program Files (x86)\Inno Setup 5\ISCC.exe
|
||||
IF NOT EXIST "%INNOSETUP_EXE%" set INNOSETUP_EXE=C:\Program Files\Inno Setup 5\ISCC.exe
|
||||
IF EXIST "%INNOSETUP_EXE%" (
|
||||
echo "Note: InnoSetup found at %INNOSETUP_EXE%"
|
||||
) ELSE (
|
||||
echo Warning: InnoSetup Unicode not found! Skipping installer creation.
|
||||
SET SKIPINSTALLER=1
|
||||
)
|
||||
|
||||
echo Please ensure that locale directory is up to date with latest translations.
|
||||
pause
|
||||
|
||||
echo Compiling Release target...
|
||||
cd ..
|
||||
IF EXIST "build" (
|
||||
cd build
|
||||
mingw32-make -j 4
|
||||
cd ..
|
||||
) ELSE (
|
||||
echo Unable to find build directory, just make sure that GD is compiled inside Release_Windows
|
||||
)
|
||||
|
||||
echo.
|
||||
echo --Removing useless files...
|
||||
del Output\Release_Windows\Examples\*.gdg.autosave > NUL 2> NUL
|
||||
del Output\Release_Windows\log.txt > NUL 2> NUL
|
||||
|
||||
echo.
|
||||
echo --Creating installer...
|
||||
IF NOT "%SKIPINSTALLER%"=="1" "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" Releases\InnoSetupInstallerScript.iss /Qp
|
||||
IF "%SKIPINSTALLER%"=="1" echo (Skipped)
|
||||
|
||||
echo.
|
||||
echo --Creating archive...
|
||||
if exist Releases\gd4xxxx.7z (del Releases\gd4xxxx.7z)
|
||||
cd Output\Release_Windows\
|
||||
IF NOT "%SKIPINSTALLERANDARCHIVE%"=="1" "..\..\..\ExtLibs\7za.exe" a ..\..\Releases\gd4xxxx.7z * -bb
|
||||
IF "%SKIPINSTALLERANDARCHIVE%"=="1" echo (Skipped)
|
||||
cd ..\..\..
|
||||
|
||||
echo. >CON
|
||||
echo Finished. Do not forget to : >CON
|
||||
echo -Update news.txt >CON
|
||||
echo -Update pad file >CON
|
||||
pause >CON
|
@@ -1,2 +0,0 @@
|
||||
This directory contains scripts used to package GDevelop.
|
||||
For Windows, packaging is made using Inno Setup, please ensure you have it installed.
|
@@ -1,5 +0,0 @@
|
||||
gdevelop (3.6.77001-1~utopic) utopic; urgency=low
|
||||
|
||||
* Released 3.6.77
|
||||
|
||||
-- Florian <Florian.Rival@gmail.com> Sat, 24 Jan 2015 17:46:44 +0100
|
@@ -1 +0,0 @@
|
||||
9
|
@@ -1,18 +0,0 @@
|
||||
Source: gdevelop
|
||||
Section: editors
|
||||
Priority: optional
|
||||
Maintainer: Florian <Florian.Rival@gmail.com>
|
||||
Build-Depends: debhelper (>= 8.0.0), cmake, rsync, curl, p7zip-full, libwxgtk3.0-dev, libwebkitgtk-3.0-dev, libwebkitgtk-dev, libopenal-dev, libjpeg-dev, libglew-dev, libudev-dev, libxrandr-dev, libsndfile1-dev, libglu1-mesa-dev, libfreetype6-dev
|
||||
Standards-Version: 3.9.4
|
||||
Homepage: http://www.compilgames.net
|
||||
#Vcs-Git: git://git.debian.org/collab-maint/gdevelop.git
|
||||
#Vcs-Browser: http://git.debian.org/?p=collab-maint/gdevelop.git;a=summary
|
||||
|
||||
Package: gdevelop
|
||||
Architecture: amd64
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, build-essential
|
||||
Description: GDevelop, open source HTML5 and native game creator software
|
||||
GDevelop is an open source game development software
|
||||
allowing to create HTML5 and native games
|
||||
without programming.
|
||||
|
@@ -1,38 +0,0 @@
|
||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: gdevelop
|
||||
Source: <url://example.com>
|
||||
|
||||
Files: *
|
||||
Copyright: <years> <put author's name and email here>
|
||||
<years> <likewise for another author>
|
||||
License: <special license>
|
||||
<Put the license of the package here indented by 1 space>
|
||||
<This follows the format of Description: lines in control file>
|
||||
.
|
||||
<Including paragraphs>
|
||||
|
||||
# If you want to use GPL v2 or later for the /debian/* files use
|
||||
# the following clauses, or change it to suit. Delete these two lines
|
||||
Files: debian/*
|
||||
Copyright: 2014 Florian <Florian.Rival@gmail.com>
|
||||
License: GPL-2+
|
||||
This package is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
.
|
||||
This package is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
|
||||
|
||||
# Please also look if there are files or directories which have a
|
||||
# different copyright/license attached and list them here.
|
||||
# Please avoid to pick license terms that are more restrictive than the
|
||||
# packaged work, as it may make Debian's contributions unacceptable upstream.
|
@@ -1,2 +0,0 @@
|
||||
license.txt
|
||||
Readme.md
|
@@ -1,14 +0,0 @@
|
||||
#!/usr/bin/make -f
|
||||
# -*- makefile -*-
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
%:
|
||||
dh $@
|
||||
|
||||
override_dh_auto_configure:
|
||||
dh_auto_configure -- -DCMAKE_INSTALL_PREFIX=/opt/gdevelop/useless -DCMAKE_BUILD_TYPE=Release -DNO_UPDATE_CHECKER=TRUE
|
||||
|
||||
override_dh_shlibdeps:
|
||||
dh_shlibdeps --dpkg-shlibdeps-params=-ldebian/gdevelop/opt/gdevelop/
|
@@ -1 +0,0 @@
|
||||
3.0 (quilt)
|
@@ -1,337 +0,0 @@
|
||||
; *** Inno Setup version 5.5.3+ Chinese (Simplified) messages ***
|
||||
; By Qiming Li (qiming at clault.com)
|
||||
;
|
||||
; To download user-contributed translations of this file, go to:
|
||||
; http://www.jrsoftware.org/files/istrans/
|
||||
;
|
||||
; Note: When translating this text, do not add periods (.) to the end of
|
||||
; messages that didn't have them already, because on those messages Inno
|
||||
; Setup adds the periods automatically (appending a period would result in
|
||||
; two periods being displayed).
|
||||
|
||||
[LangOptions]
|
||||
; The following three entries are very important. Be sure to read and
|
||||
; understand the '[LangOptions] section' topic in the help file.
|
||||
LanguageName=<4E2D><6587><FF08><7B80><4F53><FF09>
|
||||
LanguageID=$0804
|
||||
LanguageCodePage=936
|
||||
; If the language you are translating to requires special font faces or
|
||||
; sizes, uncomment any of the following entries and change them accordingly.
|
||||
DialogFontName=<3D><><EFBFBD><EFBFBD>
|
||||
;DialogFontSize=8
|
||||
;WelcomeFontName=Verdana
|
||||
;WelcomeFontSize=12
|
||||
;TitleFontName=Arial
|
||||
;TitleFontSize=29
|
||||
;CopyrightFontName=Arial
|
||||
;CopyrightFontSize=8
|
||||
|
||||
[Messages]
|
||||
|
||||
; *** Application titles
|
||||
SetupAppTitle=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>
|
||||
SetupWindowTitle=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD> - %1
|
||||
UninstallAppTitle=ж<><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
UninstallAppFullTitle=%1ж<31><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; *** Misc. common
|
||||
InformationTitle=<3D><>Ϣ
|
||||
ConfirmTitle=ȷ<><C8B7>
|
||||
ErrorTitle=<3D><><EFBFBD><EFBFBD>
|
||||
|
||||
; *** SetupLdr messages
|
||||
SetupLdrStartupMessage=<3D><>װ<EFBFBD><EFBFBD><F2B5BCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>ϰ<EFBFBD>װ%1<><31>ȷ<EFBFBD><C8B7>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
LdrCannotCreateTemp=<3D><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>ֹ
|
||||
LdrCannotExecTemp=<3D><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>ֹ
|
||||
|
||||
; *** Startup error messages
|
||||
LastErrorMessage=%1.%n%n<><6E><EFBFBD><EFBFBD> %2: %3
|
||||
SetupFileMissing=<3D><>װĿ¼<C4BF><C2BC>ȱʧ<C8B1>ļ<EFBFBD>%1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣬<EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD>ȡһ<C8A1>ݳ<EFBFBD><DDB3><EFBFBD><F2BFBDB1><EFBFBD>
|
||||
SetupFileCorrupt=<3D><>װ<EFBFBD>ļ<EFBFBD><C4BC>ѱ<EFBFBD><D1B1><EFBFBD><F0BBB5A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD>ȡһ<C8A1>ݳ<EFBFBD><DDB3><EFBFBD><F2BFBDB1><EFBFBD>
|
||||
SetupFileCorruptOrWrongVer=<3D><>װ<EFBFBD>ļ<EFBFBD><C4BC>ѱ<EFBFBD><D1B1><EFBFBD><F0BBB5A3><EFBFBD><EFBFBD>뱾<EFBFBD><EBB1BE>װ<EFBFBD>汾<F2B5BCB0><E6B1BE><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD><DDA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣬<EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD>ȡһ<C8A1>ݳ<EFBFBD><DDB3><EFBFBD><F2BFBDB1><EFBFBD>
|
||||
InvalidParameter=<3D><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>%n%n%1
|
||||
SetupAlreadyRunning=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>С<EFBFBD>
|
||||
WindowsVersionNotSupported=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>Windows<77>汾<EFBFBD><E6B1BE>
|
||||
WindowsServicePackRequired=<3D><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>%1 Service Pack %2<><32><EFBFBD><EFBFBD><EFBFBD>°汾<C2B0><E6B1BE>
|
||||
NotOnThisPlatform=<3D><><EFBFBD><EFBFBD><F2B2BBBF><EFBFBD>%1<><31><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
|
||||
OnlyOnThisPlatform=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%1<><31><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
|
||||
OnlyOnTheseArchitectures=<3D><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>Windows<77>汾<EFBFBD>ϰ<EFBFBD>װ<EFBFBD><D7B0>%n%n%1
|
||||
MissingWOW64APIs=<3D><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>Windows<77>汾û<E6B1BE>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>64λ<34><CEBB>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9>ܡ<EFBFBD><DCA1>밲װService Pack %1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⡣
|
||||
WinVersionTooLowError=<3D><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>%2<>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>%1<><31>
|
||||
WinVersionTooHighError=<3D><><EFBFBD>ɰ<F2B2BBBF>װ<EFBFBD><D7B0>%2<><32><EFBFBD><EFBFBD><EFBFBD>߰汾<DFB0><E6B1BE>%1<>ϡ<EFBFBD>
|
||||
AdminPrivilegesRequired=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼Ϊ<C2BC><CEAA><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ܰ<EFBFBD>װ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
|
||||
PowerUserPrivilegesRequired=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼Ϊ<C2BC><CEAA><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ܰ<EFBFBD>װ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
|
||||
SetupAppRunningError=<3D><>װ<EFBFBD><EFBFBD><F2B5BCBC>%1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>%n%n<><6E><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>װ<EFBFBD><D7B0>
|
||||
UninstallAppRunningError=ж<><D0B6><EFBFBD><EFBFBD><F2B5BCBC>%1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>%n%n<><6E><EFBFBD>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ڣ<EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
|
||||
|
||||
; *** Misc. errors
|
||||
ErrorCreatingDir=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>%1<><31>
|
||||
ErrorTooManyFilesInDir=<3D><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>%1<><31><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>࣬<EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
|
||||
; *** Setup common messages
|
||||
ExitSetupTitle=<3D>˳<EFBFBD><CBB3><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>
|
||||
ExitSetupMessage=<3D><>װ<EFBFBD><D7B0>δ<EFBFBD><CEB4><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2BDABB2>ᱻ<EFBFBD><E1B1BB>װ<EFBFBD><D7B0> %n%n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɳ<EFBFBD><C9B3><EFBFBD><EFBFBD>İ<EFBFBD>װ<EFBFBD><D7B0>%n%nȷ<6E><C8B7><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AboutSetupMenuItem=<3D><><EFBFBD>ڰ<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>(&A)<29><>
|
||||
AboutSetupTitle=<3D><><EFBFBD>ڰ<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>
|
||||
AboutSetupMessage=%1<>汾%2%n%3%n%n%1<><31>ҳ<EFBFBD><D2B3>%n%4
|
||||
AboutSetupNote=
|
||||
TranslatorNote=
|
||||
|
||||
; *** Buttons
|
||||
ButtonBack=< <20><>һ<EFBFBD><D2BB>(&B)
|
||||
ButtonNext=<3D><>һ<EFBFBD><D2BB>(&N) >
|
||||
ButtonInstall=<3D><>װ(&I)
|
||||
ButtonOK=ȷ<><C8B7>
|
||||
ButtonCancel=ȡ<><C8A1>
|
||||
ButtonYes=<3D><>(&Y)
|
||||
ButtonYesToAll=ȫѡ<C8AB><D1A1>(&A)
|
||||
ButtonNo=<3D><>(&N)
|
||||
ButtonNoToAll=ȫѡ<C8AB><D1A1>(&O)
|
||||
ButtonFinish=<3D><><EFBFBD><EFBFBD>(&F)
|
||||
ButtonBrowse=<3D><><EFBFBD><EFBFBD>(&B)<29><>
|
||||
ButtonWizardBrowse=<3D><><EFBFBD><EFBFBD>(&R)<29><>
|
||||
ButtonNewFolder=<3D><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>(&M)
|
||||
|
||||
; *** "Select Language" dialog messages
|
||||
SelectLanguageTitle=ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SelectLanguageLabel=ѡ<><D1A1><EFBFBD><EFBFBD>װʱʹ<CAB1><CAB9><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>
|
||||
|
||||
; *** Common wizard text
|
||||
ClickNext=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>װ<EFBFBD><EFBFBD>
|
||||
BeveledLabel=
|
||||
BrowseDialogTitle=<3D><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
BrowseDialogLabel=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ѡȡһ<C8A1><D2BB><EFBFBD>ļ<EFBFBD><C4BC>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
NewFolderName=<3D>½<EFBFBD><C2BD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
|
||||
; *** "Welcome" wizard page
|
||||
WelcomeLabel1=<3D><>ӭʹ<D3AD><CAB9>[name]<5D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>
|
||||
WelcomeLabel2=<3D><><EFBFBD><EFBFBD><F2B5BCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>ϰ<EFBFBD>װ[name/ver]%n%n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>֮ǰ<D6AE>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; *** "Password" wizard page
|
||||
WizardPassword=<3D><><EFBFBD><EFBFBD>
|
||||
PasswordLabel1=<3D><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD>
|
||||
PasswordLabel3=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>Сд<D0A1><D0B4>
|
||||
PasswordEditLabel=<3D><><EFBFBD><EFBFBD>(&P)<29><>
|
||||
IncorrectPassword=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>벻<EFBFBD><EBB2BB>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD>
|
||||
|
||||
; *** "License Agreement" wizard page
|
||||
WizardLicense=<3D><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
|
||||
LicenseLabel=<3D><><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ϣ<EFBFBD><CFA2>Ȼ<EFBFBD><C8BB><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
LicenseLabel3=<3D><><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD>顣<EFBFBD><E9A1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EEA3AC><C8BB><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
|
||||
LicenseAccepted=<3D>ҽ<EFBFBD><D2BD><EFBFBD>Э<EFBFBD><D0AD>(&A)
|
||||
LicenseNotAccepted=<3D>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>(&D)
|
||||
|
||||
; *** "Information" wizard pages
|
||||
WizardInfoBefore=<3D><>Ϣ
|
||||
InfoBeforeLabel=<3D><><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ϣ<EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
InfoBeforeClickLabel=<><D7BC><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><F3A3ACB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
WizardInfoAfter=<3D><>Ϣ
|
||||
InfoAfterLabel=<3D><><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ϣ<EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
InfoAfterClickLabel=<><D7BC><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><F3A3ACB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; *** "User Information" wizard page
|
||||
WizardUserInfo=<3D>û<EFBFBD><C3BB><EFBFBD>Ϣ
|
||||
UserInfoDesc=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
UserInfoName=<3D>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>(&U)<29><>
|
||||
UserInfoOrg=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&O)<29><>
|
||||
UserInfoSerial=<3D><><EFBFBD>к<EFBFBD><D0BA><EFBFBD>(&S)<29><>
|
||||
UserInfoNameRequired=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>
|
||||
|
||||
; *** "Select Destination Location" wizard page
|
||||
WizardSelectDir=ѡ<><D1A1><EFBFBD><EFBFBD>װλ<D7B0><CEBB>
|
||||
SelectDirDesc=<3D><>[name]<5D><>װ<EFBFBD><D7B0><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>
|
||||
SelectDirLabel3=<3D><>װ<EFBFBD><EFBFBD><F2B5BCBD><EFBFBD>[name]<5D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>С<EFBFBD>
|
||||
SelectDirBrowseLabel=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫѡ<D2AA><D1A1><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ļ<EFBFBD><C4BC>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DiskSpaceMBLabel=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[mb]<5D><><EFBFBD>ֽڣ<D6BD>MB<4D><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>̿ռ䡣
|
||||
CannotInstallToNetworkDrive=<3D><EFBFBD><DEB7><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CannotInstallToUNCPath=<3D><EFBFBD><DEB7><EFBFBD>װ<EFBFBD><D7B0>UNC·<43><C2B7><EFBFBD><EFBFBD>
|
||||
InvalidPath=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺%n%nC:\Ӧ<>ó<EFBFBD><C3B3><EFBFBD>%n%n<><6E><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD>ʽ<EFBFBD><CABD>UNC·<43><C2B7><EFBFBD><EFBFBD>%n%n\\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC>
|
||||
InvalidDrive=<3D><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UNC<4E><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻɷ<F2B2BBBF><C9B7>ʡ<EFBFBD><CAA1><EFBFBD><EFBFBD><EFBFBD>ѡһ<D1A1><D2BB><EFBFBD><EFBFBD>
|
||||
DiskSpaceWarningTitle=<3D><><EFBFBD>̿ռ䲻<D5BC><E4B2BB>
|
||||
DiskSpaceWarning=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%1ǧ<31>ֽڣ<D6BD>KB<4B><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿռ<C3BF><D5BC>ſɰ<C5BF>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%2ǧ<32>ֽڣ<D6BD>KB<4B><42><EFBFBD><EFBFBD><EFBFBD>ÿռ䡣%n%n<><6E>ȷ<EFBFBD><C8B7>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DirNameTooLong=<3D>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>·<EFBFBD><C2B7>̫<EFBFBD><CCAB><EFBFBD><EFBFBD>
|
||||
InvalidDirName=<3D>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
||||
BadDirName32=<3D>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2>ܰ<EFBFBD><DCB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>%n%n%1
|
||||
DirExistsTitle=<3D>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD>
|
||||
DirExists=<3D>ļ<EFBFBD><C4BC><EFBFBD>%n%n%1%n%n<>Ѵ<EFBFBD><D1B4>ڡ<EFBFBD><DAA1><EFBFBD>ȷ<EFBFBD><C8B7>Ҫ<EFBFBD><D2AA>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DirDoesntExistTitle=<3D>ļ<EFBFBD><C4BC>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
DirDoesntExist=<3D>ļ<EFBFBD><C4BC><EFBFBD>%n%n%1%n%n<><6E><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD><DAA1><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; *** "Select Components" wizard page
|
||||
WizardSelectComponents=ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SelectComponentsDesc=Ҫ<><D2AA>װ<EFBFBD><D7B0>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SelectComponentsLabel2=<3D><>ѡ<EFBFBD><D1A1>Ҫ<EFBFBD><D2AA>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BC><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
FullInstallation=ȫ<><C8AB><EFBFBD><EFBFBD>װ
|
||||
; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
|
||||
CompactInstallation=<3D><><EFBFBD>లװ
|
||||
CustomInstallation=<3D>Զ<EFBFBD><D4B6>尲װ
|
||||
NoUninstallWarningTitle=<3D><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD>
|
||||
NoUninstallWarning=<3D><>װ<EFBFBD><EFBFBD><F2B5BCBC><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n%n%1%n%nȡ<6E><C8A1>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n%n<><6E>ȷ<EFBFBD><C8B7>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>
|
||||
ComponentSize1=%1ǧ<31>ֽڣ<D6BD>KB<4B><42>
|
||||
ComponentSize2=%1<><31><EFBFBD>ֽڣ<D6BD>MB<4D><42>
|
||||
ComponentsDiskSpaceMBLabel=Ŀǰ<C4BF><C7B0>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[mb]<5D><><EFBFBD>ֽڣ<D6BD>MB<4D><42><EFBFBD><EFBFBD><EFBFBD>̿ռ䡣
|
||||
|
||||
; *** "Select Additional Tasks" wizard page
|
||||
WizardSelectTasks=ѡ<><EFBFBD><F1B8BDBC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SelectTasksDesc=Ҫִ<D2AA><D6B4><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SelectTasksLabel2=<3D><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>װ[name]ʱ<><CAB1>Ҫִ<D2AA>еĸ<D0B5><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; *** "Select Start Menu Folder" wizard page
|
||||
WizardSelectProgramGroup=ѡ<><D1A1><EFBFBD><EFBFBD>ʼ<EFBFBD>˵<EFBFBD><CBB5>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
SelectStartMenuFolderDesc=<3D>ѳ<EFBFBD><D1B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD>ʽ<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD>
|
||||
SelectStartMenuFolderLabel3=<3D><>װ<EFBFBD><EFBFBD><F2B5BCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼ<EFBFBD>˵<EFBFBD><CBB5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD>ʽ<EFBFBD><CABD>
|
||||
SelectStartMenuFolderBrowseLabel=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫѡ<D2AA><D1A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MustEnterGroupName=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GroupNameTooLong=<3D>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>·<EFBFBD><C2B7>̫<EFBFBD><CCAB><EFBFBD><EFBFBD>
|
||||
InvalidGroupName=<3D>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
||||
BadGroupName=<3D>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2>ܰ<EFBFBD><DCB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>%n%n%1
|
||||
NoProgramGroupCheck2=<3D><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>˵<EFBFBD><CBB5>ļ<EFBFBD><C4BC><EFBFBD>(&D)
|
||||
|
||||
; *** "Ready to Install" wizard page
|
||||
WizardReady=<3D><>װ<D7B0><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ReadyLabel1=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>ϰ<EFBFBD>װ[name]<5D><>
|
||||
ReadyLabel2a=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>Ҫȷ<D2AA>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ReadyLabel2b=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>װ<EFBFBD><D7B0>
|
||||
ReadyMemoUserInfo=<3D>û<EFBFBD><C3BB><EFBFBD>Ϣ<EFBFBD><CFA2>
|
||||
ReadyMemoDir=<3D><>װλ<D7B0>ã<EFBFBD>
|
||||
ReadyMemoType=<3D><>װ<EFBFBD><D7B0><EFBFBD>ͣ<EFBFBD>
|
||||
ReadyMemoComponents=<3D><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ReadyMemoGroup=<3D><>ʼ<EFBFBD>˵<EFBFBD><CBB5>ļ<EFBFBD><C4BC>У<EFBFBD>
|
||||
ReadyMemoTasks=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; *** "Preparing to Install" wizard page
|
||||
WizardPreparing=<><D7BC><EFBFBD><EFBFBD>װ
|
||||
PreparingDesc=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>ϰ<EFBFBD>װ[name]<5D><>
|
||||
PreviousInstallNotCompleted=<3D>ϴγ<CFB4><CEB3><EFBFBD><EFBFBD><EFBFBD>װ/ж<><D0B6>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴΰ<CFB4>װ<EFBFBD><D7B0>%n%n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ[name]<5D><>
|
||||
CannotContinue=<3D><>װ<EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
|
||||
ApplicationsFound=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD>ռ<EFBFBD>á<EFBFBD><C3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ر<EFBFBD><D8B1><EFBFBD>ЩӦ<D0A9>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
ApplicationsFound2=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD>ռ<EFBFBD>á<EFBFBD><C3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ر<EFBFBD><D8B1><EFBFBD>ЩӦ<D0A9>ó<EFBFBD><C3B3><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>ɺ<C9BA>װ<EFBFBD><EFBFBD><F2B5BCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ЩӦ<D0A9>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
CloseApplications=<3D>Զ<EFBFBD><D4B6>ر<EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD>(&A)
|
||||
DontCloseApplications=<3D><><EFBFBD>Զ<EFBFBD><D4B6>ر<EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD>(&D)
|
||||
ErrorCloseApplications=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7>Զ<EFBFBD><D4B6>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>е<EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>Щռ<D0A9>ð<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; *** "Installing" wizard page
|
||||
WizardInstalling=<3D><><EFBFBD>ڰ<EFBFBD>װ
|
||||
InstallingLabel=<3D><><EFBFBD>Ժ<D4BA>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>ϰ<EFBFBD>װ[name]<5D><>
|
||||
|
||||
; *** "Setup Completed" wizard page
|
||||
FinishedHeadingLabel=[name]<5D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>
|
||||
FinishedLabelNoIcons=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>ϰ<EFBFBD>װ[name]<5D><>
|
||||
FinishedLabel=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>ϰ<EFBFBD>װ[name]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>Ѱ<EFBFBD>װ<EFBFBD>Ŀ<EFBFBD><C4BF>ݷ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
ClickFinish=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>װ<EFBFBD><D7B0>
|
||||
FinishedRestartLabel=Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[name]<5D>İ<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><F2B5BCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ԡ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
FinishedRestartMessage=Ϊ<><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[name]<5D>İ<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><F2B5BCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ԡ<EFBFBD>%n%nҪ<6E><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ShowReadmeCheck=<3D>ǣ<EFBFBD><C7A3><EFBFBD>Ҫ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
YesRadio=<3D>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&Y)
|
||||
NoRadio=<3D><><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&N)
|
||||
; used for example as 'Run MyProg.exe'
|
||||
RunEntryExec=<3D><><EFBFBD><EFBFBD>%1
|
||||
; used for example as 'View Readme.txt'
|
||||
RunEntryShellExec=<3D><><EFBFBD><EFBFBD>%1
|
||||
|
||||
; *** "Setup Needs the Next Disk" stuff
|
||||
ChangeDiskTitle=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>һ<EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD>
|
||||
SelectDiskLabel2=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n%n<><6E><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PathLabel=·<><C2B7>(&P)<29><>
|
||||
FileNotInDir2=<3D>ļ<EFBFBD><C4BC><EFBFBD>%1<><31><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD>%2<><32><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>Ĵ<EFBFBD><C4B4>̻<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
SelectDirectoryLabel=<3D><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>һ<EFBFBD>Ŵ<EFBFBD><C5B4>̵<EFBFBD>λ<EFBFBD>á<EFBFBD>
|
||||
|
||||
; *** Installation phase messages
|
||||
SetupAborted=<3D><>װδ<D7B0><CEB4><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>%n%n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>װ<EFBFBD><EFBFBD>
|
||||
EntryAbortRetryIgnore=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD>³<EFBFBD><C2B3>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
|
||||
|
||||
; *** Installation status messages
|
||||
StatusClosingApplications=<3D><><EFBFBD>ڹر<DAB9>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
StatusCreateDirs=<3D><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
StatusExtractFiles=<3D><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
StatusCreateIcons=<3D><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD>ʽ<EFBFBD><CABD>
|
||||
StatusCreateIniEntries=<3D><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>INI<4E><49>Ŀ<EFBFBD><C4BF>
|
||||
StatusCreateRegistryEntries=<3D><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>
|
||||
StatusRegisterFiles=<3D><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>
|
||||
StatusSavingUninstall=<3D><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
||||
StatusRunProgram=<3D><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
|
||||
StatusRestartingApplications=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
StatusRollback=<3D><><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
|
||||
|
||||
; *** Misc. errors
|
||||
ErrorInternal2=<3D>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%1
|
||||
ErrorFunctionFailedNoCode=%1ʧ<31><CAA7>
|
||||
ErrorFunctionFailed=%1ʧ<31>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%2
|
||||
ErrorFunctionFailedWithMessage=%1ʧ<31>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%2<><32>%n%3
|
||||
ErrorExecutingProgram=<3D><EFBFBD><DEB7><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>%n%1
|
||||
|
||||
; *** Registry errors
|
||||
ErrorRegOpenKey=<3D><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n%1\%2
|
||||
ErrorRegCreateKey=<3D><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n%1\%2
|
||||
ErrorRegWriteKey=д<><D0B4>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%n%1\%2
|
||||
|
||||
; *** INI errors
|
||||
ErrorIniEntry=<3D><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>%1<><31><EFBFBD>д<EFBFBD><D0B4><EFBFBD>INI<4E><49>Ŀʱ<C4BF><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; *** File copying errors
|
||||
FileAbortRetryIgnore=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD>³<EFBFBD><C2B3>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
|
||||
FileAbortRetryIgnore2=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD>³<EFBFBD><C2B3>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
|
||||
SourceIsCorrupted=Դ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SourceDoesntExist=Դ<>ļ<EFBFBD><C4BC><EFBFBD>%1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ExistingFileReadOnly=<3D><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊֻ<CEAA><D6BB><EFBFBD><EFBFBD>%n%n<><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1>Ƴ<EFBFBD><C6B3><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD>³<EFBFBD><C2B3>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>
|
||||
ErrorReadingExistingDest=<3D><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
FileExists=<3D>ļ<EFBFBD><C4BC>Ѵ<EFBFBD><D1B4>ڡ<EFBFBD>%n%n<>ð<EFBFBD>װ<EFBFBD><EFBFBD><F2B5BCB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ExistingFileNewer=<3D><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ȱ<EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>װ<EFBFBD>Ļ<EFBFBD>Ҫ<EFBFBD>¡<EFBFBD><C2A1><EFBFBD><EFBFBD>鱣<EFBFBD><E9B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>%n%n<><6E>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
ErrorChangingAttr=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ErrorCreatingTemp=<3D><>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ErrorReadingSource=<3D><>ȡԴ<C8A1>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ErrorCopying=<3D><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ErrorReplacingExistingFile=<3D>滻<EFBFBD><E6BBBB><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ErrorRestartReplace=<3D><><EFBFBD><EFBFBD><EFBFBD>滻ʧ<E6BBBB>ܣ<EFBFBD>
|
||||
ErrorRenamingTemp=ΪĿ<CEAA><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ErrorRegisterServer=<3D><EFBFBD>ע<EFBFBD>ᶯ̬<E1B6AF><CCAC><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>DLL/OCX<43><58><EFBFBD><EFBFBD>%1
|
||||
ErrorRegSvr32Failed=<3D><><EFBFBD><EFBFBD>RegSvr32ʧ<32>ܣ<EFBFBD><DCA3>䷵<EFBFBD><E4B7B5>ֵΪ<D6B5><CEAA>%1
|
||||
ErrorRegisterTypeLib=<3D><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>Ϳ⣺%1
|
||||
|
||||
; *** Post-installation errors
|
||||
ErrorOpeningReadme=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ErrorRestartingComputer=<3D><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; *** Uninstaller messages
|
||||
UninstallNotFound=<3D>ļ<EFBFBD><C4BC><EFBFBD>%1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD><DAA1><EFBFBD>ж<EFBFBD>ء<EFBFBD>
|
||||
UninstallOpenError=<3D><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>%1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>
|
||||
UninstallUnsupportedVer=<3D>˰汾<CBB0><E6B1BE>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>%1<><31><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>
|
||||
UninstallUnknownEntry=<3D><>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ֪<CEB4><D6AA>Ŀ (%1)
|
||||
ConfirmUninstall=<3D><><EFBFBD>Ƿ<EFBFBD>ȷ<EFBFBD><C8B7>Ҫ<EFBFBD><D2AA>ȫɾ<C8AB><C9BE>%1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
UninstallOnlyOnWin64=<3D>˰<EFBFBD>װֻ<D7B0><D6BB><EFBFBD><EFBFBD>64λWindows<77><73>ж<EFBFBD>ء<EFBFBD>
|
||||
OnlyAdminCanUninstall=<3D>˰<EFBFBD>װֻ<D7B0><D6BB><EFBFBD>ɾ߱<C9BE><DFB1><EFBFBD><EFBFBD><EFBFBD>ԱȨ<D4B1><EFBFBD><DEB5>û<EFBFBD>ж<EFBFBD>ء<EFBFBD>
|
||||
UninstallStatusLabel=<3D><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>%1<><31>
|
||||
UninstalledAll=<3D>ѳɹ<D1B3><C9B9>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>%1<><31>
|
||||
UninstalledMost=%1ж<31><D0B6><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD>%n%nijЩ<C4B3><D0A9>Ŀ<EFBFBD><EFBFBD><DEB7><EFBFBD>ж<EFBFBD>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9>Ŀ<EFBFBD><C4BF>
|
||||
UninstalledAndNeedsRestart=<3D><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>%1<><31>ж<EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD>%n%nҪ<6E><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
UninstallDataCorrupted=<3D>ļ<EFBFBD><C4BC><EFBFBD>%1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F0BBB5A1><EFBFBD>ж<EFBFBD><D0B6>
|
||||
|
||||
; *** Uninstallation phase messages
|
||||
ConfirmDeleteSharedFileTitle=ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
ConfirmDeleteSharedFile2=ϵͳ<CFB5><CDB3>ʾû<CABE><C3BB><EFBFBD>κγ<CEBA><CEB3><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>¹<EFBFBD><C2B9><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ҫɾ<D2AA><C9BE><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>%n%n<><6E><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>ʹ<EFBFBD>ø<EFBFBD><C3B8>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><F1A1B0B7><F1A1B1A1><EFBFBD><EFBFBD>¸<EFBFBD><C2B8>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD>
|
||||
SharedFileNameLabel=<3D>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SharedFileLocationLabel=λ<>ã<EFBFBD>
|
||||
WizardUninstalling=ж<><D0B6>״̬
|
||||
StatusUninstalling=<3D><><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>%1<><31>
|
||||
|
||||
; *** Shutdown block reasons
|
||||
ShutdownBlockReasonInstallingApp=<3D><><EFBFBD>ڰ<EFBFBD>װ%1<><31>
|
||||
ShutdownBlockReasonUninstallingApp=<3D><><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>%1<><31>
|
||||
|
||||
; The custom messages below aren't used by Setup itself, but if you make
|
||||
; use of them in your scripts, you'll want to translate them.
|
||||
|
||||
[CustomMessages]
|
||||
|
||||
NameAndVersion=%1<>汾%2
|
||||
AdditionalIcons=<3D><><EFBFBD>ӿ<EFBFBD><D3BF>ݷ<EFBFBD>ʽ<EFBFBD><CABD>
|
||||
CreateDesktopIcon=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD>ʽ(&D)
|
||||
CreateQuickLaunchIcon=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD>ʽ(&Q)
|
||||
ProgramOnTheWeb=%1<><31>վ
|
||||
UninstallProgram=ж<><D0B6>%1
|
||||
LaunchProgram=<3D><><EFBFBD><EFBFBD>%1
|
||||
AssocFileExtension=<3D><>%1<><31>%2<>ļ<EFBFBD><C4BC><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(&A)
|
||||
AssocingFileExtension=<3D><><EFBFBD>ڽ<EFBFBD>%1<><31>%2<>ļ<EFBFBD><C4BC><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AutoStartProgramGroupDescription=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AutoStartProgram=<3D>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>%1
|
||||
AddonHostProgramNotFound=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>%1<><31>%n%n<>Ƿ<EFBFBD><C7B7><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
cd /opt/gdevelop
|
||||
if [ -z ${1+x} ];
|
||||
then
|
||||
sh StartGDevelop.sh
|
||||
else
|
||||
sh StartGDevelop.sh "$1"
|
||||
fi
|
@@ -1,13 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=GDevelop
|
||||
GenericName=Game creator IDE
|
||||
GenericName[de]=Entwicklungsumgebung für Spiele
|
||||
Comment=HTML5 and native game development software
|
||||
Comment[de]=Entwicklungsumgebung für native und HTML5-Spiele
|
||||
Exec=sh -c "gdevelop %F"
|
||||
MimeType=application/x-gdevelop-project;
|
||||
Icon=GDevelop
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Development;IDE;
|
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 592 B |
Before Width: | Height: | Size: 757 B |
Before Width: | Height: | Size: 853 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.7 KiB |
@@ -1,331 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="256"
|
||||
height="256"
|
||||
id="svg3126"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="GDevelop-lowres.svg"
|
||||
inkscape:export-filename="/home/victor/Developpement/GD/Binaries/Packaging/linux-extra-files/usr/share/icons/hicolor/16x16/apps/GDevelop.png"
|
||||
inkscape:export-xdpi="5.625"
|
||||
inkscape:export-ydpi="5.625">
|
||||
<defs
|
||||
id="defs3128">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3870"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3864">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3866" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3868" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3087"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3089">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3091" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3093" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3095"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3097">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3099" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3101" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3103"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3105">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3107" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3109" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient3870-1"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3864-1">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3866-1" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3868-1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4060"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient4062">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4064" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4066" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4068"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient4070">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4072" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4074" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4076"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient4078">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4080" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4082" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4091"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4093"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4095"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4097"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4167"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4169"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4171"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4173"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.80957032"
|
||||
inkscape:cx="130.9262"
|
||||
inkscape:cy="39.814734"
|
||||
inkscape:current-layer="g4158"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata3131">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,192)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#604878;fill-opacity:1"
|
||||
d="m 0,-192 255.99999,0 0,256 L 0,64 z"
|
||||
id="rect3961-3" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Logo"
|
||||
transform="translate(0,192)">
|
||||
<g
|
||||
id="g4158"
|
||||
transform="matrix(1.3156402,0,0,1.3156402,87.33682,-103.64087)">
|
||||
<g
|
||||
inkscape:export-ydpi="50.027794"
|
||||
inkscape:export-xdpi="50.027794"
|
||||
inkscape:export-filename="D:\Florian\Pictures\GDevelop\Logos GDevelop\gdevelop-258x73.png"
|
||||
style="fill:url(#linearGradient4173);fill-opacity:1"
|
||||
id="g3851"
|
||||
transform="translate(-135.23664,-243.63945)">
|
||||
<g
|
||||
style="fill:url(#linearGradient4169);fill-opacity:1"
|
||||
id="g21">
|
||||
<path
|
||||
style="fill:url(#linearGradient4167);fill-opacity:1"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path23"
|
||||
d="m 172.503,303.436 c -12.338,0 -24.216,-3.336 -34.709,-10.6 -7.314,-5.061 -15.779,-16.489 -15.779,-35.863 0,-35.943 18.36,-49.061 55.256,-49.061 h 66.426 l 6.396,20.472 h -67.76 c -24.352,0 -38.832,1.899 -38.832,28.589 0,8.816 2.486,15.09 7.603,19.178 8.648,6.91 25.457,7.204 35.728,6.214 0,0 4.214,-13.551 4.908,-15.751 0.813,-2.578 0.457,-3.193 -2.079,-3.193 -3.663,0 -10.248,0 -17.237,0 -4.898,0 -9.71,-2.465 -9.71,-8.386 0,-5.718 4.477,-9.037 10.614,-9.037 10.626,0 32.511,0 36.607,0 5.37,0 10.85,0.77 8.054,9.271 l -14.807,44.906 c 0.001,10e-4 -12.096,3.261 -30.679,3.261 z" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:url(#linearGradient4171);fill-opacity:1"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path25"
|
||||
d="m 213.973,311.059 c -7.463,5.225 -18.517,8.113 -37.274,8.113 -32.329,0 -55.99,-11.617 -65.637,-34.138 -4.561,-10.645 -4.122,-22.71 -4.122,-39.027 H 85.455 c 0,17.206 -0.296,30.697 4.307,43.123 12.07,32.596 43.152,50.109 84.906,50.109 40.416,0 57.164,-11.525 68.082,-28.18 h -28.777 z" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 10 KiB |
@@ -1,351 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="256"
|
||||
height="256"
|
||||
id="svg3126"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="GDevelop.svg">
|
||||
<defs
|
||||
id="defs3128">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3870"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3864">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3866" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3868" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3087"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3089">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3091" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3093" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3095"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3097">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3099" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3101" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3103"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3105">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3107" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3109" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient3870-1"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3864-1">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3866-1" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3868-1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4060"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient4062">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4064" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4066" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4068"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient4070">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4072" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4074" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4076"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient4078">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4080" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4082" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4091"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4093"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4095"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4097"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4167"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4169"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4171"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864-1"
|
||||
id="linearGradient4173"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.80957032"
|
||||
inkscape:cx="128.45575"
|
||||
inkscape:cy="39.814734"
|
||||
inkscape:current-layer="svg3126"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata3131">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,192)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#604878;fill-opacity:1"
|
||||
d="m 0,-192 255.99999,0 0,256 L 0,64 z"
|
||||
id="rect3961-3" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:0.19607843"
|
||||
d="m 0,-192 0,80 c 17.537195,21.503835 37.384534,34.092368 54.25,40.124998 43.812716,15.68182 88.79436,16.268904 132.25,4.625008 28.64714,-7.675986 51.92073,-16.376103 69.5,-23.750004 L 256,-192 l -37.375,0 c -0.67043,17.02568 -1.5,37 -1.5,37 -35.24116,13.18006 -94.76964,27.92621 -131.75,11.75 -19.00714,-8.31253 -32.56004,-24.33749 -41.25,-48.75 L 0,-192 z M 0,-31.875002 0,53.124999 C 11.193881,57.460225 22.802204,61.088396 34.75,64 L 197,64 c 10.2141,-2.073897 20.56277,-4.453347 31,-7.25 9.7754,-2.61931 19.09175,-5.335394 28,-8.124998 l 0,-76.875004 c -11.95072,4.268195 -25.10846,8.418321 -39.875,12.375 C 130.08388,7.1796466 55.276708,2.2185193 0,-31.875002 z"
|
||||
id="rect3961"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Logo"
|
||||
transform="translate(0,192)">
|
||||
<g
|
||||
id="g4158"
|
||||
transform="matrix(1.3156402,0,0,1.3156402,87.33682,-103.64087)">
|
||||
<g
|
||||
inkscape:export-ydpi="50.027794"
|
||||
inkscape:export-xdpi="50.027794"
|
||||
inkscape:export-filename="D:\Florian\Pictures\GDevelop\Logos GDevelop\gdevelop-258x73.png"
|
||||
style="fill:url(#linearGradient4173);fill-opacity:1"
|
||||
id="g3851"
|
||||
transform="translate(-135.23664,-243.63945)">
|
||||
<g
|
||||
style="fill:url(#linearGradient4169);fill-opacity:1"
|
||||
id="g21">
|
||||
<path
|
||||
style="fill:url(#linearGradient4167);fill-opacity:1"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path23"
|
||||
d="m 172.503,303.436 c -12.338,0 -24.216,-3.336 -34.709,-10.6 -7.314,-5.061 -15.779,-16.489 -15.779,-35.863 0,-35.943 18.36,-49.061 55.256,-49.061 h 66.426 l 6.396,20.472 h -67.76 c -24.352,0 -38.832,1.899 -38.832,28.589 0,8.816 2.486,15.09 7.603,19.178 8.648,6.91 25.457,7.204 35.728,6.214 0,0 4.214,-13.551 4.908,-15.751 0.813,-2.578 0.457,-3.193 -2.079,-3.193 -3.663,0 -10.248,0 -17.237,0 -4.898,0 -9.71,-2.465 -9.71,-8.386 0,-5.718 4.477,-9.037 10.614,-9.037 10.626,0 32.511,0 36.607,0 5.37,0 10.85,0.77 8.054,9.271 l -14.807,44.906 c 0.001,10e-4 -12.096,3.261 -30.679,3.261 z" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:url(#linearGradient4171);fill-opacity:1"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path25"
|
||||
d="m 213.973,311.059 c -7.463,5.225 -18.517,8.113 -37.274,8.113 -32.329,0 -55.99,-11.617 -65.637,-34.138 -4.561,-10.645 -4.122,-22.71 -4.122,-39.027 H 85.455 c 0,17.206 -0.296,30.697 4.307,43.123 12.07,32.596 43.152,50.109 84.906,50.109 40.416,0 57.164,-11.525 68.082,-28.18 h -28.777 z" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:export-ydpi="50.027794"
|
||||
inkscape:export-xdpi="50.027794"
|
||||
inkscape:export-filename="D:\Florian\Pictures\GDevelop\Logos GDevelop\gdevelop-258x73.png"
|
||||
style="fill:#377fc9;fill-opacity:1"
|
||||
id="g3847"
|
||||
transform="translate(-135.23664,-243.63945)">
|
||||
<path
|
||||
style="fill:#377fc9;fill-opacity:1"
|
||||
d="m 191.619,267 c -0.958,3.051 -4.787,15.365 -4.787,15.365 -10.271,0.99 -27.08,0.696 -35.728,-6.214 -2.906,-2.323 -4.962,-5.353 -6.197,-9.151 h -22.069 c 2.297,13.391 9.007,21.72 14.956,25.836 10.493,7.264 22.371,10.6 34.709,10.6 18.583,0 30.68,-3.26 30.68,-3.26 L 214.122,267 h -22.503 z"
|
||||
id="path45"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#377fc9;fill-opacity:1"
|
||||
d="m 89.762,289.129 c 12.07,32.596 43.152,50.109 84.906,50.109 40.416,0 57.164,-11.525 68.082,-28.18 h -28.776 c -7.463,5.225 -18.517,8.113 -37.274,8.113 -32.329,0 -55.99,-11.617 -65.637,-34.139 -2.356,-5.5 -3.373,-11.385 -3.81,-18.033 H 85.74 c 0.425,8.007 1.468,15.233 4.022,22.13 z"
|
||||
id="path47"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 12 KiB |
@@ -1,517 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg4486"
|
||||
height="256"
|
||||
width="256"
|
||||
version="1.0"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="applications-x-gdevelop-project-lowres.svg"
|
||||
inkscape:export-filename="/home/victor/Developpement/GD/Binaries/Packaging/linux-extra-files/usr/share/icons/hicolor/32x32/mimetypes/applications-x-gdevelop-project.png"
|
||||
inkscape:export-xdpi="11.25"
|
||||
inkscape:export-ydpi="11.25">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
id="namedview44"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.4583333"
|
||||
inkscape:cx="66.320162"
|
||||
inkscape:cy="140.39148"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4486" />
|
||||
<metadata
|
||||
id="metadata51">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs4488">
|
||||
<linearGradient
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
id="stop5062"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop5064"
|
||||
style="stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3312"
|
||||
y2="5.4565001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="36.358002"
|
||||
gradientTransform="matrix(5.2173457,0,0,5.4422088,3.3921377,7.6656911)"
|
||||
y1="7.9842548"
|
||||
x1="33.047932">
|
||||
<stop
|
||||
id="stop8591"
|
||||
style="stop-color:#fefefe"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop8593"
|
||||
style="stop-color:#cbcbcb"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3316"
|
||||
y2="46.016998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="24"
|
||||
gradientTransform="matrix(5.3241595,0,0,5.2058567,0.26069817,6.1689759)"
|
||||
y1="2"
|
||||
x1="24">
|
||||
<stop
|
||||
id="stop3213"
|
||||
style="stop-color:#fff"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3215"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="radialGradient3319"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="112.3"
|
||||
cx="102"
|
||||
gradientTransform="matrix(0.3617,0,0,-0.39078,0.85106,47.517)"
|
||||
r="139.56">
|
||||
<stop
|
||||
id="stop41"
|
||||
style="stop-color:#b7b8b9"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop47"
|
||||
style="stop-color:#ececec"
|
||||
offset=".18851" />
|
||||
<stop
|
||||
id="stop49"
|
||||
style="stop-color:#fafafa;stop-opacity:0"
|
||||
offset=".25718" />
|
||||
<stop
|
||||
id="stop51"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
offset=".30111" />
|
||||
<stop
|
||||
id="stop53"
|
||||
style="stop-color:#fafafa;stop-opacity:0"
|
||||
offset=".53130" />
|
||||
<stop
|
||||
id="stop55"
|
||||
style="stop-color:#ebecec;stop-opacity:0"
|
||||
offset="0.85454136" />
|
||||
<stop
|
||||
id="stop57"
|
||||
style="stop-color:#e1e2e3;stop-opacity:0"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3322"
|
||||
y2="47.013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="25.132"
|
||||
gradientTransform="matrix(5.2293733,0,0,5.0001698,2.5355656,3.4346286)"
|
||||
y1="0.98521"
|
||||
x1="25.132">
|
||||
<stop
|
||||
id="stop3602"
|
||||
style="stop-color:#f4f4f4"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3604"
|
||||
style="stop-color:#dbdbdb"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3324"
|
||||
y2="2.9061999"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="-51.785999"
|
||||
gradientTransform="matrix(4.222719,0,0,4.6794001,313.21263,-2.1383145)"
|
||||
y1="50.785999"
|
||||
x1="-51.785999">
|
||||
<stop
|
||||
id="stop3106"
|
||||
style="stop-color:#aaa"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3108"
|
||||
style="stop-color:#c8c8c8"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="radialGradient3327"
|
||||
xlink:href="#linearGradient5060"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="486.64999"
|
||||
cx="605.71002"
|
||||
gradientTransform="matrix(0.12048476,0,0,0.07687178,140.38708,207.14432)"
|
||||
r="117.14" />
|
||||
<radialGradient
|
||||
id="radialGradient3330"
|
||||
xlink:href="#linearGradient5060"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="486.64999"
|
||||
cx="605.71002"
|
||||
gradientTransform="matrix(-0.12048476,0,0,0.07687178,115.6103,207.14432)"
|
||||
r="117.14" />
|
||||
<linearGradient
|
||||
id="linearGradient3333"
|
||||
y2="609.51001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="302.85999"
|
||||
gradientTransform="matrix(0.35206756,0,0,0.07687178,0.7516188,207.14432)"
|
||||
y1="366.64999"
|
||||
x1="302.85999">
|
||||
<stop
|
||||
id="stop5050"
|
||||
style="stop-opacity:0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset=".5" />
|
||||
<stop
|
||||
id="stop5052"
|
||||
style="stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
id="filter3212"
|
||||
height="1.3286999"
|
||||
width="1.2969"
|
||||
y="-0.16434"
|
||||
x="-0.14846"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3214"
|
||||
stdDeviation="0.77391625" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3870"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3864">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3866" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3868" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3087"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3089">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3091" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3093" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3095"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3097">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3099" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3101" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3103"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3105">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3107" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3109" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3118"
|
||||
xlink:href="#linearGradient3864"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3120"
|
||||
xlink:href="#linearGradient3864"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3122"
|
||||
xlink:href="#linearGradient3864"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3124"
|
||||
xlink:href="#linearGradient3864"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3959"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3961"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3963"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3965"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3978"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3980"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3982"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3984"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3987"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientTransform="matrix(1.3351686,0,0,1.3351686,-101.71983,-230.26927)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3991"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3993"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3996"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientTransform="matrix(0.25532097,0,0,0.25532097,-19.9365,-46.605512)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient4008"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3351686,0,0,1.3351686,-101.71983,-230.26927)"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3850"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3241338,0,0,1.3351686,-99.218449,-230.26927)"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
</defs>
|
||||
<rect
|
||||
id="rect2879"
|
||||
style="opacity:0.3;fill:url(#linearGradient3333)"
|
||||
height="18.669386"
|
||||
width="169.99648"
|
||||
y="235.33061"
|
||||
x="42.999413" />
|
||||
<path
|
||||
id="path2881"
|
||||
style="opacity:0.3;fill:url(#radialGradient3330)"
|
||||
d="m 42.999412,235.33064 v 18.66887 C 36.79476,254.03611 28,249.81601 28,244.66508 c 0,-5.15617 6.92369,-9.33444 14.999412,-9.33444 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path2883"
|
||||
style="opacity:0.3;fill:url(#radialGradient3327)"
|
||||
d="m 212.99692,235.33064 v 18.66887 c 6.20727,0.0366 15.00308,-4.1835 15.00308,-9.33443 0,-5.15617 -6.92892,-9.33444 -15.00308,-9.33444 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4160"
|
||||
style="fill:url(#linearGradient3322);stroke:url(#linearGradient3324);stroke-width:20;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 36.526493,16.048377 H 162.35044 c 7.35773,2.482121 46.88133,30.760218 57.20412,50.34213 V 246.17114 H 36.526493 V 16.04733 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4191"
|
||||
style="fill:#614a79;fill-opacity:1"
|
||||
d="m 41.032644,243.54076 c -1.042214,0 -1.891464,-0.91514 -1.891464,-2.04469 V 20.795601 c 0,-1.12693 0.84925,-2.042592 1.891464,-2.042592 39.13297,0.564771 82.493366,-0.844963 121.577706,0.14067 l 53.77364,46.363623 0.55431,176.240338 c 0,1.12955 -0.84715,2.04469 -1.89303,2.04469 H 41.032644 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path2435"
|
||||
style="opacity:0.6;fill:none;stroke:url(#linearGradient3316);stroke-width:29.06505775;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 215.88915,65.93621 V 243.03373 H 40.191894 V 19.184764 c 40.261294,-0.0016 81.480946,-0.0016 121.742226,-0.0016"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path12038"
|
||||
style="opacity:0.4;fill-rule:evenodd;filter:url(#filter3212)"
|
||||
d="m 28.617,208.92126 c 4.283,0 2.154,8.4831 2.154,8.4831 0,0 10.357,-1.8023 10.357,2.8186 0,-2.6095 -11.302,-10.728 -12.511,-11.302 z"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(5.2293733,0,0,5.2293733,2.5355665,-1074.2613)" />
|
||||
<path
|
||||
style="fill:url(#linearGradient4008);fill-opacity:1"
|
||||
d="M 134.90625 47.28125 C 85.643862 47.28125 61.1875 64.822536 61.1875 112.8125 C 61.1875 138.68006 72.515824 153.9302 82.28125 160.6875 C 96.291177 170.38616 112.05794 174.90625 128.53125 174.90625 C 153.34269 174.90625 169.56385 170.50131 169.5625 170.5 L 189.3125 110.53125 C 193.04562 99.180993 185.70111 98.09375 178.53125 98.09375 L 129.6875 98.09375 C 121.49356 98.09375 115.46875 102.55298 115.46875 110.1875 C 115.46875 118.09301 121.99159 121.46875 128.53125 121.46875 L 151.5625 121.46875 C 154.94848 121.46875 155.42924 122.27667 154.34375 125.71875 C 153.41714 128.65614 147.8125 146.8125 147.8125 146.8125 C 134.09898 148.13433 111.64029 147.69478 100.09375 138.46875 C 93.261691 133.0106 89.8125 124.58335 89.8125 112.8125 C 89.8125 77.176826 109.26722 74.71875 141.78125 74.71875 L 200.9375 74.71875 L 200.9375 48 L 200.21875 47.28125 L 134.90625 47.28125 z "
|
||||
id="path23" />
|
||||
<path
|
||||
style="fill:url(#linearGradient3850);fill-opacity:1"
|
||||
d="m 54.501589,162.40625 0,38.75 c 20.142581,14.078 46.615101,21.46875 77.541301,21.46875 33.0844,0 54.18956,-5.86034 68.89461,-15.59375 l 0,-22 -16.8595,0 c -9.88201,6.97625 -24.44006,10.78125 -49.27685,10.78125 -36.584714,0 -64.874515,-11.34014 -80.299561,-33.40625 z"
|
||||
id="path25"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4474"
|
||||
style="fill:#f5f4f4;fill-opacity:1;fill-rule:evenodd"
|
||||
d="m 159.72239,66.06117 71.21999,-0.287952 C 223.16981,48.054658 178.7852,8.8978731 159.72749,5.096393 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
</svg>
|
Before Width: | Height: | Size: 17 KiB |
@@ -1,518 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg4486"
|
||||
height="256"
|
||||
width="256"
|
||||
version="1.0"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="applications-x-gdevelop-project.svg"
|
||||
inkscape:export-filename="/home/victor/Developpement/GD/Binaries/Packaging/linux-extra-files/usr/share/icons/hicolor/256x256/mimetypes/applications-x-gdevelop-project.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1006"
|
||||
id="namedview44"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.4583333"
|
||||
inkscape:cx="154.18133"
|
||||
inkscape:cy="99.214708"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4486" />
|
||||
<metadata
|
||||
id="metadata51">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs4488">
|
||||
<linearGradient
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
id="stop5062"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop5064"
|
||||
style="stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3312"
|
||||
y2="5.4565001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="36.358002"
|
||||
gradientTransform="matrix(5.2173457,0,0,5.4422088,3.3921377,7.6656911)"
|
||||
y1="8.059"
|
||||
x1="32.891998">
|
||||
<stop
|
||||
id="stop8591"
|
||||
style="stop-color:#fefefe"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop8593"
|
||||
style="stop-color:#cbcbcb"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3316"
|
||||
y2="46.016998"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="24"
|
||||
gradientTransform="matrix(5.2293733,0,0,5.1131766,2.5355665,8.3932773)"
|
||||
y1="2"
|
||||
x1="24">
|
||||
<stop
|
||||
id="stop3213"
|
||||
style="stop-color:#fff"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3215"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="radialGradient3319"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="112.3"
|
||||
cx="102"
|
||||
gradientTransform="matrix(0.3617,0,0,-0.39078,0.85106,47.517)"
|
||||
r="139.56">
|
||||
<stop
|
||||
id="stop41"
|
||||
style="stop-color:#b7b8b9"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop47"
|
||||
style="stop-color:#ececec"
|
||||
offset=".18851" />
|
||||
<stop
|
||||
id="stop49"
|
||||
style="stop-color:#fafafa;stop-opacity:0"
|
||||
offset=".25718" />
|
||||
<stop
|
||||
id="stop51"
|
||||
style="stop-color:#fff;stop-opacity:0"
|
||||
offset=".30111" />
|
||||
<stop
|
||||
id="stop53"
|
||||
style="stop-color:#fafafa;stop-opacity:0"
|
||||
offset=".53130" />
|
||||
<stop
|
||||
id="stop55"
|
||||
style="stop-color:#ebecec;stop-opacity:0"
|
||||
offset="0.85454136" />
|
||||
<stop
|
||||
id="stop57"
|
||||
style="stop-color:#e1e2e3;stop-opacity:0"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3322"
|
||||
y2="47.013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="25.132"
|
||||
gradientTransform="matrix(5.2293733,0,0,5.0001698,2.5355656,3.4346286)"
|
||||
y1="0.98521"
|
||||
x1="25.132">
|
||||
<stop
|
||||
id="stop3602"
|
||||
style="stop-color:#f4f4f4"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3604"
|
||||
style="stop-color:#dbdbdb"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3324"
|
||||
y2="2.9061999"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="-51.785999"
|
||||
gradientTransform="matrix(4.222719,0,0,4.6794001,313.21263,-2.1383145)"
|
||||
y1="50.785999"
|
||||
x1="-51.785999">
|
||||
<stop
|
||||
id="stop3106"
|
||||
style="stop-color:#aaa"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop3108"
|
||||
style="stop-color:#c8c8c8"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="radialGradient3327"
|
||||
xlink:href="#linearGradient5060"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="486.64999"
|
||||
cx="605.71002"
|
||||
gradientTransform="matrix(0.12048476,0,0,0.07687178,140.38708,207.14432)"
|
||||
r="117.14" />
|
||||
<radialGradient
|
||||
id="radialGradient3330"
|
||||
xlink:href="#linearGradient5060"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cy="486.64999"
|
||||
cx="605.71002"
|
||||
gradientTransform="matrix(-0.12048476,0,0,0.07687178,115.6103,207.14432)"
|
||||
r="117.14" />
|
||||
<linearGradient
|
||||
id="linearGradient3333"
|
||||
y2="609.51001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="302.85999"
|
||||
gradientTransform="matrix(0.35206756,0,0,0.07687178,0.7516188,207.14432)"
|
||||
y1="366.64999"
|
||||
x1="302.85999">
|
||||
<stop
|
||||
id="stop5050"
|
||||
style="stop-opacity:0"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset=".5" />
|
||||
<stop
|
||||
id="stop5052"
|
||||
style="stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
id="filter3212"
|
||||
height="1.3286999"
|
||||
width="1.2969"
|
||||
y="-0.16434"
|
||||
x="-0.14846"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
id="feGaussianBlur3214"
|
||||
stdDeviation="0.77391625" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3870"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3864">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3866" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3868" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3087"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3089">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3091" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3093" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3095"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3097">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3099" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3101" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3103"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient3105">
|
||||
<stop
|
||||
style="stop-color:#67ace3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3107" />
|
||||
<stop
|
||||
style="stop-color:#4c90d4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3109" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3118"
|
||||
xlink:href="#linearGradient3864"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3120"
|
||||
xlink:href="#linearGradient3864"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3122"
|
||||
xlink:href="#linearGradient3864"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="268.24673"
|
||||
x2="168.82013"
|
||||
y1="223.99173"
|
||||
x1="168.82013"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient3124"
|
||||
xlink:href="#linearGradient3864"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3959"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3961"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3963"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3965"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3978"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3980"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3982"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3984"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3987"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientTransform="matrix(1.3351686,0,0,1.3351686,-101.71983,-230.26927)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3991"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3993"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient3996"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673"
|
||||
gradientTransform="matrix(0.25532097,0,0,0.25532097,-19.9365,-46.605512)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3864"
|
||||
id="linearGradient4008"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.3351686,0,0,1.3351686,-101.71983,-230.26927)"
|
||||
x1="168.82013"
|
||||
y1="223.99173"
|
||||
x2="168.82013"
|
||||
y2="268.24673" />
|
||||
</defs>
|
||||
<rect
|
||||
id="rect2879"
|
||||
style="opacity:0.3;fill:url(#linearGradient3333)"
|
||||
height="18.669386"
|
||||
width="169.99648"
|
||||
y="235.33061"
|
||||
x="42.999413" />
|
||||
<path
|
||||
id="path2881"
|
||||
style="opacity:0.3;fill:url(#radialGradient3330)"
|
||||
d="m 42.999412,235.33064 v 18.66887 C 36.79476,254.03611 28,249.81601 28,244.66508 c 0,-5.15617 6.92369,-9.33444 14.999412,-9.33444 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path2883"
|
||||
style="opacity:0.3;fill:url(#radialGradient3327)"
|
||||
d="m 212.99692,235.33064 v 18.66887 c 6.20727,0.0366 15.00308,-4.1835 15.00308,-9.33443 0,-5.15617 -6.92892,-9.33444 -15.00308,-9.33444 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4160"
|
||||
style="fill:url(#linearGradient3322);stroke:url(#linearGradient3324);stroke-width:5.22895479;stroke-linejoin:round"
|
||||
d="M 36.526493,16.048377 H 162.35044 c 7.35773,2.482121 46.88133,30.760218 57.20412,50.34213 V 246.17114 H 36.526493 V 16.04733 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4191"
|
||||
style="fill:#614a79;fill-opacity:1"
|
||||
d="m 41.032644,243.54076 c -1.042214,0 -1.891464,-0.91514 -1.891464,-2.04469 V 20.795601 c 0,-1.12693 0.84925,-2.042592 1.891464,-2.042592 39.13297,0.564771 82.493366,-0.844963 121.577706,0.14067 l 53.77364,46.363623 0.55431,176.240338 c 0,1.12955 -0.84715,2.04469 -1.89303,2.04469 H 41.032644 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path2435"
|
||||
style="opacity:0.6;fill:none;stroke:url(#linearGradient3316);stroke-width:5.22895479;stroke-linejoin:round"
|
||||
d="M 214.32518,67.096473 V 241.04112 H 41.755866 V 21.177345 c 39.544521,-0.0016 80.030334,-0.0016 119.574844,-0.0016"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path12038"
|
||||
style="opacity:0.4;fill-rule:evenodd;filter:url(#filter3212)"
|
||||
d="m 28.617,208.92126 c 4.283,0 2.154,8.4831 2.154,8.4831 0,0 10.357,-1.8023 10.357,2.8186 0,-2.6095 -11.302,-10.728 -12.511,-11.302 z"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(5.2293733,0,0,5.2293733,2.5355665,-1074.2613)" />
|
||||
<path
|
||||
style="fill:url(#linearGradient4008);fill-opacity:1"
|
||||
d="m 134.90408,47.27584 c -49.262388,0 -73.701481,17.540626 -73.701481,65.53059 0,25.86756 11.315485,41.12415 21.080911,47.88145 14.009927,9.69866 29.77396,14.21736 46.24727,14.21736 24.81144,0 41.01924,-4.41098 41.01789,-4.41229 l 19.77358,-59.97437 c 3.73312,-11.350257 -3.61573,-12.419768 -10.78559,-12.419768 l -48.86195,0 c -8.19394,0 -14.21737,4.458408 -14.21737,12.092928 0,7.90551 6.53378,11.27584 13.07344,11.27584 l 23.04193,0 c 3.38598,0 3.86359,0.80679 2.7781,4.24887 -0.92661,2.93739 -6.53671,21.08091 -6.53671,21.08091 -13.71352,1.32183 -36.1715,0.89171 -47.71804,-8.33432 -6.832059,-5.45815 -10.295327,-13.88576 -10.295327,-25.65661 0,-35.635674 19.452867,-38.07638 51.966897,-38.07638 l 69.77945,0 0,-16.078649 -11.31461,-11.375561 z"
|
||||
id="path23"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sscsccssssscccsscccs" />
|
||||
<path
|
||||
style="fill:url(#linearGradient3987);fill-opacity:1"
|
||||
d="m 44.533971,144.83634 0,49.51563 c 21.107555,18.51418 51.050717,28.2713 86.938329,28.2713 42.27645,0 65.13791,-9.402 80.07478,-24.18586 l 0,-13.40027 -27.61763,0 c -9.96436,6.97625 -24.63528,10.78559 -49.67905,10.78559 -43.164664,0 -74.875044,-15.52429 -87.755414,-45.59359 -0.761213,-1.77664 -1.394238,-3.54955 -1.961015,-5.3928 z"
|
||||
id="path25"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#377fc9;fill-opacity:1"
|
||||
d="m 154.12385,126.22077 c -1.27909,4.07357 -6.39145,20.51483 -6.39145,20.51483 -13.71352,1.32183 -36.15636,0.92931 -47.7029,-8.29672 -3.880008,-3.10159 -6.625116,-7.14714 -8.274047,-12.21811 H 62.289612 c 3.066886,17.87923 12.025865,28.99985 19.968786,34.4954 14.009921,9.69865 29.869052,14.15278 46.342372,14.15278 24.81143,0 40.96297,-4.35267 40.96297,-4.35267 l 14.60541,-44.29551 h -30.0453 z"
|
||||
id="path45"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#377fc9;fill-opacity:1"
|
||||
d="m 44.533971,144.67292 0,49.67905 c 21.107555,18.51418 51.050717,28.2713 86.938329,28.2713 42.27645,0 65.13791,-9.402 80.07478,-24.18586 l 0,-13.40027 -27.61763,0 c -9.96436,6.97625 -24.63528,10.78559 -49.67905,10.78559 -43.164658,0 -74.875044,-15.52292 -87.755414,-45.59359 -0.786414,-1.83588 -1.382241,-3.64823 -1.961015,-5.55622 z"
|
||||
id="path47"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path4474"
|
||||
style="fill:url(#linearGradient3312);fill-rule:evenodd"
|
||||
d="m 152.18454,18.265945 c 16.66602,0 12.21582,40.066412 12.21582,40.066412 0,0 53.20887,-5.130015 53.20887,19.034396 0,-5.888275 0.44972,-10.10315 -0.70074,-11.940752 -8.25195,-13.199984 -43.90058,-42.8202 -56.7753,-46.702487 -0.9622,-0.290753 -3.10102,-0.457569 -7.94865,-0.457569 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</svg>
|
Before Width: | Height: | Size: 17 KiB |
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
<mime-type type="application/x-gdevelop-project">
|
||||
<comment>GDevelop project</comment>
|
||||
<glob pattern="*.gdg"/>
|
||||
<icon name="applications-x-gdevelop-project"/>
|
||||
</mime-type>
|
||||
</mime-info>
|
@@ -1,34 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//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>CFBundleDisplayName</key>
|
||||
<string>GDevelop</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>GDIDE_launcher</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>icon.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.gdevelop</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>GDevelop</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>11</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.6</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.developer-tools</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
@@ -1,36 +0,0 @@
|
||||
# Maintainer: Victor Levasseur <victorlevasseur52@gmail.com>
|
||||
|
||||
pkgname=gdevelop
|
||||
pkgver=MACRO_GD_VERSION
|
||||
pkgrel=MACRO_PACKAGE_REV
|
||||
pkgdesc="GDevelop is a full featured, open source game development software, allowing to create HTML5 and native games without needing any knowledge in a specific programming language. All the game logic is made thanks to an intuitive and powerful event based system."
|
||||
arch=('i686' 'x86_64')
|
||||
url="http://www.compilgames.net"
|
||||
license=('GPL' 'MIT' 'zlib/png')
|
||||
groups=()
|
||||
install='PKGBUILD.install'
|
||||
makedepends=('rsync' 'cmake' 'git' 'curl')
|
||||
depends=('gcc' 'wxgtk' 'openal' 'p7zip' 'glew' 'libsndfile' 'systemd' 'libjpeg-turbo' 'desktop-file-utils' 'gtk-update-icon-cache')
|
||||
changelog='PKGBUILD.changelog'
|
||||
source=( "gdevelop_$pkgver.orig.tar.gz")
|
||||
md5sums=(SKIP)
|
||||
|
||||
build() {
|
||||
cd "$srcdir"/$pkgname-$pkgver
|
||||
cd Binaries
|
||||
rm -rf .build
|
||||
mkdir .build
|
||||
cd .build
|
||||
cmake -DNO_UPDATE_CHECKER=TRUE ../..
|
||||
|
||||
#Build the whole project
|
||||
make -j4
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$srcdir"/$pkgname-$pkgver
|
||||
cd Binaries/.build
|
||||
make install DESTDIR="$pkgdir"
|
||||
#Remove sfml installed libs
|
||||
rm -rf "$pkgdir"/usr/local
|
||||
}
|
@@ -1,18 +0,0 @@
|
||||
|
||||
post_install() {
|
||||
update-mime-database usr/share/mime
|
||||
update-desktop-database
|
||||
gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
|
||||
}
|
||||
|
||||
post_upgrade() {
|
||||
update-mime-database usr/share/mime
|
||||
update-desktop-database
|
||||
gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
|
||||
}
|
||||
|
||||
post_remove() {
|
||||
update-mime-database usr/share/mime
|
||||
update-desktop-database
|
||||
gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
#Files needed by the IDE to build games (they are not part of a devel package)
|
||||
addFilter("devel-file-in-non-devel-package.*/opt/gdevelop/CppPlatform/include/.*")
|
||||
addFilter("devel-file-in-non-devel-package.*/opt/gdevelop/CppPlatform/Extensions/include/.*")
|
||||
addFilter("devel-file-in-non-devel-package.*/opt/gdevelop/CppPlatform/Sources/.*")
|
@@ -1,123 +0,0 @@
|
||||
Name: gdevelop
|
||||
Version: MACRO_GD_VERSION
|
||||
Release: MACRO_PACKAGE_REV
|
||||
Summary: GDevelop game creator
|
||||
|
||||
Group: extra
|
||||
License: GPL LGPL MIT
|
||||
URL: http://www.compilgames.net
|
||||
|
||||
Source0: gdevelop_%{version}.orig.tar.gz
|
||||
Source100: gdevelop-rpmlintrc
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
BuildRequires: git rsync curl gcc-c++ cmake p7zip glew-devel libsndfile-devel openal-soft-devel desktop-file-utils
|
||||
%if 0%{?fedora}
|
||||
BuildRequires: systemd-devel libjpeg-turbo-devel gtk2-devel wxGTK3-devel libX11-devel
|
||||
%else
|
||||
BuildRequires: update-desktop-files libudev-devel libjpeg8-devel wxWidgets-3_0-devel xorg-x11-devel
|
||||
%endif
|
||||
Requires: gcc-c++ p7zip
|
||||
|
||||
#Exlude SFML libs (as they are private)
|
||||
%global privlibs libsfml-audio|libsfml-graphics|libsfml-network|libsfml-system|libsfml-window|libGDCore|libGDCpp|libGDJS
|
||||
%global __provides_exclude ^(%{privlibs})\\.so.*
|
||||
%global __requires_exclude ^(%{privlibs})\\.so.*
|
||||
|
||||
#Exclude Extensions directory from auto dep (so they are not provided)
|
||||
%global __requires_exclude_from ^%{buildroot}/opt/gdevelop/CppPlatform/Extensions/.*$
|
||||
%global __provides_exclude_from ^%{buildroot}/opt/gdevelop/CppPlatform/Extensions/.*$
|
||||
|
||||
%description
|
||||
GDevelop is a full featured, open source game development software,
|
||||
allowing to create HTML5 and native games without needing any knowledge
|
||||
in a specific programming language. All the game logic is made thanks
|
||||
to an intuitive and powerful event based system.
|
||||
|
||||
%prep
|
||||
%setup -q -n gdevelop-%{version}
|
||||
|
||||
%build
|
||||
#Configuration
|
||||
cd Binaries
|
||||
rm -rf .build
|
||||
mkdir .build
|
||||
cd .build
|
||||
|
||||
#Fedora's wx-config name contains the version (wx-config-3.0 instead of wx-config and wxrc-3.0 instead of wxrc-3.0)
|
||||
%if 0%{?fedora}
|
||||
cmake -DNO_UPDATE_CHECKER=TRUE -DwxWidgets_CONFIG_EXECUTABLE=/usr/bin/wx-config-3.0 -DwxWidgets_wxrc_EXECUTABLE=/usr/bin/wxrc-3.0 ../..
|
||||
%else
|
||||
cmake -DNO_UPDATE_CHECKER=TRUE ../..
|
||||
%endif
|
||||
|
||||
#Build the whole project
|
||||
make %{?_smp_mflags}
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
cd Binaries/.build
|
||||
make install DESTDIR=$RPM_BUILD_ROOT
|
||||
#Remove sfml installed libs
|
||||
rm -rf $RPM_BUILD_ROOT/usr/local
|
||||
|
||||
%if 0%{?fedora}
|
||||
desktop-file-validate %{buildroot}%{_datadir}/applications/gdevelop.desktop
|
||||
%else
|
||||
%suse_update_desktop_file gdevelop
|
||||
%endif
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
|
||||
#GDevelop files
|
||||
/opt/gdevelop
|
||||
|
||||
#Launch script
|
||||
/usr/bin/gdevelop
|
||||
|
||||
#Desktop file
|
||||
/usr/share/applications/gdevelop.desktop
|
||||
|
||||
#Icons
|
||||
/usr/share/icons/hicolor/16x16/apps/GDevelop.png
|
||||
/usr/share/icons/hicolor/16x16/mimetypes/applications-x-gdevelop-project.png
|
||||
/usr/share/icons/hicolor/24x24/apps/GDevelop.png
|
||||
/usr/share/icons/hicolor/24x24/mimetypes/applications-x-gdevelop-project.png
|
||||
/usr/share/icons/hicolor/32x32/apps/GDevelop.png
|
||||
/usr/share/icons/hicolor/32x32/mimetypes/applications-x-gdevelop-project.png
|
||||
/usr/share/icons/hicolor/48x48/apps/GDevelop.png
|
||||
/usr/share/icons/hicolor/48x48/mimetypes/applications-x-gdevelop-project.png
|
||||
/usr/share/icons/hicolor/64x64/apps/GDevelop.png
|
||||
/usr/share/icons/hicolor/64x64/mimetypes/applications-x-gdevelop-project.png
|
||||
/usr/share/icons/hicolor/128x128/apps/GDevelop.png
|
||||
/usr/share/icons/hicolor/128x128/mimetypes/applications-x-gdevelop-project.png
|
||||
/usr/share/icons/hicolor/256x256/apps/GDevelop.png
|
||||
/usr/share/icons/hicolor/256x256/mimetypes/applications-x-gdevelop-project.png
|
||||
/usr/share/icons/hicolor/scalable/apps/GDevelop.svg
|
||||
/usr/share/icons/hicolor/scalable/mimetypes/applications-x-gdevelop-project.svg
|
||||
/usr/share/icons/hicolor/scalable/apps/GDevelop-lowres.svg
|
||||
/usr/share/icons/hicolor/scalable/mimetypes/applications-x-gdevelop-project-lowres.svg
|
||||
|
||||
#Mime
|
||||
/usr/share/mime/packages/gdevelop.xml
|
||||
|
||||
%post
|
||||
update-mime-database %{_datadir}/mime >/dev/null 2>&1 || :
|
||||
update-desktop-database >/dev/null 2>&1 || :
|
||||
touch --no-create %{_datadir}/icons/hicolor >/dev/null 2>&1 || :
|
||||
|
||||
%postun
|
||||
update-mime-database %{_datadir}/mime >/dev/null 2>&1 || :
|
||||
update-desktop-database >/dev/null 2>&1 || :
|
||||
if [ $1 -eq 0 ] ; then
|
||||
touch --no-create %{_datadir}/icons/hicolor >/dev/null 2>&1
|
||||
gtk-update-icon-cache %{_datadir}/icons/hicolor >/dev/null 2>&1 || :
|
||||
fi
|
||||
|
||||
#Keep the changelog at the end as the packaging script adds the changelog at the end
|
||||
%changelog
|
4
Binaries/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
This is the directory where native/WebAssembly binaries from GDCore, GDCpp and GDJS are produced.
|
||||
|
||||
In particular, the extensions and/or the JS platform files will be
|
||||
created into Output/Release_*OSNAME* with *OSNAME* being Windows, Linux or Darwin.
|
@@ -1,4 +0,0 @@
|
||||
This is the directory where binaries are produced.
|
||||
|
||||
In particular, the extensions and/or the JS platform files will be
|
||||
created into Output/Release_OSNAME with OSNAME being Windows, Linux or Darwin.
|
@@ -1,110 +0,0 @@
|
||||
; Inno Setup installation script for GDevelop 4.
|
||||
|
||||
[Setup]
|
||||
AppName=GDevelop
|
||||
AppVersion=4.0
|
||||
AppPublisher=Florian Rival
|
||||
AppPublisherURL=http://www.compilgames.net
|
||||
AppSupportURL=http://www.forum.compilgames.net
|
||||
AppUpdatesURL=http://www.compilgames.net
|
||||
DefaultDirName={pf}/GDevelop
|
||||
DefaultGroupName=GDevelop
|
||||
AllowNoIcons=yes
|
||||
LicenseFile=..\Output\Release_Windows\License-en.rtf
|
||||
InfoBeforeFile=..\Output\Release_Windows\Informations-en.rtf
|
||||
OutputDir=.\
|
||||
OutputBaseFilename=gd4097
|
||||
Compression=lzma
|
||||
SolidCompression=yes
|
||||
SetupIconFile=..\Output\Release_Windows\res\icon.ico
|
||||
VersionInfoVersion=4.0
|
||||
WizardImageFile=Setup bitmap\wizbmp.bmp
|
||||
WizardSmallImageFile=Setup bitmap/smallicon.bmp
|
||||
AppCopyright=2008-2018 Florian Rival
|
||||
VersionInfoCompany=Florian Rival
|
||||
VersionInfoDescription=GDevelop setup
|
||||
VersionInfoCopyright=2008-2018 Florian Rival
|
||||
VersionInfoProductName=GDevelop
|
||||
VersionInfoProductVersion=4.0
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl";
|
||||
Name: "french"; MessagesFile: "compiler:Languages\French.isl"; LicenseFile: "..\Output\Release_Windows\License-fr.rtf"; InfoBeforeFile: "..\Output\Release_Windows\Informations-fr.rtf"
|
||||
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl";
|
||||
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl";
|
||||
Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl";
|
||||
Name: "german"; MessagesFile: "compiler:Languages\German.isl";
|
||||
Name: "chinese"; MessagesFile: "..\Packaging\innosetup-languages\ChineseSimplified.isl";
|
||||
Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl";
|
||||
Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl";
|
||||
Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl";
|
||||
Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl";
|
||||
|
||||
[Tasks]
|
||||
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags:
|
||||
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
|
||||
|
||||
[Components]
|
||||
Name: "main"; Description: "GDevelop"; Types: full compact custom; Flags: fixed
|
||||
Name: "example"; Description: "Exemples"; Types: full custom; Languages: french
|
||||
Name: "example"; Description: "Examples"; Types: full custom; Languages: english russian italian polish chinese dutch finnish
|
||||
Name: "example"; Description: "Ejemplos"; Types: full custom; Languages: spanish
|
||||
Name: "res"; Description: "Ressources (Images, sons...)"; Types: full custom; Languages: french
|
||||
Name: "res"; Description: "Resources (images, sounds...)"; Types: full custom; Languages: english russian italian polish chinese dutch finnish
|
||||
Name: "res"; Description: "Recursos (im<69>genes, sonidos ...)"; Types: full custom; Languages: spanish
|
||||
|
||||
[Files]
|
||||
Source: ..\Output\Release_Windows\GDIDE.exe; DestDir: {app}; Flags: ignoreversion
|
||||
Source: ..\Output\Release_Windows\*; DestDir: {app}; Flags: ignoreversion
|
||||
Source: ..\Output\Release_Windows\Templates\*; DestDir: {app}\Templates; Flags: ignoreversion createallsubdirs recursesubdirs; Components: main
|
||||
Source: ..\Output\Release_Windows\res\*; DestDir: {app}\res; Flags: ignoreversion createallsubdirs recursesubdirs; Components: main
|
||||
Source: ..\Output\Release_Windows\CppPlatform\*; DestDir: {app}\CppPlatform; Flags: ignoreversion createallsubdirs recursesubdirs; Components: main
|
||||
Source: ..\Output\Release_Windows\JsPlatform\*; DestDir: {app}\JsPlatform; Flags: ignoreversion createallsubdirs recursesubdirs; Components: main
|
||||
Source: ..\Output\Release_Windows\locale\*; DestDir: {app}\locale; Flags: ignoreversion createallsubdirs recursesubdirs; Components: main
|
||||
Source: ..\Output\Release_Windows\Examples\*; DestDir: {app}\Examples; Flags: ignoreversion createallsubdirs recursesubdirs; Components: example
|
||||
Source: ..\Output\Release_Windows\Free resources\*; DestDir: {app}\Free resources; Flags: ignoreversion createallsubdirs recursesubdirs; Components: res
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
Source: ..\Output\Release_Windows\icon.ico; DestDir: {app}; Flags: ignoreversion
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-en.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: english; Components: main
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-fr.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: french ; Components: main
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-es.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: spanish ; Components: main
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-ru.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: russian ; Components: main
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-de.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: german ; Components: main
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-pt.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: portuguese ; Components: main
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-pl.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: polish ; Components: main
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-zh.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: chinese ; Components: main
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-it.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: italian ; Components: main
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-nl.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: dutch ; Components: main
|
||||
Source: ..\Output\Release_Windows\SelectLanguage-fi.cfg; DestDir: {userdocs}\..\.GDevelop; Flags: ignoreversion createallsubdirs recursesubdirs; DestName: SelectLanguage.cfg; Languages: finnish ; Components: main
|
||||
|
||||
[Icons]
|
||||
Name: {group}\GDevelop; Filename: {app}\GDIDE.exe; WorkingDir: {app}
|
||||
Name: {group}\Aide; Filename: http://www.wiki.compilgames.net ;Languages: french;
|
||||
Name: {group}\Help; Filename: http://www.wiki.compilgames.net; Languages: english;
|
||||
Name: {group}\Tutoriel; Filename: http://www.wiki.compilgames.net/doku.php/game_develop/tutoriels; Languages: french;
|
||||
Name: {group}\Tutorial; Filename: http://www.wiki.compilgames.net/doku.php/en/game_develop/tutorials; Languages: english;
|
||||
Name: {group}\{cm:ProgramOnTheWeb,GDevelop}; Filename: http://www.compilgames.net
|
||||
Name: {group}\{cm:UninstallProgram,GDevelop}; Filename: {uninstallexe}
|
||||
Name: {commondesktop}\GDevelop; Filename: {app}\GDIDE.exe; WorkingDir: {app}; Tasks: desktopicon
|
||||
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\GDevelop; Filename: {app}\GDIDE.exe; WorkingDir: {app}; Tasks: quicklaunchicon
|
||||
|
||||
[Run]
|
||||
Filename: {app}\GDIDE.exe; Description: {cm:LaunchProgram,GDevelop}; Flags: nowait postinstall skipifsilent
|
||||
|
||||
[Registry]
|
||||
Root: HKCR; SubKey: .gdg; ValueType: string; ValueData: GDevelop Game; Flags: uninsdeletekey
|
||||
Root: HKCR; SubKey: GDevelop Game; ValueType: string; ValueData: Game created with GDevelop; Flags: uninsdeletekey
|
||||
Root: HKCR; SubKey: GDevelop Game\Shell\Open\Command; ValueType: string; ValueData: """{app}/GDIDE.exe"" ""%1"""; Flags: uninsdeletevalue
|
||||
Root: HKCR; Subkey: GDevelop Game\DefaultIcon; ValueType: string; ValueData: {app}\icon.ico,-1; Flags: uninsdeletevalue
|
||||
|
||||
|
||||
[InstallDelete]
|
||||
Type: files; Name: "{app}\GDEditor.exe"
|
||||
;Prevent crashes with incompatible extensions:
|
||||
Type: files; Name: "{app}\CppPlatform\Extensions\TextBoxObject.xgdwe"
|
||||
;Old extensions:
|
||||
Type: files; Name: "{app}\CppPlatform\Extensions\AStarBehavior.xgdwe"
|
||||
|
||||
Type: filesandordirs; Name: "{app}\Extensions"
|
||||
Type: filesandordirs; Name: "{app}\include"
|
||||
Type: filesandordirs; Name: "{app}\Runtime"
|
@@ -1,2 +0,0 @@
|
||||
This is the directory where packaged binaries ready for release are produced.
|
||||
See also Binaries/Packaging.
|
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 51 KiB |
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
<News>
|
||||
<Version Major="4" Minor="0" Build="92" Revision="0"/>
|
||||
<Info Info="La version 4.0.92 est disponible.

(Expérimental) Exportation des jeux HTML5 vers Android/iOS/Mac/Windows avec le moteur Cocos2d-JS.
(Expérimental) Exportation des jeux natifs vers Android.

Les objets avec le comportement 'Objet se déplaçant sur des plateformes' peuvent maintenant agripper les rebords des plateformes - il faut activer l'option dans le comportement de l'objet.
Les animations des objets Sprite peuvent maintenant être nommés. Une condition et action ont été ajoutées pour utiliser ces noms.
Ajout du support basique d'effets pour les jeux HTML5. ✨ Pour le moment, 3 effets sont disponibles et peuvent être attribués au calques d'une scène. 
Amélioration des performances des jeux HTML5
Correction et améliorations pour les jeux HTML5 exportés avec Cocos2d-JS.
Lors de la recherche dans les évènements, l'évènement surlignés est correctement affiché en dépliant au besoin les groupes/évènements repliés.
Correction du rendu sur Windows avec les thèmes à fort contraste." Lien="http://compilgames.net"/>
|
||||
<CommunityNews text="GDevApp est une web app de création de jeux basée sur GDevelop : venez essayer la plus avancée des applications online de création de jeux. Compatible avec les tablettes et fournie avec des superbes packs de graphismes pré-préparés." link1="https://github.com/4ian/GD" linkLabel1="GDevelop sur GitHub" link2="https://gdevapp.com?utm_source=software&utm_medium=link_fr&utm_campaign=launch" linkLabel2="Tester GDevApp, la nouvelle app de création de jeux"/>
|
||||
</News>
|
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
<News>
|
||||
<Version Major="4" Minor="0" Build="92" Revision="0"/>
|
||||
<Info Info="Version 4.0.92 is available.

New experimental option to export HTML5 games to Android/iOS/Mac/Windows using the Cocos2d as the underlying game engine.

 New experimental option to export native games to Android.

Platformer object now have an option allowing them to grab platform ledges. Activate this option in the behavior and be sure to also enable this on platforms.
Animations of Sprite objects can now be named. Specific actions/conditions are also available.
Add basic support for effects for HTML5 games. For now, there are 3 simple effects (Night, LightNight, Sepia) and you can apply one of them on each layer of a scene.
Performance improvement for HTML5 games.
Fix text rendering when using a custom font, when exporting HTML5 games with Cocos2d-JS.
Add support for non-smoothed texture for HTML5 games using Cocos2d-JS.
Add support for storage actions when for HTML5 games using Cocos2d-JS on Android/iOS.
When searching in events, events that are matched are unfolded.
Provide compatibility with Windows high contrast themes (thanks @RandomShaper!)
Many fixes" Lien="http://compilgames.net"/>
|
||||
<CommunityNews text="GDevelop has a new website! Help us to translate it to your language by going on the Crowdin project.

GDevApp is an online game creator based on GDevelop: Go try the most advanced game creation web app. Compatible with tablets and bundled with awesome graphics assets." link1="https://crowdin.com/project/gdevelop-website/" linkLabel1="Help translate GD website" link2="https://gdevapp.com?utm_source=software&utm_medium=link_en&utm_campaign=launch" linkLabel2="Try GDevApp, the online game creator based on GD"/>
|
||||
</News>
|
@@ -1,167 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XML_DIZ_INFO>
|
||||
<MASTER_PAD_VERSION_INFO>
|
||||
<MASTER_PAD_VERSION>3.11</MASTER_PAD_VERSION>
|
||||
<MASTER_PAD_EDITOR>PADManager 2.0.69</MASTER_PAD_EDITOR>
|
||||
<MASTER_PAD_EDITOR_URL>http://robosoft.rudenko.com</MASTER_PAD_EDITOR_URL>
|
||||
<MASTER_PAD_INFO>Portable Application Description, or PAD for short, is a data set that is used by shareware authors to disseminate information to anyone interested in their software products. To find out more go to http://www.asp-shareware.org/pad</MASTER_PAD_INFO>
|
||||
</MASTER_PAD_VERSION_INFO>
|
||||
<RoboSoft>
|
||||
<Company_UIN>CMP-00C2117CDC1</Company_UIN>
|
||||
<Company_Description></Company_Description>
|
||||
<Product_UIN>APP-00C211F181F</Product_UIN>
|
||||
<Publish_on_CD>FALSE</Publish_on_CD>
|
||||
<RSProductType></RSProductType>
|
||||
<Search_String></Search_String>
|
||||
<Press_Release_Search_String></Press_Release_Search_String>
|
||||
<NewsFeed_Search_String></NewsFeed_Search_String>
|
||||
<Search_Engine_Search_String></Search_Engine_Search_String>
|
||||
<Web_Directories_Search_String></Web_Directories_Search_String>
|
||||
<Search_String_Unique></Search_String_Unique>
|
||||
<Comments_For_Reviewer></Comments_For_Reviewer>
|
||||
<Backlink></Backlink>
|
||||
</RoboSoft>
|
||||
<Company_Info>
|
||||
<Company_Name>Florian Rival</Company_Name>
|
||||
<Address_1>9, rue Alphonse Daudet</Address_1>
|
||||
<Address_2></Address_2>
|
||||
<City_Town>Muzillac</City_Town>
|
||||
<State_Province>France</State_Province>
|
||||
<Zip_Postal_Code>56190</Zip_Postal_Code>
|
||||
<Country>France</Country>
|
||||
<Company_WebSite_URL>http://www.compilgames.net</Company_WebSite_URL>
|
||||
<Contact_Info>
|
||||
<Contact_First_Name>Florian</Contact_First_Name>
|
||||
<Contact_Last_Name>Rival</Contact_Last_Name>
|
||||
<Contact_Email>Florian.rival@gmail.com</Contact_Email>
|
||||
<Author_First_Name>Florian</Author_First_Name>
|
||||
<Author_Last_Name>Rival</Author_Last_Name>
|
||||
<Author_Email>Florian.rival@gmail.com</Author_Email>
|
||||
</Contact_Info>
|
||||
<Support_Info>
|
||||
<Sales_Email>Florian.rival@gmail.com</Sales_Email>
|
||||
<Support_Email>Florian.rival@gmail.com</Support_Email>
|
||||
<General_Email>Florian.rival@gmail.com</General_Email>
|
||||
<Sales_Phone></Sales_Phone>
|
||||
<Support_Phone></Support_Phone>
|
||||
<General_Phone></General_Phone>
|
||||
<Fax_Phone></Fax_Phone>
|
||||
</Support_Info>
|
||||
</Company_Info>
|
||||
<NewsFeed>
|
||||
<NewsFeed_FORM>Y</NewsFeed_FORM>
|
||||
<NewsFeed_VERSION>1.0</NewsFeed_VERSION>
|
||||
<NewsFeed_URL>http://Submit-Everywhere.com/extensions/NewsFeed.htm</NewsFeed_URL>
|
||||
<NewsFeed_DESCRIPTION>This PAD extension allows you to add your RSS and Atom news feeds info into your PAD file. This info can be used by RSS feed submission software or by feed directories themselves.</NewsFeed_DESCRIPTION>
|
||||
<NewsFeed_Type>RSS 0.90</NewsFeed_Type>
|
||||
<NewsFeed_Language>English</NewsFeed_Language>
|
||||
<NewsFeed_Purpose>News</NewsFeed_Purpose>
|
||||
<NewsFeed_Author_Email>Florian.rival@gmail.com</NewsFeed_Author_Email>
|
||||
<NewsFeed_Author_First_Name>Florian</NewsFeed_Author_First_Name>
|
||||
<NewsFeed_Author_Last_Name>Rival</NewsFeed_Author_Last_Name>
|
||||
<NewsFeed_Feed_URL></NewsFeed_Feed_URL>
|
||||
<NewsFeed_Site_Name></NewsFeed_Site_Name>
|
||||
<NewsFeed_Site_URL></NewsFeed_Site_URL>
|
||||
<NewsFeed_Title></NewsFeed_Title>
|
||||
<NewsFeed_Description_70></NewsFeed_Description_70>
|
||||
<NewsFeed_Description_250></NewsFeed_Description_250>
|
||||
</NewsFeed>
|
||||
<Program_Info>
|
||||
<Program_Name>GDevelop</Program_Name>
|
||||
<Program_Version>3</Program_Version>
|
||||
<Program_Release_Month>07</Program_Release_Month>
|
||||
<Program_Release_Day>11</Program_Release_Day>
|
||||
<Program_Release_Year>2013</Program_Release_Year>
|
||||
<Program_Cost_Dollars>0</Program_Cost_Dollars>
|
||||
<Program_Type>Freeware</Program_Type>
|
||||
<Program_Release_Status>Major Update</Program_Release_Status>
|
||||
<Program_Install_Support>Install and Uninstall</Program_Install_Support>
|
||||
<Program_OS_Support>WinXP,WinVista,WinVista x64,Win7 x32,Win7 x64,Win2000,Linux,Linux Gnome</Program_OS_Support>
|
||||
<Program_Language>English,French</Program_Language>
|
||||
<Program_Change_Info>Support for creating web based games (HTML5 games) that can be played on any modern browser or handheld device.</Program_Change_Info>
|
||||
<Program_System_Requirements>Windows 2000, XP, Vista, 7 or Ubuntu</Program_System_Requirements>
|
||||
<Program_Category_Class>Development::Other</Program_Category_Class>
|
||||
<File_Info>
|
||||
<File_Size_Bytes>46789632</File_Size_Bytes>
|
||||
<File_Size_K>45693</File_Size_K>
|
||||
<File_Size_MB>44.62</File_Size_MB>
|
||||
<Filename_Versioned></Filename_Versioned>
|
||||
<Filename_Previous></Filename_Previous>
|
||||
<Filename_Generic></Filename_Generic>
|
||||
<Filename_Long></Filename_Long>
|
||||
</File_Info>
|
||||
<Expire_Info>
|
||||
<Has_Expire_Info>N</Has_Expire_Info>
|
||||
<Expire_Based_On>Days</Expire_Based_On>
|
||||
<Expire_Count></Expire_Count>
|
||||
<Expire_Other_Info></Expire_Other_Info>
|
||||
<Expire_Month></Expire_Month>
|
||||
<Expire_Day></Expire_Day>
|
||||
<Expire_Year></Expire_Year>
|
||||
</Expire_Info>
|
||||
<Program_Categories>Programming :: C & C++ & C#,Programming :: IDEs & Coding Utilities,Games :: Gaming Tools</Program_Categories>
|
||||
<Limitations>No limitations</Limitations>
|
||||
<Program_Cost_Other_Code></Program_Cost_Other_Code>
|
||||
<Program_Cost_Other></Program_Cost_Other>
|
||||
<Awards></Awards>
|
||||
<Program_Specific_Category></Program_Specific_Category>
|
||||
<Includes_JAVA_VM></Includes_JAVA_VM>
|
||||
<Includes_VB_Runtime></Includes_VB_Runtime>
|
||||
<Includes_DirectX></Includes_DirectX>
|
||||
</Program_Info>
|
||||
<Web_Info>
|
||||
<Application_URLs>
|
||||
<Application_Info_URL>http://www.compilgames.net</Application_Info_URL>
|
||||
<Application_Order_URL>http://www.ecompilgames.net</Application_Order_URL>
|
||||
<Application_Screenshot_URL>http://www.compilgames.net/images/GameDevelop/Screen800600.jpg</Application_Screenshot_URL>
|
||||
<Application_Icon_URL>http://www.compilgames.net/images/GameDevelop/icon32.gif</Application_Icon_URL>
|
||||
<Application_XML_File_URL>http://www.compilgames.net/dl/gdpad.xml</Application_XML_File_URL>
|
||||
</Application_URLs>
|
||||
<Download_URLs>
|
||||
<Primary_Download_URL>http://www.compilgames.net/dl/gd.exe</Primary_Download_URL>
|
||||
<Secondary_Download_URL></Secondary_Download_URL>
|
||||
<Additional_Download_URL_1></Additional_Download_URL_1>
|
||||
<Additional_Download_URL_2></Additional_Download_URL_2>
|
||||
</Download_URLs>
|
||||
</Web_Info>
|
||||
<Permissions>
|
||||
<Distribution_Permissions>GDevelop can be freely distributed over the internet in an unchanged form.</Distribution_Permissions>
|
||||
<EULA>· GDevelop
|
||||
|
||||
GDevelop is a freeware, meaning it is totally free.
|
||||
|
||||
-You can use the software, for personal or commercial use.
|
||||
-The software is provided 'as-is', without any express or implied warranty.
|
||||
-You can distribute the software to anybody provided you don't require money for it, you don't claim to be the author and you distribute the entire software with its installer.
|
||||
-You must not try to decompile the software.
|
||||
|
||||
· Games created with GDevelop
|
||||
|
||||
-The author of GDevelop is not liable for games made with the software.
|
||||
-If you create a game with GDevelop, an acknowledgment in the game documentation would be appreciated but is not required.
|
||||
|
||||
· If you have any questions
|
||||
|
||||
Contact the author : CompilGames@gmail.com
|
||||
Go on our website : http://www.compilgames.net</EULA>
|
||||
</Permissions>
|
||||
<Program_Descriptions>
|
||||
<English>
|
||||
<Keywords>Development, creation, game, making, maker, programming, IDE, 2D, HTML5, 3D, develop, physics, build, create, C++</Keywords>
|
||||
<Char_Desc_45>Free game development software</Char_Desc_45>
|
||||
<Char_Desc_80>Free game creation software, allowing to create any kind of 2D games.</Char_Desc_80>
|
||||
<Char_Desc_250>GDevelop is a free game creation software, allowing to make games for the web ( HTML5 ) or for Windows and Linux. No programming or coding skill is required! It is easy to use and powerful enough for advanced users.</Char_Desc_250>
|
||||
<Char_Desc_450>GDevelop is a free game creation software, allowing to make games for the web ( HTML5 ) or for Windows and Linux. No programming or coding skill is required! It is easy to use and powerful enough for advanced users. All the game logic is made thanks to a powerful and intuitive events system. Many features are available: Physics, dynamic lights, particle systems, networking...</Char_Desc_450>
|
||||
<Char_Desc_2000>GDevelop is a free game creation software, allowing to make games for the web ( HTML5 ) or for Windows and Linux. No programming or coding skill is required! It is easy to use and powerful enough for advanced users.
|
||||
|
||||
The creation under GDevelop is entirely visual : Creation of objects, image insertion, objects positioning...
|
||||
The user interface allows you to preview your game and test it inside the editor, by simply clicking on a single button.
|
||||
|
||||
All the game logic is created using events, allowing to launch actions if some conditions are filled. An entire game can be created without using a single line of code as events are both easy to use and flexible, thanks to sub-events and custom events types like loop events or functions-like events.
|
||||
Moreover, events are compiled by GDevelop to machine code, just like ordinary programming language used in commercial games: GDevelop is the only game development software which combine the simplicity of creation with the power of professional programming languages.
|
||||
|
||||
GDevelop provides you with many features for your project : Dynamic lights and particle systems are available trought dedicated objects, actions and conditions to create multiplayer games are available, 3D objects can be used to render buildings, realistic physics behaviour can be added to objects thanks to the Physics behavior.
|
||||
Many of these features are provided thanks to official open source extensions, and external developers can also develop extensions to enhance GDevelop capabilities.</Char_Desc_2000>
|
||||
</English>
|
||||
</Program_Descriptions>
|
||||
</XML_DIZ_INFO>
|
@@ -17,12 +17,13 @@ endmacro()
|
||||
gd_set_option(BUILD_CORE TRUE BOOL "TRUE to build GDevelop Core library, FALSE to use the already compiled binaries")
|
||||
gd_set_option(BUILD_GDCPP TRUE BOOL "TRUE to build GDevelop C++ Platform")
|
||||
gd_set_option(BUILD_GDJS TRUE BOOL "TRUE to build GDevelop JS Platform")
|
||||
gd_set_option(BUILD_IDE TRUE BOOL "TRUE to build the IDE")
|
||||
gd_set_option(BUILD_EXTENSIONS TRUE BOOL "TRUE to build the extensions")
|
||||
gd_set_option(BUILD_TESTS FALSE BOOL "TRUE to build the tests")
|
||||
gd_set_option(NO_GUI FALSE BOOL "TRUE to build without wxWidgets GUI")
|
||||
gd_set_option(FULL_VERSION_NUMBER TRUE BOOL "TRUE to build GDevelop with its full version number (lastest tag + commit hash), FALSE to only use the lastest tag (avoid rebulding many source file when developping)")
|
||||
|
||||
# Disable deprecated code
|
||||
set(NO_GUI TRUE CACHE BOOL "" FORCE) #Force disable old GUI related code.
|
||||
|
||||
#Setting up installation directory, for Linux (has to be done before "project" command).
|
||||
IF(NOT WIN32)
|
||||
if (NOT APPLE)
|
||||
@@ -55,9 +56,7 @@ IF ("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
ENDIF()
|
||||
IF (EMSCRIPTEN)
|
||||
set(NO_GUI TRUE CACHE BOOL "" FORCE) #Force disable gui when compiling with emscripten.
|
||||
set(BUILD_GDCPP FALSE CACHE BOOL "" FORCE) #Force disable GDC++ when compiling with emscripten.
|
||||
set(BUILD_IDE FALSE CACHE BOOL "" FORCE) #Force disable IDE when compiling with emscripten.
|
||||
ENDIF()
|
||||
|
||||
IF("${CMAKE_BUILD_TYPE}" STREQUAL "Release" AND NOT WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
|
||||
@@ -69,9 +68,9 @@ include(CheckCXXCompilerFlag)
|
||||
CHECK_CXX_COMPILER_FLAG("-std=gnu++11" COMPILER_SUPPORTS_CXX11)
|
||||
CHECK_CXX_COMPILER_FLAG("-std=gnu++0x" COMPILER_SUPPORTS_CXX0X)
|
||||
if(COMPILER_SUPPORTS_CXX11)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
|
||||
elseif(COMPILER_SUPPORTS_CXX0X)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x")
|
||||
else()
|
||||
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support (with GNU extensions). Please use a different C++ compiler.")
|
||||
endif()
|
||||
@@ -81,23 +80,19 @@ set(GD_base_dir ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
#Add all the CMakeLists:
|
||||
ADD_SUBDIRECTORY(Version)
|
||||
|
||||
ADD_SUBDIRECTORY(ExtLibs)
|
||||
IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Core/CMakeLists.txt" AND BUILD_CORE)
|
||||
IF(BUILD_CORE)
|
||||
ADD_SUBDIRECTORY(Core)
|
||||
ENDIF()
|
||||
IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/GDJS/CMakeLists.txt" AND BUILD_GDJS)
|
||||
IF(BUILD_GDJS)
|
||||
ADD_SUBDIRECTORY(GDJS)
|
||||
ENDIF()
|
||||
IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/GDCpp/CMakeLists.txt" AND BUILD_GDCPP)
|
||||
IF(BUILD_GDCPP)
|
||||
ADD_SUBDIRECTORY(GDCpp)
|
||||
ENDIF()
|
||||
IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/IDE/CMakeLists.txt" AND BUILD_IDE)
|
||||
ADD_SUBDIRECTORY(IDE)
|
||||
ENDIF()
|
||||
IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/GDevelop.js/CMakeLists.txt" AND EMSCRIPTEN)
|
||||
ADD_SUBDIRECTORY(GDevelop.js)
|
||||
ENDIF()
|
||||
IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Extensions/CMakeLists.txt" AND BUILD_EXTENSIONS)
|
||||
IF(BUILD_EXTENSIONS)
|
||||
ADD_SUBDIRECTORY(Extensions)
|
||||
ENDIF()
|
||||
|
@@ -15,14 +15,6 @@ set(GDCORE_lib_dir ${GD_base_dir}/Binaries/Output/${CMAKE_BUILD_TYPE}_${CMAKE_SY
|
||||
#Dependencies on external libraries:
|
||||
###
|
||||
include_directories(${sfml_include_dir})
|
||||
IF(WIN32) #Special case for wxWidgets on Windows
|
||||
include_directories(${wxwidgets_include_dir})
|
||||
ELSEIF (NOT EMSCRIPTEN AND NOT NO_GUI)
|
||||
find_package(wxWidgets COMPONENTS core base adv net ribbon stc aui propgrid richtext html xrc REQUIRED)
|
||||
include( "${wxWidgets_USE_FILE}" )
|
||||
include_directories(${GTK_INCLUDE_DIRS})
|
||||
link_directories(${GTK_LIBRARY_DIRS})
|
||||
ENDIF(WIN32)
|
||||
|
||||
#Defines
|
||||
###
|
||||
@@ -30,14 +22,8 @@ add_definitions( -DGD_IDE_ONLY )
|
||||
IF (EMSCRIPTEN)
|
||||
add_definitions( -DEMSCRIPTEN )
|
||||
ENDIF()
|
||||
IF (NO_GUI)
|
||||
add_definitions( -DGD_NO_WX_GUI )
|
||||
ENDIF()
|
||||
IF(CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||
add_definitions( -DDEBUG )
|
||||
IF(WIN32)
|
||||
add_definitions( -D__WXDEBUG__ )
|
||||
ENDIF(WIN32)
|
||||
ELSE()
|
||||
add_definitions( -DRELEASE )
|
||||
ENDIF()
|
||||
@@ -45,11 +31,7 @@ ENDIF()
|
||||
IF(WIN32)
|
||||
add_definitions( -DWINDOWS )
|
||||
add_definitions( "-DGD_CORE_API=__declspec(dllexport)" )
|
||||
|
||||
add_definitions( -D__GNUWIN32__ )
|
||||
add_definitions( -D__WXMSW__ )
|
||||
add_definitions( -DwxUSE_UNICODE=1 )
|
||||
add_definitions( -DWXUSINGDLL )
|
||||
ELSE()
|
||||
IF(APPLE)
|
||||
add_definitions( -DMACOS )
|
||||
@@ -58,9 +40,6 @@ ELSE()
|
||||
ENDIF()
|
||||
add_definitions( -DGD_API= )
|
||||
add_definitions( -DGD_CORE_API= )
|
||||
IF (NOT NO_GUI)
|
||||
add_definitions(${GTK_CFLAGS_OTHER})
|
||||
ENDIF()
|
||||
ENDIF(WIN32)
|
||||
|
||||
#The target
|
||||
@@ -68,10 +47,6 @@ ENDIF(WIN32)
|
||||
include_directories(.)
|
||||
file(GLOB_RECURSE source_files GDCore/*)
|
||||
|
||||
IF(NO_GUI)
|
||||
list(REMOVE_ITEM source_files "${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs.h" "${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs_dialogs_bitmaps.cpp")
|
||||
ENDIF()
|
||||
|
||||
file(GLOB_RECURSE formatted_source_files tests/* GDCore/Events/* GDCore/Extensions/* GDCore/IDE/* GDCore/Project/* GDCore/Serialization/* GDCore/Tools/*)
|
||||
list(REMOVE_ITEM formatted_source_files "${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs.h" "${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs_dialogs_bitmaps.cpp")
|
||||
gd_add_clang_utils(GDCore "${formatted_source_files}")
|
||||
@@ -95,8 +70,6 @@ IF(EMSCRIPTEN)
|
||||
#Nothing.
|
||||
ELSE()
|
||||
target_link_libraries(GDCore ${sfml_LIBRARIES})
|
||||
target_link_libraries(GDCore ${wxWidgets_LIBRARIES})
|
||||
target_link_libraries(GDCore ${GTK_LIBRARIES})
|
||||
ENDIF()
|
||||
|
||||
#Tests
|
||||
@@ -112,6 +85,4 @@ if(BUILD_TESTS)
|
||||
set_target_properties(GDCore_tests PROPERTIES BUILD_WITH_INSTALL_RPATH FALSE) #Allow finding dependencies directly from build path on Mac OS X.
|
||||
target_link_libraries(GDCore_tests GDCore)
|
||||
target_link_libraries(GDCore_tests ${sfml_LIBRARIES})
|
||||
target_link_libraries(GDCore_tests ${wxWidgets_LIBRARIES})
|
||||
target_link_libraries(GDCore_tests ${GTK_LIBRARIES})
|
||||
endif()
|
||||
|
519
Core/GDCore.cbp
@@ -1,519 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<CodeBlocks_project_file>
|
||||
<FileVersion major="1" minor="6" />
|
||||
<Project>
|
||||
<Option title="GDevelop Core" />
|
||||
<Option pch_mode="2" />
|
||||
<Option compiler="gcc" />
|
||||
<Build>
|
||||
<Target title="Debug - Edittime">
|
||||
<Option output="../IDE/bin/debug/GDCore.dll" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME)" prefix_auto="1" extension_auto="0" />
|
||||
<Option object_output="obj/Debug/" />
|
||||
<Option type="3" />
|
||||
<Option compiler="gcc" />
|
||||
<Option createDefFile="1" />
|
||||
<Option createStaticLib="1" />
|
||||
<Compiler>
|
||||
<Add option="-g" />
|
||||
<Add option="-DGD_CORE_API=__declspec(dllexport)" />
|
||||
<Add option="-DDEBUG" />
|
||||
<Add option="-DWINDOWS" />
|
||||
<Add option="-D__GNUWIN32__" />
|
||||
<Add option="-D__WXMSW__" />
|
||||
<Add option="-D__WXDEBUG__" />
|
||||
<Add option="-DwxUSE_UNICODE=1" />
|
||||
<Add option="-DWXUSINGDLL" />
|
||||
<Add option="-DBOOST_DISABLE_ASSERTS" />
|
||||
<Add directory="../ExtLibs/wxwidgets/include" />
|
||||
<Add directory="../ExtLibs/wxwidgets/lib/gcc_dll/mswud" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add option="-lmingw32" />
|
||||
<Add option="-lopengl32" />
|
||||
<Add option="-limm32" />
|
||||
<Add option="-lcomctl32" />
|
||||
<Add option="-lglu32" />
|
||||
<Add option="-lws2_32" />
|
||||
<Add option="-lgdi32" />
|
||||
<Add option="-lwinmm" />
|
||||
<Add option="-lwxmsw30ud_xrc" />
|
||||
<Add option="-lwxmsw30ud_stc" />
|
||||
<Add option="-lwxmsw30ud_richtext" />
|
||||
<Add option="-lwxmsw30ud_ribbon" />
|
||||
<Add option="-lwxmsw30ud_propgrid" />
|
||||
<Add option="-lwxmsw30ud_aui" />
|
||||
<Add option="-lwxmsw30ud_adv" />
|
||||
<Add option="-lwxmsw30ud_html" />
|
||||
<Add option="-lwxmsw30ud_core" />
|
||||
<Add option="-lwxbase30ud_xml" />
|
||||
<Add option="-lwxbase30ud_net" />
|
||||
<Add option="-lwxexpatd" />
|
||||
<Add option="-lwxbase30ud" />
|
||||
<Add option="-lwxpngd" />
|
||||
<Add option="-lwxjpegd" />
|
||||
<Add option="-lwxzlibd" />
|
||||
<Add option="-lwxtiffd" />
|
||||
<Add option="-lsfml-audio-d" />
|
||||
<Add option="-lsfml-graphics-d" />
|
||||
<Add option="-lsfml-window-d" />
|
||||
<Add option="-lsfml-network-d" />
|
||||
<Add option="-lsfml-system-d" />
|
||||
<Add directory="../ExtLibs/wxwidgets/lib/gcc_dll" />
|
||||
<Add directory="../ExtLibs/wxwidgets/lib/gcc_dll/mswud" />
|
||||
<Add directory="../ExtLibs/SFML/build-mingw-debug/lib" />
|
||||
</Linker>
|
||||
</Target>
|
||||
<Target title="Development - Edittime">
|
||||
<Option output="../IDE/bin/dev/GDCore.dll" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME)" prefix_auto="1" extension_auto="0" />
|
||||
<Option object_output="obj/Dev/" />
|
||||
<Option type="3" />
|
||||
<Option compiler="gcc" />
|
||||
<Option createDefFile="1" />
|
||||
<Option createStaticLib="1" />
|
||||
<Compiler>
|
||||
<Add option="-O2" />
|
||||
<Add option="-DGD_CORE_API=__declspec(dllexport)" />
|
||||
<Add option="-DDEV" />
|
||||
<Add option="-DWINDOWS" />
|
||||
<Add option="-D__GNUWIN32__" />
|
||||
<Add option="-D__WXMSW__" />
|
||||
<Add option="-DwxUSE_UNICODE=1" />
|
||||
<Add option="-DWXUSINGDLL" />
|
||||
<Add option="-DBOOST_DISABLE_ASSERTS" />
|
||||
<Add directory="../ExtLibs/wxwidgets/include" />
|
||||
<Add directory="../ExtLibs/wxwidgets/lib/gcc_dll/mswu" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add option="-s" />
|
||||
<Add option="-lmingw32" />
|
||||
<Add option="-lopengl32" />
|
||||
<Add option="-limm32" />
|
||||
<Add option="-lcomctl32" />
|
||||
<Add option="-lglu32" />
|
||||
<Add option="-lws2_32" />
|
||||
<Add option="-lgdi32" />
|
||||
<Add option="-lwinmm" />
|
||||
<Add option="-lwxmsw30u_xrc" />
|
||||
<Add option="-lwxmsw30u_stc" />
|
||||
<Add option="-lwxmsw30u_richtext" />
|
||||
<Add option="-lwxmsw30u_ribbon" />
|
||||
<Add option="-lwxmsw30u_propgrid" />
|
||||
<Add option="-lwxmsw30u_aui" />
|
||||
<Add option="-lwxmsw30u_adv" />
|
||||
<Add option="-lwxmsw30u_html" />
|
||||
<Add option="-lwxmsw30u_core" />
|
||||
<Add option="-lwxbase30u_xml" />
|
||||
<Add option="-lwxbase30u_net" />
|
||||
<Add option="-lwxexpat" />
|
||||
<Add option="-lwxbase30u" />
|
||||
<Add option="-lwxpng" />
|
||||
<Add option="-lwxjpeg" />
|
||||
<Add option="-lwxzlib" />
|
||||
<Add option="-lwxtiff" />
|
||||
<Add option="-lsfml-audio" />
|
||||
<Add option="-lsfml-graphics" />
|
||||
<Add option="-lsfml-window" />
|
||||
<Add option="-lsfml-network" />
|
||||
<Add option="-lsfml-system" />
|
||||
<Add directory="../ExtLibs/wxwidgets/lib/gcc_dll/mswu" />
|
||||
<Add directory="../ExtLibs/wxwidgets/lib/gcc_dll" />
|
||||
<Add directory="../ExtLibs/SFML/build-mingw-release/lib" />
|
||||
</Linker>
|
||||
</Target>
|
||||
<Target title="Release - Edittime">
|
||||
<Option output="../IDE/bin/release/GDCore.dll" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME)" prefix_auto="1" extension_auto="0" />
|
||||
<Option object_output="obj/Release/" />
|
||||
<Option type="3" />
|
||||
<Option compiler="gcc" />
|
||||
<Option createDefFile="1" />
|
||||
<Option createStaticLib="1" />
|
||||
<Compiler>
|
||||
<Add option="-O2" />
|
||||
<Add option="-DGD_CORE_API=__declspec(dllexport)" />
|
||||
<Add option="-DRELEASE" />
|
||||
<Add option="-DWINDOWS" />
|
||||
<Add option="-D__GNUWIN32__" />
|
||||
<Add option="-D__WXMSW__" />
|
||||
<Add option="-DwxUSE_UNICODE=1" />
|
||||
<Add option="-DWXUSINGDLL" />
|
||||
<Add option="-DBOOST_DISABLE_ASSERTS" />
|
||||
<Add directory="../ExtLibs/wxwidgets/include" />
|
||||
<Add directory="../ExtLibs/wxwidgets/lib/gcc_dll/mswu" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add option="-s" />
|
||||
<Add option="-lmingw32" />
|
||||
<Add option="-lopengl32" />
|
||||
<Add option="-limm32" />
|
||||
<Add option="-lcomctl32" />
|
||||
<Add option="-lglu32" />
|
||||
<Add option="-lws2_32" />
|
||||
<Add option="-lgdi32" />
|
||||
<Add option="-lwinmm" />
|
||||
<Add option="-lwxmsw30u_xrc" />
|
||||
<Add option="-lwxmsw30u_stc" />
|
||||
<Add option="-lwxmsw30u_richtext" />
|
||||
<Add option="-lwxmsw30u_ribbon" />
|
||||
<Add option="-lwxmsw30u_propgrid" />
|
||||
<Add option="-lwxmsw30u_aui" />
|
||||
<Add option="-lwxmsw30u_adv" />
|
||||
<Add option="-lwxmsw30u_html" />
|
||||
<Add option="-lwxmsw30u_core" />
|
||||
<Add option="-lwxbase30u_xml" />
|
||||
<Add option="-lwxbase30u_net" />
|
||||
<Add option="-lwxexpat" />
|
||||
<Add option="-lwxbase30u" />
|
||||
<Add option="-lwxpng" />
|
||||
<Add option="-lwxjpeg" />
|
||||
<Add option="-lwxzlib" />
|
||||
<Add option="-lwxtiff" />
|
||||
<Add option="-lsfml-audio" />
|
||||
<Add option="-lsfml-graphics" />
|
||||
<Add option="-lsfml-window" />
|
||||
<Add option="-lsfml-network" />
|
||||
<Add option="-lsfml-system" />
|
||||
<Add directory="../ExtLibs/wxwidgets/lib/gcc_dll/mswu" />
|
||||
<Add directory="../ExtLibs/wxwidgets/lib/gcc_dll" />
|
||||
<Add directory="../ExtLibs/SFML/build-mingw-release/lib" />
|
||||
</Linker>
|
||||
</Target>
|
||||
<Target title="Linux - Release - Edittime">
|
||||
<Option output="../IDE/bin/release/libGDCore.so" prefix_auto="0" extension_auto="0" />
|
||||
<Option object_output="obj/Linux Release/" />
|
||||
<Option type="3" />
|
||||
<Option compiler="gcc" />
|
||||
<Option createDefFile="1" />
|
||||
<Option createStaticLib="1" />
|
||||
<Compiler>
|
||||
<Add option="-O2" />
|
||||
<Add option="-m32" />
|
||||
<Add option="`wx-config --cppflags`" />
|
||||
<Add option="`pkg-config gtk+-2.0 --cflags`" />
|
||||
<Add option='-DGD_CORE_API=""' />
|
||||
<Add option="-DRELEASE" />
|
||||
<Add option="-DLINUX" />
|
||||
<Add option="-DBOOST_DISABLE_ASSERTS" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add option="-s" />
|
||||
<Add option="`wx-config --libs all`" />
|
||||
<Add option="-lsfml-audio" />
|
||||
<Add option="-lsfml-graphics" />
|
||||
<Add option="-lsfml-window" />
|
||||
<Add option="-lsfml-network" />
|
||||
<Add option="-lsfml-system" />
|
||||
<Add directory="../ExtLibs/SFML/build-linux/lib" />
|
||||
</Linker>
|
||||
</Target>
|
||||
<Target title="Linux - Debug - Edittime">
|
||||
<Option output="../IDE/bin/debug/libGDCore.so" prefix_auto="0" extension_auto="0" />
|
||||
<Option object_output="obj/Linux Debug/" />
|
||||
<Option type="3" />
|
||||
<Option compiler="gcc" />
|
||||
<Option createDefFile="1" />
|
||||
<Option createStaticLib="1" />
|
||||
<Compiler>
|
||||
<Add option="-g" />
|
||||
<Add option="-m32" />
|
||||
<Add option="`wx-config --cppflags`" />
|
||||
<Add option="`pkg-config gtk+-2.0 --cflags`" />
|
||||
<Add option='-DGD_CORE_API=""' />
|
||||
<Add option="-DDEBUG" />
|
||||
<Add option="-DLINUX" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add option="`wx-config --libs all`" />
|
||||
<Add option="-lsfml-audio" />
|
||||
<Add option="-lsfml-graphics" />
|
||||
<Add option="-lsfml-window" />
|
||||
<Add option="-lsfml-network" />
|
||||
<Add option="-lsfml-system" />
|
||||
<Add directory="../ExtLibs/SFML/build-linux/lib" />
|
||||
</Linker>
|
||||
</Target>
|
||||
</Build>
|
||||
<Compiler>
|
||||
<Add option="-Wall" />
|
||||
<Add option="-fexceptions" />
|
||||
<Add option="-DGD_IDE_ONLY" />
|
||||
<Add directory="../Core" />
|
||||
<Add directory="../ExtLibs/boost" />
|
||||
<Add directory="../ExtLibs/SFML/include" />
|
||||
</Compiler>
|
||||
<ResourceCompiler>
|
||||
<Add directory="../Core" />
|
||||
</ResourceCompiler>
|
||||
<Unit filename="GDCore/CommonTools.cpp" />
|
||||
<Unit filename="GDCore/CommonTools.h" />
|
||||
<Unit filename="GDCore/DocMainPage.h" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/BehaviorMetadata.cpp" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/BehaviorMetadata.h" />
|
||||
<Unit filename="GDCore/Events/Builtin/CommentEvent.cpp" />
|
||||
<Unit filename="GDCore/Events/Builtin/CommentEvent.h" />
|
||||
<Unit filename="GDCore/Events/Builtin/ForEachEvent.cpp" />
|
||||
<Unit filename="GDCore/Events/Builtin/ForEachEvent.h" />
|
||||
<Unit filename="GDCore/Events/Builtin/LinkEvent.cpp" />
|
||||
<Unit filename="GDCore/Events/Builtin/LinkEvent.h" />
|
||||
<Unit filename="GDCore/Events/Builtin/RepeatEvent.cpp" />
|
||||
<Unit filename="GDCore/Events/Builtin/RepeatEvent.h" />
|
||||
<Unit filename="GDCore/Events/Builtin/StandardEvent.cpp" />
|
||||
<Unit filename="GDCore/Events/Builtin/StandardEvent.h" />
|
||||
<Unit filename="GDCore/Events/Builtin/WhileEvent.cpp" />
|
||||
<Unit filename="GDCore/Events/Builtin/WhileEvent.h" />
|
||||
<Unit filename="GDCore/Events/Event.cpp" />
|
||||
<Unit filename="GDCore/Events/Event.h" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/EventMetadata.cpp" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/EventMetadata.h" />
|
||||
<Unit filename="GDCore/Events/CodeGeneration/EventsCodeGenerationContext.cpp" />
|
||||
<Unit filename="GDCore/Events/CodeGeneration/EventsCodeGenerationContext.h" />
|
||||
<Unit filename="GDCore/Events/CodeGeneration/EventsCodeGenerator.cpp" />
|
||||
<Unit filename="GDCore/Events/CodeGeneration/EventsCodeGenerator.h" />
|
||||
<Unit filename="GDCore/Events/Tools/EventsCodeNameMangler.cpp" />
|
||||
<Unit filename="GDCore/Events/Tools/EventsCodeNameMangler.h" />
|
||||
<Unit filename="GDCore/Events/Expression.h" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/ExpressionMetadata.cpp" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/ExpressionMetadata.h" />
|
||||
<Unit filename="GDCore/Events/Parsers/ExpressionParser.cpp" />
|
||||
<Unit filename="GDCore/Events/Parsers/ExpressionParser.h" />
|
||||
<Unit filename="GDCore/Events/CodeGeneration/ExpressionsCodeGeneration.cpp" />
|
||||
<Unit filename="GDCore/Events/CodeGeneration/ExpressionsCodeGeneration.h" />
|
||||
<Unit filename="GDCore/Events/Instruction.cpp" />
|
||||
<Unit filename="GDCore/Events/Instruction.h" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/InstructionMetadata.cpp" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/InstructionMetadata.h" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/ObjectMetadata.cpp" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/ObjectMetadata.h" />
|
||||
<Unit filename="GDCore/Events/Serialization.cpp" />
|
||||
<Unit filename="GDCore/Events/Serialization.h" />
|
||||
<Unit filename="GDCore/IDE/ActionSentenceFormatter.cpp" />
|
||||
<Unit filename="GDCore/IDE/ActionSentenceFormatter.h" />
|
||||
<Unit filename="GDCore/IDE/Project/ArbitraryResourceWorker.cpp" />
|
||||
<Unit filename="GDCore/IDE/Project/ArbitraryResourceWorker.h" />
|
||||
<Unit filename="GDCore/IDE/Clipboard.cpp" />
|
||||
<Unit filename="GDCore/IDE/Clipboard.h" />
|
||||
<Unit filename="GDCore/IDE/CommonBitmapProvider.cpp" />
|
||||
<Unit filename="GDCore/IDE/wxTools/CommonBitmapProvider.h" />
|
||||
<Unit filename="GDCore/IDE/ConditionSentenceFormatter.cpp" />
|
||||
<Unit filename="GDCore/IDE/ConditionSentenceFormatter.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/AdvancedEntryDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/AdvancedEntryDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseBehaviorDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseBehaviorDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseBehaviorTypeDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseBehaviorTypeDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseLayerDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseLayerDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseObjectDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseObjectDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseObjectTypeDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseObjectTypeDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseVariableDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ChooseVariableDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditComment.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditComment.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditExpressionDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditExpressionDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditForEachEvent.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditForEachEvent.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditLayerDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditLayerDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditLink.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditLink.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditRepeatEvent.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditRepeatEvent.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditStrExpressionDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EditStrExpressionDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/GridSetupDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/GridSetupDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/InitialInstancesPropgridHelper.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/InitialInstancesPropgridHelper.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/InstancesAdvancedPasteDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/InstancesAdvancedPasteDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayersEditorPanel.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayersEditorPanel.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayoutEditorCanvas/LayoutEditorCanvas.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayoutEditorCanvas/LayoutEditorCanvas.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayoutEditorCanvas/LayoutEditorCanvas2.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayoutEditorCanvas/LayoutEditorCanvasAssociatedEditor.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayoutEditorCanvas/LayoutEditorCanvasAssociatedEditor.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayoutEditorCanvas/LayoutEditorCanvasOptions.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayoutEditorCanvas/LayoutEditorCanvasOptions.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayoutEditorCanvas/LayoutEditorCanvasTextDnd.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/LayoutEditorCanvas/LayoutEditorCanvasTextDnd.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/MainFrameWrapper.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/MainFrameWrapper.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ObjectListDialogsHelper.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ObjectListDialogsHelper.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ObjectsOnBadLayerDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ObjectsOnBadLayerDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ObjectsPropgridHelper.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ObjectsPropgridHelper.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ProjectExtensionsDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ProjectExtensionsDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ProjectUpdateDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ProjectUpdateDialog.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ResourceLibraryDialog.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/ResourceLibraryDialog.h" />
|
||||
<Unit filename="GDCore/IDE/EventsChangesNotifier.cpp" />
|
||||
<Unit filename="GDCore/IDE/EventsChangesNotifier.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EventsEditor/EventsEditorItemsAreas.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EventsEditor/EventsEditorItemsAreas.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EventsEditor/EventsEditorSelection.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EventsEditor/EventsEditorSelection.h" />
|
||||
<Unit filename="GDCore/IDE/Events/EventsRefactorer.cpp" />
|
||||
<Unit filename="GDCore/IDE/Events/EventsRefactorer.h" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EventsEditor/EventsRenderingHelper.cpp" />
|
||||
<Unit filename="GDCore/IDE/Dialogs/EventsEditor/EventsRenderingHelper.h" />
|
||||
<Unit filename="GDCore/IDE/Events/EventsVariablesFinder.cpp" />
|
||||
<Unit filename="GDCore/IDE/Events/EventsVariablesFinder.h" />
|
||||
<Unit filename="GDCore/IDE/Events/ExpressionsCorrectnessTesting.cpp" />
|
||||
<Unit filename="GDCore/IDE/Events/ExpressionsCorrectnessTesting.h" />
|
||||
<Unit filename="GDCore/IDE/ExtensionsLoader.cpp" />
|
||||
<Unit filename="GDCore/IDE/ExtensionsLoader.h" />
|
||||
<Unit filename="GDCore/IDE/Project/ResourcesInUseHelper.cpp" />
|
||||
<Unit filename="GDCore/IDE/Project/ResourcesInUseHelper.h" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/MetadataProvider.cpp" />
|
||||
<Unit filename="GDCore/Extensions/Metadata/MetadataProvider.h" />
|
||||
<Unit filename="GDCore/IDE/PlatformLoader.cpp" />
|
||||
<Unit filename="GDCore/IDE/PlatformLoader.h" />
|
||||
<Unit filename="GDCore/IDE/PlatformManager.cpp" />
|
||||
<Unit filename="GDCore/IDE/PlatformManager.h" />
|
||||
<Unit filename="GDCore/IDE/ProjectExporter.cpp" />
|
||||
<Unit filename="GDCore/IDE/ProjectExporter.h" />
|
||||
<Unit filename="GDCore/IDE/Project/ProjectResourcesCopier.cpp" />
|
||||
<Unit filename="GDCore/IDE/Project/ProjectResourcesCopier.h" />
|
||||
<Unit filename="GDCore/IDE/Project/ResourcesAbsolutePathChecker.cpp" />
|
||||
<Unit filename="GDCore/IDE/Project/ResourcesAbsolutePathChecker.h" />
|
||||
<Unit filename="GDCore/IDE/Project/ResourcesMergingHelper.cpp" />
|
||||
<Unit filename="GDCore/IDE/Project/ResourcesMergingHelper.h" />
|
||||
<Unit filename="GDCore/IDE/ResourcesUnmergingHelper.cpp" />
|
||||
<Unit filename="GDCore/IDE/ResourcesUnmergingHelper.h" />
|
||||
<Unit filename="GDCore/IDE/SceneNameMangler.cpp" />
|
||||
<Unit filename="GDCore/IDE/SceneNameMangler.h" />
|
||||
<Unit filename="GDCore/IDE/Events/TextFormatting.h" />
|
||||
<Unit filename="GDCore/IDE/wxTools/AuiTabArt.cpp" />
|
||||
<Unit filename="GDCore/IDE/wxTools/AuiTabArt.h" />
|
||||
<Unit filename="GDCore/IDE/wxTools/FileProperty.cpp" />
|
||||
<Unit filename="GDCore/IDE/wxTools/FileProperty.h" />
|
||||
<Unit filename="GDCore/IDE/wxTools/RecursiveMkDir.cpp" />
|
||||
<Unit filename="GDCore/IDE/wxTools/RecursiveMkDir.h" />
|
||||
<Unit filename="GDCore/IDE/wxTools/SkinHelper.cpp" />
|
||||
<Unit filename="GDCore/IDE/wxTools/SkinHelper.h" />
|
||||
<Unit filename="GDCore/IDE/wxTools/TreeItemStringData.h" />
|
||||
<Unit filename="GDCore/Project/Behavior.cpp" />
|
||||
<Unit filename="GDCore/Project/Behavior.h" />
|
||||
<Unit filename="GDCore/Project/BehaviorsSharedData.cpp" />
|
||||
<Unit filename="GDCore/Project/BehaviorsSharedData.h" />
|
||||
<Unit filename="GDCore/Project/ChangesNotifier.cpp" />
|
||||
<Unit filename="GDCore/Project/ChangesNotifier.h" />
|
||||
<Unit filename="GDCore/Project/ObjectsContainer.cpp" />
|
||||
<Unit filename="GDCore/Project/ObjectsContainer.h" />
|
||||
<Unit filename="GDCore/Project/ExternalEvents.cpp" />
|
||||
<Unit filename="GDCore/Project/ExternalEvents.h" />
|
||||
<Unit filename="GDCore/Project/ExternalLayout.cpp" />
|
||||
<Unit filename="GDCore/Project/ExternalLayout.h" />
|
||||
<Unit filename="GDCore/Project/ImageManager.cpp" />
|
||||
<Unit filename="GDCore/Project/ImageManager.h" />
|
||||
<Unit filename="GDCore/Project/InitialInstance.cpp" />
|
||||
<Unit filename="GDCore/Project/InitialInstance.h" />
|
||||
<Unit filename="GDCore/Project/InitialInstancesContainer.cpp" />
|
||||
<Unit filename="GDCore/Project/InitialInstancesContainer.h" />
|
||||
<Unit filename="GDCore/Project/Layer.cpp" />
|
||||
<Unit filename="GDCore/Project/Layer.h" />
|
||||
<Unit filename="GDCore/Project/Layout.cpp" />
|
||||
<Unit filename="GDCore/Project/Layout.h" />
|
||||
<Unit filename="GDCore/Project/LayoutEditorPreviewer.cpp" />
|
||||
<Unit filename="GDCore/Project/LayoutEditorPreviewer.h" />
|
||||
<Unit filename="GDCore/Project/Object.cpp" />
|
||||
<Unit filename="GDCore/Project/Object.h" />
|
||||
<Unit filename="GDCore/Project/ObjectGroup.cpp" />
|
||||
<Unit filename="GDCore/Project/ObjectGroup.h" />
|
||||
<Unit filename="GDCore/Extensions/Platform.cpp" />
|
||||
<Unit filename="GDCore/Extensions/Platform.h" />
|
||||
<Unit filename="GDCore/Extensions/PlatformExtension.cpp" />
|
||||
<Unit filename="GDCore/Extensions/PlatformExtension.h" />
|
||||
<Unit filename="GDCore/Project/Project.cpp" />
|
||||
<Unit filename="GDCore/Project/Project.h" />
|
||||
<Unit filename="GDCore/Project/ResourcesManager.cpp" />
|
||||
<Unit filename="GDCore/Project/ResourcesManager.h" />
|
||||
<Unit filename="GDCore/Project/RessourcesLoader.cpp" />
|
||||
<Unit filename="GDCore/Project/RessourcesLoader.h" />
|
||||
<Unit filename="GDCore/Project/SourceFile.cpp" />
|
||||
<Unit filename="GDCore/Project/SourceFile.h" />
|
||||
<Unit filename="GDCore/Project/Variable.cpp" />
|
||||
<Unit filename="GDCore/Project/Variable.h" />
|
||||
<Unit filename="GDCore/Project/VariablesContainer.cpp" />
|
||||
<Unit filename="GDCore/Project/VariablesContainer.h" />
|
||||
<Unit filename="GDCore/TinyXml/tinystr.cpp" />
|
||||
<Unit filename="GDCore/TinyXml/tinystr.h" />
|
||||
<Unit filename="GDCore/TinyXml/tinyxml.cpp" />
|
||||
<Unit filename="GDCore/TinyXml/tinyxml.h" />
|
||||
<Unit filename="GDCore/TinyXml/tinyxmlerror.cpp" />
|
||||
<Unit filename="GDCore/TinyXml/tinyxmlparser.cpp" />
|
||||
<Unit filename="GDCore/Tools/DynamicLibrariesTools.cpp" />
|
||||
<Unit filename="GDCore/Tools/DynamicLibrariesTools.h" />
|
||||
<Unit filename="GDCore/Tools/HelpFileAccess.cpp" />
|
||||
<Unit filename="GDCore/Tools/HelpFileAccess.h" />
|
||||
<Unit filename="GDCore/Tools/Locale/LocaleManager.cpp" />
|
||||
<Unit filename="GDCore/Tools/Locale/LocaleManager.h" />
|
||||
<Unit filename="GDCore/Tools/Version.h" />
|
||||
<Unit filename="GDCore/Tools/VersionWrapper.cpp" />
|
||||
<Unit filename="GDCore/Tools/VersionWrapper.h" />
|
||||
<Unit filename="wxsmith/AdvancedEntryDialog.wxs" />
|
||||
<Unit filename="wxsmith/ChooseBehaviorDialog.wxs" />
|
||||
<Unit filename="wxsmith/ChooseBehaviorTypeDialog.wxs" />
|
||||
<Unit filename="wxsmith/ChooseLayerDialog.wxs" />
|
||||
<Unit filename="wxsmith/ChooseObjectDialog.wxs" />
|
||||
<Unit filename="wxsmith/ChooseObjectTypeDialog.wxs" />
|
||||
<Unit filename="wxsmith/ChooseVariableDialog.wxs" />
|
||||
<Unit filename="wxsmith/EditComment.wxs" />
|
||||
<Unit filename="wxsmith/EditExpressionDialog.wxs" />
|
||||
<Unit filename="wxsmith/EditForEachEvent.wxs" />
|
||||
<Unit filename="wxsmith/EditLayerDialog.wxs" />
|
||||
<Unit filename="wxsmith/EditLink.wxs" />
|
||||
<Unit filename="wxsmith/EditRepeatEvent.wxs" />
|
||||
<Unit filename="wxsmith/EditStrExpressionDialog.wxs" />
|
||||
<Unit filename="wxsmith/GridSetupDialog.wxs" />
|
||||
<Unit filename="wxsmith/InstancesAdvancedPasteDialog.wxs" />
|
||||
<Unit filename="wxsmith/LayersEditorPanel.wxs" />
|
||||
<Unit filename="wxsmith/LayoutEditorCanvas.wxs" />
|
||||
<Unit filename="wxsmith/ObjectsOnBadLayerDialog.wxs" />
|
||||
<Unit filename="wxsmith/ProjectExtensionsDialog.wxs" />
|
||||
<Unit filename="wxsmith/ProjectUpdateDialog.wxs" />
|
||||
<Unit filename="wxsmith/ResourceLibraryDialog.wxs" />
|
||||
<Unit filename="wxsmith/SpriteObjectEditor.wxs" />
|
||||
<Unit filename="wxsmith/ResourcesEditor.wxs" />
|
||||
<Extensions>
|
||||
<code_completion />
|
||||
<envvars />
|
||||
<debugger />
|
||||
<wxsmith version="1">
|
||||
<resources>
|
||||
<wxDialog wxs="wxsmith/ChooseVariableDialog.wxs" src="GDCore/IDE/Dialogs/ChooseVariableDialog.cpp" hdr="GDCore/IDE/Dialogs/ChooseVariableDialog.h" fwddecl="0" i18n="1" name="ChooseVariableDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/ResourceLibraryDialog.wxs" src="GDCore/IDE/Dialogs/ResourceLibraryDialog.cpp" hdr="GDCore/IDE/Dialogs/ResourceLibraryDialog.h" fwddecl="0" i18n="1" name="ResourceLibraryDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/ProjectExtensionsDialog.wxs" src="GDCore/IDE/Dialogs/ProjectExtensionsDialog.cpp" hdr="GDCore/IDE/Dialogs/ProjectExtensionsDialog.h" fwddecl="0" i18n="1" name="ProjectExtensionsDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/ChooseObjectDialog.wxs" src="GDCore/IDE/Dialogs/ChooseObjectDialog.cpp" hdr="GDCore/IDE/Dialogs/ChooseObjectDialog.h" fwddecl="0" i18n="1" name="ChooseObjectDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/ChooseBehaviorDialog.wxs" src="GDCore/IDE/Dialogs/ChooseBehaviorDialog.cpp" hdr="GDCore/IDE/Dialogs/ChooseBehaviorDialog.h" fwddecl="0" i18n="1" name="ChooseBehaviorDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/ChooseLayerDialog.wxs" src="GDCore/IDE/Dialogs/ChooseLayerDialog.cpp" hdr="GDCore/IDE/Dialogs/ChooseLayerDialog.h" fwddecl="0" i18n="1" name="ChooseLayerDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/EditExpressionDialog.wxs" src="GDCore/IDE/Dialogs/EditExpressionDialog.cpp" hdr="GDCore/IDE/Dialogs/EditExpressionDialog.h" fwddecl="0" i18n="1" name="EditExpressionDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/EditStrExpressionDialog.wxs" src="GDCore/IDE/Dialogs/EditStrExpressionDialog.cpp" hdr="GDCore/IDE/Dialogs/EditStrExpressionDialog.h" fwddecl="0" i18n="1" name="EditStrExpressionDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/AdvancedEntryDialog.wxs" src="GDCore/IDE/Dialogs/AdvancedEntryDialog.cpp" hdr="GDCore/IDE/Dialogs/AdvancedEntryDialog.h" fwddecl="0" i18n="1" name="AdvancedEntryDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/ChooseObjectTypeDialog.wxs" src="GDCore/IDE/Dialogs/ChooseObjectTypeDialog.cpp" hdr="GDCore/IDE/Dialogs/ChooseObjectTypeDialog.h" fwddecl="0" i18n="1" name="ChooseObjectTypeDialog" language="CPP" />
|
||||
<wxPanel wxs="wxsmith/LayoutEditorCanvas.wxs" src="GDCore/IDE/Dialogs/LayoutEditorCanvas.cpp" hdr="GDCore/IDE/Dialogs/LayoutEditorCanvas.h" fwddecl="0" i18n="1" name="LayoutEditorCanvas" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/GridSetupDialog.wxs" src="GDCore/IDE/Dialogs/GridSetupDialog.cpp" hdr="GDCore/IDE/Dialogs/GridSetupDialog.h" fwddecl="0" i18n="1" name="GridSetupDialog" language="CPP" />
|
||||
<wxPanel wxs="wxsmith/LayersEditorPanel.wxs" src="GDCore/IDE/Dialogs/LayersEditorPanel.cpp" hdr="GDCore/IDE/Dialogs/LayersEditorPanel.h" fwddecl="0" i18n="1" name="LayersEditorPanel" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/InstancesAdvancedPasteDialog.wxs" src="GDCore/IDE/Dialogs/InstancesAdvancedPasteDialog.cpp" hdr="GDCore/IDE/Dialogs/InstancesAdvancedPasteDialog.h" fwddecl="0" i18n="1" name="InstancesAdvancedPasteDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/ChooseBehaviorTypeDialog.wxs" src="GDCore/IDE/Dialogs/ChooseBehaviorTypeDialog.cpp" hdr="GDCore/IDE/Dialogs/ChooseBehaviorTypeDialog.h" fwddecl="0" i18n="1" name="ChooseBehaviorTypeDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/EditLayerDialog.wxs" src="GDCore/IDE/Dialogs/EditLayerDialog.cpp" hdr="GDCore/IDE/Dialogs/EditLayerDialog.h" fwddecl="0" i18n="1" name="EditLayerDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/EditLink.wxs" src="GDCore/IDE/Dialogs/EditLink.cpp" hdr="GDCore/IDE/Dialogs/EditLink.h" fwddecl="0" i18n="1" name="EditLink" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/EditComment.wxs" src="GDCore/IDE/Dialogs/EditComment.cpp" hdr="GDCore/IDE/Dialogs/EditComment.h" fwddecl="0" i18n="1" name="EditComment" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/EditForEachEvent.wxs" src="GDCore/IDE/Dialogs/EditForEachEvent.cpp" hdr="GDCore/IDE/Dialogs/EditForEachEvent.h" fwddecl="0" i18n="1" name="EditForEachEvent" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/EditRepeatEvent.wxs" src="GDCore/IDE/Dialogs/EditRepeatEvent.cpp" hdr="GDCore/IDE/Dialogs/EditRepeatEvent.h" fwddecl="0" i18n="1" name="EditRepeatEvent" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/ProjectUpdateDialog.wxs" src="GDCore/IDE/Dialogs/ProjectUpdateDialog.cpp" hdr="GDCore/IDE/Dialogs/ProjectUpdateDialog.h" fwddecl="0" i18n="1" name="ProjectUpdateDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/SpriteObjectEditor.wxs" src="GDCore/Extensions/Builtin/SpriteExtension/Dialogs/SpriteObjectEditor.cpp" hdr="GDCore/Extensions/Builtin/SpriteExtension/Dialogs/SpriteObjectEditor.h" fwddecl="0" i18n="1" name="SpriteObjectEditor" language="CPP" />
|
||||
<wxPanel wxs="wxsmith/ResourcesEditor.wxs" src="GDCore/IDE/Dialogs/ResourcesEditor.cpp" hdr="GDCore/IDE/Dialogs/ResourcesEditor.h" fwddecl="0" i18n="1" name="ResourcesEditor" language="CPP" />
|
||||
</resources>
|
||||
</wxsmith>
|
||||
</Extensions>
|
||||
</Project>
|
||||
</CodeBlocks_project_file>
|
@@ -21,8 +21,6 @@
|
||||
#define GD_DEPRECATED
|
||||
#endif
|
||||
|
||||
class wxString;
|
||||
|
||||
namespace gd
|
||||
{
|
||||
|
||||
|
@@ -78,7 +78,6 @@
|
||||
* The installation is fairly simple :<br>
|
||||
* <br>
|
||||
* - Launch the installer.<br>
|
||||
* - Uncheck "Check for updated files on the TDM-GCC server" (otherwise you won't get TDM-GCC 4.9.2 but a more recent version that won't be compatible with wxWidgets pre-compiled binaries)
|
||||
* - Choose Create.<br>
|
||||
|
||||
\image html compilerInstall1.png
|
||||
@@ -157,9 +156,6 @@
|
||||
* Binaries are created into *Binaries/Output/Release_{OS}* folder.
|
||||
*
|
||||
* To launch GDevelop in Windows, double click on **GDIDE**. For Linux, launch **StartGDevelop.sh**.
|
||||
*
|
||||
* If the build failed, check that you've properly installed wxWidgets and that you have installed any required
|
||||
* development library.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -192,18 +188,6 @@ sudo apt-get install curl
|
||||
sudo apt-get install devscripts
|
||||
\endcode
|
||||
*
|
||||
* \subsection wxWidgets Install wxWidgets development libraries
|
||||
*
|
||||
* Most distributions have wxWidgets 3 development libraries available: install them using your package manager. On Ubuntu:
|
||||
\code
|
||||
sudo apt-get install libwxgtk3.0-dev
|
||||
\endcode
|
||||
|
||||
You should also have GTK+ development libraries installed. For GTK+2:
|
||||
\code
|
||||
sudo apt-get install libgtk2.0-dev
|
||||
\endcode
|
||||
|
||||
*
|
||||
* \subsection installcmake Install CMake
|
||||
* You'll need CMake to build GDevelop: See more on \subpage installAndUseCMake.
|
||||
@@ -222,7 +206,6 @@ sudo apt-get install libgtk2.0-dev
|
||||
brew install cmake
|
||||
brew install p7zip
|
||||
brew install pkgconfig
|
||||
brew install wxwidgets
|
||||
brew install freetype
|
||||
\endcode
|
||||
* If you want to generate the documentation and translations, install Doxygen and Gettext:
|
||||
@@ -248,44 +231,6 @@ make -j4
|
||||
/**
|
||||
* \page recommendedToolsAndConventions Recommended tools and advices to work with GD
|
||||
*
|
||||
* \section texteditor Text editor
|
||||
*
|
||||
* GDevelop is compiled thanks to CMake which can generate *Makefiles* or a project file for most popular IDE available.<br>
|
||||
*
|
||||
* [Sublime Text](http://www.sublimetext.com/) is a very nice text editor for programmers:
|
||||
* *"You'll love the slick user interface, extraordinary features and amazing performance."*. <br>
|
||||
* It has nice features like shortcut to search for a file at an amazing speed (just type a few letters of the file name you're searching for),
|
||||
* multiple selection, plugins for better C++ and Javascript support.
|
||||
*
|
||||
* Take a look at it if you're unsure about which IDE to use. If you're more familiar with another IDE,
|
||||
* ask CMake to generate a project file for it.
|
||||
*
|
||||
* ------
|
||||
*
|
||||
* \section designers Visual designers for IDE or GDCore dialogs
|
||||
*
|
||||
* \subsection newDesigner "New" dialogs created with wxCrafter
|
||||
*
|
||||
* New dialogs are designed using [wxCrafter](http://wxcrafter.codelite.org/). Download and launch it.
|
||||
*
|
||||
* All dialogs of GDCore, GDCpp, GDJS or the IDE created using wxCrafter are stored into a single .wxcp file in
|
||||
* the wxsmith folder, next to files of dialogs created with wxSmith.<br>
|
||||
* For example, open *GDJS/wxsmith/GDJS.wxcp*.
|
||||
*
|
||||
* You can edit and add new dialogs. Do not forget to click on "Generate code" if you made any change.
|
||||
*
|
||||
* wxCrafter creates base classes for dialog (their names start by *Base*), and any code must be inserted into
|
||||
* a derived class. See examples in *GDJS*.
|
||||
*
|
||||
* \subsection oldDesigner "Old" dialogs created with wxSmith
|
||||
* If you want to edit a dialog, first search if there is a file called *filename*.wxs in the folder *wxsmith* (in GDCore,
|
||||
* GDCpp or IDE). If it is present, the dialog was made using the wxSmith visual designer integrated into the Code::Blocks IDE:
|
||||
* - Download [Code::Blocks](http://www.codeblocks.org/) and launch it.
|
||||
* - Open the .cbp in GDCore, GDCpp or IDE folder.
|
||||
* - In the tab "Resources", locate the dialog to edit.
|
||||
*
|
||||
* ------
|
||||
*
|
||||
* \section git Git and GitHub
|
||||
*
|
||||
* Git is an amazing *version control system*. If you never used it before, take a look at some tutorials, there
|
||||
@@ -413,8 +358,6 @@ double twopointfive = twopointfive.To<double>();
|
||||
//twopointfive == 2.5
|
||||
\endcode
|
||||
*
|
||||
* gd::String can also be implicitly constructed from a wxString or a sf::String, so that it is easy to use when you're dealing
|
||||
* with wxWidgets GUI dialogs/editors or SFML objects.
|
||||
*
|
||||
* For more information, see the complete reference of the class. Tests cases have also been made for most functions.
|
||||
*/
|
||||
|
@@ -4,15 +4,8 @@
|
||||
* reserved. This project is released under the MIT License.
|
||||
*/
|
||||
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
#include <wx/dcmemory.h>
|
||||
#endif
|
||||
#include "CommentEvent.h"
|
||||
#include "GDCore/CommonTools.h"
|
||||
#include "GDCore/IDE/Dialogs/EditComment.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorItemsAreas.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorSelection.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsRenderingHelper.h"
|
||||
#include "GDCore/Serialization/SerializerElement.h"
|
||||
|
||||
using namespace std;
|
||||
@@ -47,143 +40,4 @@ void CommentEvent::UnserializeFrom(gd::Project &project,
|
||||
com2 = element.GetChild("comment2", 0, "Com2").GetValue().GetString();
|
||||
}
|
||||
|
||||
gd::BaseEvent::EditEventReturnType CommentEvent::EditEvent(
|
||||
wxWindow *parent_,
|
||||
gd::Project &game_,
|
||||
gd::Layout &scene_,
|
||||
gd::MainFrameWrapper &mainFrameWrapper_) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
EditComment dialog(parent_, *this);
|
||||
if (dialog.ShowModal() == 0) return Cancelled;
|
||||
#endif
|
||||
|
||||
return ChangesMadeButNoNeedForEventsRecompilation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the event
|
||||
*/
|
||||
void CommentEvent::Render(wxDC &dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas &areas,
|
||||
gd::EventsEditorSelection &selection,
|
||||
const gd::Platform &) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
x += 1; // Small border
|
||||
|
||||
gd::EventsRenderingHelper *renderingHelper = gd::EventsRenderingHelper::Get();
|
||||
renderingHelper->GetHTMLRenderer().SetDC(&dc);
|
||||
renderingHelper->GetHTMLRenderer().SetStandardFonts(
|
||||
renderingHelper->GetNiceFont().GetPointSize());
|
||||
|
||||
// Prepare HTML texts
|
||||
gd::String str1 =
|
||||
"<FONT color=" +
|
||||
wxColour(textR, textG, textB).GetAsString(wxC2S_HTML_SYNTAX) + ">" +
|
||||
renderingHelper->GetHTMLText(com1) + "</FONT>";
|
||||
gd::String str2 =
|
||||
"<FONT color=" +
|
||||
wxColour(textR, textG, textB).GetAsString(wxC2S_HTML_SYNTAX) + ">" +
|
||||
renderingHelper->GetHTMLText(com2) + "</FONT>";
|
||||
|
||||
// Calculate space constraints
|
||||
const int sideSeparation = 3; // Spacing between text and borders
|
||||
|
||||
unsigned int textWidth = com2.empty() ? width - sideSeparation * 2
|
||||
: width / 2 - sideSeparation * 2;
|
||||
renderingHelper->GetHTMLRenderer().SetSize(textWidth, 9999);
|
||||
|
||||
renderingHelper->GetHTMLRenderer().SetHtmlText(str1);
|
||||
unsigned int text1Height =
|
||||
renderingHelper->GetHTMLRenderer().GetTotalHeight();
|
||||
|
||||
renderingHelper->GetHTMLRenderer().SetHtmlText(str2);
|
||||
unsigned int text2Height =
|
||||
renderingHelper->GetHTMLRenderer().GetTotalHeight();
|
||||
|
||||
// Prepare background
|
||||
dc.SetBrush(wxBrush(wxColour(r, v, b), wxBRUSHSTYLE_TRANSPARENT));
|
||||
dc.SetPen(wxPen(wxColour(r / 2, v / 2, b / 2), 1));
|
||||
|
||||
// Draw the background
|
||||
unsigned int height = std::max(text1Height, text2Height) + sideSeparation * 2;
|
||||
height = std::max(height, (unsigned int)15);
|
||||
wxRect rectangle(x, y, width - 2, height);
|
||||
dc.GradientFillLinear(rectangle,
|
||||
wxColour(r + 20 > 255 ? 255 : r + 20,
|
||||
v + 20 > 255 ? 255 : v + 20,
|
||||
b + 20 > 255 ? 255 : b + 20),
|
||||
wxColour(r, v, b),
|
||||
wxSOUTH);
|
||||
dc.DrawRectangle(rectangle);
|
||||
|
||||
// Draw text
|
||||
{
|
||||
renderingHelper->GetHTMLRenderer().SetHtmlText(str1);
|
||||
wxArrayInt neededArray;
|
||||
renderingHelper->GetHTMLRenderer().Render(
|
||||
x + sideSeparation, y + sideSeparation, neededArray);
|
||||
}
|
||||
if (!com2.empty()) // Optional text
|
||||
{
|
||||
renderingHelper->GetHTMLRenderer().SetHtmlText(str2);
|
||||
wxArrayInt neededArray;
|
||||
renderingHelper->GetHTMLRenderer().Render(
|
||||
x + sideSeparation + textWidth + sideSeparation,
|
||||
y + sideSeparation,
|
||||
neededArray);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned int CommentEvent::GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform &) const {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
if (eventHeightNeedUpdate) {
|
||||
gd::EventsRenderingHelper *renderingHelper =
|
||||
gd::EventsRenderingHelper::Get();
|
||||
|
||||
wxMemoryDC dc;
|
||||
wxBitmap fakeBmp(1, 1);
|
||||
dc.SelectObject(fakeBmp);
|
||||
|
||||
renderingHelper->GetHTMLRenderer().SetDC(&dc);
|
||||
renderingHelper->GetHTMLRenderer().SetStandardFonts(
|
||||
renderingHelper->GetNiceFont().GetPointSize());
|
||||
|
||||
gd::String str1 =
|
||||
"<FONT color=" +
|
||||
wxColour(textR, textG, textB).GetAsString(wxC2S_HTML_SYNTAX) + ">" +
|
||||
renderingHelper->GetHTMLText(com1) + "</FONT>";
|
||||
gd::String str2 =
|
||||
"<FONT color=" +
|
||||
wxColour(textR, textG, textB).GetAsString(wxC2S_HTML_SYNTAX) + ">" +
|
||||
renderingHelper->GetHTMLText(com2) + "</FONT>";
|
||||
|
||||
// Calculate space constraints
|
||||
const int sideSeparation = 3; // Spacing between text and borders
|
||||
|
||||
unsigned int textWidth = com2.empty() ? width - sideSeparation * 2
|
||||
: width / 2 - sideSeparation * 2;
|
||||
renderingHelper->GetHTMLRenderer().SetSize(textWidth, 9999);
|
||||
|
||||
renderingHelper->GetHTMLRenderer().SetHtmlText(str1);
|
||||
unsigned int text1Height =
|
||||
renderingHelper->GetHTMLRenderer().GetTotalHeight();
|
||||
|
||||
renderingHelper->GetHTMLRenderer().SetHtmlText(str2);
|
||||
unsigned int text2Height =
|
||||
renderingHelper->GetHTMLRenderer().GetTotalHeight();
|
||||
|
||||
unsigned int height =
|
||||
std::max(text1Height, text2Height) + sideSeparation * 2;
|
||||
height = std::max(height, (unsigned int)15);
|
||||
renderedHeight = height;
|
||||
}
|
||||
#endif
|
||||
return renderedHeight + 2; // 2 : 2 small borders
|
||||
}
|
||||
|
||||
} // namespace gd
|
||||
|
@@ -7,26 +7,10 @@
|
||||
#define COMMENTEVENT_H
|
||||
|
||||
#include "GDCore/Events/Event.h"
|
||||
class TiXmlElement;
|
||||
namespace gd {
|
||||
class Layout;
|
||||
}
|
||||
namespace gd {
|
||||
class Project;
|
||||
}
|
||||
namespace gd {
|
||||
class MainFrameWrapper;
|
||||
}
|
||||
namespace gd {
|
||||
class Project;
|
||||
}
|
||||
class wxWindow;
|
||||
namespace gd {
|
||||
class EventsEditorItemsAreas;
|
||||
}
|
||||
namespace gd {
|
||||
class EventsEditorSelection;
|
||||
}
|
||||
|
||||
namespace gd {
|
||||
|
||||
@@ -75,29 +59,6 @@ class GD_CORE_API CommentEvent : public gd::BaseEvent {
|
||||
|
||||
gd::String com1; ///< Comment
|
||||
gd::String com2; ///< Optional second column comment, deprecated
|
||||
|
||||
/**
|
||||
* Called by event editor to draw the event.
|
||||
*/
|
||||
virtual void Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform&);
|
||||
|
||||
/**
|
||||
* Must return the height of the event when rendered
|
||||
*/
|
||||
virtual unsigned int GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform&) const;
|
||||
|
||||
virtual EditEventReturnType EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& game_,
|
||||
gd::Layout& scene_,
|
||||
gd::MainFrameWrapper& mainFrameWrapper_);
|
||||
};
|
||||
|
||||
} // namespace gd
|
||||
|
@@ -11,10 +11,6 @@
|
||||
#include "GDCore/Events/CodeGeneration/ExpressionsCodeGeneration.h"
|
||||
#include "GDCore/Events/Serialization.h"
|
||||
#include "GDCore/Events/Tools/EventsCodeNameMangler.h"
|
||||
#include "GDCore/IDE/Dialogs/EditForEachEvent.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorItemsAreas.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorSelection.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsRenderingHelper.h"
|
||||
#include "GDCore/Serialization/SerializerElement.h"
|
||||
#include "GDCore/TinyXml/tinyxml.h"
|
||||
|
||||
@@ -89,110 +85,4 @@ void ForEachEvent::UnserializeFrom(gd::Project& project,
|
||||
project, events, element.GetChild("events", 0, "Events"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the event in the bitmap
|
||||
*/
|
||||
void ForEachEvent::Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
gd::EventsRenderingHelper* renderingHelper = gd::EventsRenderingHelper::Get();
|
||||
int border = renderingHelper->instructionsListBorder;
|
||||
const int forEachTextHeight = 20;
|
||||
|
||||
// Draw header rectangle
|
||||
wxRect headerRect(x, y, width, forEachTextHeight);
|
||||
renderingHelper->DrawNiceRectangle(dc, headerRect);
|
||||
|
||||
// For Each text
|
||||
dc.SetFont(renderingHelper->GetNiceFont().Bold());
|
||||
if (!IsDisabled())
|
||||
dc.SetTextForeground(wxColour(0, 0, 0));
|
||||
else
|
||||
dc.SetTextForeground(wxColour(160, 160, 160));
|
||||
dc.DrawText(_("For each object") + " " + objectsToPick.GetPlainString() +
|
||||
_(", repeat :"),
|
||||
x + 4,
|
||||
y + 3);
|
||||
|
||||
// Draw conditions rectangle
|
||||
wxRect rect(x,
|
||||
y + forEachTextHeight,
|
||||
renderingHelper->GetConditionsColumnWidth() + border,
|
||||
GetRenderedHeight(width, platform) - forEachTextHeight);
|
||||
renderingHelper->DrawNiceRectangle(dc, rect);
|
||||
|
||||
// Draw actions and conditions
|
||||
renderingHelper->DrawConditionsList(
|
||||
conditions,
|
||||
dc,
|
||||
x + border,
|
||||
y + forEachTextHeight + border,
|
||||
renderingHelper->GetConditionsColumnWidth() - border,
|
||||
this,
|
||||
areas,
|
||||
selection,
|
||||
platform);
|
||||
renderingHelper->DrawActionsList(
|
||||
actions,
|
||||
dc,
|
||||
x + renderingHelper->GetConditionsColumnWidth() + border,
|
||||
y + forEachTextHeight + border,
|
||||
width - renderingHelper->GetConditionsColumnWidth() - border * 2,
|
||||
this,
|
||||
areas,
|
||||
selection,
|
||||
platform);
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned int ForEachEvent::GetRenderedHeight(
|
||||
unsigned int width, const gd::Platform& platform) const {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
if (eventHeightNeedUpdate) {
|
||||
gd::EventsRenderingHelper* renderingHelper =
|
||||
gd::EventsRenderingHelper::Get();
|
||||
int border = renderingHelper->instructionsListBorder;
|
||||
const int forEachTextHeight = 20;
|
||||
|
||||
// Get maximum height needed
|
||||
int conditionsHeight = renderingHelper->GetRenderedConditionsListHeight(
|
||||
conditions,
|
||||
renderingHelper->GetConditionsColumnWidth() - border,
|
||||
platform);
|
||||
int actionsHeight = renderingHelper->GetRenderedActionsListHeight(
|
||||
actions,
|
||||
width - renderingHelper->GetConditionsColumnWidth() - border * 2,
|
||||
platform);
|
||||
|
||||
renderedHeight =
|
||||
((conditionsHeight > actionsHeight ? conditionsHeight : actionsHeight) +
|
||||
forEachTextHeight) +
|
||||
border * 2;
|
||||
eventHeightNeedUpdate = false;
|
||||
}
|
||||
|
||||
return renderedHeight;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
gd::BaseEvent::EditEventReturnType ForEachEvent::EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& game_,
|
||||
gd::Layout& scene_,
|
||||
gd::MainFrameWrapper& mainFrameWrapper_) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
EditForEachEvent dialog(parent_, *this, game_, scene_);
|
||||
if (dialog.ShowModal() == 0) return Cancelled;
|
||||
#endif
|
||||
|
||||
return ChangesMade;
|
||||
}
|
||||
|
||||
} // namespace gd
|
||||
|
@@ -8,27 +8,11 @@
|
||||
#define FOREACHEVENT_H
|
||||
#include "GDCore/Events/Event.h"
|
||||
#include "GDCore/Events/EventsList.h"
|
||||
class RuntimeScene;
|
||||
namespace gd {
|
||||
class Instruction;
|
||||
}
|
||||
namespace gd {
|
||||
class Project;
|
||||
}
|
||||
namespace gd {
|
||||
class MainFrameWrapper;
|
||||
}
|
||||
class TiXmlElement;
|
||||
namespace gd {
|
||||
class EventsEditorItemsAreas;
|
||||
}
|
||||
namespace gd {
|
||||
class EventsEditorSelection;
|
||||
}
|
||||
namespace gd {
|
||||
class Layout;
|
||||
}
|
||||
class wxWindow;
|
||||
|
||||
namespace gd {
|
||||
|
||||
@@ -75,32 +59,6 @@ class GD_CORE_API ForEachEvent : public gd::BaseEvent {
|
||||
virtual void UnserializeFrom(gd::Project& project,
|
||||
const SerializerElement& element);
|
||||
|
||||
/**
|
||||
* Called by event editor to draw the event.
|
||||
*/
|
||||
virtual void Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform);
|
||||
|
||||
/**
|
||||
* Must return the height of the event when rendered
|
||||
*/
|
||||
virtual unsigned int GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform& platform) const;
|
||||
|
||||
/**
|
||||
* Called when the user want to edit the event
|
||||
*/
|
||||
virtual EditEventReturnType EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& game_,
|
||||
gd::Layout& scene_,
|
||||
gd::MainFrameWrapper& mainFrameWrapper_);
|
||||
|
||||
private:
|
||||
gd::Expression objectsToPick;
|
||||
gd::InstructionsList conditions;
|
||||
|
@@ -5,20 +5,10 @@
|
||||
*/
|
||||
|
||||
#include "GroupEvent.h"
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
#include <wx/dcmemory.h>
|
||||
#include <wx/renderer.h>
|
||||
#include "GDCore/IDE/Dialogs/MainFrameWrapper.h"
|
||||
#endif
|
||||
#include "GDCore/CommonTools.h"
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerationContext.h"
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerator.h"
|
||||
#include "GDCore/Events/Serialization.h"
|
||||
#include "GDCore/IDE/Dialogs/EventStoreDialog.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorItemsAreas.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorSelection.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsRenderingHelper.h"
|
||||
#include "GDCore/IDE/Dialogs/GroupEventDialog.h"
|
||||
#include "GDCore/Serialization/SerializerElement.h"
|
||||
#include "GDCore/TinyXml/tinyxml.h"
|
||||
|
||||
@@ -63,39 +53,6 @@ void GroupEvent::UnserializeFrom(gd::Project& project,
|
||||
parameters.push_back(parametersElement.GetChild(i).GetValue().GetString());
|
||||
}
|
||||
|
||||
gd::BaseEvent::EditEventReturnType GroupEvent::EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& project,
|
||||
gd::Layout& scene,
|
||||
gd::MainFrameWrapper& mainFrameWrapper) {
|
||||
if (events.IsEmpty())
|
||||
events.InsertNewEvent(project, "BuiltinCommonInstructions::Standard");
|
||||
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
if (source.empty()) {
|
||||
GroupEventDialog dialog(parent_, *this);
|
||||
dialog.ShowModal();
|
||||
return ChangesMadeButNoNeedForEventsRecompilation;
|
||||
} else {
|
||||
gd::EventStoreDialog dialog(parent_, project, scene);
|
||||
|
||||
size_t found = source.rfind("/");
|
||||
if (found != gd::String::npos && found < source.size() - 1) {
|
||||
gd::String sourceId = source.substr(found + 1, source.size());
|
||||
dialog.RefreshWith(sourceId, parameters);
|
||||
}
|
||||
|
||||
if (dialog.ShowModal() != 1) return Cancelled;
|
||||
|
||||
// Insert new events
|
||||
*this = dialog.GetGroupEvent();
|
||||
return ChangesMade;
|
||||
}
|
||||
#else
|
||||
return Cancelled;
|
||||
#endif
|
||||
}
|
||||
|
||||
void GroupEvent::SetBackgroundColor(unsigned int colorR_,
|
||||
unsigned int colorG_,
|
||||
unsigned int colorB_) {
|
||||
@@ -104,60 +61,5 @@ void GroupEvent::SetBackgroundColor(unsigned int colorR_,
|
||||
colorB = colorB_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the event in the bitmap
|
||||
*/
|
||||
void GroupEvent::Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
wxString groupTitle = name.empty() ? _("Untitled group") : wxString(name);
|
||||
wxColour backgroundColor = wxColour(colorR, colorG, colorB);
|
||||
wxColour textColor = colorR + colorG + colorB > 200 * 3 ? *wxBLACK : *wxWHITE;
|
||||
if (IsDisabled()) {
|
||||
backgroundColor.MakeDisabled();
|
||||
textColor = wxColour(160, 160, 160);
|
||||
}
|
||||
|
||||
dc.SetBrush(wxBrush(backgroundColor));
|
||||
dc.SetPen(wxPen(backgroundColor.ChangeLightness(70)));
|
||||
wxRect rect(x + 1, y, width - 2, GetRenderedHeight(width, platform) - 2);
|
||||
dc.DrawRectangle(rect);
|
||||
|
||||
dc.SetTextBackground(backgroundColor);
|
||||
dc.SetTextForeground(textColor);
|
||||
dc.SetFont(
|
||||
wxFont(12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD));
|
||||
dc.DrawText(groupTitle, x + 5, y + 5);
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned int GroupEvent::GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform& platform) const {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
if (eventHeightNeedUpdate) {
|
||||
wxMemoryDC dc;
|
||||
wxBitmap fakeBmp(1, 1);
|
||||
dc.SelectObject(fakeBmp);
|
||||
|
||||
wxString groupTitle = name.empty() ? _("Untitled group") : wxString(name);
|
||||
|
||||
dc.SetFont(wxFont(
|
||||
12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
|
||||
wxRect text = dc.GetTextExtent(groupTitle);
|
||||
|
||||
renderedHeight = text.GetHeight() + 10;
|
||||
eventHeightNeedUpdate = false;
|
||||
}
|
||||
|
||||
return renderedHeight;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace gd
|
||||
|
@@ -12,19 +12,9 @@
|
||||
#include "GDCore/Events/Instruction.h"
|
||||
namespace gd {
|
||||
class Instruction;
|
||||
}
|
||||
namespace gd {
|
||||
class Project;
|
||||
}
|
||||
class RuntimeScene;
|
||||
class TiXmlElement;
|
||||
class EventsCodeGenerationContext;
|
||||
namespace gd {
|
||||
class EventsEditorItemsAreas;
|
||||
}
|
||||
namespace gd {
|
||||
class EventsEditorSelection;
|
||||
}
|
||||
|
||||
namespace gd {
|
||||
|
||||
@@ -120,29 +110,6 @@ class GD_CORE_API GroupEvent : public gd::BaseEvent {
|
||||
virtual void UnserializeFrom(gd::Project& project,
|
||||
const SerializerElement& element);
|
||||
|
||||
virtual gd::BaseEvent::EditEventReturnType EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& project,
|
||||
gd::Layout& scene,
|
||||
gd::MainFrameWrapper& mainFrameWrapper);
|
||||
|
||||
/**
|
||||
* Called by event editor to draw the event.
|
||||
*/
|
||||
virtual void Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform);
|
||||
|
||||
/**
|
||||
* Must return the height of the event when rendered
|
||||
*/
|
||||
virtual unsigned int GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform& platform) const;
|
||||
|
||||
private:
|
||||
EventsList events;
|
||||
|
||||
|
@@ -5,18 +5,12 @@
|
||||
*/
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
#include <wx/dcmemory.h>
|
||||
#endif
|
||||
#include "GDCore/CommonTools.h"
|
||||
#include "GDCore/Events/Builtin/GroupEvent.h"
|
||||
#include "GDCore/Events/Builtin/LinkEvent.h"
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerationContext.h"
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerator.h"
|
||||
#include "GDCore/Events/Tools/EventsCodeNameMangler.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsRenderingHelper.h"
|
||||
#include "GDCore/IDE/Dialogs/LinkEventEditor.h"
|
||||
#include "GDCore/IDE/wxTools/SkinHelper.h"
|
||||
#include "GDCore/Project/ExternalEvents.h"
|
||||
#include "GDCore/Project/Layout.h"
|
||||
#include "GDCore/Project/Object.h"
|
||||
@@ -161,90 +155,4 @@ void LinkEvent::UnserializeFrom(gd::Project& project,
|
||||
}
|
||||
}
|
||||
|
||||
gd::BaseEvent::EditEventReturnType LinkEvent::EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& project,
|
||||
gd::Layout& scene_,
|
||||
gd::MainFrameWrapper& mainFrameWrapper_) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
LinkEventEditor dialog(parent_, *this, project);
|
||||
if (dialog.ShowModal() == 0) return Cancelled;
|
||||
#endif
|
||||
|
||||
return ChangesMade;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the event in the bitmap
|
||||
*/
|
||||
void LinkEvent::Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
gd::EventsRenderingHelper* renderingHelper = gd::EventsRenderingHelper::Get();
|
||||
|
||||
dc.SetBrush(wxBrush(wxColour(255, 255, 255)));
|
||||
dc.SetPen(wxPen(wxColour(0, 0, 0), 1));
|
||||
wxRect rect(x + 1, y, width - 2, GetRenderedHeight(width, platform) - 2);
|
||||
dc.DrawRectangle(rect);
|
||||
|
||||
dc.DrawBitmap(gd::SkinHelper::GetIcon("events", 24), x + 4, y + 1, true);
|
||||
|
||||
dc.SetTextBackground(wxColour(255, 255, 255));
|
||||
if (!IsDisabled())
|
||||
dc.SetTextForeground(wxColour(0, 0, 0));
|
||||
else
|
||||
dc.SetTextForeground(wxColour(160, 160, 160));
|
||||
|
||||
dc.SetFont(renderingHelper->GetNiceFont());
|
||||
dc.DrawText(_("Link to ") + GetTarget(), x + 32, y + 3);
|
||||
|
||||
if (GetIncludeConfig() == INCLUDE_BY_INDEX) {
|
||||
wxRect textRect = dc.GetTextExtent(_("Link to ") + GetTarget());
|
||||
dc.DrawText(_("Include only events ") +
|
||||
gd::String::From(GetIncludeStart() + 1) + _(" to ") +
|
||||
gd::String::From(GetIncludeEnd() + 1),
|
||||
x + textRect.GetWidth() + 32 + 10,
|
||||
y + 5);
|
||||
} else if (GetIncludeConfig() == INCLUDE_EVENTS_GROUP) {
|
||||
wxRect textRect = dc.GetTextExtent(_("Link to ") + GetTarget());
|
||||
dc.DrawText(_("Include only the events group named \"") +
|
||||
gd::String::From(GetEventsGroupName()) + _("\""),
|
||||
x + textRect.GetWidth() + 32 + 10,
|
||||
y + 5);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Precompute height for the link
|
||||
*/
|
||||
unsigned int LinkEvent::GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform& platform) const {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
if (eventHeightNeedUpdate) {
|
||||
gd::EventsRenderingHelper* renderingHelper =
|
||||
gd::EventsRenderingHelper::Get();
|
||||
|
||||
wxMemoryDC dc;
|
||||
wxBitmap fakeBmp(1, 1);
|
||||
dc.SelectObject(fakeBmp);
|
||||
|
||||
dc.SetFont(renderingHelper->GetNiceFont());
|
||||
wxRect lien = dc.GetTextExtent(_("Link to "));
|
||||
|
||||
renderedHeight = lien.GetHeight() + 15;
|
||||
eventHeightNeedUpdate = false;
|
||||
}
|
||||
|
||||
return renderedHeight;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace gd
|
||||
|
@@ -109,29 +109,6 @@ class GD_CORE_API LinkEvent : public gd::BaseEvent {
|
||||
|
||||
virtual bool IsExecutable() const { return true; };
|
||||
|
||||
/**
|
||||
* Called by event editor to draw the event.
|
||||
*/
|
||||
virtual void Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform);
|
||||
|
||||
/**
|
||||
* Must return the height of the event when rendered
|
||||
*/
|
||||
virtual unsigned int GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform& platform) const;
|
||||
|
||||
virtual EditEventReturnType EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& game_,
|
||||
gd::Layout& scene_,
|
||||
gd::MainFrameWrapper& mainFrameWrapper_);
|
||||
|
||||
virtual void SerializeTo(SerializerElement& element) const;
|
||||
virtual void UnserializeFrom(gd::Project& project,
|
||||
const SerializerElement& element);
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerator.h"
|
||||
#include "GDCore/Events/CodeGeneration/ExpressionsCodeGeneration.h"
|
||||
#include "GDCore/Events/Serialization.h"
|
||||
#include "GDCore/IDE/Dialogs/EditRepeatEvent.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorItemsAreas.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorSelection.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsRenderingHelper.h"
|
||||
#include "GDCore/Serialization/SerializerElement.h"
|
||||
|
||||
using namespace std;
|
||||
@@ -92,109 +88,4 @@ void RepeatEvent::UnserializeFrom(gd::Project& project,
|
||||
project, events, element.GetChild("events", 0, "Events"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the event in the bitmap
|
||||
*/
|
||||
void RepeatEvent::Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
gd::EventsRenderingHelper* renderingHelper = gd::EventsRenderingHelper::Get();
|
||||
int border = renderingHelper->instructionsListBorder;
|
||||
const int repeatTextHeight = 20;
|
||||
|
||||
// Draw header rectangle
|
||||
wxRect headerRect(x, y, width, repeatTextHeight);
|
||||
renderingHelper->DrawNiceRectangle(dc, headerRect);
|
||||
|
||||
// Repeat text
|
||||
dc.SetFont(renderingHelper->GetNiceFont().Bold());
|
||||
if (!IsDisabled())
|
||||
dc.SetTextForeground(wxColour(0, 0, 0));
|
||||
else
|
||||
dc.SetTextForeground(wxColour(160, 160, 160));
|
||||
dc.DrawText(_("Repeat") + " " + repeatNumberExpression.GetPlainString() +
|
||||
" " + _("times :"),
|
||||
x + 4,
|
||||
y + 3);
|
||||
|
||||
// Draw conditions rectangle
|
||||
wxRect rect(x,
|
||||
y + repeatTextHeight,
|
||||
renderingHelper->GetConditionsColumnWidth() + border,
|
||||
GetRenderedHeight(width, platform) - repeatTextHeight);
|
||||
renderingHelper->DrawNiceRectangle(dc, rect);
|
||||
|
||||
// Draw actions and conditions
|
||||
renderingHelper->DrawConditionsList(
|
||||
conditions,
|
||||
dc,
|
||||
x + border,
|
||||
y + repeatTextHeight + border,
|
||||
renderingHelper->GetConditionsColumnWidth() - border,
|
||||
this,
|
||||
areas,
|
||||
selection,
|
||||
platform);
|
||||
renderingHelper->DrawActionsList(
|
||||
actions,
|
||||
dc,
|
||||
x + renderingHelper->GetConditionsColumnWidth() + border,
|
||||
y + repeatTextHeight + border,
|
||||
width - renderingHelper->GetConditionsColumnWidth() - border * 2,
|
||||
this,
|
||||
areas,
|
||||
selection,
|
||||
platform);
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned int RepeatEvent::GetRenderedHeight(
|
||||
unsigned int width, const gd::Platform& platform) const {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
if (eventHeightNeedUpdate) {
|
||||
gd::EventsRenderingHelper* renderingHelper =
|
||||
gd::EventsRenderingHelper::Get();
|
||||
int border = renderingHelper->instructionsListBorder;
|
||||
const int repeatTextHeight = 20;
|
||||
|
||||
// Get maximum height needed
|
||||
int conditionsHeight = renderingHelper->GetRenderedConditionsListHeight(
|
||||
conditions,
|
||||
renderingHelper->GetConditionsColumnWidth() - border,
|
||||
platform);
|
||||
int actionsHeight = renderingHelper->GetRenderedActionsListHeight(
|
||||
actions,
|
||||
width - renderingHelper->GetConditionsColumnWidth() - border * 2,
|
||||
platform);
|
||||
|
||||
renderedHeight =
|
||||
(conditionsHeight > actionsHeight ? conditionsHeight : actionsHeight) +
|
||||
repeatTextHeight + border * 2;
|
||||
eventHeightNeedUpdate = false;
|
||||
}
|
||||
|
||||
return renderedHeight;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
gd::BaseEvent::EditEventReturnType RepeatEvent::EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& game_,
|
||||
gd::Layout& scene_,
|
||||
gd::MainFrameWrapper& mainFrameWrapper_) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
EditRepeatEvent dialog(parent_, *this, game_, scene_);
|
||||
if (dialog.ShowModal() == 0) return Cancelled;
|
||||
#endif
|
||||
|
||||
return ChangesMade;
|
||||
}
|
||||
|
||||
} // namespace gd
|
||||
|
@@ -10,18 +10,8 @@
|
||||
#include "GDCore/Events/EventsList.h"
|
||||
namespace gd {
|
||||
class Instruction;
|
||||
}
|
||||
namespace gd {
|
||||
class Project;
|
||||
}
|
||||
class RuntimeScene;
|
||||
class TiXmlElement;
|
||||
namespace gd {
|
||||
class EventsEditorItemsAreas;
|
||||
}
|
||||
namespace gd {
|
||||
class EventsEditorSelection;
|
||||
}
|
||||
|
||||
namespace gd {
|
||||
|
||||
@@ -65,32 +55,6 @@ class GD_CORE_API RepeatEvent : public gd::BaseEvent {
|
||||
virtual void UnserializeFrom(gd::Project& project,
|
||||
const SerializerElement& element);
|
||||
|
||||
/**
|
||||
* Called by event editor to draw the event.
|
||||
*/
|
||||
virtual void Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform);
|
||||
|
||||
/**
|
||||
* Must return the height of the event when rendered
|
||||
*/
|
||||
virtual unsigned int GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform& platform) const;
|
||||
|
||||
/**
|
||||
* Called when the user want to edit the event
|
||||
*/
|
||||
virtual EditEventReturnType EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& game_,
|
||||
gd::Layout& scene_,
|
||||
gd::MainFrameWrapper& mainFrameWrapper_);
|
||||
|
||||
private:
|
||||
gd::Expression repeatNumberExpression;
|
||||
gd::InstructionsList conditions;
|
||||
|
@@ -9,11 +9,7 @@
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerationContext.h"
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerator.h"
|
||||
#include "GDCore/Events/Serialization.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorItemsAreas.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorSelection.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsRenderingHelper.h"
|
||||
#include "GDCore/Serialization/SerializerElement.h"
|
||||
#include "GDCore/TinyXml/tinyxml.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -71,82 +67,4 @@ void StandardEvent::UnserializeFrom(gd::Project& project,
|
||||
project, events, element.GetChild("events", 0, "Events"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the event in the bitmap
|
||||
*/
|
||||
void StandardEvent::Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
gd::EventsRenderingHelper* renderingHelper = gd::EventsRenderingHelper::Get();
|
||||
int border = renderingHelper->instructionsListBorder;
|
||||
|
||||
// Draw event rectangle
|
||||
wxRect rect(x,
|
||||
y,
|
||||
renderingHelper->GetConditionsColumnWidth() + border,
|
||||
GetRenderedHeight(width, platform));
|
||||
renderingHelper->DrawNiceRectangle(dc, rect);
|
||||
|
||||
renderingHelper->DrawConditionsList(
|
||||
conditions,
|
||||
dc,
|
||||
x + border,
|
||||
y + border,
|
||||
renderingHelper->GetConditionsColumnWidth() - border,
|
||||
this,
|
||||
areas,
|
||||
selection,
|
||||
platform);
|
||||
renderingHelper->DrawActionsList(
|
||||
actions,
|
||||
dc,
|
||||
x + renderingHelper->GetConditionsColumnWidth() + border,
|
||||
y + border,
|
||||
width - renderingHelper->GetConditionsColumnWidth() - border * 2,
|
||||
this,
|
||||
areas,
|
||||
selection,
|
||||
platform);
|
||||
|
||||
// Make sure that Render is rendering an event with the same height as
|
||||
// GetRenderedHeight : Use same values for border and similar calls to compute
|
||||
// heights
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned int StandardEvent::GetRenderedHeight(
|
||||
unsigned int width, const gd::Platform& platform) const {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
if (eventHeightNeedUpdate) {
|
||||
gd::EventsRenderingHelper* renderingHelper =
|
||||
gd::EventsRenderingHelper::Get();
|
||||
int border = renderingHelper->instructionsListBorder;
|
||||
|
||||
// Get maximum height needed
|
||||
int conditionsHeight = renderingHelper->GetRenderedConditionsListHeight(
|
||||
conditions,
|
||||
renderingHelper->GetConditionsColumnWidth() - border * 2,
|
||||
platform);
|
||||
int actionsHeight = renderingHelper->GetRenderedActionsListHeight(
|
||||
actions,
|
||||
width - renderingHelper->GetConditionsColumnWidth() - border * 2,
|
||||
platform);
|
||||
|
||||
renderedHeight =
|
||||
(conditionsHeight > actionsHeight ? conditionsHeight : actionsHeight) +
|
||||
border * 2;
|
||||
eventHeightNeedUpdate = false;
|
||||
}
|
||||
|
||||
return renderedHeight;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace gd
|
||||
|
@@ -13,19 +13,8 @@
|
||||
#include "GDCore/Events/InstructionsList.h"
|
||||
namespace gd {
|
||||
class Instruction;
|
||||
}
|
||||
namespace gd {
|
||||
class Project;
|
||||
}
|
||||
class RuntimeScene;
|
||||
class TiXmlElement;
|
||||
class EventsCodeGenerationContext;
|
||||
namespace gd {
|
||||
class EventsEditorItemsAreas;
|
||||
}
|
||||
namespace gd {
|
||||
class EventsEditorSelection;
|
||||
}
|
||||
|
||||
namespace gd {
|
||||
|
||||
@@ -60,23 +49,6 @@ class GD_CORE_API StandardEvent : public gd::BaseEvent {
|
||||
virtual void UnserializeFrom(gd::Project& project,
|
||||
const SerializerElement& element);
|
||||
|
||||
/**
|
||||
* Called by event editor to draw the event.
|
||||
*/
|
||||
virtual void Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform);
|
||||
|
||||
/**
|
||||
* Must return the height of the event when rendered
|
||||
*/
|
||||
virtual unsigned int GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform& platform) const;
|
||||
|
||||
private:
|
||||
gd::InstructionsList conditions;
|
||||
gd::InstructionsList actions;
|
||||
|
@@ -6,19 +6,11 @@
|
||||
|
||||
#if defined(GD_IDE_ONLY)
|
||||
#include "WhileEvent.h"
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
#include <wx/msgdlg.h>
|
||||
#include "GDCore/IDE/wxTools/CommonBitmapProvider.h"
|
||||
#endif
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerationContext.h"
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerator.h"
|
||||
#include "GDCore/Events/CodeGeneration/ExpressionsCodeGeneration.h"
|
||||
#include "GDCore/Events/Serialization.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorItemsAreas.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsEditorSelection.h"
|
||||
#include "GDCore/IDE/Dialogs/EventsEditor/EventsRenderingHelper.h"
|
||||
#include "GDCore/Serialization/SerializerElement.h"
|
||||
#include "GDCore/TinyXml/tinyxml.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -83,165 +75,5 @@ void WhileEvent::UnserializeFrom(gd::Project& project,
|
||||
project, events, element.GetChild("events", 0, "Events"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the event in the bitmap
|
||||
*/
|
||||
void WhileEvent::Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
gd::EventsRenderingHelper* renderingHelper = gd::EventsRenderingHelper::Get();
|
||||
int border = renderingHelper->instructionsListBorder;
|
||||
const int repeatHeight = 20;
|
||||
|
||||
// Draw header rectangle
|
||||
int whileConditionsHeight =
|
||||
renderingHelper->GetRenderedConditionsListHeight(
|
||||
whileConditions, width - 80 - border * 2, platform) +
|
||||
border * 2;
|
||||
if (!infiniteLoopWarning && whileConditionsHeight < 32)
|
||||
whileConditionsHeight = 32;
|
||||
wxRect headerRect(x, y, width, whileConditionsHeight + repeatHeight);
|
||||
renderingHelper->DrawNiceRectangle(dc, headerRect);
|
||||
|
||||
// While text
|
||||
dc.SetFont(renderingHelper->GetNiceFont().Bold());
|
||||
if (!IsDisabled())
|
||||
dc.SetTextForeground(wxColour(0, 0, 0));
|
||||
else
|
||||
dc.SetTextForeground(wxColour(160, 160, 160));
|
||||
dc.DrawText(_("While :"), x + 5, y + 5);
|
||||
|
||||
// Draw icon if infinite loop warning is deactivated.
|
||||
if (!infiniteLoopWarning) {
|
||||
if (gd::CommonBitmapProvider::Get()->noProtection.IsOk())
|
||||
dc.DrawBitmap(gd::CommonBitmapProvider::Get()->noProtection,
|
||||
wxPoint(x + 5, y + 5 + 18),
|
||||
/*useMask=*/true);
|
||||
}
|
||||
|
||||
// Draw "while conditions"
|
||||
renderingHelper->DrawConditionsList(whileConditions,
|
||||
dc,
|
||||
x + 80 + border,
|
||||
y + border,
|
||||
width - 80 - border * 2,
|
||||
this,
|
||||
areas,
|
||||
selection,
|
||||
platform);
|
||||
|
||||
dc.SetFont(renderingHelper->GetNiceFont().Bold());
|
||||
if (!IsDisabled())
|
||||
dc.SetTextForeground(wxColour(0, 0, 0));
|
||||
else
|
||||
dc.SetTextForeground(wxColour(160, 160, 160));
|
||||
dc.DrawText(_("Repeat :"), x + 4, y + whileConditionsHeight + 3);
|
||||
whileConditionsHeight += repeatHeight;
|
||||
|
||||
// Draw conditions rectangle
|
||||
wxRect rect(x,
|
||||
y + whileConditionsHeight,
|
||||
renderingHelper->GetConditionsColumnWidth() + border,
|
||||
GetRenderedHeight(width, platform) - whileConditionsHeight);
|
||||
renderingHelper->DrawNiceRectangle(dc, rect);
|
||||
|
||||
renderingHelper->DrawConditionsList(
|
||||
conditions,
|
||||
dc,
|
||||
x + border,
|
||||
y + whileConditionsHeight + border,
|
||||
renderingHelper->GetConditionsColumnWidth() - border,
|
||||
this,
|
||||
areas,
|
||||
selection,
|
||||
platform);
|
||||
renderingHelper->DrawActionsList(
|
||||
actions,
|
||||
dc,
|
||||
x + renderingHelper->GetConditionsColumnWidth() + border,
|
||||
y + whileConditionsHeight + border,
|
||||
width - renderingHelper->GetConditionsColumnWidth() - border * 2,
|
||||
this,
|
||||
areas,
|
||||
selection,
|
||||
platform);
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned int WhileEvent::GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform& platform) const {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
if (eventHeightNeedUpdate) {
|
||||
gd::EventsRenderingHelper* renderingHelper =
|
||||
gd::EventsRenderingHelper::Get();
|
||||
int border = renderingHelper->instructionsListBorder;
|
||||
const int repeatHeight = 20;
|
||||
|
||||
// Get maximum height needed
|
||||
int whileConditionsHeight =
|
||||
renderingHelper->GetRenderedConditionsListHeight(
|
||||
whileConditions, width - 80 - border * 2, platform);
|
||||
if (!infiniteLoopWarning && whileConditionsHeight < 32)
|
||||
whileConditionsHeight = 32;
|
||||
int conditionsHeight = renderingHelper->GetRenderedConditionsListHeight(
|
||||
conditions,
|
||||
renderingHelper->GetConditionsColumnWidth() - border,
|
||||
platform);
|
||||
int actionsHeight = renderingHelper->GetRenderedActionsListHeight(
|
||||
actions,
|
||||
width - renderingHelper->GetConditionsColumnWidth() - border * 2,
|
||||
platform);
|
||||
|
||||
renderedHeight =
|
||||
((conditionsHeight > actionsHeight ? conditionsHeight : actionsHeight) +
|
||||
whileConditionsHeight + repeatHeight) +
|
||||
border * 2 + border * 2;
|
||||
eventHeightNeedUpdate = false;
|
||||
}
|
||||
|
||||
return renderedHeight;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
gd::BaseEvent::EditEventReturnType WhileEvent::EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& game_,
|
||||
gd::Layout& scene_,
|
||||
gd::MainFrameWrapper& mainFrameWrapper_) {
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
if (!justCreatedByTheUser) {
|
||||
wxMessageDialog dialog(
|
||||
parent_,
|
||||
_("Do you want to activate the display of a message if the event is "
|
||||
"repeated 100000 times? This message prevent the software from being "
|
||||
"frozen if you accidentally create an infinite loop ( by letting the "
|
||||
"conditions empty for example )."),
|
||||
_("Protection against infinite loops."),
|
||||
wxYES_NO | wxCANCEL | wxICON_INFORMATION);
|
||||
|
||||
dialog.SetExtendedMessage(_(
|
||||
"This message is activated by default for \"While\" events in the IDE, "
|
||||
"and is deactivated when the game is compiled to an executable."));
|
||||
dialog.SetYesNoCancelLabels(_("Activate"), _("Deactivate"), _("Cancel"));
|
||||
|
||||
int answer = dialog.ShowModal();
|
||||
if (answer == wxID_YES)
|
||||
infiniteLoopWarning = true;
|
||||
else if (answer == wxID_NO)
|
||||
infiniteLoopWarning = false;
|
||||
}
|
||||
justCreatedByTheUser = false; // Show Message dialog next time.
|
||||
#endif
|
||||
|
||||
return ChangesMade;
|
||||
}
|
||||
|
||||
} // namespace gd
|
||||
#endif
|
||||
|
@@ -10,18 +10,8 @@
|
||||
#include "GDCore/Events/EventsList.h"
|
||||
namespace gd {
|
||||
class Instruction;
|
||||
}
|
||||
namespace gd {
|
||||
class Project;
|
||||
}
|
||||
class RuntimeScene;
|
||||
class TiXmlElement;
|
||||
namespace gd {
|
||||
class EventsEditorItemsAreas;
|
||||
}
|
||||
namespace gd {
|
||||
class EventsEditorSelection;
|
||||
}
|
||||
|
||||
namespace gd {
|
||||
|
||||
@@ -71,32 +61,6 @@ class GD_CORE_API WhileEvent : public gd::BaseEvent {
|
||||
virtual void UnserializeFrom(gd::Project& project,
|
||||
const SerializerElement& element);
|
||||
|
||||
/**
|
||||
* Called by event editor to draw the event.
|
||||
*/
|
||||
virtual void Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform);
|
||||
|
||||
/**
|
||||
* Must return the height of the event when rendered
|
||||
*/
|
||||
virtual unsigned int GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform& platform) const;
|
||||
|
||||
/**
|
||||
* Called when the user want to edit the event
|
||||
*/
|
||||
virtual EditEventReturnType EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& game_,
|
||||
gd::Layout& scene_,
|
||||
gd::MainFrameWrapper& mainFrameWrapper_);
|
||||
|
||||
private:
|
||||
gd::InstructionsList whileConditions;
|
||||
gd::InstructionsList conditions;
|
||||
|
@@ -24,6 +24,10 @@ void EventsCodeGenerationContext::InheritsFrom(
|
||||
parent_.objectsListsToBeDeclared.end(),
|
||||
std::inserter(alreadyDeclaredObjectsLists,
|
||||
alreadyDeclaredObjectsLists.begin()));
|
||||
std::copy(parent_.objectsListsWithoutPickingToBeDeclared.begin(),
|
||||
parent_.objectsListsWithoutPickingToBeDeclared.end(),
|
||||
std::inserter(alreadyDeclaredObjectsLists,
|
||||
alreadyDeclaredObjectsLists.begin()));
|
||||
std::copy(parent_.emptyObjectsListsToBeDeclared.begin(),
|
||||
parent_.emptyObjectsListsToBeDeclared.end(),
|
||||
std::inserter(alreadyDeclaredObjectsLists,
|
||||
@@ -47,16 +51,23 @@ void EventsCodeGenerationContext::Reuse(
|
||||
|
||||
void EventsCodeGenerationContext::ObjectsListNeeded(
|
||||
const gd::String& objectName) {
|
||||
if (emptyObjectsListsToBeDeclared.find(objectName) ==
|
||||
emptyObjectsListsToBeDeclared.end())
|
||||
if (!IsToBeDeclared(objectName))
|
||||
objectsListsToBeDeclared.insert(objectName);
|
||||
|
||||
depthOfLastUse[objectName] = GetContextDepth();
|
||||
}
|
||||
|
||||
void EventsCodeGenerationContext::ObjectsListWithoutPickingNeeded(
|
||||
const gd::String& objectName) {
|
||||
if (!IsToBeDeclared(objectName))
|
||||
objectsListsWithoutPickingToBeDeclared.insert(objectName);
|
||||
|
||||
depthOfLastUse[objectName] = GetContextDepth();
|
||||
}
|
||||
|
||||
void EventsCodeGenerationContext::EmptyObjectsListNeeded(
|
||||
const gd::String& objectName) {
|
||||
if (objectsListsToBeDeclared.find(objectName) ==
|
||||
objectsListsToBeDeclared.end())
|
||||
if (!IsToBeDeclared(objectName))
|
||||
emptyObjectsListsToBeDeclared.insert(objectName);
|
||||
|
||||
depthOfLastUse[objectName] = GetContextDepth();
|
||||
@@ -66,6 +77,8 @@ std::set<gd::String> EventsCodeGenerationContext::GetAllObjectsToBeDeclared()
|
||||
const {
|
||||
std::set<gd::String> allObjectListsToBeDeclared(
|
||||
objectsListsToBeDeclared.begin(), objectsListsToBeDeclared.end());
|
||||
allObjectListsToBeDeclared.insert(objectsListsWithoutPickingToBeDeclared.begin(),
|
||||
objectsListsWithoutPickingToBeDeclared.end());
|
||||
allObjectListsToBeDeclared.insert(emptyObjectsListsToBeDeclared.begin(),
|
||||
emptyObjectsListsToBeDeclared.end());
|
||||
|
||||
|
@@ -5,7 +5,6 @@
|
||||
*/
|
||||
#ifndef EVENTSCODEGENERATIONCONTEXT_H
|
||||
#define EVENTSCODEGENERATIONCONTEXT_H
|
||||
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <set>
|
||||
@@ -21,7 +20,7 @@ namespace gd {
|
||||
* - The "current object", i.e the object being used by an action or a
|
||||
* condition.
|
||||
* - If conditions are being generated, the context keeps track of the depth of
|
||||
* the conditions ( see GetCurrentConditionDepth )
|
||||
* the conditions (see GetCurrentConditionDepth)
|
||||
* - You can also get the context depth of the last use of an object list.
|
||||
*/
|
||||
class GD_CORE_API EventsCodeGenerationContext {
|
||||
@@ -106,19 +105,31 @@ class GD_CORE_API EventsCodeGenerationContext {
|
||||
const gd::String& GetCurrentObject() const { return currentObject; };
|
||||
|
||||
/**
|
||||
* \brief Call this when an instruction in the event need an object list.
|
||||
* \brief Call this when an instruction in the event needs an objects list.
|
||||
*
|
||||
* The list will be filled with objects from the scene if it is the first time
|
||||
* it is requested, unless there is already an object list with this name (
|
||||
* i.e. ObjectAlreadyDeclared(objectName) returns true ).
|
||||
* it is requested, unless there is already an object list with this name
|
||||
* (i.e. `ObjectAlreadyDeclared(objectName)` returns true).
|
||||
*/
|
||||
void ObjectsListNeeded(const gd::String& objectName);
|
||||
|
||||
/**
|
||||
* Call this when an instruction in the event need an object list.
|
||||
* An empty event list will be declared, without filling it with objects from
|
||||
* the scene. If there is already an object list with this name, no new list
|
||||
* will be declared again.
|
||||
* Call this when an instruction in the event needs an empty objects list
|
||||
* or the one already declared, if any.
|
||||
*
|
||||
* An empty objects list will be declared, without filling it with objects
|
||||
* from the scene. If there is already an objects list with this name, no new
|
||||
* list will be declared again.
|
||||
*/
|
||||
void ObjectsListWithoutPickingNeeded(const gd::String& objectName);
|
||||
|
||||
/**
|
||||
* Call this when an instruction in the event needs an empty object list,
|
||||
* even if one is already declared.
|
||||
*
|
||||
* An empty objects list will be declared, without filling it with objects
|
||||
* from the scene. If there is already an object list with this name, it won't
|
||||
* be used to initialize the new list, which will remain empty.
|
||||
*/
|
||||
void EmptyObjectsListNeeded(const gd::String& objectName);
|
||||
|
||||
@@ -152,8 +163,18 @@ class GD_CORE_API EventsCodeGenerationContext {
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the objects lists which will be declared, but no filled, by the
|
||||
* current context
|
||||
* Return the objects lists which will be will be declared, without filling
|
||||
* them with objects from the scene.
|
||||
*/
|
||||
const std::set<gd::String>& GetObjectsListsToBeDeclaredWithoutPicking()
|
||||
const {
|
||||
return objectsListsWithoutPickingToBeDeclared;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the objects lists which will be will be declared empty, without
|
||||
* filling them with objects from the scene and without copying any previously
|
||||
* declared objects list.
|
||||
*/
|
||||
const std::set<gd::String>& GetObjectsListsToBeDeclaredEmpty() const {
|
||||
return emptyObjectsListsToBeDeclared;
|
||||
@@ -207,6 +228,21 @@ class GD_CORE_API EventsCodeGenerationContext {
|
||||
size_t GetCurrentConditionDepth() const { return customConditionDepth; }
|
||||
|
||||
private:
|
||||
/**
|
||||
* \brief Returns true if the given object is already going to be declared
|
||||
* (either as a traditional objects list, or one without picking, or one
|
||||
* empty).
|
||||
*
|
||||
*/
|
||||
bool IsToBeDeclared(const gd::String& objectName) {
|
||||
return objectsListsToBeDeclared.find(objectName) !=
|
||||
objectsListsToBeDeclared.end() ||
|
||||
objectsListsWithoutPickingToBeDeclared.find(objectName) !=
|
||||
objectsListsWithoutPickingToBeDeclared.end() ||
|
||||
emptyObjectsListsToBeDeclared.find(objectName) !=
|
||||
emptyObjectsListsToBeDeclared.end();
|
||||
};
|
||||
|
||||
std::set<gd::String>
|
||||
alreadyDeclaredObjectsLists; ///< Objects lists already needed in a
|
||||
///< parent context.
|
||||
@@ -214,9 +250,16 @@ class GD_CORE_API EventsCodeGenerationContext {
|
||||
objectsListsToBeDeclared; ///< Objects lists that will be declared in
|
||||
///< this context.
|
||||
std::set<gd::String>
|
||||
emptyObjectsListsToBeDeclared; ///< Objects lists that will be declared
|
||||
///< in this context, but not filled with
|
||||
///< scene's objects.
|
||||
objectsListsWithoutPickingToBeDeclared; ///< Objects lists that will be
|
||||
///< declared in this context,
|
||||
///< but not filled with scene's
|
||||
///< objects.
|
||||
std::set<gd::String>
|
||||
emptyObjectsListsToBeDeclared; ///< Objects lists that will be
|
||||
///< declared in this context,
|
||||
///< but not filled with scene's
|
||||
///< objects and not filled with any
|
||||
///< previously existing objects list.
|
||||
std::map<gd::String, unsigned int>
|
||||
depthOfLastUse; ///< The context depth when an object was last used.
|
||||
gd::String
|
||||
|
@@ -3,6 +3,7 @@
|
||||
#include <utility>
|
||||
#include "GDCore/CommonTools.h"
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerationContext.h"
|
||||
#include "GDCore/Events/CodeGeneration/ExpressionCodeGenerator.h"
|
||||
#include "GDCore/Events/CodeGeneration/ExpressionsCodeGeneration.h"
|
||||
#include "GDCore/Events/Parsers/ExpressionParser.h"
|
||||
#include "GDCore/Events/Tools/EventsCodeNameMangler.h"
|
||||
@@ -10,11 +11,12 @@
|
||||
#include "GDCore/Extensions/Metadata/InstructionMetadata.h"
|
||||
#include "GDCore/Extensions/Metadata/MetadataProvider.h"
|
||||
#include "GDCore/Extensions/Metadata/ObjectMetadata.h"
|
||||
#include "GDCore/Extensions/Metadata/ParameterMetadataTools.h"
|
||||
#include "GDCore/Extensions/Platform.h"
|
||||
#include "GDCore/Extensions/PlatformExtension.h"
|
||||
#include "GDCore/Project/Layout.h"
|
||||
#include "GDCore/Project/Project.h"
|
||||
#include "GDCore/Project/ObjectsContainer.h"
|
||||
#include "GDCore/Project/Project.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -295,11 +297,14 @@ gd::String EventsCodeGenerator::GenerateConditionCode(
|
||||
if (!GetObjectsAndGroups().HasObjectNamed(objectInParameter) &&
|
||||
!GetGlobalObjectsAndGroups().HasObjectNamed(objectInParameter) &&
|
||||
!GetObjectsAndGroups().GetObjectGroups().Has(objectInParameter) &&
|
||||
!GetGlobalObjectsAndGroups().GetObjectGroups().Has(objectInParameter)) {
|
||||
!GetGlobalObjectsAndGroups().GetObjectGroups().Has(
|
||||
objectInParameter)) {
|
||||
condition.SetParameter(pNb, gd::Expression(""));
|
||||
condition.SetType("");
|
||||
} else if (!instrInfos.parameters[pNb].supplementaryInformation.empty() &&
|
||||
gd::GetTypeOfObject(GetGlobalObjectsAndGroups(), GetObjectsAndGroups(), objectInParameter) !=
|
||||
gd::GetTypeOfObject(GetGlobalObjectsAndGroups(),
|
||||
GetObjectsAndGroups(),
|
||||
objectInParameter) !=
|
||||
instrInfos.parameters[pNb].supplementaryInformation) {
|
||||
condition.SetParameter(pNb, gd::Expression(""));
|
||||
condition.SetType("");
|
||||
@@ -328,7 +333,8 @@ gd::String EventsCodeGenerator::GenerateConditionCode(
|
||||
gd::String objectName = condition.GetParameters().empty()
|
||||
? ""
|
||||
: condition.GetParameter(0).GetPlainString();
|
||||
gd::String objectType = gd::GetTypeOfObject(GetGlobalObjectsAndGroups(), GetObjectsAndGroups(), objectName);
|
||||
gd::String objectType = gd::GetTypeOfObject(
|
||||
GetGlobalObjectsAndGroups(), GetObjectsAndGroups(), objectName);
|
||||
if (!objectName.empty() &&
|
||||
MetadataProvider::HasObjectCondition(
|
||||
platform, objectType, condition.GetType()) &&
|
||||
@@ -473,11 +479,14 @@ gd::String EventsCodeGenerator::GenerateActionCode(
|
||||
if (!GetObjectsAndGroups().HasObjectNamed(objectInParameter) &&
|
||||
!GetGlobalObjectsAndGroups().HasObjectNamed(objectInParameter) &&
|
||||
!GetObjectsAndGroups().GetObjectGroups().Has(objectInParameter) &&
|
||||
!GetGlobalObjectsAndGroups().GetObjectGroups().Has(objectInParameter)) {
|
||||
!GetGlobalObjectsAndGroups().GetObjectGroups().Has(
|
||||
objectInParameter)) {
|
||||
action.SetParameter(pNb, gd::Expression(""));
|
||||
action.SetType("");
|
||||
} else if (!instrInfos.parameters[pNb].supplementaryInformation.empty() &&
|
||||
gd::GetTypeOfObject(GetGlobalObjectsAndGroups(), GetObjectsAndGroups(), objectInParameter) !=
|
||||
gd::GetTypeOfObject(GetGlobalObjectsAndGroups(),
|
||||
GetObjectsAndGroups(),
|
||||
objectInParameter) !=
|
||||
instrInfos.parameters[pNb].supplementaryInformation) {
|
||||
action.SetParameter(pNb, gd::Expression(""));
|
||||
action.SetType("");
|
||||
@@ -496,7 +505,8 @@ gd::String EventsCodeGenerator::GenerateActionCode(
|
||||
gd::String objectName = action.GetParameters().empty()
|
||||
? ""
|
||||
: action.GetParameter(0).GetPlainString();
|
||||
gd::String objectType = gd::GetTypeOfObject(GetGlobalObjectsAndGroups(), GetObjectsAndGroups(), objectName);
|
||||
gd::String objectType = gd::GetTypeOfObject(
|
||||
GetGlobalObjectsAndGroups(), GetObjectsAndGroups(), objectName);
|
||||
if (MetadataProvider::HasObjectAction(
|
||||
platform, objectType, action.GetType()) &&
|
||||
!instrInfos.parameters.empty()) {
|
||||
@@ -527,6 +537,7 @@ gd::String EventsCodeGenerator::GenerateActionCode(
|
||||
action.GetParameters().size() < 2
|
||||
? ""
|
||||
: action.GetParameter(1).GetPlainString());
|
||||
|
||||
if (MetadataProvider::HasBehaviorAction(
|
||||
platform, behaviorType, action.GetType()) &&
|
||||
instrInfos.parameters.size() >= 2) {
|
||||
@@ -582,34 +593,24 @@ gd::String EventsCodeGenerator::GenerateParameterCodes(
|
||||
const gd::String& parameter,
|
||||
const gd::ParameterMetadata& metadata,
|
||||
gd::EventsCodeGenerationContext& context,
|
||||
const gd::String& previousParameter,
|
||||
const gd::String& lastObjectName,
|
||||
std::vector<std::pair<gd::String, gd::String> >*
|
||||
supplementaryParametersTypes) {
|
||||
gd::String argOutput;
|
||||
|
||||
if (ParameterMetadata::IsExpression("number", metadata.type)) {
|
||||
CallbacksForGeneratingExpressionCode callbacks(argOutput, *this, context);
|
||||
|
||||
gd::ExpressionParser parser(parameter);
|
||||
if (!parser.ParseMathExpression(platform, GetGlobalObjectsAndGroups(), GetObjectsAndGroups(), callbacks)) {
|
||||
cout << "Error :" << parser.GetFirstError() << " in: " << parameter
|
||||
<< endl;
|
||||
|
||||
argOutput = "0";
|
||||
}
|
||||
|
||||
if (argOutput.empty()) argOutput = "0";
|
||||
argOutput = gd::ExpressionCodeGenerator::GenerateExpressionCode(
|
||||
*this, context, "number", parameter);
|
||||
} else if (ParameterMetadata::IsExpression("string", metadata.type)) {
|
||||
CallbacksForGeneratingExpressionCode callbacks(argOutput, *this, context);
|
||||
|
||||
gd::ExpressionParser parser(parameter);
|
||||
if (!parser.ParseStringExpression(platform, GetGlobalObjectsAndGroups(), GetObjectsAndGroups(), callbacks)) {
|
||||
cout << "Error in text expression" << parser.GetFirstError() << endl;
|
||||
|
||||
argOutput = "\"\"";
|
||||
}
|
||||
|
||||
if (argOutput.empty()) argOutput = "\"\"";
|
||||
argOutput = gd::ExpressionCodeGenerator::GenerateExpressionCode(
|
||||
*this, context, "string", parameter);
|
||||
} else if (ParameterMetadata::IsExpression("variable", metadata.type)) {
|
||||
argOutput = gd::ExpressionCodeGenerator::GenerateExpressionCode(
|
||||
*this, context, metadata.type, parameter, lastObjectName);
|
||||
} else if (ParameterMetadata::IsObject(metadata.type)) {
|
||||
// It would be possible to run a gd::ExpressionCodeGenerator if later
|
||||
// objects can have nested objects, or function returning objects.
|
||||
argOutput = GenerateObject(parameter, metadata.type, context);
|
||||
} else if (metadata.type == "relationalOperator") {
|
||||
argOutput += parameter == "=" ? "==" : parameter;
|
||||
if (argOutput != "==" && argOutput != "<" && argOutput != ">" &&
|
||||
@@ -628,14 +629,12 @@ gd::String EventsCodeGenerator::GenerateParameterCodes(
|
||||
}
|
||||
|
||||
argOutput = "\"" + argOutput + "\"";
|
||||
} else if (metadata.type == "object" || metadata.type == "behavior") {
|
||||
} else if (ParameterMetadata::IsBehavior(metadata.type)) {
|
||||
argOutput = "\"" + ConvertToString(parameter) + "\"";
|
||||
} else if (metadata.type == "key") {
|
||||
argOutput = "\"" + ConvertToString(parameter) + "\"";
|
||||
} else if (metadata.type == "objectvar" || metadata.type == "scenevar" ||
|
||||
metadata.type == "globalvar" || metadata.type == "password" ||
|
||||
metadata.type == "musicfile" || metadata.type == "soundfile" ||
|
||||
metadata.type == "police") {
|
||||
} else if (metadata.type == "password" || metadata.type == "musicfile" ||
|
||||
metadata.type == "soundfile" || metadata.type == "police") {
|
||||
argOutput = "\"" + ConvertToString(parameter) + "\"";
|
||||
} else if (metadata.type == "mouse") {
|
||||
argOutput = "\"" + ConvertToString(parameter) + "\"";
|
||||
@@ -672,36 +671,37 @@ gd::String EventsCodeGenerator::GenerateParameterCodes(
|
||||
}
|
||||
|
||||
vector<gd::String> EventsCodeGenerator::GenerateParametersCodes(
|
||||
vector<gd::Expression> parameters,
|
||||
const vector<gd::Expression>& parameters,
|
||||
const vector<gd::ParameterMetadata>& parametersInfo,
|
||||
EventsCodeGenerationContext& context,
|
||||
std::vector<std::pair<gd::String, gd::String> >*
|
||||
supplementaryParametersTypes) {
|
||||
vector<gd::String> arguments;
|
||||
|
||||
while (parameters.size() < parametersInfo.size())
|
||||
parameters.push_back(gd::Expression(""));
|
||||
|
||||
for (std::size_t pNb = 0;
|
||||
pNb < parametersInfo.size() && pNb < parameters.size();
|
||||
++pNb) {
|
||||
if (parameters[pNb].GetPlainString().empty() &&
|
||||
parametersInfo[pNb].optional)
|
||||
parameters[pNb] = gd::Expression(parametersInfo[pNb].defaultValue);
|
||||
|
||||
gd::String argOutput = GenerateParameterCodes(
|
||||
parameters[pNb].GetPlainString(),
|
||||
parametersInfo[pNb],
|
||||
context,
|
||||
pNb == 0 ? "" : parameters[pNb - 1].GetPlainString(),
|
||||
supplementaryParametersTypes);
|
||||
|
||||
arguments.push_back(argOutput);
|
||||
}
|
||||
gd::ParameterMetadataTools::IterateOverParameters(
|
||||
parameters,
|
||||
parametersInfo,
|
||||
[this, &context, &supplementaryParametersTypes, &arguments](
|
||||
const gd::ParameterMetadata& parameterMetadata,
|
||||
const gd::String& parameterValue,
|
||||
const gd::String& lastObjectName) {
|
||||
gd::String argOutput =
|
||||
GenerateParameterCodes(parameterValue,
|
||||
parameterMetadata,
|
||||
context,
|
||||
lastObjectName,
|
||||
supplementaryParametersTypes);
|
||||
arguments.push_back(argOutput);
|
||||
});
|
||||
|
||||
return arguments;
|
||||
}
|
||||
|
||||
gd::String EventsCodeGenerator::GenerateGetBehaviorNameCode(
|
||||
const gd::String& behaviorName) {
|
||||
return ConvertToStringExplicit(behaviorName);
|
||||
}
|
||||
|
||||
gd::String EventsCodeGenerator::GenerateObjectsDeclarationCode(
|
||||
EventsCodeGenerationContext& context) {
|
||||
auto declareObjectList = [this](gd::String object,
|
||||
@@ -746,7 +746,7 @@ gd::String EventsCodeGenerator::GenerateObjectsDeclarationCode(
|
||||
|
||||
declarationsCode += objectListDeclaration + "\n";
|
||||
}
|
||||
for (auto object : context.GetObjectsListsToBeDeclaredEmpty()) {
|
||||
for (auto object : context.GetObjectsListsToBeDeclaredWithoutPicking()) {
|
||||
gd::String objectListDeclaration = "";
|
||||
if (!context.ObjectAlreadyDeclared(object)) {
|
||||
objectListDeclaration = "std::vector<RuntimeObject*> " +
|
||||
@@ -757,6 +757,18 @@ gd::String EventsCodeGenerator::GenerateObjectsDeclarationCode(
|
||||
|
||||
declarationsCode += objectListDeclaration + "\n";
|
||||
}
|
||||
for (auto object : context.GetObjectsListsToBeDeclaredEmpty()) {
|
||||
gd::String objectListDeclaration = "";
|
||||
if (!context.ObjectAlreadyDeclared(object)) {
|
||||
objectListDeclaration = "std::vector<RuntimeObject*> " +
|
||||
GetObjectListName(object, context) + ";\n";
|
||||
context.SetObjectDeclared(object);
|
||||
} else
|
||||
objectListDeclaration = "std::vector<RuntimeObject*> " +
|
||||
GetObjectListName(object, context) + ";\n";
|
||||
|
||||
declarationsCode += objectListDeclaration + "\n";
|
||||
}
|
||||
|
||||
return declarationsCode;
|
||||
}
|
||||
@@ -799,23 +811,10 @@ gd::String EventsCodeGenerator::GenerateEventsListCode(
|
||||
}
|
||||
|
||||
gd::String EventsCodeGenerator::ConvertToString(gd::String plainString) {
|
||||
for (size_t i = 0; i < plainString.length(); ++i) {
|
||||
if (plainString[i] == '\\') {
|
||||
if (i + 1 >= plainString.length() || plainString[i + 1] != '\"') {
|
||||
if (i + 1 < plainString.length())
|
||||
plainString.insert(i + 1, "\\");
|
||||
else
|
||||
plainString += ("\\");
|
||||
|
||||
++i;
|
||||
}
|
||||
} else if (plainString[i] == '"') {
|
||||
plainString.insert(i, "\\");
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
plainString = plainString.FindAndReplace("\n", "\\n");
|
||||
plainString = plainString.FindAndReplace("\\", "\\\\")
|
||||
.FindAndReplace("\r", "\\r")
|
||||
.FindAndReplace("\n", "\\n")
|
||||
.FindAndReplace("\"", "\\\"");
|
||||
|
||||
return plainString;
|
||||
}
|
||||
@@ -831,10 +830,12 @@ std::vector<gd::String> EventsCodeGenerator::ExpandObjectsName(
|
||||
// Note: this logic is duplicated in EventsContextAnalyzer::ExpandObjectsName
|
||||
std::vector<gd::String> realObjects;
|
||||
if (globalObjectsAndGroups.GetObjectGroups().Has(objectName))
|
||||
realObjects =
|
||||
globalObjectsAndGroups.GetObjectGroups().Get(objectName).GetAllObjectsNames();
|
||||
realObjects = globalObjectsAndGroups.GetObjectGroups()
|
||||
.Get(objectName)
|
||||
.GetAllObjectsNames();
|
||||
else if (objectsAndGroups.GetObjectGroups().Has(objectName))
|
||||
realObjects = objectsAndGroups.GetObjectGroups().Get(objectName).GetAllObjectsNames();
|
||||
realObjects =
|
||||
objectsAndGroups.GetObjectGroups().Get(objectName).GetAllObjectsNames();
|
||||
else
|
||||
realObjects.push_back(objectName);
|
||||
|
||||
@@ -893,7 +894,9 @@ gd::String EventsCodeGenerator::GenerateObjectFunctionCall(
|
||||
gd::String parametersStr,
|
||||
gd::String defaultOutput,
|
||||
gd::EventsCodeGenerationContext& context) {
|
||||
return "TODO (GenerateObjectFunctionCall)";
|
||||
// To be used for testing only.
|
||||
return objectListName + "." + codeInfo.functionCallName + "(" +
|
||||
parametersStr + ") ?? " + defaultOutput;
|
||||
}
|
||||
|
||||
gd::String EventsCodeGenerator::GenerateObjectBehaviorFunctionCall(
|
||||
@@ -904,7 +907,10 @@ gd::String EventsCodeGenerator::GenerateObjectBehaviorFunctionCall(
|
||||
gd::String parametersStr,
|
||||
gd::String defaultOutput,
|
||||
gd::EventsCodeGenerationContext& context) {
|
||||
return "TODO (GenerateObjectBehaviorFunctionCall)";
|
||||
// To be used for testing only.
|
||||
return objectListName + "::" + behaviorName + "." +
|
||||
codeInfo.functionCallName + "(" + parametersStr + ") ?? " +
|
||||
defaultOutput;
|
||||
}
|
||||
|
||||
gd::String EventsCodeGenerator::GenerateFreeCondition(
|
||||
@@ -1135,9 +1141,10 @@ EventsCodeGenerator::EventsCodeGenerator(gd::Project& project_,
|
||||
maxCustomConditionsDepth(0),
|
||||
maxConditionsListsSize(0){};
|
||||
|
||||
EventsCodeGenerator::EventsCodeGenerator(const gd::Platform& platform_,
|
||||
gd::ObjectsContainer & globalObjectsAndGroups_,
|
||||
const gd::ObjectsContainer & objectsAndGroups_)
|
||||
EventsCodeGenerator::EventsCodeGenerator(
|
||||
const gd::Platform& platform_,
|
||||
gd::ObjectsContainer& globalObjectsAndGroups_,
|
||||
const gd::ObjectsContainer& objectsAndGroups_)
|
||||
: platform(platform_),
|
||||
globalObjectsAndGroups(globalObjectsAndGroups_),
|
||||
objectsAndGroups(objectsAndGroups_),
|
||||
|
@@ -1,3 +1,8 @@
|
||||
/*
|
||||
* GDevelop Core
|
||||
* Copyright 2008-present Florian Rival (Florian.Rival@gmail.com). All rights
|
||||
* reserved. This project is released under the MIT License.
|
||||
*/
|
||||
#ifndef GDCORE_EVENTSCODEGENERATOR_H
|
||||
#define GDCORE_EVENTSCODEGENERATOR_H
|
||||
|
||||
@@ -22,18 +27,19 @@ class EventsCodeGenerationContext;
|
||||
class ExpressionCodeGenerationInformation;
|
||||
class InstructionMetadata;
|
||||
class Platform;
|
||||
}
|
||||
} // namespace gd
|
||||
|
||||
namespace gd {
|
||||
|
||||
/**
|
||||
* \brief Internal class used to generate code from events
|
||||
* \todo For now, this class generates only C++ code for GD C++ Platform.
|
||||
*
|
||||
* \see CallbacksForGeneratingExpressionCode
|
||||
*/
|
||||
class GD_CORE_API EventsCodeGenerator {
|
||||
// Compatiblity with old ExpressionParser
|
||||
friend class CallbacksForGeneratingExpressionCode;
|
||||
friend class VariableCodeGenerationCallbacks;
|
||||
// end of compatibility code
|
||||
friend class ExpressionCodeGenerator;
|
||||
|
||||
public:
|
||||
/**
|
||||
@@ -53,9 +59,9 @@ class GD_CORE_API EventsCodeGenerator {
|
||||
* \brief Construct a code generator for the specified
|
||||
* objects/groups and platform
|
||||
*/
|
||||
EventsCodeGenerator(const gd::Platform& platform,
|
||||
gd::ObjectsContainer & globalObjectsAndGroups_,
|
||||
const gd::ObjectsContainer & objectsAndGroups_);
|
||||
EventsCodeGenerator(const gd::Platform& platform,
|
||||
gd::ObjectsContainer& globalObjectsAndGroups_,
|
||||
const gd::ObjectsContainer& objectsAndGroups_);
|
||||
virtual ~EventsCodeGenerator(){};
|
||||
|
||||
/**
|
||||
@@ -121,7 +127,7 @@ class GD_CORE_API EventsCodeGenerator {
|
||||
*
|
||||
*/
|
||||
std::vector<gd::String> GenerateParametersCodes(
|
||||
std::vector<gd::Expression> parameters,
|
||||
const std::vector<gd::Expression> & parameters,
|
||||
const std::vector<gd::ParameterMetadata>& parametersInfo,
|
||||
EventsCodeGenerationContext& context,
|
||||
std::vector<std::pair<gd::String, gd::String> >*
|
||||
@@ -182,9 +188,9 @@ class GD_CORE_API EventsCodeGenerator {
|
||||
virtual gd::String ConvertToString(gd::String plainString);
|
||||
|
||||
/**
|
||||
* \brief Convert a plain string ( with line feed, quotes ) to a string that
|
||||
* \brief Convert a plain string (with line feed, quotes) to a string that
|
||||
can be inserted into code.
|
||||
* The string construction must be explicit : for example, quotes must be
|
||||
* The string construction must be explicit: for example, quotes must be
|
||||
added if the target language need quotes.
|
||||
*
|
||||
* Usage example :
|
||||
@@ -233,11 +239,6 @@ class GD_CORE_API EventsCodeGenerator {
|
||||
customCodeOutsideMain += code;
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Add some code before events in the main function.
|
||||
*/
|
||||
void AddCustomCodeInMain(gd::String code) { customCodeInMain += code; };
|
||||
|
||||
/** \brief Get the set containing the include files.
|
||||
*/
|
||||
const std::set<gd::String>& GetIncludeFiles() const { return includeFiles; }
|
||||
@@ -248,10 +249,6 @@ class GD_CORE_API EventsCodeGenerator {
|
||||
return customCodeOutsideMain;
|
||||
}
|
||||
|
||||
/** \brief Get the custom code to be inserted inside main function.
|
||||
*/
|
||||
const gd::String& GetCustomCodeInMain() const { return customCodeInMain; }
|
||||
|
||||
/** \brief Get the custom declaration to be inserted after includes.
|
||||
*/
|
||||
const std::set<gd::String>& GetCustomGlobalDeclaration() const {
|
||||
@@ -278,23 +275,31 @@ class GD_CORE_API EventsCodeGenerator {
|
||||
void ReportError();
|
||||
|
||||
/**
|
||||
* \brief Return true if an error has occurred during code generation ( in
|
||||
* this case, generated code is not usable )
|
||||
* \brief Return true if an error has occurred during code generation (in
|
||||
* this case, generated code is not usable).
|
||||
*
|
||||
* \todo TODO: This is actually not used and should be moved to a more
|
||||
* complete error reporting.
|
||||
*/
|
||||
bool ErrorOccurred() const { return errorOccurred; };
|
||||
|
||||
/**
|
||||
* \brief Get the global objects/groups used for code generation.
|
||||
*/
|
||||
gd::ObjectsContainer& GetGlobalObjectsAndGroups() const { return globalObjectsAndGroups; }
|
||||
gd::ObjectsContainer& GetGlobalObjectsAndGroups() const {
|
||||
return globalObjectsAndGroups;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Get the objects/groups used for code generation.
|
||||
*/
|
||||
const gd::ObjectsContainer& GetObjectsAndGroups() const { return objectsAndGroups; }
|
||||
const gd::ObjectsContainer& GetObjectsAndGroups() const {
|
||||
return objectsAndGroups;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Return true if the code generation is done for a given project and layout.
|
||||
* \brief Return true if the code generation is done for a given project and
|
||||
* layout.
|
||||
*/
|
||||
bool HasProjectAndLayout() const { return hasProjectAndLayout; }
|
||||
|
||||
@@ -380,27 +385,36 @@ class GD_CORE_API EventsCodeGenerator {
|
||||
* \brief Generate the code to notify the profiler of the beginning of a
|
||||
* section.
|
||||
*/
|
||||
virtual gd::String GenerateProfilerSectionBegin(const gd::String& section) { return ""; };
|
||||
virtual gd::String GenerateProfilerSectionBegin(const gd::String& section) {
|
||||
return "";
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Generate the code to notify the profiler of the end of a section.
|
||||
*/
|
||||
virtual gd::String GenerateProfilerSectionEnd(const gd::String& section) { return ""; };
|
||||
virtual gd::String GenerateProfilerSectionEnd(const gd::String& section) {
|
||||
return "";
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Get the namespace to be used to store code generated objects/values/functions,
|
||||
* with the extra "dot" at the end to be used to access to a property/member.
|
||||
* \brief Get the namespace to be used to store code generated
|
||||
* objects/values/functions, with the extra "dot" at the end to be used to
|
||||
* access to a property/member.
|
||||
*
|
||||
* Example: "gdjs.something."
|
||||
*/
|
||||
virtual gd::String GetCodeNamespaceAccessor() { return ""; };
|
||||
|
||||
/**
|
||||
* \brief Get the namespace to be used to store code generated objects/values/functions.
|
||||
* \brief Get the namespace to be used to store code generated
|
||||
* objects/values/functions.
|
||||
*
|
||||
* Example: "gdjs.something"
|
||||
*/
|
||||
virtual gd::String GetCodeNamespace() { return ""; };
|
||||
|
||||
enum VariableScope { LAYOUT_VARIABLE = 0, PROJECT_VARIABLE, OBJECT_VARIABLE };
|
||||
|
||||
protected:
|
||||
/**
|
||||
* \brief Generate the code for a single parameter.
|
||||
@@ -452,10 +466,69 @@ class GD_CORE_API EventsCodeGenerator {
|
||||
const gd::String& parameter,
|
||||
const gd::ParameterMetadata& metadata,
|
||||
gd::EventsCodeGenerationContext& context,
|
||||
const gd::String& previousParameter,
|
||||
const gd::String& lastObjectName,
|
||||
std::vector<std::pair<gd::String, gd::String> >*
|
||||
supplementaryParametersTypes);
|
||||
|
||||
/**
|
||||
* \brief Generate the code to get a variable.
|
||||
*/
|
||||
virtual gd::String GenerateGetVariable(
|
||||
const gd::String& variableName,
|
||||
const VariableScope& scope,
|
||||
gd::EventsCodeGenerationContext& context,
|
||||
const gd::String& objectName) {
|
||||
if (scope == LAYOUT_VARIABLE) {
|
||||
return "getLayoutVariable(" + variableName + ")";
|
||||
|
||||
} else if (scope == PROJECT_VARIABLE) {
|
||||
return "getProjectVariable(" + variableName + ")";
|
||||
}
|
||||
|
||||
return "getVariableForObject(" + objectName + ", " + variableName + ")";
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Generate the code to get the child of a variable.
|
||||
*/
|
||||
virtual gd::String GenerateVariableAccessor(gd::String childName) {
|
||||
return ".getChild(" + ConvertToStringExplicit(childName) + ")";
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Generate the code to get the child of a variable,
|
||||
* using generated the expression.
|
||||
*/
|
||||
virtual gd::String GenerateVariableBracketAccessor(
|
||||
gd::String expressionCode) {
|
||||
return ".getChild(" + expressionCode + ")";
|
||||
};
|
||||
|
||||
/**
|
||||
* \brief Generate the code to reference a variable which is
|
||||
* in an empty/null state.
|
||||
*/
|
||||
virtual gd::String GenerateBadVariable() { return "fakeBadVariable"; }
|
||||
|
||||
/**
|
||||
* \brief Generate the code to reference an object.
|
||||
* \param objectName the name of the object.
|
||||
* \param type what is the expected type (object, objectPtr...) in which the
|
||||
* object must be generated.
|
||||
* \param context The context for code generation
|
||||
*/
|
||||
virtual gd::String GenerateObject(const gd::String& objectName,
|
||||
const gd::String& type,
|
||||
gd::EventsCodeGenerationContext& context) {
|
||||
return "fakeObjectListOf_" + objectName;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Generate the code to reference an object which is
|
||||
* in an empty/null state.
|
||||
*/
|
||||
virtual gd::String GenerateBadObject() { return "fakeNullObject"; }
|
||||
|
||||
/**
|
||||
* \brief Call a function of the current object.
|
||||
* \note The current object is the object being manipulated by a condition or
|
||||
@@ -613,31 +686,39 @@ class GD_CORE_API EventsCodeGenerator {
|
||||
std::size_t startFromArgument = 0);
|
||||
|
||||
/**
|
||||
* \brief Must return an expression whose value is true.
|
||||
* \brief Return the "true" keyword in the target language.
|
||||
*/
|
||||
gd::String GenerateTrue() const { return "true"; };
|
||||
|
||||
/**
|
||||
* \brief Must return an expression whose value is false.
|
||||
* \brief Return the "false" keyword in the target language.
|
||||
*/
|
||||
gd::String GenerateFalse() const { return "false"; };
|
||||
|
||||
/**
|
||||
* \brief Generate the list of comma-separated arguments to be used to call a
|
||||
* function. \param arguments The code already generated for the arguments
|
||||
* function.
|
||||
*
|
||||
* \param arguments The code already generated for the arguments
|
||||
* \param startFrom Index of the first argument, the previous will be ignored.
|
||||
*/
|
||||
virtual gd::String GenerateArgumentsList(
|
||||
const std::vector<gd::String>& arguments, size_t startFrom = 0);
|
||||
|
||||
const gd::Platform& platform; ///< The platform being used.
|
||||
|
||||
gd::ObjectsContainer & globalObjectsAndGroups;
|
||||
const gd::ObjectsContainer & objectsAndGroups;
|
||||
/**
|
||||
* Generate the getter to get the name of the specified behavior.
|
||||
*/
|
||||
virtual gd::String GenerateGetBehaviorNameCode(const gd::String& behaviorName);
|
||||
|
||||
bool hasProjectAndLayout; ///< true only if project and layout are valid references. If false, they should not be used.
|
||||
gd::Project* project; ///< The project being used.
|
||||
const gd::Layout* scene; ///< The scene being generated.
|
||||
const gd::Platform& platform; ///< The platform being used.
|
||||
|
||||
gd::ObjectsContainer& globalObjectsAndGroups;
|
||||
const gd::ObjectsContainer& objectsAndGroups;
|
||||
|
||||
bool hasProjectAndLayout; ///< true only if project and layout are valid
|
||||
///< references. If false, they should not be used.
|
||||
gd::Project* project; ///< The project being used.
|
||||
const gd::Layout* scene; ///< The scene being generated.
|
||||
|
||||
bool errorOccurred; ///< Must be set to true if an error occured.
|
||||
bool compilationForRuntime; ///< Is set to true if the code generation is
|
||||
@@ -649,10 +730,8 @@ class GD_CORE_API EventsCodeGenerator {
|
||||
///< can share the same list.
|
||||
gd::String customCodeOutsideMain; ///< Custom code inserted before events (
|
||||
///< and not in events function )
|
||||
gd::String customCodeInMain; ///< Custom code inserted before events ( in
|
||||
///< main function )
|
||||
std::set<gd::String>
|
||||
customGlobalDeclarations; ///< Custom global C++ declarations inserted
|
||||
customGlobalDeclarations; ///< Custom global C++ declarations inserted
|
||||
///< after includes
|
||||
size_t maxCustomConditionsDepth; ///< The maximum depth value for all the
|
||||
///< custom conditions created.
|
||||
|
465
Core/GDCore/Events/CodeGeneration/ExpressionCodeGenerator.cpp
Normal file
@@ -0,0 +1,465 @@
|
||||
/*
|
||||
* GDevelop Core
|
||||
* Copyright 2008-present Florian Rival (Florian.Rival@gmail.com). All rights
|
||||
* reserved. This project is released under the MIT License.
|
||||
*/
|
||||
#include "ExpressionCodeGenerator.h"
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include "GDCore/CommonTools.h"
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerationContext.h"
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerator.h"
|
||||
#include "GDCore/Events/Parsers/ExpressionParser2.h"
|
||||
#include "GDCore/Events/Parsers/ExpressionParser2Node.h"
|
||||
#include "GDCore/Events/Parsers/ExpressionParser2NodePrinter.h"
|
||||
#include "GDCore/Events/Parsers/ExpressionParser2NodeWorker.h"
|
||||
#include "GDCore/Events/Tools/EventsCodeNameMangler.h"
|
||||
#include "GDCore/Extensions/Metadata/BehaviorMetadata.h"
|
||||
#include "GDCore/Extensions/Metadata/ExpressionMetadata.h"
|
||||
#include "GDCore/Extensions/Metadata/MetadataProvider.h"
|
||||
#include "GDCore/Extensions/Metadata/ObjectMetadata.h"
|
||||
#include "GDCore/Extensions/Platform.h"
|
||||
#include "GDCore/Extensions/PlatformExtension.h"
|
||||
#include "GDCore/IDE/Events/ExpressionValidator.h"
|
||||
#include "GDCore/Project/Layout.h"
|
||||
#include "GDCore/Project/Project.h"
|
||||
|
||||
// Compatibility with old ExpressionParser
|
||||
#include "GDCore/Events/CodeGeneration/ExpressionsCodeGeneration.h"
|
||||
#include "GDCore/Events/CodeGeneration/VariableParserCallbacks.h"
|
||||
#include "GDCore/Events/Parsers/ExpressionParser.h"
|
||||
#include "GDCore/Events/Parsers/VariableParser.h"
|
||||
// end of compatibility code
|
||||
|
||||
namespace gd {
|
||||
|
||||
bool ExpressionCodeGenerator::useOldExpressionParser = false;
|
||||
|
||||
gd::String ExpressionCodeGenerator::GenerateExpressionCode(
|
||||
EventsCodeGenerator& codeGenerator,
|
||||
EventsCodeGenerationContext& context,
|
||||
const gd::String& type,
|
||||
const gd::String& expression,
|
||||
const gd::String& objectName) {
|
||||
// Compatibility with old ExpressionParser
|
||||
if (useOldExpressionParser) {
|
||||
if (type == "number") {
|
||||
gd::String code = "";
|
||||
gd::CallbacksForGeneratingExpressionCode callbacks(
|
||||
code, codeGenerator, context);
|
||||
gd::ExpressionParser parser(expression);
|
||||
if (!parser.ParseMathExpression(codeGenerator.GetPlatform(),
|
||||
codeGenerator.GetGlobalObjectsAndGroups(),
|
||||
codeGenerator.GetObjectsAndGroups(),
|
||||
callbacks) ||
|
||||
code.empty()) {
|
||||
std::cout << "Error (old ExpressionParser): \""
|
||||
<< parser.GetFirstError() << "\" in: \"" << expression
|
||||
<< "\" (number)" << std::endl;
|
||||
code = "0";
|
||||
}
|
||||
|
||||
return code;
|
||||
} else if (type == "string") {
|
||||
gd::String code = "";
|
||||
gd::CallbacksForGeneratingExpressionCode callbacks(
|
||||
code, codeGenerator, context);
|
||||
gd::ExpressionParser parser(expression);
|
||||
if (!parser.ParseStringExpression(
|
||||
codeGenerator.GetPlatform(),
|
||||
codeGenerator.GetGlobalObjectsAndGroups(),
|
||||
codeGenerator.GetObjectsAndGroups(),
|
||||
callbacks) ||
|
||||
code.empty()) {
|
||||
std::cout << "Error (old ExpressionParser): \""
|
||||
<< parser.GetFirstError() << "\" in: \"" << expression
|
||||
<< "\" (string)" << std::endl;
|
||||
code = "\"\"";
|
||||
}
|
||||
|
||||
return code;
|
||||
} else if (type == "scenevar") {
|
||||
gd::String code = "";
|
||||
gd::VariableCodeGenerationCallbacks callbacks(
|
||||
code,
|
||||
codeGenerator,
|
||||
context,
|
||||
gd::EventsCodeGenerator::LAYOUT_VARIABLE);
|
||||
|
||||
gd::VariableParser parser(expression);
|
||||
if (!parser.Parse(callbacks)) {
|
||||
std::cout << "Error (old VariableParser) :" << parser.GetFirstError()
|
||||
<< " in: " << expression << std::endl;
|
||||
code = codeGenerator.GenerateBadVariable();
|
||||
}
|
||||
return code;
|
||||
} else if (type == "globalvar") {
|
||||
gd::String code = "";
|
||||
gd::VariableCodeGenerationCallbacks callbacks(
|
||||
code,
|
||||
codeGenerator,
|
||||
context,
|
||||
gd::EventsCodeGenerator::PROJECT_VARIABLE);
|
||||
|
||||
gd::VariableParser parser(expression);
|
||||
if (!parser.Parse(callbacks)) {
|
||||
std::cout << "Error (old VariableParser) :" << parser.GetFirstError()
|
||||
<< " in: " << expression << std::endl;
|
||||
code = codeGenerator.GenerateBadVariable();
|
||||
}
|
||||
return code;
|
||||
} else if (type == "objectvar") {
|
||||
gd::String code = "";
|
||||
|
||||
// Object is either the object of the previous parameter or, if it is
|
||||
// empty, the object being picked by the instruction.
|
||||
gd::String object =
|
||||
objectName.empty() ? context.GetCurrentObject() : objectName;
|
||||
|
||||
gd::VariableCodeGenerationCallbacks callbacks(
|
||||
code, codeGenerator, context, object);
|
||||
|
||||
gd::VariableParser parser(expression);
|
||||
if (!parser.Parse(callbacks)) {
|
||||
std::cout << "Error (old VariableParser) :" << parser.GetFirstError()
|
||||
<< " in: " << expression << std::endl;
|
||||
code = codeGenerator.GenerateBadVariable();
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
std::cout << "Type error (old ExpressionParser): type \"" << type
|
||||
<< "\" is not supported" << std::endl;
|
||||
return "/* Error during code generation: type " + type +
|
||||
" is not supported for old ExpressionParser. */ 0";
|
||||
}
|
||||
// end of compatibility code
|
||||
|
||||
gd::ExpressionParser2 parser(codeGenerator.GetPlatform(),
|
||||
codeGenerator.GetGlobalObjectsAndGroups(),
|
||||
codeGenerator.GetObjectsAndGroups());
|
||||
auto node = parser.ParseExpression(type, expression, objectName);
|
||||
gd::ExpressionValidator validator;
|
||||
node->Visit(validator);
|
||||
|
||||
ExpressionCodeGenerator generator(codeGenerator, context);
|
||||
if (!validator.GetErrors().empty()) {
|
||||
std::cout << "Error: \"" << validator.GetErrors()[0]->GetMessage()
|
||||
<< "\" in: \"" << expression << "\" (" << type << ")"
|
||||
<< std::endl;
|
||||
|
||||
return generator.GenerateDefaultValue(type);
|
||||
}
|
||||
|
||||
node->Visit(generator);
|
||||
return generator.GetOutput();
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitOperatorNode(OperatorNode& node) {
|
||||
node.leftHandSide->Visit(*this);
|
||||
output += " ";
|
||||
output.push_back(node.op);
|
||||
output += " ";
|
||||
node.rightHandSide->Visit(*this);
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitUnaryOperatorNode(
|
||||
UnaryOperatorNode& node) {
|
||||
output.push_back(node.op);
|
||||
output += "("; // Add extra parenthesis to ensure that things like --2 are
|
||||
// properly outputted as -(-2) (GDevelop don't have -- or ++
|
||||
// operators, but JavaScript and C++ have).
|
||||
node.factor->Visit(*this);
|
||||
output += ")";
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitSubExpressionNode(
|
||||
SubExpressionNode& node) {
|
||||
output += "(";
|
||||
node.expression->Visit(*this);
|
||||
output += ")";
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitNumberNode(NumberNode& node) {
|
||||
output += node.number;
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitTextNode(TextNode& node) {
|
||||
output += codeGenerator.ConvertToStringExplicit(node.text);
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitVariableNode(VariableNode& node) {
|
||||
// This "translation" from the type to an enum could be avoided
|
||||
// if all types were moved to an enum.
|
||||
EventsCodeGenerator::VariableScope scope =
|
||||
node.type == "globalvar"
|
||||
? gd::EventsCodeGenerator::PROJECT_VARIABLE
|
||||
: ((node.type == "scenevar")
|
||||
? gd::EventsCodeGenerator::LAYOUT_VARIABLE
|
||||
: gd::EventsCodeGenerator::OBJECT_VARIABLE);
|
||||
|
||||
output += codeGenerator.GenerateGetVariable(
|
||||
node.name, scope, context, node.objectName);
|
||||
if (node.child) node.child->Visit(*this);
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitVariableAccessorNode(
|
||||
VariableAccessorNode& node) {
|
||||
output += codeGenerator.GenerateVariableAccessor(node.name);
|
||||
if (node.child) node.child->Visit(*this);
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitVariableBracketAccessorNode(
|
||||
VariableBracketAccessorNode& node) {
|
||||
ExpressionCodeGenerator generator(codeGenerator, context);
|
||||
node.expression->Visit(generator);
|
||||
output +=
|
||||
codeGenerator.GenerateVariableBracketAccessor(generator.GetOutput());
|
||||
if (node.child) node.child->Visit(*this);
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitIdentifierNode(IdentifierNode& node) {
|
||||
if (gd::ParameterMetadata::IsObject(node.type)) {
|
||||
output +=
|
||||
codeGenerator.GenerateObject(node.identifierName, node.type, context);
|
||||
} else {
|
||||
output += "/* Error during generation, unrecognized identifier type: " +
|
||||
codeGenerator.ConvertToString(node.type) + " with value " +
|
||||
codeGenerator.ConvertToString(node.identifierName) + " */ " +
|
||||
codeGenerator.ConvertToStringExplicit(node.identifierName);
|
||||
}
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitFunctionNode(FunctionNode& node) {
|
||||
if (gd::MetadataProvider::IsBadExpressionMetadata(node.expressionMetadata)) {
|
||||
output += "/* Error during generation, function not found: " +
|
||||
codeGenerator.ConvertToString(node.functionName) + " for type " +
|
||||
node.type + " */ " + GenerateDefaultValue(node.type);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!node.objectName.empty()) {
|
||||
if (!node.behaviorName.empty()) {
|
||||
output += GenerateBehaviorFunctionCode(node.type,
|
||||
node.objectName,
|
||||
node.behaviorName,
|
||||
node.parameters,
|
||||
node.expressionMetadata);
|
||||
} else {
|
||||
output += GenerateObjectFunctionCode(
|
||||
node.type, node.objectName, node.parameters, node.expressionMetadata);
|
||||
}
|
||||
} else {
|
||||
output +=
|
||||
GenerateFreeFunctionCode(node.parameters, node.expressionMetadata);
|
||||
}
|
||||
}
|
||||
|
||||
gd::String ExpressionCodeGenerator::GenerateFreeFunctionCode(
|
||||
const std::vector<std::unique_ptr<ExpressionNode>>& parameters,
|
||||
const ExpressionMetadata& expressionMetadata) {
|
||||
codeGenerator.AddIncludeFiles(
|
||||
expressionMetadata.codeExtraInformation.GetIncludeFiles());
|
||||
|
||||
// Launch custom code generator if needed
|
||||
if (expressionMetadata.codeExtraInformation.HasCustomCodeGenerator()) {
|
||||
return expressionMetadata.codeExtraInformation.customCodeGenerator(
|
||||
PrintParameters(parameters), codeGenerator, context);
|
||||
}
|
||||
|
||||
gd::String parametersCode =
|
||||
GenerateParametersCodes(parameters, expressionMetadata, 0);
|
||||
|
||||
return expressionMetadata.codeExtraInformation.functionCallName + "(" +
|
||||
parametersCode + ")";
|
||||
}
|
||||
|
||||
gd::String ExpressionCodeGenerator::GenerateObjectFunctionCode(
|
||||
const gd::String& type,
|
||||
const gd::String& objectName,
|
||||
const std::vector<std::unique_ptr<ExpressionNode>>& parameters,
|
||||
const ExpressionMetadata& expressionMetadata) {
|
||||
const gd::ObjectsContainer& globalObjectsAndGroups =
|
||||
codeGenerator.GetGlobalObjectsAndGroups();
|
||||
const gd::ObjectsContainer& objectsAndGroups =
|
||||
codeGenerator.GetObjectsAndGroups();
|
||||
|
||||
codeGenerator.AddIncludeFiles(
|
||||
expressionMetadata.codeExtraInformation.GetIncludeFiles());
|
||||
|
||||
// Launch custom code generator if needed
|
||||
if (expressionMetadata.codeExtraInformation.HasCustomCodeGenerator()) {
|
||||
return expressionMetadata.codeExtraInformation.customCodeGenerator(
|
||||
PrintParameters(parameters), codeGenerator, context);
|
||||
}
|
||||
|
||||
// Prepare parameters
|
||||
gd::String parametersCode = GenerateParametersCodes(
|
||||
parameters,
|
||||
expressionMetadata,
|
||||
// By convention, the first parameter is the object
|
||||
1);
|
||||
|
||||
gd::String functionOutput = GenerateDefaultValue(type);
|
||||
|
||||
// Get object(s) concerned by function call
|
||||
std::vector<gd::String> realObjects =
|
||||
codeGenerator.ExpandObjectsName(objectName, context);
|
||||
for (std::size_t i = 0; i < realObjects.size(); ++i) {
|
||||
context.ObjectsListNeeded(realObjects[i]);
|
||||
|
||||
gd::String objectType = gd::GetTypeOfObject(
|
||||
globalObjectsAndGroups, objectsAndGroups, realObjects[i]);
|
||||
const ObjectMetadata& objInfo = MetadataProvider::GetObjectMetadata(
|
||||
codeGenerator.GetPlatform(), objectType);
|
||||
|
||||
codeGenerator.AddIncludeFiles(objInfo.includeFiles);
|
||||
functionOutput = codeGenerator.GenerateObjectFunctionCall(
|
||||
realObjects[i],
|
||||
objInfo,
|
||||
expressionMetadata.codeExtraInformation,
|
||||
parametersCode,
|
||||
functionOutput,
|
||||
context);
|
||||
}
|
||||
|
||||
return functionOutput;
|
||||
}
|
||||
gd::String ExpressionCodeGenerator::GenerateBehaviorFunctionCode(
|
||||
const gd::String& type,
|
||||
const gd::String& objectName,
|
||||
const gd::String& behaviorName,
|
||||
const std::vector<std::unique_ptr<ExpressionNode>>& parameters,
|
||||
const ExpressionMetadata& expressionMetadata) {
|
||||
const gd::ObjectsContainer& globalObjectsAndGroups =
|
||||
codeGenerator.GetGlobalObjectsAndGroups();
|
||||
const gd::ObjectsContainer& objectsAndGroups =
|
||||
codeGenerator.GetObjectsAndGroups();
|
||||
|
||||
codeGenerator.AddIncludeFiles(
|
||||
expressionMetadata.codeExtraInformation.GetIncludeFiles());
|
||||
|
||||
// Launch custom code generator if needed
|
||||
if (expressionMetadata.codeExtraInformation.HasCustomCodeGenerator()) {
|
||||
return expressionMetadata.codeExtraInformation.customCodeGenerator(
|
||||
PrintParameters(parameters), codeGenerator, context);
|
||||
}
|
||||
|
||||
// Prepare parameters
|
||||
gd::String parametersCode = GenerateParametersCodes(
|
||||
parameters,
|
||||
expressionMetadata,
|
||||
// By convention, the first parameters are the object and behavior
|
||||
2);
|
||||
|
||||
// Get object(s) concerned by function call
|
||||
std::vector<gd::String> realObjects =
|
||||
codeGenerator.ExpandObjectsName(objectName, context);
|
||||
|
||||
gd::String functionOutput = GenerateDefaultValue(type);
|
||||
|
||||
gd::String behaviorType = gd::GetTypeOfBehavior(
|
||||
globalObjectsAndGroups, objectsAndGroups, behaviorName);
|
||||
const BehaviorMetadata& autoInfo = MetadataProvider::GetBehaviorMetadata(
|
||||
codeGenerator.GetPlatform(), behaviorType);
|
||||
|
||||
for (std::size_t i = 0; i < realObjects.size(); ++i) {
|
||||
context.ObjectsListNeeded(realObjects[i]);
|
||||
|
||||
codeGenerator.AddIncludeFiles(autoInfo.includeFiles);
|
||||
functionOutput = codeGenerator.GenerateObjectBehaviorFunctionCall(
|
||||
realObjects[i],
|
||||
behaviorName,
|
||||
autoInfo,
|
||||
expressionMetadata.codeExtraInformation,
|
||||
parametersCode,
|
||||
functionOutput,
|
||||
context);
|
||||
}
|
||||
|
||||
return functionOutput;
|
||||
}
|
||||
|
||||
gd::String ExpressionCodeGenerator::GenerateParametersCodes(
|
||||
const std::vector<std::unique_ptr<ExpressionNode>>& parameters,
|
||||
const ExpressionMetadata& expressionMetadata,
|
||||
size_t initialParameterIndex) {
|
||||
size_t nonCodeOnlyParameterIndex = 0;
|
||||
gd::String parametersCode;
|
||||
for (std::size_t i = initialParameterIndex;
|
||||
i < expressionMetadata.parameters.size();
|
||||
++i) {
|
||||
if (i != initialParameterIndex) parametersCode += ", ";
|
||||
|
||||
auto& parameterMetadata = expressionMetadata.parameters[i];
|
||||
if (!parameterMetadata.IsCodeOnly()) {
|
||||
ExpressionCodeGenerator generator(codeGenerator, context);
|
||||
if (nonCodeOnlyParameterIndex < parameters.size()) {
|
||||
parameters[nonCodeOnlyParameterIndex]->Visit(generator);
|
||||
parametersCode += generator.GetOutput();
|
||||
} else if (parameterMetadata.IsOptional()) {
|
||||
// Optional parameters default value were not parsed at the time of the
|
||||
// expression parsing. Parse them now.
|
||||
ExpressionParser2 parser(codeGenerator.GetPlatform(),
|
||||
codeGenerator.GetGlobalObjectsAndGroups(),
|
||||
codeGenerator.GetObjectsAndGroups());
|
||||
auto node = parser.ParseExpression(parameterMetadata.GetType(),
|
||||
parameterMetadata.GetDefaultValue());
|
||||
|
||||
node->Visit(generator);
|
||||
parametersCode += generator.GetOutput();
|
||||
} else {
|
||||
parametersCode +=
|
||||
"/* Error during generation, parameter not existing in the nodes "
|
||||
"*/ " +
|
||||
GenerateDefaultValue(parameterMetadata.GetType());
|
||||
}
|
||||
|
||||
nonCodeOnlyParameterIndex++;
|
||||
} else {
|
||||
parametersCode +=
|
||||
codeGenerator.GenerateParameterCodes(parameterMetadata.GetExtraInfo(),
|
||||
parameterMetadata,
|
||||
context,
|
||||
"",
|
||||
nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
return parametersCode;
|
||||
}
|
||||
|
||||
std::vector<gd::Expression> ExpressionCodeGenerator::PrintParameters(
|
||||
const std::vector<std::unique_ptr<ExpressionNode>>& parameters) {
|
||||
// Printing parameters is only useful because custom code generator of
|
||||
// expression require to get the parameters of the expression as strings
|
||||
// (gd::Expression). Once the old ExpressionParser is removed, custom
|
||||
// code generator can be reworked to directly take the parsed nodes,
|
||||
// avoiding an extra and useless printing/parsing of their parameters.
|
||||
|
||||
std::vector<gd::Expression> printedParameters;
|
||||
for (auto& parameter : parameters) {
|
||||
printedParameters.push_back(
|
||||
gd::ExpressionParser2NodePrinter::PrintNode(*parameter));
|
||||
}
|
||||
|
||||
return printedParameters;
|
||||
}
|
||||
|
||||
gd::String ExpressionCodeGenerator::GenerateDefaultValue(
|
||||
const gd::String& type) {
|
||||
if (gd::ParameterMetadata::IsExpression("variable", type)) {
|
||||
return codeGenerator.GenerateBadVariable();
|
||||
}
|
||||
if (gd::ParameterMetadata::IsObject(type)) {
|
||||
return codeGenerator.GenerateBadObject();
|
||||
}
|
||||
|
||||
return (type == "string") ? "\"\"" : "0";
|
||||
}
|
||||
|
||||
void ExpressionCodeGenerator::OnVisitEmptyNode(EmptyNode& node) {
|
||||
output += GenerateDefaultValue(node.type);
|
||||
}
|
||||
|
||||
} // namespace gd
|
117
Core/GDCore/Events/CodeGeneration/ExpressionCodeGenerator.h
Normal file
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* GDevelop Core
|
||||
* Copyright 2008-present Florian Rival (Florian.Rival@gmail.com). All rights
|
||||
* reserved. This project is released under the MIT License.
|
||||
*/
|
||||
#if defined(GD_IDE_ONLY)
|
||||
#ifndef GDCORE_ExpressionCodeGenerator_H
|
||||
#define GDCORE_ExpressionCodeGenerator_H
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include "GDCore/Events/Parsers/ExpressionParser2.h"
|
||||
#include "GDCore/Events/Parsers/ExpressionParser2Node.h"
|
||||
#include "GDCore/Events/Parsers/ExpressionParser2NodeWorker.h"
|
||||
#include "GDCore/String.h"
|
||||
namespace gd {
|
||||
class Expression;
|
||||
class ObjectsContainer;
|
||||
class Platform;
|
||||
class ParameterMetadata;
|
||||
class ExpressionMetadata;
|
||||
class EventsCodeGenerationContext;
|
||||
class EventsCodeGenerator;
|
||||
} // namespace gd
|
||||
|
||||
namespace gd {
|
||||
|
||||
/**
|
||||
* \brief Generate code for a parsed expression.
|
||||
*
|
||||
* Almost all code generation is dedicated to the gd::EventsCodeGenerator,
|
||||
* so that it can be adapted to the target.
|
||||
*
|
||||
* \see gd::ExpressionParser2
|
||||
*/
|
||||
class GD_CORE_API ExpressionCodeGenerator : public ExpressionParser2NodeWorker {
|
||||
public:
|
||||
ExpressionCodeGenerator(EventsCodeGenerator& codeGenerator_,
|
||||
EventsCodeGenerationContext& context_)
|
||||
: codeGenerator(codeGenerator_), context(context_){};
|
||||
virtual ~ExpressionCodeGenerator(){};
|
||||
|
||||
/**
|
||||
* Helper to generate the code for an expression.
|
||||
* If expression is invalid, a default generated value is returned (0 for
|
||||
* number expression, empty string for strings).
|
||||
*
|
||||
* \param codeGenerator The code generator to use to output code.
|
||||
* \param context The context of the code generation.
|
||||
* \param type The type of the expression (see gd::ExpressionParser2).
|
||||
* \param expression The expression to parse and generate code for.
|
||||
* \param object The object the expression refers too (only for "objectvar"
|
||||
* type).
|
||||
*
|
||||
* \see see gd::ExpressionParser2
|
||||
*/
|
||||
static gd::String GenerateExpressionCode(EventsCodeGenerator& codeGenerator,
|
||||
EventsCodeGenerationContext& context,
|
||||
const gd::String& type,
|
||||
const gd::String& expression,
|
||||
const gd::String& objectName = "");
|
||||
|
||||
static void UseOldExpressionParser(bool enable) {
|
||||
useOldExpressionParser = enable;
|
||||
};
|
||||
static bool IsUsingOldExpressionParser() { return useOldExpressionParser; };
|
||||
|
||||
const gd::String& GetOutput() { return output; };
|
||||
|
||||
protected:
|
||||
void OnVisitSubExpressionNode(SubExpressionNode& node) override;
|
||||
void OnVisitOperatorNode(OperatorNode& node) override;
|
||||
void OnVisitUnaryOperatorNode(UnaryOperatorNode& node) override;
|
||||
void OnVisitNumberNode(NumberNode& node) override;
|
||||
void OnVisitTextNode(TextNode& node) override;
|
||||
void OnVisitVariableNode(VariableNode& node) override;
|
||||
void OnVisitVariableAccessorNode(VariableAccessorNode& node) override;
|
||||
void OnVisitVariableBracketAccessorNode(
|
||||
VariableBracketAccessorNode& node) override;
|
||||
void OnVisitIdentifierNode(IdentifierNode& node) override;
|
||||
void OnVisitFunctionNode(FunctionNode& node) override;
|
||||
void OnVisitEmptyNode(EmptyNode& node) override;
|
||||
|
||||
private:
|
||||
gd::String GenerateFreeFunctionCode(
|
||||
const std::vector<std::unique_ptr<ExpressionNode>>& parameters,
|
||||
const ExpressionMetadata& expressionMetadata);
|
||||
gd::String GenerateObjectFunctionCode(
|
||||
const gd::String& type,
|
||||
const gd::String& objectName,
|
||||
const std::vector<std::unique_ptr<ExpressionNode>>& parameters,
|
||||
const ExpressionMetadata& expressionMetadata);
|
||||
gd::String GenerateBehaviorFunctionCode(
|
||||
const gd::String& type,
|
||||
const gd::String& objectName,
|
||||
const gd::String& behaviorName,
|
||||
const std::vector<std::unique_ptr<ExpressionNode>>& parameters,
|
||||
const ExpressionMetadata& expressionMetadata);
|
||||
gd::String GenerateParametersCodes(
|
||||
const std::vector<std::unique_ptr<ExpressionNode>>& parameters,
|
||||
const ExpressionMetadata& expressionMetadata,
|
||||
size_t initialParameterIndex);
|
||||
gd::String GenerateDefaultValue(const gd::String& type);
|
||||
static std::vector<gd::Expression> PrintParameters(
|
||||
const std::vector<std::unique_ptr<ExpressionNode>>& parameters);
|
||||
|
||||
gd::String output;
|
||||
EventsCodeGenerator& codeGenerator;
|
||||
EventsCodeGenerationContext& context;
|
||||
|
||||
static bool useOldExpressionParser;
|
||||
};
|
||||
|
||||
} // namespace gd
|
||||
|
||||
#endif // GDCORE_ExpressionCodeGenerator_H
|
||||
#endif
|
@@ -11,28 +11,18 @@
|
||||
#include "GDCore/String.h"
|
||||
namespace gd {
|
||||
class ExpressionMetadata;
|
||||
}
|
||||
namespace gd {
|
||||
class Expression;
|
||||
}
|
||||
namespace gd {
|
||||
class Project;
|
||||
}
|
||||
namespace gd {
|
||||
class Layout;
|
||||
}
|
||||
namespace gd {
|
||||
class Layout;
|
||||
}
|
||||
namespace gd {
|
||||
class EventsCodeGenerationContext;
|
||||
}
|
||||
namespace gd {
|
||||
class EventsCodeGenerator;
|
||||
}
|
||||
|
||||
namespace gd {
|
||||
|
||||
// TODO: Replace and remove (ExpressionCodeGenerator)
|
||||
|
||||
/**
|
||||
* \brief Used to generate code from expressions.
|
||||
*
|
||||
|
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* GDevelop C++ Platform
|
||||
* Copyright 2008-2016 Florian Rival (Florian.Rival@gmail.com). All rights
|
||||
* reserved. This project is released under the MIT License.
|
||||
*/
|
||||
#if defined(GD_IDE_ONLY)
|
||||
#include "VariableParserCallbacks.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerationContext.h"
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerator.h"
|
||||
#include "GDCore/Events/CodeGeneration/ExpressionCodeGenerator.h"
|
||||
#include "GDCore/Events/Parsers/VariableParser.h"
|
||||
#include "GDCore/Extensions/Metadata/MetadataProvider.h"
|
||||
#include "GDCore/Extensions/Metadata/ObjectMetadata.h"
|
||||
#include "GDCore/Extensions/Platform.h"
|
||||
#include "GDCore/Project/Layout.h"
|
||||
#include "GDCore/Project/Object.h"
|
||||
#include "GDCore/Project/Project.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace gd {
|
||||
|
||||
VariableCodeGenerationCallbacks::VariableCodeGenerationCallbacks(
|
||||
gd::String& output_,
|
||||
gd::EventsCodeGenerator& codeGenerator_,
|
||||
gd::EventsCodeGenerationContext& context_,
|
||||
const gd::EventsCodeGenerator::VariableScope& scope_)
|
||||
: output(output_),
|
||||
codeGenerator(codeGenerator_),
|
||||
context(context_),
|
||||
scope(scope_) {
|
||||
if (scope == gd::EventsCodeGenerator::OBJECT_VARIABLE) {
|
||||
std::cout << "ERROR: Initializing VariableCodeGenerationCallbacks with "
|
||||
"OBJECT_VARIABLE without object.";
|
||||
}
|
||||
}
|
||||
|
||||
VariableCodeGenerationCallbacks::VariableCodeGenerationCallbacks(
|
||||
gd::String& output_,
|
||||
gd::EventsCodeGenerator& codeGenerator_,
|
||||
gd::EventsCodeGenerationContext& context_,
|
||||
const gd::String& object_)
|
||||
: output(output_),
|
||||
codeGenerator(codeGenerator_),
|
||||
context(context_),
|
||||
scope(gd::EventsCodeGenerator::OBJECT_VARIABLE),
|
||||
object(object_) {}
|
||||
|
||||
void VariableCodeGenerationCallbacks::OnRootVariable(gd::String variableName) {
|
||||
output += codeGenerator.GenerateGetVariable(variableName, scope, context, object);
|
||||
}
|
||||
|
||||
void VariableCodeGenerationCallbacks::OnChildVariable(gd::String variableName) {
|
||||
output += codeGenerator.GenerateVariableAccessor(variableName);
|
||||
}
|
||||
|
||||
void VariableCodeGenerationCallbacks::OnChildSubscript(
|
||||
gd::String stringExpression) {
|
||||
gd::String argumentCode = gd::ExpressionCodeGenerator::GenerateExpressionCode(
|
||||
codeGenerator, context, "string", stringExpression);
|
||||
|
||||
output += codeGenerator.GenerateVariableBracketAccessor(argumentCode);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
97
Core/GDCore/Events/CodeGeneration/VariableParserCallbacks.h
Normal file
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* GDevelop C++ Platform
|
||||
* Copyright 2008-2016 Florian Rival (Florian.Rival@gmail.com). All rights
|
||||
* reserved. This project is released under the MIT License.
|
||||
*/
|
||||
#if defined(GD_IDE_ONLY)
|
||||
#ifndef VARIABLEPARSERCALLBACKS_H
|
||||
#define VARIABLEPARSERCALLBACKS_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "GDCore/Events/Parsers/VariableParser.h"
|
||||
#include "GDCore/String.h"
|
||||
#include "EventsCodeGenerator.h"
|
||||
namespace gd {
|
||||
class EventsCodeGenerationContext;
|
||||
} // namespace gd
|
||||
|
||||
// TODO: Replace and remove (ExpressionCodeGenerator)
|
||||
namespace gd {
|
||||
|
||||
/**
|
||||
* \brief Callbacks called to generate the code for getting a variable.
|
||||
*
|
||||
* Usage example:
|
||||
\code
|
||||
VariableCodeGenerationCallbacks callbacks(output, eventsCodeGenerator,
|
||||
context, VariableCodeGenerationCallbacks::LAYOUT_VARIABLE);
|
||||
|
||||
gd::VariableParser parser(parameter);
|
||||
if ( !parser.Parse(callbacks) )
|
||||
{
|
||||
//Error during parsing the variable name:
|
||||
output = "runtimeContext->GetSceneVariables().GetBadVariable()";
|
||||
}
|
||||
|
||||
//"output" now contains the C++ code to return the variable.
|
||||
\endcode
|
||||
*/
|
||||
class VariableCodeGenerationCallbacks : public gd::VariableParserCallbacks {
|
||||
public:
|
||||
/**
|
||||
* \brief Default constructor for generating code for a layout/global
|
||||
* variable. \param output The string in which the code will be generated.
|
||||
* \param codeGenerator The code generator being used.
|
||||
* \param context The current code generation context.
|
||||
* \param scope The scope of the variable being accessed: LAYOUT_VARIABLE,
|
||||
* PROJECT_VARIABLE.
|
||||
*/
|
||||
VariableCodeGenerationCallbacks(gd::String& output,
|
||||
gd::EventsCodeGenerator& codeGenerator_,
|
||||
gd::EventsCodeGenerationContext& context_,
|
||||
const gd::EventsCodeGenerator::VariableScope& scope_);
|
||||
/**
|
||||
|
||||
* \brief Default constructor for generating code for an object variable.
|
||||
* \param output The string in which the code will be generated.
|
||||
* \param codeGenerator The code generator being used.
|
||||
* \param context The current code generation context.
|
||||
* \param object The name of the object
|
||||
*/
|
||||
VariableCodeGenerationCallbacks(gd::String& output,
|
||||
gd::EventsCodeGenerator& codeGenerator_,
|
||||
gd::EventsCodeGenerationContext& context_,
|
||||
const gd::String& object);
|
||||
|
||||
/**
|
||||
* \brief Called when the first variable has been parsed.
|
||||
* \param variableName The variable name.
|
||||
*/
|
||||
virtual void OnRootVariable(gd::String variableName);
|
||||
|
||||
/**
|
||||
* \brief Called when accessing the child of a structure variable.
|
||||
* \param variableName The child variable name.
|
||||
*/
|
||||
virtual void OnChildVariable(gd::String variableName);
|
||||
|
||||
/**
|
||||
* \brief Called when accessing the child of a structure variable using a
|
||||
* string expression in square brackets. \param variableName The expression
|
||||
* used to access the child variable.
|
||||
*/
|
||||
virtual void OnChildSubscript(gd::String stringExpression);
|
||||
|
||||
private:
|
||||
gd::String& output;
|
||||
gd::EventsCodeGenerator& codeGenerator;
|
||||
gd::EventsCodeGenerationContext& context;
|
||||
gd::EventsCodeGenerator::VariableScope scope;
|
||||
const gd::String object; ///< The object name, when scope == OBJECT_VARIABLE.
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // VARIABLEPARSERCALLBACKS_H
|
||||
#endif
|
@@ -17,8 +17,7 @@ std::vector<gd::String> BaseEvent::emptyDependencies;
|
||||
gd::String BaseEvent::emptySourceFile;
|
||||
|
||||
BaseEvent::BaseEvent()
|
||||
: eventHeightNeedUpdate(true),
|
||||
totalTimeDuringLastSession(0),
|
||||
: totalTimeDuringLastSession(0),
|
||||
percentDuringLastSession(0),
|
||||
disabled(false),
|
||||
folded(false) {}
|
||||
|
@@ -21,13 +21,9 @@ class Layout;
|
||||
class EventsCodeGenerator;
|
||||
class EventsCodeGenerationContext;
|
||||
class Platform;
|
||||
class EventsEditorItemsAreas;
|
||||
class EventsEditorSelection;
|
||||
class SerializerElement;
|
||||
class Instruction;
|
||||
}
|
||||
class wxWindow;
|
||||
class wxDC;
|
||||
|
||||
namespace gd {
|
||||
|
||||
@@ -259,76 +255,6 @@ class GD_CORE_API BaseEvent {
|
||||
|
||||
///@}
|
||||
|
||||
/** \name Event rendering
|
||||
* Method and members used to render the event
|
||||
*/
|
||||
///@{
|
||||
|
||||
/**
|
||||
* Redefine this method to draw the event.
|
||||
*
|
||||
* \param dc The wxWidgets drawing context to be used.
|
||||
* \param x The x position where the events must be drawn.
|
||||
* \param y The y position where the events must be drawn.
|
||||
* \param width The width available for drawing.
|
||||
* \param areas Use this object to indicate the areas where items have been
|
||||
* drawn \param selection Give access to the current selection(s), to draw for
|
||||
* example hovering or selecting effects.
|
||||
*
|
||||
* \note The height of the drawing must be the same as the height returned by
|
||||
* BaseEvent::GetRenderedHeight
|
||||
*
|
||||
* \see gd::EventsRenderingHelper
|
||||
* \see EventsEditorSelection
|
||||
* \see EventsEditorItemsAreas
|
||||
*/
|
||||
virtual void Render(wxDC& dc,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
gd::EventsEditorItemsAreas& areas,
|
||||
gd::EventsEditorSelection& selection,
|
||||
const gd::Platform& platform) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Must return the height of the event when rendered.
|
||||
*
|
||||
* \note The height of the drawing must be the same as the height of the
|
||||
* drawing made by BaseEvent::Render
|
||||
*/
|
||||
virtual unsigned int GetRenderedHeight(unsigned int width,
|
||||
const gd::Platform& platform) const {
|
||||
return 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Used by EditEvent to describe what sort of changes have been made to the
|
||||
* event. \see BaseEvent::EditEvent
|
||||
*/
|
||||
enum EditEventReturnType {
|
||||
ChangesMade,
|
||||
Cancelled,
|
||||
ChangesMadeButNoNeedForEventsRecompilation
|
||||
};
|
||||
|
||||
/**
|
||||
* Called when the user want to edit the event.
|
||||
*/
|
||||
virtual EditEventReturnType EditEvent(
|
||||
wxWindow* parent_,
|
||||
gd::Project& game_,
|
||||
gd::Layout& scene_,
|
||||
gd::MainFrameWrapper& mainFrameWrapper_) {
|
||||
return ChangesMade;
|
||||
};
|
||||
|
||||
///@}
|
||||
|
||||
mutable bool eventHeightNeedUpdate; ///< Automatically set to true/false by
|
||||
///< the events editor
|
||||
|
||||
std::weak_ptr<gd::BaseEvent>
|
||||
originalEvent; ///< Pointer only used for profiling events, so as to
|
||||
///< remember the original event from which it has been
|
||||
@@ -340,9 +266,6 @@ class GD_CORE_API BaseEvent {
|
||||
float percentDuringLastSession; ///< Total time used by the event during the
|
||||
///< last run. Used for profiling.
|
||||
|
||||
protected:
|
||||
mutable unsigned int renderedHeight;
|
||||
|
||||
private:
|
||||
bool folded; ///< True if the subevents should be hidden in the events editor
|
||||
bool disabled; ///< True if the event is disabled and must not be executed
|
||||
|
@@ -16,22 +16,15 @@ namespace gd {
|
||||
gd::Expression Instruction::badExpression("");
|
||||
|
||||
Instruction::Instruction(gd::String type_)
|
||||
: renderedHeightNeedUpdate(true),
|
||||
renderedHeight(0),
|
||||
selected(false),
|
||||
type(type_),
|
||||
: type(type_),
|
||||
inverted(false) {
|
||||
// ctor
|
||||
parameters.reserve(8);
|
||||
}
|
||||
|
||||
Instruction::Instruction(gd::String type_,
|
||||
const std::vector<gd::Expression>& parameters_,
|
||||
bool inverted_)
|
||||
: renderedHeightNeedUpdate(true),
|
||||
renderedHeight(0),
|
||||
selected(false),
|
||||
type(type_),
|
||||
: type(type_),
|
||||
inverted(inverted_),
|
||||
parameters(parameters_) {
|
||||
parameters.reserve(8);
|
||||
|
@@ -17,7 +17,7 @@ namespace gd {
|
||||
* action.
|
||||
*
|
||||
* An instruction has a type, which define what it does, and some parameters. It
|
||||
* can also be set as inverted ( when the instruction is a condition ) and it
|
||||
* can also be set as inverted (when the instruction is a condition) and it
|
||||
* can have sub instructions. This class does nothing particular except storing
|
||||
* these data.
|
||||
*
|
||||
@@ -131,20 +131,6 @@ class GD_CORE_API Instruction {
|
||||
*/
|
||||
inline gd::InstructionsList& GetSubInstructions() { return subInstructions; };
|
||||
|
||||
/** \name Rendering
|
||||
* Members related to the instruction rendering in an event editor.
|
||||
*/
|
||||
///@{
|
||||
|
||||
mutable bool
|
||||
renderedHeightNeedUpdate; ///< True if the instruction height may have
|
||||
///< changed and must be computed again.
|
||||
mutable unsigned int renderedHeight; ///< Height of the instruction rendered
|
||||
///< in an event editor.
|
||||
mutable bool selected; ///< True if selected in an event editor.
|
||||
|
||||
///@}
|
||||
|
||||
private:
|
||||
gd::String type; ///< Instruction type
|
||||
bool inverted; ///< True if the instruction if inverted. Only applicable for
|
||||
|
@@ -717,9 +717,6 @@ bool ExpressionParser::ParseStringExpression(const gd::Platform& platform,
|
||||
firstErrorPos = functionNameEnd;
|
||||
firstErrorStr = _("Incorrect number of parameters");
|
||||
|
||||
for (std::size_t i = 0; i < parameters.size(); ++i)
|
||||
cout << "Param:" << parameters[i].GetPlainString() << endl;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
220
Core/GDCore/Events/Parsers/ExpressionParser2.cpp
Normal file
@@ -0,0 +1,220 @@
|
||||
/*
|
||||
* GDevelop Core
|
||||
* Copyright 2008-present Florian Rival (Florian.Rival@gmail.com). All rights
|
||||
* reserved. This project is released under the MIT License.
|
||||
*/
|
||||
#include "GDCore/Events/Parsers/ExpressionParser2.h"
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include "GDCore/CommonTools.h"
|
||||
#include "GDCore/Events/Expression.h"
|
||||
#include "GDCore/Extensions/Metadata/ExpressionMetadata.h"
|
||||
#include "GDCore/Extensions/Metadata/InstructionMetadata.h"
|
||||
#include "GDCore/Extensions/Metadata/MetadataProvider.h"
|
||||
#include "GDCore/Extensions/Platform.h"
|
||||
#include "GDCore/Project/Layout.h"
|
||||
#include "GDCore/Project/Project.h"
|
||||
#include "GDCore/Tools/Localization.h"
|
||||
#include "GDCore/Tools/MakeUnique.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace gd {
|
||||
|
||||
gd::String ExpressionParser2::NUMBER_FIRST_CHAR = ".0123456789";
|
||||
gd::String ExpressionParser2::DOT = ".";
|
||||
gd::String ExpressionParser2::PARAMETERS_SEPARATOR = ",";
|
||||
gd::String ExpressionParser2::QUOTE = "\"";
|
||||
gd::String ExpressionParser2::BRACKETS = "()[]{}";
|
||||
gd::String ExpressionParser2::EXPRESSION_OPERATORS = "+-<>?^=\\:!";
|
||||
gd::String ExpressionParser2::TERM_OPERATORS = "/*";
|
||||
gd::String ExpressionParser2::UNARY_OPERATORS = "+-";
|
||||
gd::String ExpressionParser2::WHITESPACES = " \n\r";
|
||||
gd::String ExpressionParser2::NAMESPACE_SEPARATOR = "::";
|
||||
|
||||
ExpressionParser2::ExpressionParser2(
|
||||
const gd::Platform& platform_,
|
||||
const gd::ObjectsContainer& globalObjectsContainer_,
|
||||
const gd::ObjectsContainer& objectsContainer_)
|
||||
: expression(""),
|
||||
currentPosition(0),
|
||||
platform(platform_),
|
||||
globalObjectsContainer(globalObjectsContainer_),
|
||||
objectsContainer(objectsContainer_) {}
|
||||
|
||||
namespace {
|
||||
/**
|
||||
* Return the minimum number of parameters, starting from a given parameter
|
||||
* (by convention, 1 for object functions and 2 for behavior functions).
|
||||
*/
|
||||
size_t GetMinimumParametersNumber(
|
||||
const std::vector<gd::ParameterMetadata>& parameters,
|
||||
size_t initialParameterIndex) {
|
||||
size_t nb = 0;
|
||||
for (std::size_t i = initialParameterIndex; i < parameters.size(); ++i) {
|
||||
if (!parameters[i].optional && !parameters[i].codeOnly) nb++;
|
||||
}
|
||||
|
||||
return nb;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the maximum number of parameters, starting from a given parameter
|
||||
* (by convention, 1 for object functions and 2 for behavior functions).
|
||||
*/
|
||||
size_t GetMaximumParametersNumber(
|
||||
const std::vector<gd::ParameterMetadata>& parameters,
|
||||
size_t initialParameterIndex) {
|
||||
size_t nb = 0;
|
||||
for (std::size_t i = initialParameterIndex; i < parameters.size(); ++i) {
|
||||
if (!parameters[i].codeOnly) nb++;
|
||||
}
|
||||
|
||||
return nb;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
std::unique_ptr<ExpressionParserDiagnostic> ExpressionParser2::ValidateFunction(
|
||||
const gd::FunctionNode& function, size_t functionStartPosition) {
|
||||
if (gd::MetadataProvider::IsBadExpressionMetadata(
|
||||
function.expressionMetadata)) {
|
||||
return gd::make_unique<ExpressionParserError>(
|
||||
"invalid_function_name",
|
||||
_("Cannot find an expression with this name: ") +
|
||||
function.functionName + "\n" +
|
||||
_("Double check that you've not made any typo in the name."),
|
||||
functionStartPosition,
|
||||
GetCurrentPosition());
|
||||
}
|
||||
|
||||
size_t minParametersCount = GetMinimumParametersNumber(
|
||||
function.expressionMetadata.parameters,
|
||||
WrittenParametersFirstIndex(function.objectName, function.behaviorName));
|
||||
size_t maxParametersCount = GetMaximumParametersNumber(
|
||||
function.expressionMetadata.parameters,
|
||||
WrittenParametersFirstIndex(function.objectName, function.behaviorName));
|
||||
if (function.parameters.size() < minParametersCount ||
|
||||
function.parameters.size() > maxParametersCount) {
|
||||
gd::String expectedCountMessage =
|
||||
minParametersCount == maxParametersCount
|
||||
? _("The number of parameters must be exactly ") +
|
||||
gd::String::From(minParametersCount)
|
||||
: _("The number of parameters must be: ") +
|
||||
gd::String::From(minParametersCount) + "-" +
|
||||
gd::String::From(maxParametersCount);
|
||||
|
||||
if (function.parameters.size() < minParametersCount) {
|
||||
return gd::make_unique<ExpressionParserError>(
|
||||
"too_few_parameters",
|
||||
"You have not entered enough parameters for the expression. " +
|
||||
expectedCountMessage,
|
||||
functionStartPosition,
|
||||
GetCurrentPosition());
|
||||
}
|
||||
}
|
||||
|
||||
return gd::make_unique<ExpressionParserDiagnostic>();
|
||||
}
|
||||
|
||||
std::unique_ptr<TextNode> ExpressionParser2::ReadText() {
|
||||
SkipWhitespace();
|
||||
if (!IsAnyChar("\"")) {
|
||||
auto text = gd::make_unique<TextNode>("");
|
||||
text->diagnostic =
|
||||
RaiseSyntaxError(_("A text must start with a double quote (\")."));
|
||||
return text;
|
||||
}
|
||||
SkipChar();
|
||||
|
||||
gd::String parsedText = "";
|
||||
bool textParsingHasEnded = false;
|
||||
bool expectEscapedCharacter = false;
|
||||
while (!IsEndReached() && !textParsingHasEnded) {
|
||||
if (GetCurrentChar() == '"') {
|
||||
if (expectEscapedCharacter) {
|
||||
parsedText += '"';
|
||||
expectEscapedCharacter = false;
|
||||
} else {
|
||||
textParsingHasEnded = true;
|
||||
}
|
||||
} else if (GetCurrentChar() == '\\') {
|
||||
if (expectEscapedCharacter) {
|
||||
parsedText += '\\';
|
||||
expectEscapedCharacter = false;
|
||||
} else {
|
||||
expectEscapedCharacter = true;
|
||||
}
|
||||
} else {
|
||||
if (expectEscapedCharacter) {
|
||||
parsedText += '\\';
|
||||
}
|
||||
|
||||
parsedText += GetCurrentChar();
|
||||
}
|
||||
|
||||
currentPosition++;
|
||||
}
|
||||
|
||||
auto text = gd::make_unique<TextNode>(parsedText);
|
||||
if (!textParsingHasEnded) {
|
||||
text->diagnostic =
|
||||
RaiseSyntaxError(_("A text must end with a double quote (\"). Add a "
|
||||
"double quote to terminate the text."));
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
std::unique_ptr<NumberNode> ExpressionParser2::ReadNumber() {
|
||||
SkipWhitespace();
|
||||
gd::String parsedNumber;
|
||||
|
||||
bool numberHasStarted = false;
|
||||
bool digitFound = false;
|
||||
bool dotFound = false;
|
||||
while (!IsEndReached()) {
|
||||
if (IsAnyChar("0")) {
|
||||
numberHasStarted = true;
|
||||
digitFound = true;
|
||||
if (!parsedNumber.empty()) { // Ignore leading 0s.
|
||||
parsedNumber += GetCurrentChar();
|
||||
}
|
||||
} else if (IsAnyChar("123456789")) {
|
||||
numberHasStarted = true;
|
||||
digitFound = true;
|
||||
parsedNumber += GetCurrentChar();
|
||||
} else if (IsAnyChar(".") && !dotFound) {
|
||||
numberHasStarted = true;
|
||||
dotFound = true;
|
||||
if (parsedNumber == "") {
|
||||
parsedNumber += "0."; //Normalize by adding a leading 0, only in this case.
|
||||
} else {
|
||||
parsedNumber += ".";
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
currentPosition++;
|
||||
}
|
||||
|
||||
// parsedNumber can be empty in the only case where we have only seen
|
||||
// 0s (one or more), so normalize it to a single 0.
|
||||
if (parsedNumber.empty()) {
|
||||
parsedNumber = "0";
|
||||
}
|
||||
|
||||
// Note that parsedNumber can finish by a dot (1., 2., 0.). This is
|
||||
// valid in most languages so we allow this.
|
||||
|
||||
auto number = gd::make_unique<NumberNode>(parsedNumber);
|
||||
if (!numberHasStarted || !digitFound) {
|
||||
number->diagnostic = RaiseSyntaxError(
|
||||
_("A number was expected. You must enter a number here."));
|
||||
}
|
||||
|
||||
return number;
|
||||
}
|
||||
|
||||
} // namespace gd
|
765
Core/GDCore/Events/Parsers/ExpressionParser2.h
Normal file
@@ -0,0 +1,765 @@
|
||||
/*
|
||||
* GDevelop Core
|
||||
* Copyright 2008-present Florian Rival (Florian.Rival@gmail.com). All rights
|
||||
* reserved. This project is released under the MIT License.
|
||||
*/
|
||||
#ifndef GDCORE_EXPRESSIONPARSER2_H
|
||||
#define GDCORE_EXPRESSIONPARSER2_H
|
||||
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
#include "ExpressionParser2Node.h"
|
||||
#include "GDCore/Extensions/Metadata/ExpressionMetadata.h"
|
||||
#include "GDCore/Extensions/Metadata/MetadataProvider.h"
|
||||
#include "GDCore/Project/Layout.h" // For GetTypeOfObject and GetTypeOfBehavior
|
||||
#include "GDCore/String.h"
|
||||
#include "GDCore/Tools/Localization.h"
|
||||
#include "GDCore/Tools/MakeUnique.h"
|
||||
namespace gd {
|
||||
class Expression;
|
||||
class ObjectsContainer;
|
||||
class Platform;
|
||||
class ParameterMetadata;
|
||||
class ExpressionMetadata;
|
||||
} // namespace gd
|
||||
|
||||
namespace gd {
|
||||
|
||||
/** \brief Parse an expression, returning a tree of node corresponding
|
||||
* to the parsed expression.
|
||||
*
|
||||
* This is a LL(1) parser. This could be extracted to a generic/reusable
|
||||
* parser by refactoring out the dependency on gd::MetadataProvider (injecting
|
||||
* instead functions to be called to query supported functions).
|
||||
*
|
||||
* \see gd::ExpressionParserDiagnostic
|
||||
* \see gd::ExpressionNode
|
||||
*/
|
||||
class GD_CORE_API ExpressionParser2 {
|
||||
public:
|
||||
ExpressionParser2(const gd::Platform &platform_,
|
||||
const gd::ObjectsContainer &globalObjectsContainer_,
|
||||
const gd::ObjectsContainer &objectsContainer_);
|
||||
virtual ~ExpressionParser2(){};
|
||||
|
||||
/**
|
||||
* Parse the given expression with the specified type.
|
||||
*
|
||||
* \param type Type of the expression: "string", "number",
|
||||
* type supported by gd::ParameterMetadata::IsObject, types supported by
|
||||
* gd::ParameterMetadata::IsExpression or "unknown". \param expression The
|
||||
* expression to parse \param objectName Specify the object name, only for the
|
||||
* case of "objectvar" type.
|
||||
*
|
||||
* \return The node representing the expression as a parsed tree.
|
||||
*/
|
||||
std::unique_ptr<ExpressionNode> ParseExpression(
|
||||
const gd::String &type,
|
||||
const gd::String &expression_,
|
||||
const gd::String &objectName = "") {
|
||||
expression = expression_;
|
||||
|
||||
currentPosition = 0;
|
||||
return Start(type, objectName);
|
||||
}
|
||||
|
||||
private:
|
||||
/** \name Grammar
|
||||
* Each method is a part of the grammar.
|
||||
*/
|
||||
///@{
|
||||
std::unique_ptr<ExpressionNode> Start(const gd::String &type,
|
||||
const gd::String &objectName = "") {
|
||||
auto expression = Expression(type, objectName);
|
||||
|
||||
// Check for extra characters at the end of the expression
|
||||
if (!IsEndReached()) {
|
||||
auto op = gd::make_unique<OperatorNode>();
|
||||
op->op = ' ';
|
||||
op->leftHandSide = std::move(expression);
|
||||
op->rightHandSide = ReadUntilEnd("unknown");
|
||||
|
||||
op->rightHandSide->diagnostic = RaiseSyntaxError(
|
||||
_("The expression has extra character at the end that should be "
|
||||
"removed (or completed if your expression is not finished)."));
|
||||
return std::move(op);
|
||||
}
|
||||
|
||||
return expression;
|
||||
}
|
||||
|
||||
std::unique_ptr<ExpressionNode> Expression(
|
||||
const gd::String &type, const gd::String &objectName = "") {
|
||||
SkipWhitespace();
|
||||
|
||||
size_t expressionStartPosition = GetCurrentPosition();
|
||||
std::unique_ptr<ExpressionNode> leftHandSide = Term(type, objectName);
|
||||
|
||||
SkipWhitespace();
|
||||
|
||||
if (IsEndReached()) return leftHandSide;
|
||||
if (IsAnyChar(",)]")) return leftHandSide;
|
||||
if (IsAnyChar(EXPRESSION_OPERATORS)) {
|
||||
auto op = gd::make_unique<OperatorNode>();
|
||||
op->op = GetCurrentChar();
|
||||
op->leftHandSide = std::move(leftHandSide);
|
||||
op->diagnostic = ValidateOperator(type, GetCurrentChar());
|
||||
SkipChar();
|
||||
op->rightHandSide = Expression(type, objectName);
|
||||
return std::move(op);
|
||||
}
|
||||
|
||||
if (type == "string") {
|
||||
leftHandSide->diagnostic = RaiseSyntaxError(
|
||||
"You must add the operator + between texts or expressions. For "
|
||||
"example: \"Your name: \" + VariableString(PlayerName).");
|
||||
} else if (type == "number") {
|
||||
leftHandSide->diagnostic = RaiseSyntaxError(
|
||||
"No operator found. Did you forget to enter an operator (like +, -, "
|
||||
"* or /) between numbers or expressions?");
|
||||
} else {
|
||||
leftHandSide->diagnostic = RaiseSyntaxError(
|
||||
"More than one term was found. Verify that your expression is "
|
||||
"properly written.");
|
||||
}
|
||||
|
||||
auto op = gd::make_unique<OperatorNode>();
|
||||
op->op = ' ';
|
||||
op->leftHandSide = std::move(leftHandSide);
|
||||
op->rightHandSide = Expression(type, objectName);
|
||||
return std::move(op);
|
||||
}
|
||||
|
||||
std::unique_ptr<ExpressionNode> Term(const gd::String &type,
|
||||
const gd::String &objectName) {
|
||||
SkipWhitespace();
|
||||
|
||||
std::unique_ptr<ExpressionNode> factor = Factor(type, objectName);
|
||||
SkipWhitespace();
|
||||
|
||||
// This while loop is used instead of a recursion (like in Expression)
|
||||
// to guarantee the proper operator precedence. (Expression could also
|
||||
// be reworked to use a while loop).
|
||||
while (IsAnyChar(TERM_OPERATORS)) {
|
||||
auto op = gd::make_unique<OperatorNode>();
|
||||
op->op = GetCurrentChar();
|
||||
op->leftHandSide = std::move(factor);
|
||||
op->diagnostic = ValidateOperator(type, GetCurrentChar());
|
||||
SkipChar();
|
||||
op->rightHandSide = Factor(type, objectName);
|
||||
SkipWhitespace();
|
||||
|
||||
factor = std::move(op);
|
||||
}
|
||||
|
||||
return factor;
|
||||
};
|
||||
|
||||
std::unique_ptr<ExpressionNode> Factor(const gd::String &type,
|
||||
const gd::String &objectName) {
|
||||
SkipWhitespace();
|
||||
|
||||
size_t expressionStartPosition = GetCurrentPosition();
|
||||
std::unique_ptr<ExpressionNode> factor;
|
||||
|
||||
if (IsAnyChar(QUOTE)) {
|
||||
factor = ReadText();
|
||||
if (type == "number")
|
||||
factor->diagnostic =
|
||||
RaiseTypeError(_("You entered a text, but a number was expected."),
|
||||
expressionStartPosition);
|
||||
else if (type != "string")
|
||||
factor->diagnostic = RaiseTypeError(
|
||||
_("You entered a text, but this type was expected:") + type,
|
||||
expressionStartPosition);
|
||||
} else if (IsAnyChar(UNARY_OPERATORS)) {
|
||||
auto unaryOperator = gd::make_unique<UnaryOperatorNode>(GetCurrentChar());
|
||||
unaryOperator->diagnostic = ValidateUnaryOperator(type, GetCurrentChar());
|
||||
SkipChar();
|
||||
unaryOperator->factor = Factor(type, objectName);
|
||||
|
||||
factor = std::move(unaryOperator);
|
||||
} else if (IsAnyChar(NUMBER_FIRST_CHAR)) {
|
||||
factor = ReadNumber();
|
||||
if (type == "string")
|
||||
factor->diagnostic = RaiseTypeError(
|
||||
_("You entered a number, but a text was expected (in quotes)."),
|
||||
expressionStartPosition);
|
||||
else if (type != "number")
|
||||
factor->diagnostic = RaiseTypeError(
|
||||
_("You entered a number, but this type was expected:") + type,
|
||||
expressionStartPosition);
|
||||
} else if (IsAnyChar("(")) {
|
||||
SkipChar();
|
||||
factor = SubExpression(type, objectName);
|
||||
|
||||
if (!IsAnyChar(")")) {
|
||||
factor->diagnostic =
|
||||
RaiseSyntaxError(_("Missing a closing parenthesis. Add a closing "
|
||||
"parenthesis for each opening parenthesis."));
|
||||
}
|
||||
SkipIfIsAnyChar(")");
|
||||
} else if (IsIdentifierAllowedChar()) {
|
||||
// This is a place where the grammar differs according to the
|
||||
// type being expected.
|
||||
if (gd::ParameterMetadata::IsExpression("variable", type)) {
|
||||
factor = Variable(type, objectName);
|
||||
} else {
|
||||
factor = Identifier(type);
|
||||
}
|
||||
} else {
|
||||
factor = ReadUntilWhitespace(type);
|
||||
factor->diagnostic = RaiseEmptyError(type, expressionStartPosition);
|
||||
}
|
||||
|
||||
return factor;
|
||||
}
|
||||
|
||||
std::unique_ptr<SubExpressionNode> SubExpression(
|
||||
const gd::String &type, const gd::String &objectName) {
|
||||
return std::move(
|
||||
gd::make_unique<SubExpressionNode>(Expression(type, objectName)));
|
||||
};
|
||||
|
||||
std::unique_ptr<IdentifierOrFunctionOrEmptyNode> Identifier(
|
||||
const gd::String &type) {
|
||||
size_t identifierStartPosition = GetCurrentPosition();
|
||||
gd::String name = ReadIdentifierName();
|
||||
|
||||
SkipWhitespace();
|
||||
|
||||
if (IsNamespaceSeparator()) {
|
||||
SkipNamespaceSeparator();
|
||||
|
||||
name += NAMESPACE_SEPARATOR;
|
||||
name += ReadIdentifierName();
|
||||
}
|
||||
|
||||
if (IsAnyChar("(")) {
|
||||
SkipChar();
|
||||
return FreeFunction(type, name, identifierStartPosition);
|
||||
} else if (IsAnyChar(DOT)) {
|
||||
SkipChar();
|
||||
return ObjectFunctionOrBehaviorFunction(
|
||||
type, name, identifierStartPosition);
|
||||
} else {
|
||||
auto identifier = gd::make_unique<IdentifierNode>(name, type);
|
||||
if (type == "string") {
|
||||
identifier->diagnostic =
|
||||
RaiseTypeError(_("You must wrap your text inside double quotes "
|
||||
"(example: \"Hello world\")."),
|
||||
identifierStartPosition);
|
||||
} else if (type == "number") {
|
||||
identifier->diagnostic = RaiseTypeError(_("You must enter a number."),
|
||||
identifierStartPosition);
|
||||
} else if (!gd::ParameterMetadata::IsObject(type)) {
|
||||
identifier->diagnostic = RaiseTypeError(
|
||||
_("You've entered a name, but this type was expected:") + type,
|
||||
identifierStartPosition);
|
||||
}
|
||||
|
||||
return std::move(identifier);
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<VariableNode> Variable(const gd::String &type,
|
||||
const gd::String &objectName) {
|
||||
size_t identifierStartPosition = GetCurrentPosition();
|
||||
|
||||
gd::String name = ReadIdentifierName();
|
||||
auto variable = gd::make_unique<VariableNode>(type, name, objectName);
|
||||
variable->child = VariableAccessorOrVariableBracketAccessor();
|
||||
|
||||
return std::move(variable);
|
||||
}
|
||||
|
||||
std::unique_ptr<VariableAccessorOrVariableBracketAccessorNode>
|
||||
VariableAccessorOrVariableBracketAccessor() {
|
||||
std::unique_ptr<VariableAccessorOrVariableBracketAccessorNode> child;
|
||||
SkipWhitespace();
|
||||
if (IsAnyChar("[")) {
|
||||
SkipChar();
|
||||
child =
|
||||
gd::make_unique<VariableBracketAccessorNode>(Expression("string"));
|
||||
|
||||
if (!IsAnyChar("]")) {
|
||||
child->diagnostic =
|
||||
RaiseSyntaxError(_("Missing a closing bracket. Add a closing "
|
||||
"bracket for each opening bracket."));
|
||||
}
|
||||
SkipIfIsAnyChar("]");
|
||||
child->child = VariableAccessorOrVariableBracketAccessor();
|
||||
} else if (IsAnyChar(DOT)) {
|
||||
SkipChar();
|
||||
SkipWhitespace();
|
||||
|
||||
child = gd::make_unique<VariableAccessorNode>(ReadIdentifierName());
|
||||
child->child = VariableAccessorOrVariableBracketAccessor();
|
||||
}
|
||||
|
||||
return child;
|
||||
}
|
||||
|
||||
std::unique_ptr<FunctionNode> FreeFunction(const gd::String &type,
|
||||
const gd::String &functionFullName,
|
||||
size_t functionStartPosition) {
|
||||
// TODO: error if trying to use function for type != "number" && != "string"
|
||||
// + Test for it
|
||||
|
||||
// This could be improved to have the type passed to a single
|
||||
// GetExpressionMetadata function.
|
||||
const gd::ExpressionMetadata &metadata =
|
||||
type == "number" ? MetadataProvider::GetExpressionMetadata(
|
||||
platform, functionFullName)
|
||||
: MetadataProvider::GetStrExpressionMetadata(
|
||||
platform, functionFullName);
|
||||
|
||||
auto parametersAndError = Parameters(metadata.parameters);
|
||||
auto function = gd::make_unique<FunctionNode>(
|
||||
type, std::move(parametersAndError.first), metadata, functionFullName);
|
||||
function->diagnostic = std::move(parametersAndError.second);
|
||||
if (!function->diagnostic)
|
||||
function->diagnostic = ValidateFunction(*function, functionStartPosition);
|
||||
|
||||
return std::move(function);
|
||||
}
|
||||
|
||||
std::unique_ptr<FunctionOrEmptyNode> ObjectFunctionOrBehaviorFunction(
|
||||
const gd::String &type,
|
||||
const gd::String &objectName,
|
||||
size_t functionStartPosition) {
|
||||
gd::String objectFunctionOrBehaviorName = ReadIdentifierName();
|
||||
|
||||
SkipWhitespace();
|
||||
|
||||
if (IsNamespaceSeparator()) {
|
||||
SkipNamespaceSeparator();
|
||||
return BehaviorFunction(type,
|
||||
objectName,
|
||||
objectFunctionOrBehaviorName,
|
||||
functionStartPosition);
|
||||
} else if (IsAnyChar("(")) {
|
||||
SkipChar();
|
||||
|
||||
gd::String objectType =
|
||||
GetTypeOfObject(globalObjectsContainer, objectsContainer, objectName);
|
||||
|
||||
// This could be improved to have the type passed to a single
|
||||
// GetExpressionMetadata function.
|
||||
const gd::ExpressionMetadata &metadata =
|
||||
type == "number"
|
||||
? MetadataProvider::GetObjectExpressionMetadata(
|
||||
platform, objectType, objectFunctionOrBehaviorName)
|
||||
: MetadataProvider::GetObjectStrExpressionMetadata(
|
||||
platform, objectType, objectFunctionOrBehaviorName);
|
||||
|
||||
auto parametersAndError = Parameters(metadata.parameters, objectName);
|
||||
auto function =
|
||||
gd::make_unique<FunctionNode>(type,
|
||||
objectName,
|
||||
std::move(parametersAndError.first),
|
||||
metadata,
|
||||
objectFunctionOrBehaviorName);
|
||||
function->diagnostic = std::move(parametersAndError.second);
|
||||
if (!function->diagnostic)
|
||||
function->diagnostic =
|
||||
ValidateFunction(*function, functionStartPosition);
|
||||
|
||||
return std::move(function);
|
||||
}
|
||||
|
||||
auto node = gd::make_unique<EmptyNode>(type);
|
||||
node->diagnostic = RaiseSyntaxError(
|
||||
_("An opening parenthesis (for an object expression), or double colon "
|
||||
"(::) was expected (for a behavior expression)."));
|
||||
|
||||
return std::move(node);
|
||||
}
|
||||
|
||||
std::unique_ptr<FunctionOrEmptyNode> BehaviorFunction(
|
||||
const gd::String &type,
|
||||
const gd::String &objectName,
|
||||
const gd::String &behaviorName,
|
||||
size_t functionStartPosition) {
|
||||
gd::String functionName = ReadIdentifierName();
|
||||
|
||||
SkipWhitespace();
|
||||
|
||||
if (IsAnyChar("(")) {
|
||||
SkipChar();
|
||||
|
||||
gd::String behaviorType = GetTypeOfBehavior(
|
||||
globalObjectsContainer, objectsContainer, behaviorName);
|
||||
|
||||
// This could be improved to have the type passed to a single
|
||||
// GetExpressionMetadata function.
|
||||
const gd::ExpressionMetadata &metadata =
|
||||
type == "number" ? MetadataProvider::GetBehaviorExpressionMetadata(
|
||||
platform, behaviorType, functionName)
|
||||
: MetadataProvider::GetBehaviorStrExpressionMetadata(
|
||||
platform, behaviorType, functionName);
|
||||
|
||||
auto parametersAndError =
|
||||
Parameters(metadata.parameters, objectName, behaviorName);
|
||||
auto function =
|
||||
gd::make_unique<FunctionNode>(type,
|
||||
objectName,
|
||||
behaviorName,
|
||||
std::move(parametersAndError.first),
|
||||
metadata,
|
||||
functionName);
|
||||
function->diagnostic = std::move(parametersAndError.second);
|
||||
if (!function->diagnostic)
|
||||
function->diagnostic =
|
||||
ValidateFunction(*function, functionStartPosition);
|
||||
|
||||
return std::move(function);
|
||||
} else {
|
||||
auto node = gd::make_unique<EmptyNode>(type);
|
||||
node->diagnostic = RaiseSyntaxError(
|
||||
_("An opening parenthesis was expected here to call a function."));
|
||||
|
||||
return std::move(node);
|
||||
}
|
||||
}
|
||||
|
||||
std::pair<std::vector<std::unique_ptr<ExpressionNode>>,
|
||||
std::unique_ptr<gd::ExpressionParserError>>
|
||||
Parameters(std::vector<gd::ParameterMetadata> parameterMetadata,
|
||||
const gd::String &objectName = "",
|
||||
const gd::String &behaviorName = "") {
|
||||
std::vector<std::unique_ptr<ExpressionNode>> parameters;
|
||||
|
||||
// By convention, object is always the first parameter, and behavior the
|
||||
// second one.
|
||||
size_t parameterIndex =
|
||||
WrittenParametersFirstIndex(objectName, behaviorName);
|
||||
|
||||
while (!IsEndReached()) {
|
||||
SkipWhitespace();
|
||||
|
||||
if (IsAnyChar(")")) {
|
||||
SkipChar();
|
||||
return std::make_pair(std::move(parameters), nullptr);
|
||||
} else {
|
||||
if (parameterIndex < parameterMetadata.size()) {
|
||||
const gd::String &type = parameterMetadata[parameterIndex].GetType();
|
||||
if (parameterMetadata[parameterIndex].IsCodeOnly()) {
|
||||
// Do nothing, code only parameters are not written in expressions.
|
||||
} else if (gd::ParameterMetadata::IsExpression("number", type)) {
|
||||
parameters.push_back(Expression("number"));
|
||||
} else if (gd::ParameterMetadata::IsExpression("string", type)) {
|
||||
parameters.push_back(Expression("string"));
|
||||
} else if (gd::ParameterMetadata::IsExpression("variable", type)) {
|
||||
parameters.push_back(Expression(type, objectName));
|
||||
} else if (gd::ParameterMetadata::IsObject(type)) {
|
||||
parameters.push_back(Expression(type));
|
||||
} else if (gd::ParameterMetadata::IsBehavior(type)) {
|
||||
parameters.push_back(ReadText()); // TODO
|
||||
} else {
|
||||
size_t parameterStartPosition = GetCurrentPosition();
|
||||
parameters.push_back(Expression("unknown"));
|
||||
parameters.back()->diagnostic =
|
||||
gd::make_unique<ExpressionParserError>(
|
||||
"unknown_parameter_type",
|
||||
_("This function is improperly set up. Reach out to the "
|
||||
"extension developer or a GDevelop maintainer to fix "
|
||||
"this issue"),
|
||||
parameterStartPosition,
|
||||
GetCurrentPosition());
|
||||
}
|
||||
} else {
|
||||
size_t parameterStartPosition = GetCurrentPosition();
|
||||
parameters.push_back(Expression("unknown"));
|
||||
parameters.back()
|
||||
->diagnostic = gd::make_unique<ExpressionParserError>(
|
||||
"extra_parameter",
|
||||
_("This parameter was not expected by this expression. Remove it "
|
||||
"or verify that you've entered the proper expression name."),
|
||||
parameterStartPosition,
|
||||
GetCurrentPosition());
|
||||
}
|
||||
|
||||
SkipWhitespace();
|
||||
SkipIfIsAnyChar(PARAMETERS_SEPARATOR);
|
||||
parameterIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
return std::make_pair(
|
||||
std::move(parameters),
|
||||
RaiseSyntaxError(_("The list of parameters is not terminated. Add a "
|
||||
"closing parenthesis to end the parameters.")));
|
||||
}
|
||||
///@}
|
||||
|
||||
/** \name Validators
|
||||
* Return a diagnostic if any error is found
|
||||
*/
|
||||
///@{
|
||||
std::unique_ptr<ExpressionParserDiagnostic> ValidateFunction(
|
||||
const gd::FunctionNode &function, size_t functionStartPosition);
|
||||
|
||||
std::unique_ptr<ExpressionParserDiagnostic> ValidateOperator(
|
||||
const gd::String &type, gd::String::value_type operatorChar) {
|
||||
if (type == "number") {
|
||||
if (operatorChar == '+' || operatorChar == '-' || operatorChar == '/' ||
|
||||
operatorChar == '*') {
|
||||
return gd::make_unique<ExpressionParserDiagnostic>();
|
||||
}
|
||||
|
||||
return gd::make_unique<ExpressionParserError>(
|
||||
"invalid_operator",
|
||||
_("You've used an operator that is not supported. Operator should be "
|
||||
"either +, -, / or *."),
|
||||
GetCurrentPosition());
|
||||
} else if (type == "string") {
|
||||
if (operatorChar == '+') {
|
||||
return gd::make_unique<ExpressionParserDiagnostic>();
|
||||
}
|
||||
|
||||
return gd::make_unique<ExpressionParserError>(
|
||||
"invalid_operator",
|
||||
_("You've used an operator that is not supported. Only + can be used "
|
||||
"to concatenate texts."),
|
||||
GetCurrentPosition());
|
||||
} else if (gd::ParameterMetadata::IsObject(type)) {
|
||||
return gd::make_unique<ExpressionParserError>(
|
||||
"invalid_operator",
|
||||
_("Operators (+, -, /, *) can't be used with an object name. Remove the operator."),
|
||||
GetCurrentPosition());
|
||||
} else if (gd::ParameterMetadata::IsExpression("variable", type)) {
|
||||
return gd::make_unique<ExpressionParserError>(
|
||||
"invalid_operator",
|
||||
_("Operators (+, -, /, *) can't be used in variable names. Remove "
|
||||
"the operator from the variable name."),
|
||||
GetCurrentPosition());
|
||||
}
|
||||
|
||||
return gd::make_unique<ExpressionParserDiagnostic>();
|
||||
}
|
||||
|
||||
std::unique_ptr<ExpressionParserDiagnostic> ValidateUnaryOperator(
|
||||
const gd::String &type, gd::String::value_type operatorChar) {
|
||||
if (type == "number") {
|
||||
if (operatorChar == '+' || operatorChar == '-') {
|
||||
return gd::make_unique<ExpressionParserDiagnostic>();
|
||||
}
|
||||
|
||||
return gd::make_unique<ExpressionParserError>(
|
||||
"invalid_operator",
|
||||
_("You've used an \"unary\" operator that is not supported. Operator "
|
||||
"should be "
|
||||
"either + or -."),
|
||||
GetCurrentPosition());
|
||||
} else if (type == "string") {
|
||||
return gd::make_unique<ExpressionParserError>(
|
||||
"invalid_operator",
|
||||
_("You've used an operator that is not supported. Only + can be used "
|
||||
"to concatenate texts, and must be placed between two texts (or "
|
||||
"expressions)."),
|
||||
GetCurrentPosition());
|
||||
} else if (gd::ParameterMetadata::IsObject(type)) {
|
||||
return gd::make_unique<ExpressionParserError>(
|
||||
"invalid_operator",
|
||||
_("Operators (+, -) can't be used with an object name. Remove the operator."),
|
||||
GetCurrentPosition());
|
||||
} else if (gd::ParameterMetadata::IsExpression("variable", type)) {
|
||||
return gd::make_unique<ExpressionParserError>(
|
||||
"invalid_operator",
|
||||
_("Operators (+, -) can't be used in variable names. Remove "
|
||||
"the operator from the variable name."),
|
||||
GetCurrentPosition());
|
||||
}
|
||||
|
||||
return gd::make_unique<ExpressionParserDiagnostic>();
|
||||
}
|
||||
///@}
|
||||
|
||||
/** \name Parsing tokens
|
||||
* Read tokens or characters
|
||||
*/
|
||||
///@{
|
||||
void SkipChar() { currentPosition++; }
|
||||
|
||||
void SkipWhitespace() {
|
||||
while (currentPosition < expression.size() &&
|
||||
WHITESPACES.find(expression[currentPosition]) != gd::String::npos) {
|
||||
currentPosition++;
|
||||
}
|
||||
}
|
||||
|
||||
void SkipIfIsAnyChar(const gd::String &allowedCharacters) {
|
||||
if (IsAnyChar(allowedCharacters)) {
|
||||
currentPosition++;
|
||||
}
|
||||
}
|
||||
|
||||
void SkipNamespaceSeparator() {
|
||||
// Namespace separator is a special kind of delimiter as it is 2 characters
|
||||
// long
|
||||
if (IsNamespaceSeparator()) {
|
||||
currentPosition += NAMESPACE_SEPARATOR.size();
|
||||
}
|
||||
}
|
||||
|
||||
bool IsAnyChar(const gd::String &allowedCharacters) {
|
||||
if (currentPosition < expression.size() &&
|
||||
allowedCharacters.find(expression[currentPosition]) !=
|
||||
gd::String::npos) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsIdentifierAllowedChar() {
|
||||
if (currentPosition < expression.size() &&
|
||||
PARAMETERS_SEPARATOR.find(expression[currentPosition]) ==
|
||||
gd::String::npos &&
|
||||
DOT.find(expression[currentPosition]) == gd::String::npos &&
|
||||
QUOTE.find(expression[currentPosition]) == gd::String::npos &&
|
||||
BRACKETS.find(expression[currentPosition]) == gd::String::npos &&
|
||||
EXPRESSION_OPERATORS.find(expression[currentPosition]) ==
|
||||
gd::String::npos &&
|
||||
TERM_OPERATORS.find(expression[currentPosition]) == gd::String::npos) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsNamespaceSeparator() {
|
||||
// Namespace separator is a special kind of delimiter as it is 2 characters
|
||||
// long
|
||||
return (currentPosition + NAMESPACE_SEPARATOR.size() <= expression.size() &&
|
||||
expression.substr(currentPosition, NAMESPACE_SEPARATOR.size()) ==
|
||||
NAMESPACE_SEPARATOR);
|
||||
}
|
||||
|
||||
bool IsEndReached() { return currentPosition >= expression.size(); }
|
||||
|
||||
gd::String ReadIdentifierName() {
|
||||
gd::String name;
|
||||
while (currentPosition < expression.size() &&
|
||||
(IsIdentifierAllowedChar()
|
||||
// Allow whitespace in identifier name for compatibility
|
||||
|| expression[currentPosition] == ' ')) {
|
||||
name += expression[currentPosition];
|
||||
currentPosition++;
|
||||
}
|
||||
|
||||
// Trim whitespace at the end (we allow them for compatibility inside
|
||||
// the name, but after the last character that is not whitespace, they
|
||||
// should be ignore again).
|
||||
size_t lastCharacterPos = name.find_last_not_of(WHITESPACES);
|
||||
if (!name.empty() && (lastCharacterPos + 1) < name.size()) {
|
||||
name.erase(lastCharacterPos + 1);
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
std::unique_ptr<TextNode> ReadText();
|
||||
|
||||
std::unique_ptr<NumberNode> ReadNumber();
|
||||
|
||||
std::unique_ptr<EmptyNode> ReadUntilWhitespace(gd::String type) {
|
||||
gd::String text;
|
||||
while (currentPosition < expression.size() &&
|
||||
WHITESPACES.find(expression[currentPosition]) == gd::String::npos) {
|
||||
text += expression[currentPosition];
|
||||
currentPosition++;
|
||||
}
|
||||
|
||||
return gd::make_unique<EmptyNode>(type, text);
|
||||
}
|
||||
|
||||
std::unique_ptr<EmptyNode> ReadUntilEnd(gd::String type) {
|
||||
gd::String text;
|
||||
while (currentPosition < expression.size()) {
|
||||
text += expression[currentPosition];
|
||||
currentPosition++;
|
||||
}
|
||||
|
||||
return gd::make_unique<EmptyNode>(type, text);
|
||||
}
|
||||
|
||||
size_t GetCurrentPosition() { return currentPosition; }
|
||||
|
||||
gd::String::value_type GetCurrentChar() {
|
||||
if (currentPosition < expression.size()) {
|
||||
return expression[currentPosition];
|
||||
}
|
||||
|
||||
return '\n'; // Should not arise, unless GetCurrentChar was called when
|
||||
// IsEndReached() is true (which is a logical error).
|
||||
}
|
||||
///@}
|
||||
|
||||
/** \name Raising errors
|
||||
* Helpers to attach errors to nodes
|
||||
*/
|
||||
///@{
|
||||
std::unique_ptr<ExpressionParserError> RaiseSyntaxError(
|
||||
const gd::String &message) {
|
||||
return std::move(gd::make_unique<ExpressionParserError>(
|
||||
"syntax_error", message, GetCurrentPosition()));
|
||||
}
|
||||
|
||||
std::unique_ptr<ExpressionParserError> RaiseTypeError(
|
||||
const gd::String &message, size_t beginningPosition) {
|
||||
return std::move(gd::make_unique<ExpressionParserError>(
|
||||
"type_error", message, beginningPosition, GetCurrentPosition()));
|
||||
}
|
||||
|
||||
std::unique_ptr<ExpressionParserError> RaiseEmptyError(
|
||||
const gd::String &type, size_t beginningPosition) {
|
||||
gd::String message;
|
||||
if (type == "number") {
|
||||
message = _("You must enter a number or a valid expression call.");
|
||||
} else if (type == "string") {
|
||||
message = _(
|
||||
"You must enter a text (between quotes) or a valid expression call.");
|
||||
} else if (gd::ParameterMetadata::IsExpression("variable", type)) {
|
||||
message = _("You must enter a variable name.");
|
||||
} else if (gd::ParameterMetadata::IsObject(type)) {
|
||||
message = _("You must enter a valid object name.");
|
||||
} else {
|
||||
message = _("You must enter a valid expression.");
|
||||
}
|
||||
|
||||
return std::move(RaiseTypeError(message, beginningPosition));
|
||||
}
|
||||
///@}
|
||||
|
||||
static size_t WrittenParametersFirstIndex(const gd::String &objectName,
|
||||
const gd::String &behaviorName) {
|
||||
// By convention, object is always the first parameter, and behavior the
|
||||
// second one.
|
||||
return !behaviorName.empty() ? 2 : (!objectName.empty() ? 1 : 0);
|
||||
}
|
||||
|
||||
gd::String expression;
|
||||
std::size_t currentPosition;
|
||||
|
||||
const gd::Platform &platform;
|
||||
const gd::ObjectsContainer &globalObjectsContainer;
|
||||
const gd::ObjectsContainer &objectsContainer;
|
||||
|
||||
static gd::String NUMBER_FIRST_CHAR;
|
||||
static gd::String DOT;
|
||||
static gd::String PARAMETERS_SEPARATOR;
|
||||
static gd::String QUOTE;
|
||||
static gd::String BRACKETS;
|
||||
static gd::String EXPRESSION_OPERATORS;
|
||||
static gd::String TERM_OPERATORS;
|
||||
static gd::String UNARY_OPERATORS;
|
||||
static gd::String WHITESPACES;
|
||||
static gd::String NAMESPACE_SEPARATOR;
|
||||
};
|
||||
|
||||
} // namespace gd
|
||||
|
||||
#endif // GDCORE_EXPRESSIONPARSER2_H
|