Compare commits
336 Commits
Author | SHA1 | Date | |
---|---|---|---|
30fb41bb62 | |||
f808211bd3 | |||
bfedb5336e | |||
1cfa68a23f | |||
5c2ba27cc5 | |||
160a7dec30 | |||
efd3b160ad | |||
844aaa90dd | |||
dbe995abd8 | |||
532b64a1f0 | |||
63ac2d7e07 | |||
6454bf59c4 | |||
f522c759d6 | |||
6ea7014244 | |||
0d0cb02b85 | |||
0b2e9d4129 | |||
ba31625447 | |||
84769bc26e | |||
dd373e1d2d | |||
4dee6004c3 | |||
3da1b84016 | |||
44130c4cd7 | |||
e0bcf4f84c | |||
5d53bed86b | |||
7bab80da4f | |||
7e9d2e5f74 | |||
678fe13631 | |||
07e00cc906 | |||
7eb68dfa72 | |||
dd8daa7e3d | |||
b8a2210d0d | |||
50f0f350ed | |||
d2ce3d279c | |||
94e69dbdec | |||
7958673b8d | |||
4885d7c685 | |||
b66827c6de | |||
4aada212ac | |||
5d31353f69 | |||
6493e83dbe | |||
c76ce3b339 | |||
3ea06311df | |||
faacdc3b0e | |||
e789c16872 | |||
9f4250cbdc | |||
bd0c899654 | |||
eac0a5828c | |||
d9c11ad667 | |||
48efe503a7 | |||
1ac5daa456 | |||
dbe62ed3d5 | |||
307d620d45 | |||
9020e4c188 | |||
0a12e94847 | |||
254f2d0137 | |||
225633ffeb | |||
0275a524b2 | |||
0b0cbfc30d | |||
d552f2baa2 | |||
fea01d57c3 | |||
f9de81b2fb | |||
e61234d586 | |||
1a930f5886 | |||
3acf0bd148 | |||
9c8a3513a6 | |||
487d265b66 | |||
111b3bf587 | |||
6e7af3cbb4 | |||
54f4040a8d | |||
c3a5f9ae64 | |||
00a7134a89 | |||
6b859a45a1 | |||
95bff828d8 | |||
2ad64a73fb | |||
c7f95a96c7 | |||
fc5c63d53d | |||
cfc2428268 | |||
f6f440efc6 | |||
a3bf31527e | |||
94a1e77ee7 | |||
6778140a1d | |||
3cc6e1577e | |||
b451e97293 | |||
9e9b8e0e02 | |||
adbc99df96 | |||
ccaf9e4bba | |||
43db52473e | |||
f39f7b69a8 | |||
4632a3b939 | |||
0cf4e92bc9 | |||
b3cad882f8 | |||
891117fcfc | |||
4064951d55 | |||
f91a2f6009 | |||
e6cab1e0cb | |||
980220eb8c | |||
3e89966314 | |||
f70ef06c34 | |||
1b6bff8f52 | |||
1317156b5d | |||
5e42876e0b | |||
ce98d39d34 | |||
ca1b8144b5 | |||
bc36856032 | |||
3424a52ea0 | |||
6e93c37f87 | |||
2b4a68652e | |||
ad554b54ed | |||
0d94650b4b | |||
88382c2564 | |||
21581a6ce0 | |||
a9ca1f12f8 | |||
33992063e6 | |||
be029b9103 | |||
f471429ac3 | |||
06842eeafb | |||
f5a50d26a6 | |||
43c46cddd5 | |||
faad7fcd41 | |||
75e42b9bfe | |||
bcbafc57d9 | |||
a062b31ff7 | |||
a1e59a95e3 | |||
d82ea4335e | |||
2cc41d2152 | |||
6c3a78560a | |||
d01d270135 | |||
fe3242a16f | |||
6f46902445 | |||
6f68563d50 | |||
2e4e1545ad | |||
34357ed6eb | |||
7bddada9b8 | |||
c2b77dea53 | |||
5ebfea1c27 | |||
229f45d158 | |||
f1a0b784f6 | |||
2abb546c5e | |||
9e7d41f266 | |||
9371f59962 | |||
d1caa7cb3b | |||
c2bc4c553c | |||
11577515ff | |||
b6fa9c95e0 | |||
b22014b3f6 | |||
1bbc8c08cc | |||
e6e817bfcd | |||
1a3bbc297c | |||
86f537913b | |||
5138c91756 | |||
ea4cc45ac5 | |||
287815eaa6 | |||
7f3e0735f6 | |||
3aece8d7b8 | |||
0bbbb59a81 | |||
298bd2d106 | |||
1490c4324a | |||
6e2fdccb98 | |||
19989a475a | |||
1d281a1db4 | |||
f5dfead63c | |||
3c9851ecf5 | |||
2e1644be3e | |||
77bc863ab9 | |||
42d9505335 | |||
77d3bb2b99 | |||
b45799c532 | |||
fa0ef8e26c | |||
75e120ceb3 | |||
5ee58f3540 | |||
5b93b312f3 | |||
46699c20b6 | |||
44749e4a6f | |||
8ccb93508d | |||
e20efd56e2 | |||
01a9d6b1c5 | |||
990894af6f | |||
b595794a0d | |||
7273b617ff | |||
632fafaa3d | |||
293cce1fd0 | |||
03232752f1 | |||
01ca0392fe | |||
e91da861a6 | |||
ab22c78237 | |||
7be7a16357 | |||
5f38706175 | |||
94f6d4f48a | |||
f33428c251 | |||
92eec7385d | |||
d84f9f7df8 | |||
04d60a7200 | |||
cd2f2599b8 | |||
1ecaee5fd5 | |||
7f6acfc024 | |||
542c858831 | |||
04756d72ea | |||
000644204a | |||
82996f07b8 | |||
6d8c375365 | |||
0abe3cfdfc | |||
23350d196c | |||
0e2fbeffce | |||
9bba7de644 | |||
77dc891394 | |||
40a671c077 | |||
acba455634 | |||
bb92817774 | |||
ea4515f63c | |||
ad0018be8d | |||
5789abf09b | |||
fe8c7a712e | |||
552d6cb05f | |||
9a844b0315 | |||
0cab58d32f | |||
3fc18f8e1d | |||
6560b59eab | |||
4325aaecf2 | |||
b569e69297 | |||
210d090e23 | |||
471d51eddb | |||
c2733cadb6 | |||
da1d33b783 | |||
83746c58de | |||
702bd32dc3 | |||
1e46295288 | |||
a7fcfccada | |||
1baca41edd | |||
80fbc8f639 | |||
f0a236997f | |||
1b72284d26 | |||
049a853387 | |||
e83bae08cb | |||
8a073acf76 | |||
21ad90fd15 | |||
935d9cd4a6 | |||
6bcb491f0a | |||
bec114d53d | |||
9d07ec9eb6 | |||
dc8e1741c7 | |||
39c7d777ce | |||
1ee607d444 | |||
8a1bdcd6a1 | |||
a22695aa6a | |||
adf42abe46 | |||
840bca43d6 | |||
8b3556882a | |||
a5e7cd5209 | |||
be69fc5594 | |||
832b8cde5e | |||
769127e9da | |||
db4fa5147e | |||
d00ec173af | |||
af4410a16a | |||
1b441ad65d | |||
915c4088e7 | |||
bf8a93d1ea | |||
ce00a23475 | |||
9bd62966ca | |||
66364ff4ea | |||
551846181c | |||
cdcfc201d4 | |||
b94e674a8f | |||
032c9a5e91 | |||
ef1eb80553 | |||
af24b335ac | |||
7e2cae472e | |||
15c1764854 | |||
865851578d | |||
8add5d9f1b | |||
8addc1a84e | |||
8a2211e5f6 | |||
6caf433936 | |||
832d73d4da | |||
673ccb3726 | |||
df2fbc04b9 | |||
5a98b86dea | |||
03fb0c4f8c | |||
db62bf6714 | |||
429c0ae82f | |||
3332777cf9 | |||
c4379885b3 | |||
c750b5fd53 | |||
6e6a9575bf | |||
6e571ae742 | |||
d0e8e519a8 | |||
28b3d075f4 | |||
3d0e63f5a6 | |||
b9433d2cb7 | |||
412cf41cef | |||
0d23654379 | |||
865305ac0b | |||
86fa583a55 | |||
4e88d081d8 | |||
e912cd44e3 | |||
1713685108 | |||
627584f13d | |||
8ff2bfc20f | |||
ec3c7b2902 | |||
61afe48646 | |||
656fe783d4 | |||
00b385f433 | |||
dbecf900be | |||
9cc1b47a2a | |||
5024c51379 | |||
21435b9961 | |||
499806edc5 | |||
d8d02254ca | |||
36495518ac | |||
06521163f6 | |||
4fde0a8462 | |||
03213d9f04 | |||
8bdb599f06 | |||
3830ced287 | |||
e3a1b37130 | |||
e858cf8a74 | |||
a41605b9b3 | |||
293a68a083 | |||
4063a6178c | |||
2ff07a736e | |||
5309ac7550 | |||
66e61d6d45 | |||
3eb0e63a80 | |||
8ceaf407b3 | |||
c62c666fe1 | |||
70ff8fa6f7 | |||
7645341f35 | |||
b5b460440b | |||
cb2e34cbb4 | |||
8b5f3e1eea | |||
eaa3e40ef0 | |||
bcd6b8230b | |||
4d54a562fc | |||
942b3a155d | |||
7c4d4ff1dc | |||
e5cf76c49c |
70
.gitmodules
vendored
@ -1,70 +0,0 @@
|
||||
|
||||
[submodule "external/glew/glew"]
|
||||
path = external/glew/glew
|
||||
url = https://github.com/HeeroYui/glew.git
|
||||
[submodule "build"]
|
||||
path = build
|
||||
url = https://github.com/HeeroYui/Build.git
|
||||
[submodule "external/etk"]
|
||||
path = external/etk
|
||||
url = https://github.com/HeeroYui/etk.git
|
||||
[submodule "external/agg"]
|
||||
path = external/agg
|
||||
url = https://github.com/HeeroYui/libagg.git
|
||||
[submodule "external/portaudio"]
|
||||
path = external/portaudio
|
||||
url = https://github.com/HeeroYui/libportaudio.git
|
||||
[submodule "external/freetype"]
|
||||
path = external/freetype
|
||||
url = https://github.com/HeeroYui/libfreetype.git
|
||||
[submodule "external/png"]
|
||||
path = external/png
|
||||
url = https://github.com/HeeroYui/libpng.git
|
||||
[submodule "external/ogg"]
|
||||
path = external/ogg
|
||||
url = https://github.com/HeeroYui/libogg.git
|
||||
[submodule "external/lua"]
|
||||
path = external/lua
|
||||
url = https://github.com/HeeroYui/liblua.git
|
||||
[submodule "external/z/zlib"]
|
||||
path = external/z/zlib
|
||||
url = https://github.com/madler/zlib.git
|
||||
[submodule "external/bullet/bullet"]
|
||||
path = external/bullet/bullet
|
||||
url = https://github.com/HeeroYui/bullet.git
|
||||
[submodule "external/esvg"]
|
||||
path = external/esvg
|
||||
url = https://github.com/HeeroYui/esvg.git
|
||||
[submodule "external/exml"]
|
||||
path = external/exml
|
||||
url = https://github.com/HeeroYui/exml.git
|
||||
[submodule "external/egami"]
|
||||
path = external/egami
|
||||
url = https://github.com/HeeroYui/egami.git
|
||||
[submodule "external/ejson"]
|
||||
path = external/ejson
|
||||
url = https://github.com/HeeroYui/ejson.git
|
||||
[submodule "external/ege"]
|
||||
path = external/ege
|
||||
url = https://github.com/HeeroYui/ege.git
|
||||
[submodule "monk"]
|
||||
path = monk
|
||||
url = https://github.com/HeeroYui/monk.git
|
||||
[submodule "external/rtaudio/rtaudio"]
|
||||
path = external/rtaudio/rtaudio
|
||||
url = https://github.com/HeeroYui/rtaudio.git
|
||||
[submodule "external/eaudiofx"]
|
||||
path = external/eaudiofx
|
||||
url = https://github.com/HeeroYui/eaudiofx.git
|
||||
[submodule "external/airtaudio"]
|
||||
path = external/airtaudio
|
||||
url = https://github.com/HeeroYui/AirTAudio.git
|
||||
[submodule "external/ewolsa"]
|
||||
path = external/ewolsa
|
||||
url = https://github.com/HeeroYui/ewolsa.git
|
||||
[submodule "ios-deploy"]
|
||||
path = ios-deploy
|
||||
url = https://github.com/HeeroYui/ios-deploy.git
|
||||
[submodule "external/enet"]
|
||||
path = external/enet
|
||||
url = https://github.com/HeeroYui/enet.git
|
100
.travis.yml
@ -1,37 +1,95 @@
|
||||
# language type:
|
||||
language: cpp
|
||||
|
||||
# compilator system:
|
||||
compiler:
|
||||
- clang
|
||||
- gcc
|
||||
sudo: required
|
||||
dist: trusty
|
||||
|
||||
# build branch requested
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- dev
|
||||
|
||||
# previous actions:
|
||||
before_script:
|
||||
- git submodule init
|
||||
- git submodule update
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-4.9
|
||||
- expect
|
||||
- binutils-mingw-w64-x86-64 # 64bit MinGW
|
||||
- gcc-mingw-w64-x86-64
|
||||
- g++-mingw-w64-x86-64
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- os: linux
|
||||
env: CONF=release BUILDER=gcc TARGET=Linux TAG=Linux COMPILATOR_OPTION="--compilator-version=4.9"
|
||||
compiler: gcc
|
||||
- os: linux
|
||||
env: CONF=debug BUILDER=clang TARGET=Linux
|
||||
compiler: clang
|
||||
- os: linux
|
||||
env: CONF=release BUILDER=gcc TARGET=Windows TAG=Mingw
|
||||
compiler: x86_64-w64-mingw32-gcc
|
||||
- os: linux
|
||||
env: CONF=release BUILDER=gcc TARGET=Android TAG=Android DISABLE_PACKAGE=-p
|
||||
compiler: gcc
|
||||
- os: osx
|
||||
env: CONF=release BUILDER=clang TARGET=MacOs TAG=MacOs
|
||||
compiler: clang
|
||||
- os: osx
|
||||
env: CONF=release BUILDER=clang TARGET=IOs TAG=IOs
|
||||
compiler: clang
|
||||
|
||||
|
||||
install:
|
||||
- if [ "$CXX" == "g++" ]; then sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y; fi
|
||||
- if [ "$CXX" == "g++" ]; then sudo apt-get update -qq; fi
|
||||
- if [ "$CXX" == "g++" ]; then sudo apt-get install -qq g++-4.8; fi
|
||||
- if [ "$CXX" == "g++" ]; then sudo rm /usr/bin/gcc /usr/bin/g++; fi
|
||||
- if [ "$CXX" == "g++" ]; then sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc; fi
|
||||
- if [ "$CXX" == "g++" ]; then sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++; fi
|
||||
- cd ..
|
||||
- pip install --user lutin
|
||||
- if [ "$TAG" == "Android" ]; then
|
||||
git clone --depth 1 --branch master https://github.com/HeeroYui/android-download-tool;
|
||||
./android-download-tool/dl-android.sh;
|
||||
fi
|
||||
- git clone --depth 1 --branch master https://github.com/atria-soft/ci.git
|
||||
- cd -
|
||||
|
||||
before_script:
|
||||
- cd ..
|
||||
- mkdir bin
|
||||
- curl https://storage.googleapis.com/git-repo-downloads/repo > bin/repo
|
||||
- chmod a+x bin/repo
|
||||
- git config --global user.email "travis@travis.com"
|
||||
- git config --global user.name "Travis"
|
||||
- git config --global color.ui "auto"
|
||||
- git config --global core.editor "vi"
|
||||
- mkdir WORKING_DIRECTORY
|
||||
- cd WORKING_DIRECTORY
|
||||
- ../bin/repo init -u https://github.com/atria-soft/manifest.git
|
||||
- ../bin/repo sync -j4
|
||||
- ../bin/repo forall -c git checkout master
|
||||
- ../bin/repo forall -c git checkout $TRAVIS_BRANCH; STATUS=$?
|
||||
- rm -rf atria-soft/ewol
|
||||
- cd ..
|
||||
- pwd
|
||||
- ls -l
|
||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
export PATH=$PATH:/Users/travis/Library/Python/2.7/bin/;
|
||||
fi
|
||||
- ./ci/build_send.py --tag=$TAG --status=START;
|
||||
|
||||
# build sequence with Lutin :
|
||||
script:
|
||||
- if [ "$CXX" == "clang++" ]; then ./build/lutin.py -cclang -mdebug -p ewol; fi
|
||||
- if [ "$CXX" == "g++" ]; then ./build/lutin.py -cgcc -mdebug -p ewol; fi
|
||||
script:
|
||||
- lutin -w -j4 -C -P -t$TARGET -c $BUILDER $COMPILATOR_OPTION $BUS -m $CONF $GCOV $DISABLE_PACKAGE ewol-test ewol-sample-*; STATUS=$?
|
||||
- ./ci/build_send.py --tag=$TAG --status="$STATUS";
|
||||
|
||||
after_script:
|
||||
- if [ "$GCOV" != "" ]; then
|
||||
./ci/warning_send.py --find-path ./out/Linux_x86_64/$CONF/build/$BUILDER/ewol/;
|
||||
fi
|
||||
- ./out/Linux_x86_64/$CONF/staging/$BUILDER/ewol-test/ewol-test.app/bin/ewol-test --elog-level=6 | tee out_test.txt
|
||||
- if [ "$GCOV" != "" ]; then
|
||||
./ci/test_send.py --file=out_test.txt;
|
||||
lutin -C -P -t $TARGET -c $BUILDER $COMPILATOR_OPTION $BUS -m $CONF -p ewol?gcov;
|
||||
./ci/coverage_send.py --json=out/Linux_x86_64/$CONF/build/$BUILDER/ewol/ewol_coverage.json;
|
||||
fi
|
||||
|
||||
#send e-mail on compilation result:
|
||||
notifications:
|
||||
email:
|
||||
- yui.heero@gmail.com
|
||||
|
@ -1,8 +0,0 @@
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
# include external sub libs :
|
||||
SUBDIRS(external)
|
||||
#include ewol sources
|
||||
SUBDIRS(sources)
|
||||
|
||||
#add_subdirectory
|
373
LICENSE
Normal file
@ -0,0 +1,373 @@
|
||||
Mozilla Public License Version 2.0
|
||||
==================================
|
||||
|
||||
1. Definitions
|
||||
--------------
|
||||
|
||||
1.1. "Contributor"
|
||||
means each individual or legal entity that creates, contributes to
|
||||
the creation of, or owns Covered Software.
|
||||
|
||||
1.2. "Contributor Version"
|
||||
means the combination of the Contributions of others (if any) used
|
||||
by a Contributor and that particular Contributor's Contribution.
|
||||
|
||||
1.3. "Contribution"
|
||||
means Covered Software of a particular Contributor.
|
||||
|
||||
1.4. "Covered Software"
|
||||
means Source Code Form to which the initial Contributor has attached
|
||||
the notice in Exhibit A, the Executable Form of such Source Code
|
||||
Form, and Modifications of such Source Code Form, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.5. "Incompatible With Secondary Licenses"
|
||||
means
|
||||
|
||||
(a) that the initial Contributor has attached the notice described
|
||||
in Exhibit B to the Covered Software; or
|
||||
|
||||
(b) that the Covered Software was made available under the terms of
|
||||
version 1.1 or earlier of the License, but not also under the
|
||||
terms of a Secondary License.
|
||||
|
||||
1.6. "Executable Form"
|
||||
means any form of the work other than Source Code Form.
|
||||
|
||||
1.7. "Larger Work"
|
||||
means a work that combines Covered Software with other material, in
|
||||
a separate file or files, that is not Covered Software.
|
||||
|
||||
1.8. "License"
|
||||
means this document.
|
||||
|
||||
1.9. "Licensable"
|
||||
means having the right to grant, to the maximum extent possible,
|
||||
whether at the time of the initial grant or subsequently, any and
|
||||
all of the rights conveyed by this License.
|
||||
|
||||
1.10. "Modifications"
|
||||
means any of the following:
|
||||
|
||||
(a) any file in Source Code Form that results from an addition to,
|
||||
deletion from, or modification of the contents of Covered
|
||||
Software; or
|
||||
|
||||
(b) any new file in Source Code Form that contains any Covered
|
||||
Software.
|
||||
|
||||
1.11. "Patent Claims" of a Contributor
|
||||
means any patent claim(s), including without limitation, method,
|
||||
process, and apparatus claims, in any patent Licensable by such
|
||||
Contributor that would be infringed, but for the grant of the
|
||||
License, by the making, using, selling, offering for sale, having
|
||||
made, import, or transfer of either its Contributions or its
|
||||
Contributor Version.
|
||||
|
||||
1.12. "Secondary License"
|
||||
means either the GNU General Public License, Version 2.0, the GNU
|
||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||
Public License, Version 3.0, or any later versions of those
|
||||
licenses.
|
||||
|
||||
1.13. "Source Code Form"
|
||||
means the form of the work preferred for making modifications.
|
||||
|
||||
1.14. "You" (or "Your")
|
||||
means an individual or a legal entity exercising rights under this
|
||||
License. For legal entities, "You" includes any entity that
|
||||
controls, is controlled by, or is under common control with You. For
|
||||
purposes of this definition, "control" means (a) the power, direct
|
||||
or indirect, to cause the direction or management of such entity,
|
||||
whether by contract or otherwise, or (b) ownership of more than
|
||||
fifty percent (50%) of the outstanding shares or beneficial
|
||||
ownership of such entity.
|
||||
|
||||
2. License Grants and Conditions
|
||||
--------------------------------
|
||||
|
||||
2.1. Grants
|
||||
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license:
|
||||
|
||||
(a) under intellectual property rights (other than patent or trademark)
|
||||
Licensable by such Contributor to use, reproduce, make available,
|
||||
modify, display, perform, distribute, and otherwise exploit its
|
||||
Contributions, either on an unmodified basis, with Modifications, or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||
for sale, have made, import, and otherwise transfer either its
|
||||
Contributions or its Contributor Version.
|
||||
|
||||
2.2. Effective Date
|
||||
|
||||
The licenses granted in Section 2.1 with respect to any Contribution
|
||||
become effective for each Contribution on the date the Contributor first
|
||||
distributes such Contribution.
|
||||
|
||||
2.3. Limitations on Grant Scope
|
||||
|
||||
The licenses granted in this Section 2 are the only rights granted under
|
||||
this License. No additional rights or licenses will be implied from the
|
||||
distribution or licensing of Covered Software under this License.
|
||||
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||
Contributor:
|
||||
|
||||
(a) for any code that a Contributor has removed from Covered Software;
|
||||
or
|
||||
|
||||
(b) for infringements caused by: (i) Your and any other third party's
|
||||
modifications of Covered Software, or (ii) the combination of its
|
||||
Contributions with other software (except as part of its Contributor
|
||||
Version); or
|
||||
|
||||
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||
its Contributions.
|
||||
|
||||
This License does not grant any rights in the trademarks, service marks,
|
||||
or logos of any Contributor (except as may be necessary to comply with
|
||||
the notice requirements in Section 3.4).
|
||||
|
||||
2.4. Subsequent Licenses
|
||||
|
||||
No Contributor makes additional grants as a result of Your choice to
|
||||
distribute the Covered Software under a subsequent version of this
|
||||
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||
permitted under the terms of Section 3.3).
|
||||
|
||||
2.5. Representation
|
||||
|
||||
Each Contributor represents that the Contributor believes its
|
||||
Contributions are its original creation(s) or it has sufficient rights
|
||||
to grant the rights to its Contributions conveyed by this License.
|
||||
|
||||
2.6. Fair Use
|
||||
|
||||
This License is not intended to limit any rights You have under
|
||||
applicable copyright doctrines of fair use, fair dealing, or other
|
||||
equivalents.
|
||||
|
||||
2.7. Conditions
|
||||
|
||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||
in Section 2.1.
|
||||
|
||||
3. Responsibilities
|
||||
-------------------
|
||||
|
||||
3.1. Distribution of Source Form
|
||||
|
||||
All distribution of Covered Software in Source Code Form, including any
|
||||
Modifications that You create or to which You contribute, must be under
|
||||
the terms of this License. You must inform recipients that the Source
|
||||
Code Form of the Covered Software is governed by the terms of this
|
||||
License, and how they can obtain a copy of this License. You may not
|
||||
attempt to alter or restrict the recipients' rights in the Source Code
|
||||
Form.
|
||||
|
||||
3.2. Distribution of Executable Form
|
||||
|
||||
If You distribute Covered Software in Executable Form then:
|
||||
|
||||
(a) such Covered Software must also be made available in Source Code
|
||||
Form, as described in Section 3.1, and You must inform recipients of
|
||||
the Executable Form how they can obtain a copy of such Source Code
|
||||
Form by reasonable means in a timely manner, at a charge no more
|
||||
than the cost of distribution to the recipient; and
|
||||
|
||||
(b) You may distribute such Executable Form under the terms of this
|
||||
License, or sublicense it under different terms, provided that the
|
||||
license for the Executable Form does not attempt to limit or alter
|
||||
the recipients' rights in the Source Code Form under this License.
|
||||
|
||||
3.3. Distribution of a Larger Work
|
||||
|
||||
You may create and distribute a Larger Work under terms of Your choice,
|
||||
provided that You also comply with the requirements of this License for
|
||||
the Covered Software. If the Larger Work is a combination of Covered
|
||||
Software with a work governed by one or more Secondary Licenses, and the
|
||||
Covered Software is not Incompatible With Secondary Licenses, this
|
||||
License permits You to additionally distribute such Covered Software
|
||||
under the terms of such Secondary License(s), so that the recipient of
|
||||
the Larger Work may, at their option, further distribute the Covered
|
||||
Software under the terms of either this License or such Secondary
|
||||
License(s).
|
||||
|
||||
3.4. Notices
|
||||
|
||||
You may not remove or alter the substance of any license notices
|
||||
(including copyright notices, patent notices, disclaimers of warranty,
|
||||
or limitations of liability) contained within the Source Code Form of
|
||||
the Covered Software, except that You may alter any license notices to
|
||||
the extent required to remedy known factual inaccuracies.
|
||||
|
||||
3.5. Application of Additional Terms
|
||||
|
||||
You may choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of Covered
|
||||
Software. However, You may do so only on Your own behalf, and not on
|
||||
behalf of any Contributor. You must make it absolutely clear that any
|
||||
such warranty, support, indemnity, or liability obligation is offered by
|
||||
You alone, and You hereby agree to indemnify every Contributor for any
|
||||
liability incurred by such Contributor as a result of warranty, support,
|
||||
indemnity or liability terms You offer. You may include additional
|
||||
disclaimers of warranty and limitations of liability specific to any
|
||||
jurisdiction.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation
|
||||
---------------------------------------------------
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Software due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description must
|
||||
be placed in a text file included with all distributions of the Covered
|
||||
Software under this License. Except to the extent prohibited by statute
|
||||
or regulation, such description must be sufficiently detailed for a
|
||||
recipient of ordinary skill to be able to understand it.
|
||||
|
||||
5. Termination
|
||||
--------------
|
||||
|
||||
5.1. The rights granted under this License will terminate automatically
|
||||
if You fail to comply with any of its terms. However, if You become
|
||||
compliant, then the rights granted under this License from a particular
|
||||
Contributor are reinstated (a) provisionally, unless and until such
|
||||
Contributor explicitly and finally terminates Your grants, and (b) on an
|
||||
ongoing basis, if such Contributor fails to notify You of the
|
||||
non-compliance by some reasonable means prior to 60 days after You have
|
||||
come back into compliance. Moreover, Your grants from a particular
|
||||
Contributor are reinstated on an ongoing basis if such Contributor
|
||||
notifies You of the non-compliance by some reasonable means, this is the
|
||||
first time You have received notice of non-compliance with this License
|
||||
from such Contributor, and You become compliant prior to 30 days after
|
||||
Your receipt of the notice.
|
||||
|
||||
5.2. If You initiate litigation against any entity by asserting a patent
|
||||
infringement claim (excluding declaratory judgment actions,
|
||||
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||
directly or indirectly infringes any patent, then the rights granted to
|
||||
You by any and all Contributors for the Covered Software under Section
|
||||
2.1 of this License shall terminate.
|
||||
|
||||
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
||||
end user license agreements (excluding distributors and resellers) which
|
||||
have been validly granted by You or Your distributors under this License
|
||||
prior to termination shall survive termination.
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 6. Disclaimer of Warranty *
|
||||
* ------------------------- *
|
||||
* *
|
||||
* Covered Software is provided under this License on an "as is" *
|
||||
* basis, without warranty of any kind, either expressed, implied, or *
|
||||
* statutory, including, without limitation, warranties that the *
|
||||
* Covered Software is free of defects, merchantable, fit for a *
|
||||
* particular purpose or non-infringing. The entire risk as to the *
|
||||
* quality and performance of the Covered Software is with You. *
|
||||
* Should any Covered Software prove defective in any respect, You *
|
||||
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||
* essential part of this License. No use of any Covered Software is *
|
||||
* authorized under this License except under this disclaimer. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 7. Limitation of Liability *
|
||||
* -------------------------- *
|
||||
* *
|
||||
* Under no circumstances and under no legal theory, whether tort *
|
||||
* (including negligence), contract, or otherwise, shall any *
|
||||
* Contributor, or anyone who distributes Covered Software as *
|
||||
* permitted above, be liable to You for any direct, indirect, *
|
||||
* special, incidental, or consequential damages of any character *
|
||||
* including, without limitation, damages for lost profits, loss of *
|
||||
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||
* and all other commercial damages or losses, even if such party *
|
||||
* shall have been informed of the possibility of such damages. This *
|
||||
* limitation of liability shall not apply to liability for death or *
|
||||
* personal injury resulting from such party's negligence to the *
|
||||
* extent applicable law prohibits such limitation. Some *
|
||||
* jurisdictions do not allow the exclusion or limitation of *
|
||||
* incidental or consequential damages, so this exclusion and *
|
||||
* limitation may not apply to You. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
8. Litigation
|
||||
-------------
|
||||
|
||||
Any litigation relating to this License may be brought only in the
|
||||
courts of a jurisdiction where the defendant maintains its principal
|
||||
place of business and such litigation shall be governed by laws of that
|
||||
jurisdiction, without reference to its conflict-of-law provisions.
|
||||
Nothing in this Section shall prevent a party's ability to bring
|
||||
cross-claims or counter-claims.
|
||||
|
||||
9. Miscellaneous
|
||||
----------------
|
||||
|
||||
This License represents the complete agreement concerning the subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. Any law or regulation which provides
|
||||
that the language of a contract shall be construed against the drafter
|
||||
shall not be used to construe this License against a Contributor.
|
||||
|
||||
10. Versions of the License
|
||||
---------------------------
|
||||
|
||||
10.1. New Versions
|
||||
|
||||
Mozilla Foundation is the license steward. Except as provided in Section
|
||||
10.3, no one other than the license steward has the right to modify or
|
||||
publish new versions of this License. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
10.2. Effect of New Versions
|
||||
|
||||
You may distribute the Covered Software under the terms of the version
|
||||
of the License under which You originally received the Covered Software,
|
||||
or under the terms of any subsequent version published by the license
|
||||
steward.
|
||||
|
||||
10.3. Modified Versions
|
||||
|
||||
If you create software not governed by this License, and you want to
|
||||
create a new license for such software, you may create and use a
|
||||
modified version of this License if you rename the license and remove
|
||||
any references to the name of the license steward (except to note that
|
||||
such modified license differs from this License).
|
||||
|
||||
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||
Licenses
|
||||
|
||||
If You choose to distribute Source Code Form that is Incompatible With
|
||||
Secondary Licenses under the terms of this version of the License, the
|
||||
notice described in Exhibit B of this License must be attached.
|
||||
|
||||
Exhibit A - Source Code Form License Notice
|
||||
-------------------------------------------
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
file in a relevant directory) where a recipient would be likely to look
|
||||
for such a notice.
|
||||
|
||||
You may add additional accurate notices of copyright ownership.
|
||||
|
||||
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||
---------------------------------------------------------
|
||||
|
||||
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
defined by the Mozilla Public License, v. 2.0.
|
120
README.md
@ -3,44 +3,122 @@ Ewol
|
||||
|
||||
`Ewol` (Edn Widget OpenGl Layer) is a FREE software.
|
||||
|
||||
Release (master)
|
||||
----------------
|
||||
|
||||
[](https://travis-ci.org/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
|
||||
Developement (dev)
|
||||
------------------
|
||||
|
||||
[](https://travis-ci.org/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
[](http://atria-soft.com/ci/atria-soft/ewol)
|
||||
|
||||
Instructions
|
||||
============
|
||||
|
||||
download the software :
|
||||
download Build system:
|
||||
----------------------
|
||||
|
||||
git clone git://github.com/HeeroYui/ewol.git
|
||||
cd ewol
|
||||
git submodule init
|
||||
git submodule update
|
||||
sudo pip install lutin
|
||||
sudo pip install pillow
|
||||
|
||||
Compile software and install :
|
||||
need google repo:
|
||||
-----------------
|
||||
|
||||
For this you might use a project that create binaries or something else ...
|
||||
Show http://github.com/HeeroYui/edn project
|
||||
see: http://source.android.com/source/downloading.html#installing-repo
|
||||
|
||||
mkdir ~/.bin
|
||||
PATH=~/.bin:$PATH
|
||||
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
|
||||
chmod a+x ~/.bin/repo
|
||||
|
||||
|
||||
download the software:
|
||||
----------------------
|
||||
|
||||
mkdir WORKING_DIRECTORY
|
||||
cd WORKING_DIRECTORY
|
||||
repo init -u git://github.com/atria-soft/manifest.git
|
||||
repo sync -j8
|
||||
|
||||
|
||||
Compile software and test:
|
||||
--------------------------
|
||||
|
||||
lutin ewol-*
|
||||
|
||||
Dependency packages
|
||||
===================
|
||||
|
||||
sudo apt-get install g++ libgl1-mesa-dev zlib1g-dev libasound2-dev
|
||||
# if you want to compile with clang :
|
||||
sudo apt-get install clang
|
||||
# For andoid compilation (jdk 7 does not work...)
|
||||
sudo apt-get install javacc openjdk-6-jdk
|
||||
# if you want to compile for windows :
|
||||
sudo apt-get install mingw32
|
||||
# on 64 bits processor for compatibility
|
||||
sudo apt-get install ia32-libs
|
||||
Ubuntu Or Debian:
|
||||
|
||||
License (APACHE v2.0)
|
||||
=====================
|
||||
sudo apt-get install g++ libgl1-mesa-dev zlib1g-dev libasound2-dev
|
||||
# Compile with Clang:
|
||||
sudo apt-get install clang
|
||||
# For andoid compilation (jdk 7 does not work...):
|
||||
sudo apt-get install javacc openjdk-6-jdk
|
||||
# Cross compile for windows:
|
||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||
sudo apt-get update
|
||||
sudo apt-get install gcc-mingw-w64
|
||||
# On 64 bits processor for compatibility:
|
||||
sudo apt-get install ia32-libs
|
||||
sudo apt-get install g++-multilib libc6-dev-i386
|
||||
|
||||
Arch-linux:
|
||||
|
||||
# Cross compile for windows:
|
||||
pacman -S mingw-w64-gcc
|
||||
|
||||
# Cross compile for Android:
|
||||
in /etc/pacman.conf file uncomment:
|
||||
[multilib]
|
||||
Include = /etc/pacman.d/mirrorlist
|
||||
# update the system:
|
||||
Pacman -Syu
|
||||
# install lib C:
|
||||
pacman -S lib32-glibc lib32-zlib lib32-gcc-libs
|
||||
# install open-jdk 7.0
|
||||
pacman -S jdk7-openjdk
|
||||
# connect adb: (and you can do a "android/sdk/platform-tools/adb shell" to enable computer key on device)
|
||||
pacman -S android-udev
|
||||
|
||||
|
||||
Simple framework overview
|
||||
=========================
|
||||
|
||||

|
||||
|
||||
License (MPL v2.0)
|
||||
==================
|
||||
|
||||
Copyright ewol Edouard DUPIN
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
Licensed under the Mozilla Public License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
https://www.mozilla.org/MPL/2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
|
1
authors.txt
Normal file
@ -0,0 +1 @@
|
||||
MR Edouard DUPIN <yui.heero@gmail.com>
|
@ -1,218 +0,0 @@
|
||||
# add this folder in ~/.config/blender/2.66/scripts/addons
|
||||
|
||||
|
||||
bl_info = {
|
||||
"name": "Ewol Mesh file format emf",
|
||||
"author": "Edouard DUPIN",
|
||||
"blender": (2, 53, 0),
|
||||
"location": "File > Import-Export",
|
||||
"description": "Import-Export emf, Import EMF mesh, UV's, materials and textures",
|
||||
"warning": "",
|
||||
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Import-Export/EwolMechFile_EMF",
|
||||
"tracker_url": "",
|
||||
"support": 'OFFICIAL',
|
||||
"category": "Import-Export"}
|
||||
|
||||
if "bpy" in locals():
|
||||
import imp
|
||||
if "import_emf" in locals():
|
||||
imp.reload(import_emf)
|
||||
if "export_emf" in locals():
|
||||
imp.reload(export_emf)
|
||||
|
||||
|
||||
import bpy
|
||||
from bpy.props import (BoolProperty,
|
||||
FloatProperty,
|
||||
StringProperty,
|
||||
EnumProperty,
|
||||
)
|
||||
from bpy_extras.io_utils import (ExportHelper,
|
||||
ImportHelper,
|
||||
path_reference_mode,
|
||||
axis_conversion,
|
||||
)
|
||||
|
||||
|
||||
class ImportEMF(bpy.types.Operator, ImportHelper):
|
||||
"""Load a Wavefront EMF File"""
|
||||
bl_idname = "import_scene.emf"
|
||||
bl_label = "Import EMF"
|
||||
bl_options = {'PRESET', 'UNDO'}
|
||||
|
||||
filename_ext = ".emf"
|
||||
filter_glob = StringProperty(
|
||||
default="*.emf",
|
||||
options={'HIDDEN'},
|
||||
)
|
||||
|
||||
axis_forward = EnumProperty(
|
||||
name="Forward",
|
||||
items=(('X', "X Forward", ""),
|
||||
('Y', "Y Forward", ""),
|
||||
('Z', "Z Forward", ""),
|
||||
('-X', "-X Forward", ""),
|
||||
('-Y', "-Y Forward", ""),
|
||||
('-Z', "-Z Forward", ""),
|
||||
),
|
||||
default='-X',
|
||||
)
|
||||
|
||||
axis_up = EnumProperty(
|
||||
name="Up",
|
||||
items=(('X', "X Up", ""),
|
||||
('Y', "Y Up", ""),
|
||||
('Z', "Z Up", ""),
|
||||
('-X', "-X Up", ""),
|
||||
('-Y', "-Y Up", ""),
|
||||
('-Z', "-Z Up", ""),
|
||||
),
|
||||
default='Z',
|
||||
)
|
||||
|
||||
def execute(self, context):
|
||||
# print("Selected: " + context.active_object.name)
|
||||
from . import import_obj
|
||||
|
||||
keywords = self.as_keywords(ignore=("axis_forward",
|
||||
"axis_up",
|
||||
"filter_glob",
|
||||
"split_mode",
|
||||
))
|
||||
|
||||
global_matrix = axis_conversion(from_forward=self.axis_forward,
|
||||
from_up=self.axis_up,
|
||||
).to_4x4()
|
||||
keywords["global_matrix"] = global_matrix
|
||||
|
||||
return import_obj.load(self, context, **keywords)
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
row = layout.row(align=True)
|
||||
|
||||
row = layout.split(percentage=0.67)
|
||||
row.prop(self, "global_clamp_size")
|
||||
layout.prop(self, "axis_forward")
|
||||
layout.prop(self, "axis_up")
|
||||
|
||||
layout.prop(self, "use_image_search")
|
||||
|
||||
|
||||
class ExportEMF(bpy.types.Operator, ExportHelper):
|
||||
"""Save a Wavefront EMF File"""
|
||||
|
||||
bl_idname = "export_scene.emf"
|
||||
bl_label = 'Export EMF'
|
||||
bl_options = {'PRESET'}
|
||||
|
||||
filename_ext = ".emf"
|
||||
filter_glob = StringProperty(
|
||||
default="*.emf",
|
||||
options={'HIDDEN'},
|
||||
)
|
||||
|
||||
# context group
|
||||
use_selection = BoolProperty(
|
||||
name="Selection Only",
|
||||
description="Export selected objects only",
|
||||
default=True,
|
||||
)
|
||||
# generate binary file
|
||||
use_binary = BoolProperty(
|
||||
name="Binary",
|
||||
description="Export the filein binary mode",
|
||||
default=False,
|
||||
)
|
||||
|
||||
global_scale = FloatProperty(
|
||||
name="Scale",
|
||||
description="Scale all data",
|
||||
min=0.01, max=1000.0,
|
||||
soft_min=0.01,
|
||||
soft_max=1000.0,
|
||||
default=1.0,
|
||||
)
|
||||
|
||||
collision_object_name = StringProperty(
|
||||
name="Collision root name (strat with)",
|
||||
description="The top-level name that will contain the physics shapes",
|
||||
default="phys"
|
||||
)
|
||||
|
||||
axis_forward = EnumProperty(
|
||||
name="Forward",
|
||||
items=(('X', "X Forward", ""),
|
||||
('Y', "Y Forward", ""),
|
||||
('Z', "Z Forward", ""),
|
||||
('-X', "-X Forward", ""),
|
||||
('-Y', "-Y Forward", ""),
|
||||
('-Z', "-Z Forward", ""),
|
||||
),
|
||||
default='-Z',
|
||||
)
|
||||
|
||||
axis_up = EnumProperty(
|
||||
name="Up",
|
||||
items=(('X', "X Up", ""),
|
||||
('Y', "Y Up", ""),
|
||||
('Z', "Z Up", ""),
|
||||
('-X', "-X Up", ""),
|
||||
('-Y', "-Y Up", ""),
|
||||
('-Z', "-Z Up", ""),
|
||||
),
|
||||
default='Y',
|
||||
)
|
||||
|
||||
path_mode = path_reference_mode
|
||||
|
||||
check_extension = True
|
||||
|
||||
def execute(self, context):
|
||||
from . import export_emf
|
||||
|
||||
from mathutils import Matrix
|
||||
keywords = self.as_keywords(ignore=("axis_forward",
|
||||
"axis_up",
|
||||
"global_scale",
|
||||
"check_existing",
|
||||
"filter_glob",
|
||||
))
|
||||
|
||||
global_matrix = Matrix()
|
||||
|
||||
global_matrix[0][0] = \
|
||||
global_matrix[1][1] = \
|
||||
global_matrix[2][2] = self.global_scale
|
||||
|
||||
global_matrix = (global_matrix *
|
||||
axis_conversion(to_forward=self.axis_forward,
|
||||
to_up=self.axis_up,
|
||||
).to_4x4())
|
||||
|
||||
keywords["global_matrix"] = global_matrix
|
||||
return export_emf.save(self, context, **keywords)
|
||||
|
||||
|
||||
def menu_func_import(self, context):
|
||||
self.layout.operator(ImportEMF.bl_idname, text="Ewol mesh file (.emf)")
|
||||
|
||||
|
||||
def menu_func_export(self, context):
|
||||
self.layout.operator(ExportEMF.bl_idname, text="Ewol mesh File (.emf)")
|
||||
|
||||
|
||||
def register():
|
||||
bpy.utils.register_module(__name__)
|
||||
bpy.types.INFO_MT_file_import.append(menu_func_import)
|
||||
bpy.types.INFO_MT_file_export.append(menu_func_export)
|
||||
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_module(__name__)
|
||||
bpy.types.INFO_MT_file_import.remove(menu_func_import)
|
||||
bpy.types.INFO_MT_file_export.remove(menu_func_export)
|
||||
|
||||
if __name__ == "__main__":
|
||||
register()
|
@ -1,661 +0,0 @@
|
||||
|
||||
import os
|
||||
import time
|
||||
|
||||
import bpy
|
||||
import mathutils
|
||||
import bpy_extras.io_utils
|
||||
|
||||
def getChildren(obj):
|
||||
children = []
|
||||
for ob in bpy.data.objects:
|
||||
if ob.parent == obj:
|
||||
children.append(ob)
|
||||
return children
|
||||
|
||||
|
||||
import bpy
|
||||
from bpy.props import *
|
||||
import mathutils, math, struct
|
||||
from mathutils import *
|
||||
import os
|
||||
from os import remove
|
||||
import time
|
||||
import bpy_extras
|
||||
from bpy_extras.io_utils import ExportHelper
|
||||
import time
|
||||
import shutil
|
||||
|
||||
"""
|
||||
Usage Notes:
|
||||
To create a compound physics collision shape for a mesh in blender:
|
||||
|
||||
1. place the 3D cursor at the origin of the mesh object.
|
||||
2. Add > Empty, name it "physics"
|
||||
3. Create a physics shape with Add > Mesh > Cube, UV Sphere, Cylinder, Cone or create an arbitrary mesh for a ConvexHull shape.
|
||||
4. Parent the new shape to the "physics" Empty.
|
||||
5. The mesh name must start with: Box, Sphere, Cylinder, Cone, Capsule, or ConvexHull, depending on the shape you want.
|
||||
6. Position and scale the shape object, but do not modify the internal vertices, unless it is a ConvexHull type.
|
||||
7. Repeat step 3-6 until your shape is complete. Shapes can only be a 1-level deep hierarchy.
|
||||
8. IMPORTANT: Select the empty object you named "physics"
|
||||
9. Click File > Export > Physics Shapes (.yaml)
|
||||
"""
|
||||
|
||||
"""
|
||||
use_y_up = BoolProperty(name="Convert To Y-Up",
|
||||
description="Converts the values to a Y-Axis Up coordinate system",
|
||||
default=True)
|
||||
"""
|
||||
|
||||
# Methods for writing point, scale, and quaternion types to a YAML file.
|
||||
# This particular implementation converts values to a Y-up coordinate system.
|
||||
def out_point3_y_up( v ):
|
||||
return "%g %g %g" % ( v.x, v.z, -v.y )
|
||||
def out_scale3_y_up( s ):
|
||||
return "%g %g %g" % ( s.x, s.z, s.y )
|
||||
def out_quaternion_y_up( q ):
|
||||
return "%g %g %g %g" % ( q.w, q.x, q.z, -q.y )
|
||||
# This implementation maintains blender's Z-up coordinate system.
|
||||
def out_point3_z_up( v ):
|
||||
return "%g %g %g" % ( v.x, v.y, v.z )
|
||||
def out_scale3_z_up( s ):
|
||||
return "%g %g %g" % ( s.x, s.y, s.z )
|
||||
def out_quaternion_z_up( q ):
|
||||
return "%g %g %g %g" % ( q.w, q.x, q.y, q.z )
|
||||
|
||||
|
||||
def getPhysicsShape(obj, mainObjScale, use_y_up=False):
|
||||
shape = ""
|
||||
props = { }
|
||||
name = obj.name.lower()
|
||||
scale = Vector(( abs(obj.scale.x), abs(obj.scale.y), abs(obj.scale.z) ))
|
||||
|
||||
if use_y_up:
|
||||
out_point3 = out_point3_y_up
|
||||
out_scale3 = out_scale3_y_up
|
||||
out_quaternion = out_quaternion_y_up
|
||||
else:
|
||||
out_point3 = out_point3_z_up
|
||||
out_scale3 = out_scale3_z_up
|
||||
out_quaternion = out_quaternion_z_up
|
||||
|
||||
# BOX
|
||||
if name.startswith('box') \
|
||||
or name.startswith('cube'):
|
||||
shape = "Box"
|
||||
props["half-extents"] = out_scale3( scale )
|
||||
# SPHERE
|
||||
elif name.startswith('sph'):
|
||||
shape = "Sphere"
|
||||
props["radius"] = obj.scale.x * mainObjScale.x
|
||||
# CONE
|
||||
elif name.startswith('cone'):
|
||||
shape = "Cone"
|
||||
props["radius"] = obj.scale.x
|
||||
props["height"] = obj.scale.z * 2.0
|
||||
# CYLINDER
|
||||
elif name.startswith('cyl'):
|
||||
shape = "Cylinder"
|
||||
props["half-extents"] = out_scale3( scale )
|
||||
# CAPSULE
|
||||
elif name.startswith('cap'):
|
||||
shape = "Capsule"
|
||||
props["radius"] = obj.scale.x
|
||||
props["height"] = obj.scale.z
|
||||
# CONVEX-HULL
|
||||
elif name.startswith('convex'):
|
||||
shape = "ConvexHull"
|
||||
mesh = obj.to_mesh( bpy.context.scene, True, 'PREVIEW' )
|
||||
props["points"] = ""
|
||||
for v in mesh.vertices:
|
||||
props["points"] += "" + out_point3( v.co ) + "|"
|
||||
props["points"] = props["points"].rstrip("|")
|
||||
if scale != Vector((1,1,1)):
|
||||
props["scale"] = out_scale3( scale )
|
||||
# remove mesh
|
||||
|
||||
print(" shape type : '%s' from element name : '%s'" % (shape, obj.name))
|
||||
|
||||
if obj.location != Vector((0,0,0)):
|
||||
props["origin"] = out_point3( obj.location )
|
||||
|
||||
if obj.rotation_mode == 'QUATERNION':
|
||||
qrot = obj.rotation_quaternion
|
||||
else:
|
||||
qrot = obj.matrix_local.to_quaternion()
|
||||
|
||||
if qrot != Quaternion((1,0,0,0)):
|
||||
props["rotate"] = out_quaternion( qrot )
|
||||
|
||||
return (shape, props)
|
||||
|
||||
|
||||
def writeCollisionShape(object, file, mainObjScale):
|
||||
if len(getChildren(object))==0:
|
||||
# no phisical shape ...
|
||||
return
|
||||
fw = file.write
|
||||
fw('\t\tPhysics : \n')
|
||||
for subObj in getChildren(object):
|
||||
print(" element='%s' type '%s'" % (subObj.name,str(subObj.type)))
|
||||
if subObj.type != 'MESH':
|
||||
continue
|
||||
(shape, props) = getPhysicsShape(subObj, mainObjScale)
|
||||
if shape=="":
|
||||
print("error of shape detection type ...");
|
||||
continue
|
||||
fw("\t\t\t" + shape + "\n" )
|
||||
for (k,v) in props.items():
|
||||
fw("\t\t\t\t%s : %s\n" % (k, v) )
|
||||
|
||||
|
||||
|
||||
def name_compat(name):
|
||||
if name is None:
|
||||
return 'None'
|
||||
else:
|
||||
return name.replace(' ', '_')
|
||||
|
||||
|
||||
def mesh_triangulate(me):
|
||||
import bmesh
|
||||
bm = bmesh.new()
|
||||
bm.from_mesh(me)
|
||||
bmesh.ops.triangulate(bm, faces=bm.faces)#, use_beauty=False)
|
||||
bm.to_mesh(me)
|
||||
bm.free()
|
||||
|
||||
|
||||
def write_mtl(scene, file, filepath, path_mode, copy_set, mtl_dict):
|
||||
from mathutils import Color
|
||||
world = scene.world
|
||||
if world:
|
||||
world_amb = world.ambient_color
|
||||
else:
|
||||
world_amb = Color((0.0, 0.0, 0.0))
|
||||
source_dir = os.path.dirname(bpy.data.filepath)
|
||||
dest_dir = os.path.dirname(filepath)
|
||||
fw = file.write
|
||||
fw('\nMaterials : %i\n' % len(mtl_dict))
|
||||
mtl_dict_values = list(mtl_dict.values())
|
||||
mtl_dict_values.sort(key=lambda m: m[0])
|
||||
# Write material/image combinations we have used.
|
||||
# Using mtl_dict.values() directly gives un-predictable order.
|
||||
for mtl_mat_name, mat, face_img in mtl_dict_values:
|
||||
# Get the Blender data for the material and the image.
|
||||
# Having an image named None will make a bug, dont do it :)
|
||||
fw('\t%s\n' % mtl_mat_name) # Define a new material: matname_imgname
|
||||
if mat:
|
||||
# convert from blenders spec to 0 - 1000 range.
|
||||
if mat.specular_shader == 'WARDISO':
|
||||
tspec = (0.4 - mat.specular_slope) / 0.0004
|
||||
else:
|
||||
tspec = (mat.specular_hardness - 1) * 1.9607843137254901
|
||||
fw('\t\tNs %.6f\n' % tspec)
|
||||
del tspec
|
||||
fw('\t\tKa %.6f %.6f %.6f\n' % (mat.ambient * world_amb)[:]) # Ambient, uses mirror color,
|
||||
fw('\t\tKd %.6f %.6f %.6f\n' % (mat.diffuse_intensity * mat.diffuse_color)[:]) # Diffuse
|
||||
fw('\t\tKs %.6f %.6f %.6f\n' % (mat.specular_intensity * mat.specular_color)[:]) # Specular
|
||||
if hasattr(mat, "ior"):
|
||||
fw('\t\tNi %.6f\n' % mat.ior) # Refraction index
|
||||
else:
|
||||
fw('\t\tNi %.6f\n' % 1.0)
|
||||
fw('\t\td %.6f\n' % mat.alpha) # Alpha (obj uses 'd' for dissolve)
|
||||
# 0 to disable lighting, 1 for ambient & diffuse only (specular color set to black), 2 for full lighting.
|
||||
if mat.use_shadeless:
|
||||
fw('\t\tillum 0\n') # ignore lighting
|
||||
elif mat.specular_intensity == 0:
|
||||
fw('\t\tillum 1\n') # no specular.
|
||||
else:
|
||||
fw('\t\tillum 2\n') # light normaly
|
||||
else:
|
||||
#write a dummy material here?
|
||||
fw('\t\tNs 0\n')
|
||||
fw('\t\tKa %.6f %.6f %.6f\n' % world_amb[:]) # Ambient, uses mirror color,
|
||||
fw('\t\tKd 0.8 0.8 0.8\n')
|
||||
fw('\t\tKs 0.8 0.8 0.8\n')
|
||||
fw('\t\td 1\n') # No alpha
|
||||
fw('\t\tillum 2\n') # light normaly
|
||||
# Write images!
|
||||
if face_img: # We have an image on the face!
|
||||
filepath = face_img.filepath
|
||||
if filepath: # may be '' for generated images
|
||||
# write relative image path
|
||||
filepath = bpy_extras.io_utils.path_reference(filepath,
|
||||
source_dir,
|
||||
dest_dir,
|
||||
path_mode,
|
||||
"",
|
||||
copy_set,
|
||||
face_img.library)
|
||||
fw('\t\tmap_Kd %s\n' % filepath) # Diffuse mapping image
|
||||
del filepath
|
||||
else:
|
||||
# so we write the materials image.
|
||||
face_img = None
|
||||
if mat: # No face image. if we havea material search for MTex image.
|
||||
image_map = {}
|
||||
# backwards so topmost are highest priority
|
||||
for mtex in reversed(mat.texture_slots):
|
||||
if mtex and mtex.texture and mtex.texture.type == 'IMAGE':
|
||||
image = mtex.texture.image
|
||||
if image:
|
||||
# texface overrides others
|
||||
if( mtex.use_map_color_diffuse
|
||||
and (face_img is None)
|
||||
and (mtex.use_map_warp is False)
|
||||
and (mtex.texture_coords != 'REFLECTION')
|
||||
):
|
||||
image_map["map_Kd"] = image
|
||||
if mtex.use_map_ambient:
|
||||
image_map["map_Ka"] = image
|
||||
# this is the Spec intensity channel but Ks stands for specular Color
|
||||
if mtex.use_map_color_spec: # specular color
|
||||
image_map["map_Ks"] = image
|
||||
if mtex.use_map_hardness: # specular hardness/glossiness
|
||||
image_map["map_Ns"] = image
|
||||
if mtex.use_map_alpha:
|
||||
image_map["map_d"] = image
|
||||
if mtex.use_map_translucency:
|
||||
image_map["map_Tr"] = image
|
||||
if mtex.use_map_normal and (mtex.texture.use_normal_map is True):
|
||||
image_map["map_Bump"] = image
|
||||
if mtex.use_map_normal and (mtex.texture.use_normal_map is False):
|
||||
image_map["map_Disp"] = image
|
||||
if mtex.use_map_color_diffuse and (mtex.texture_coords == 'REFLECTION'):
|
||||
image_map["map_refl"] = image
|
||||
if mtex.use_map_emit:
|
||||
image_map["map_Ke"] = image
|
||||
for key, image in image_map.items():
|
||||
filepath = bpy_extras.io_utils.path_reference(image.filepath,
|
||||
source_dir,
|
||||
dest_dir,
|
||||
path_mode,
|
||||
"",
|
||||
copy_set,
|
||||
image.library)
|
||||
fw('\t\t%s %s\n' % (key, repr(filepath)[1:-1]))
|
||||
|
||||
|
||||
"""
|
||||
" @brief Basic write function. The context and options must be already set.
|
||||
"""
|
||||
def write_file(filepath,
|
||||
objects,
|
||||
scene,
|
||||
EXPORT_GLOBAL_MATRIX=None,
|
||||
EXPORT_PATH_MODE='AUTO',
|
||||
EXPORT_BINARY_MODE=False,
|
||||
EXPORT_COLLISION_NAME=""
|
||||
):
|
||||
if EXPORT_GLOBAL_MATRIX is None:
|
||||
EXPORT_GLOBAL_MATRIX = mathutils.Matrix()
|
||||
|
||||
def veckey3d(v):
|
||||
return round(v.x, 6), round(v.y, 6), round(v.z, 6)
|
||||
|
||||
def veckey2d(v):
|
||||
return round(v[0], 6), round(v[1], 6)
|
||||
|
||||
print('EMF Export path: %r' % filepath)
|
||||
|
||||
time1 = time.time()
|
||||
|
||||
mtlfilepath = os.path.splitext(filepath)[0] + ".mtl"
|
||||
|
||||
file = open(filepath, "w", encoding="utf8", newline="\n")
|
||||
fw = file.write
|
||||
|
||||
# Write Header
|
||||
fw('EMF(STRING)\n') # if binary : fw('EMF(BINARY)\n')
|
||||
fw('# Blender v%s EMF File: %r\n' % (bpy.app.version_string, os.path.basename(bpy.data.filepath)))
|
||||
|
||||
# Initialize totals, these are updated each object
|
||||
totverts = totuvco = totno = 1
|
||||
|
||||
face_vert_index = 1
|
||||
|
||||
globalNormals = {}
|
||||
|
||||
# A Dict of Materials
|
||||
# (material.name, image.name):matname_imagename # matname_imagename has gaps removed.
|
||||
mtl_dict = {}
|
||||
# Used to reduce the usage of matname_texname materials, which can become annoying in case of
|
||||
# repeated exports/imports, yet keeping unique mat names per keys!
|
||||
# mtl_name: (material.name, image.name)
|
||||
mtl_rev_dict = {}
|
||||
|
||||
copy_set = set()
|
||||
|
||||
# Get all meshes
|
||||
for ob_main in objects:
|
||||
print("**************** '%s' *******************" % str(ob_main.name))
|
||||
if ob_main.type != 'MESH':
|
||||
print(ob_main.name, 'is not a mesh type - ignoring')
|
||||
fw('# can not export : "%s" : type="%s"\n' % (ob_main.name, str(ob_main.type)))
|
||||
continue
|
||||
#print("name : '%s'" % ob_main.name)
|
||||
#for plop in ob_main.child:
|
||||
# print(" child : '%s'" % plop.name)
|
||||
# ignore dupli children
|
||||
if ob_main.parent and ob_main.parent.dupli_type in {'VERTS', 'FACES'}:
|
||||
# XXX
|
||||
print(ob_main.name, 'is a dupli child - ignoring')
|
||||
continue
|
||||
obs = []
|
||||
if ob_main.dupli_type != 'NONE':
|
||||
# XXX
|
||||
print('creating dupli_list on', ob_main.name)
|
||||
ob_main.dupli_list_create(scene)
|
||||
obs = [(dob.object, dob.matrix) for dob in ob_main.dupli_list]
|
||||
# XXX debug print
|
||||
print(ob_main.name, 'has', len(obs), 'dupli children')
|
||||
else:
|
||||
obs = [(ob_main, ob_main.matrix_world)]
|
||||
idMesh=0
|
||||
for ob, ob_mat in obs:
|
||||
try:
|
||||
# apply the mesh modifieur at the curent object :
|
||||
me = ob.to_mesh(scene, True, 'PREVIEW', calc_tessface=False)
|
||||
except RuntimeError:
|
||||
me = None
|
||||
if me is None:
|
||||
continue
|
||||
idMesh = idMesh+1;
|
||||
fw('Mesh : %d\n' % idMesh)
|
||||
me.transform(EXPORT_GLOBAL_MATRIX * ob_mat)
|
||||
#print("ploppp : " + str(EXPORT_GLOBAL_MATRIX) )
|
||||
#print("ploppp : " + str(ob_mat) )
|
||||
# _must_ do this first since it re-allocs arrays
|
||||
# triangulate all the mesh :
|
||||
mesh_triangulate(me)
|
||||
# calculated normals:
|
||||
me.calc_normals()
|
||||
# export UV mapping :
|
||||
faceuv = len(me.uv_textures) > 0
|
||||
if faceuv:
|
||||
uv_texture = me.uv_textures.active.data[:]
|
||||
uv_layer = me.uv_layers.active.data[:]
|
||||
me_verts = me.vertices[:]
|
||||
# Make our own list so it can be sorted to reduce context switching
|
||||
face_index_pairs = [(face, index) for index, face in enumerate(me.polygons)]
|
||||
# faces = [ f for f in me.tessfaces ]
|
||||
edges = me.edges
|
||||
if not (len(face_index_pairs) + len(edges) + len(me.vertices)): # Make sure there is somthing to write
|
||||
# clean up
|
||||
bpy.data.meshes.remove(me)
|
||||
continue # dont bother with this mesh.
|
||||
|
||||
materials = me.materials[:]
|
||||
material_names = [m.name if m else None for m in materials]
|
||||
# avoid bad index errors
|
||||
if not materials:
|
||||
materials = [None]
|
||||
material_names = [name_compat(None)]
|
||||
# Sort by Material, then images
|
||||
# so we dont over context switch in the obj file.
|
||||
if faceuv:
|
||||
face_index_pairs.sort(key=lambda a: (a[0].material_index, hash(uv_texture[a[1]].image), a[0].use_smooth))
|
||||
elif len(materials) > 1:
|
||||
face_index_pairs.sort(key=lambda a: (a[0].material_index, a[0].use_smooth))
|
||||
else:
|
||||
# no materials
|
||||
face_index_pairs.sort(key=lambda a: a[0].use_smooth)
|
||||
# Set the default mat to no material and no image.
|
||||
contextMat = 0, 0 # Can never be this, so we will label a new material the first chance we get.
|
||||
contextSmooth = None # Will either be true or false, set bad to force initialization switch.
|
||||
# use : blen obs ??? what is this ....
|
||||
if True:
|
||||
name1 = ob.name
|
||||
name2 = ob.data.name
|
||||
if name1 == name2:
|
||||
obnamestring = name_compat(name1)
|
||||
else:
|
||||
obnamestring = '%s_%s' % (name_compat(name1), name_compat(name2))
|
||||
fw('\t%s\n' % obnamestring) # Write Object name
|
||||
###########################################################
|
||||
## Vert
|
||||
###########################################################
|
||||
fw('\t\tVertex : %d\n\t\t\t' % len(me_verts))
|
||||
for v in me_verts:
|
||||
fw('%.6f %.6f %.6f|' % v.co[:])
|
||||
fw('\n')
|
||||
###########################################################
|
||||
## UV
|
||||
###########################################################
|
||||
fw('\t\tUV-mapping :\n\t\t\t')
|
||||
if faceuv:
|
||||
# in case removing some of these dont get defined.
|
||||
uv = uvkey = uv_dict = f_index = uv_index = None
|
||||
uv_face_mapping = [None] * len(face_index_pairs)
|
||||
uv_dict = {} # could use a set() here
|
||||
for f, f_index in face_index_pairs:
|
||||
uv_ls = uv_face_mapping[f_index] = []
|
||||
for uv_index, l_index in enumerate(f.loop_indices):
|
||||
uv = uv_layer[l_index].uv
|
||||
uvkey = veckey2d(uv)
|
||||
try:
|
||||
uv_k = uv_dict[uvkey]
|
||||
except:
|
||||
uv_k = uv_dict[uvkey] = len(uv_dict)
|
||||
fw('%.6f %.6f|' % uv[:])
|
||||
uv_ls.append(uv_k)
|
||||
uv_unique_count = len(uv_dict)
|
||||
del uv, uvkey, uv_dict, f_index, uv_index, uv_ls, uv_k
|
||||
# Only need uv_unique_count and uv_face_mapping
|
||||
fw('\n')
|
||||
###########################################################
|
||||
## NORMAL
|
||||
###########################################################
|
||||
if f.use_smooth:
|
||||
localIsSmooth = 'vertex'
|
||||
else:
|
||||
localIsSmooth = 'face'
|
||||
fw('\t\tNormal(%s) : %d\n\t\t\t' % (localIsSmooth, len(face_index_pairs)) )
|
||||
for f, f_index in face_index_pairs:
|
||||
if f.use_smooth:
|
||||
for v_idx in f.vertices:
|
||||
v = me_verts[v_idx]
|
||||
noKey = veckey3d(v.normal)
|
||||
if noKey not in globalNormals:
|
||||
globalNormals[noKey] = totno
|
||||
totno += 1
|
||||
fw('%.6f %.6f %.6f|' % noKey)
|
||||
else:
|
||||
# Hard, 1 normal from the face.
|
||||
noKey = veckey3d(f.normal)
|
||||
if noKey not in globalNormals:
|
||||
globalNormals[noKey] = totno
|
||||
totno += 1
|
||||
fw('%.6f %.6f %.6f|' % noKey)
|
||||
|
||||
fw('\n')
|
||||
if not faceuv:
|
||||
f_image = None
|
||||
###########################################################
|
||||
## faces
|
||||
###########################################################
|
||||
fw('\t\tFace : %d' % len(face_index_pairs))
|
||||
for f, f_index in face_index_pairs:
|
||||
f_smooth = f.use_smooth
|
||||
f_mat = min(f.material_index, len(materials) - 1)
|
||||
if faceuv:
|
||||
tface = uv_texture[f_index]
|
||||
f_image = tface.image
|
||||
# MAKE KEY
|
||||
if faceuv and f_image: # Object is always true.
|
||||
key = material_names[f_mat], f_image.name
|
||||
else:
|
||||
key = material_names[f_mat], None # No image, use None instead.
|
||||
# CHECK FOR CONTEXT SWITCH
|
||||
if key == contextMat:
|
||||
pass # Context already switched, dont do anything
|
||||
else:
|
||||
if key[0] is None and key[1] is None:
|
||||
# inform the use of a material :
|
||||
fw("\n\t\t\t---:") # mat, image
|
||||
else:
|
||||
mat_data = mtl_dict.get(key)
|
||||
if not mat_data:
|
||||
# First add to global dict so we can export to mtl
|
||||
# Then write mtl
|
||||
# Make a new names from the mat and image name,
|
||||
# converting any spaces to underscores with name_compat.
|
||||
# If none image dont bother adding it to the name
|
||||
# Try to avoid as much as possible adding texname (or other things)
|
||||
# to the mtl name (see [#32102])...
|
||||
mtl_name = "%s" % name_compat(key[0])
|
||||
if mtl_rev_dict.get(mtl_name, None) not in {key, None}:
|
||||
if key[1] is None:
|
||||
tmp_ext = "_NONE"
|
||||
else:
|
||||
tmp_ext = "_%s" % name_compat(key[1])
|
||||
i = 0
|
||||
while mtl_rev_dict.get(mtl_name + tmp_ext, None) not in {key, None}:
|
||||
i += 1
|
||||
tmp_ext = "_%3d" % i
|
||||
mtl_name += tmp_ext
|
||||
mat_data = mtl_dict[key] = mtl_name, materials[f_mat], f_image
|
||||
mtl_rev_dict[mtl_name] = key
|
||||
# set the use of a material :
|
||||
fw("\n\t\t\t%s\n\t\t\t\t" % mat_data[0]) # can be mat_image or (null)
|
||||
contextMat = key
|
||||
f_v = [(vi, me_verts[v_idx]) for vi, v_idx in enumerate(f.vertices)]
|
||||
if faceuv:
|
||||
# export the normals :
|
||||
if f_smooth: # Smoothed, use vertex normals
|
||||
for vi, v in f_v:
|
||||
fw(" %d/%d/%d" %
|
||||
(v.index + totverts-1,
|
||||
totuvco + uv_face_mapping[f_index][vi]-1,
|
||||
globalNormals[veckey3d(v.normal)]-1,
|
||||
)) # vert, uv, normal
|
||||
else: # No smoothing, face normals
|
||||
no = globalNormals[veckey3d(f.normal)]
|
||||
for vi, v in f_v:
|
||||
fw(" %d/%d/%d" %
|
||||
(v.index + totverts-1,
|
||||
totuvco + uv_face_mapping[f_index][vi]-1,
|
||||
no-1,
|
||||
)) # vert, uv, normal
|
||||
face_vert_index += len(f_v)
|
||||
else: # No UV's
|
||||
# export the normals :
|
||||
if f_smooth: # Smoothed, use vertex normals
|
||||
for vi, v in f_v:
|
||||
fw(" %d//%d" % (
|
||||
v.index + totverts-1,
|
||||
globalNormals[veckey3d(v.normal)]-1,
|
||||
))
|
||||
else: # No smoothing, face normals
|
||||
no = globalNormals[veckey3d(f.normal)]
|
||||
for vi, v in f_v:
|
||||
fw(" %d//%d" % (v.index + totverts-1, no-1))
|
||||
fw('|')
|
||||
fw('\n')
|
||||
# Write edges. ==> did not know what it is ...
|
||||
#fw('Faces : %d' % len(edges))
|
||||
#for ed in edges:
|
||||
# if ed.is_loose:
|
||||
# fw('%d %d\n' % (ed.vertices[0] + totverts, ed.vertices[1] + totverts))
|
||||
|
||||
# Make the indices global rather then per mesh
|
||||
totverts += len(me_verts)
|
||||
if faceuv:
|
||||
totuvco += uv_unique_count
|
||||
# clean up
|
||||
bpy.data.meshes.remove(me)
|
||||
if ob_main.dupli_type != 'NONE':
|
||||
ob_main.dupli_list_clear()
|
||||
#####################################################################
|
||||
## Save collision shapes (for one object :
|
||||
#####################################################################
|
||||
for subObj in getChildren(ob_main):
|
||||
print(" child : '%s'" % (subObj.name))
|
||||
if subObj.name.lower().startswith(EXPORT_COLLISION_NAME):
|
||||
print(" find physics : '%s'" % (subObj.name))
|
||||
writeCollisionShape(subObj, file, ob_main.scale)
|
||||
|
||||
#####################################################################
|
||||
## Now we have all our materials, save them in the material section
|
||||
#####################################################################
|
||||
write_mtl(scene, file, mtlfilepath, EXPORT_PATH_MODE, copy_set, mtl_dict)
|
||||
|
||||
#####################################################################
|
||||
## End of the file generation:
|
||||
#####################################################################
|
||||
file.close()
|
||||
|
||||
# copy all collected files.
|
||||
bpy_extras.io_utils.path_reference_copy(copy_set)
|
||||
|
||||
print("EMF Export time: %.2f" % (time.time() - time1))
|
||||
|
||||
|
||||
"""
|
||||
" @brief generate the requested object file ... with his material inside and ...
|
||||
"
|
||||
"""
|
||||
def _write(context,
|
||||
filepath,
|
||||
EXPORT_SEL_ONLY,
|
||||
EXPORT_GLOBAL_MATRIX,
|
||||
EXPORT_PATH_MODE,
|
||||
EXPORT_BINARY_MODE,
|
||||
EXPORT_COLLISION_NAME,
|
||||
):
|
||||
#
|
||||
base_name, ext = os.path.splitext(filepath)
|
||||
# create the output name :
|
||||
context_name = [base_name, '', '', ext] # Base name, scene name, frame number, extension
|
||||
# get the curent scene :
|
||||
scene = context.scene
|
||||
# Exit edit mode before exporting, so current object states are exported properly.
|
||||
if bpy.ops.object.mode_set.poll():
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
# get the curent frame selected :
|
||||
frame = scene.frame_current
|
||||
# Loop through all frames in the scene and export.
|
||||
scene.frame_set(frame, 0.0)
|
||||
# get only the object that are selected or all ...
|
||||
if EXPORT_SEL_ONLY:
|
||||
objects = context.selected_objects
|
||||
else:
|
||||
objects = scene.objects
|
||||
|
||||
full_path = ''.join(context_name)
|
||||
|
||||
write_file(full_path,
|
||||
objects,
|
||||
scene,
|
||||
EXPORT_GLOBAL_MATRIX,
|
||||
EXPORT_PATH_MODE,
|
||||
EXPORT_BINARY_MODE,
|
||||
EXPORT_COLLISION_NAME,
|
||||
)
|
||||
|
||||
|
||||
|
||||
"""
|
||||
" @brief Save the current element in the file requested.
|
||||
"
|
||||
"""
|
||||
def save(operator,
|
||||
context,
|
||||
filepath="",
|
||||
use_selection=True,
|
||||
use_binary=False,
|
||||
collision_object_name="",
|
||||
global_matrix=None,
|
||||
path_mode='AUTO'
|
||||
):
|
||||
_write(context,
|
||||
filepath,
|
||||
EXPORT_SEL_ONLY=use_selection,
|
||||
EXPORT_GLOBAL_MATRIX=global_matrix,
|
||||
EXPORT_PATH_MODE=path_mode,
|
||||
EXPORT_BINARY_MODE=use_binary,
|
||||
EXPORT_COLLISION_NAME=collision_object_name,
|
||||
)
|
||||
|
||||
return {'FINISHED'}
|
1
build
@ -1 +0,0 @@
|
||||
Subproject commit b1cbee3b4b65bacad8abbbbdc99cdf9e472b76e4
|
196
codingStyle.txt
@ -1,196 +0,0 @@
|
||||
last update:02/10/2013
|
||||
|
||||
=========================
|
||||
== Ewol coding style ==
|
||||
=========================
|
||||
|
||||
We need to use the same coding style in c and c++ to simplify inter-reading code.
|
||||
|
||||
------------------
|
||||
-- 1: Comment --
|
||||
------------------
|
||||
- One line comment: (never in #define xxx ==> too dangerous)
|
||||
//
|
||||
- Multiple line comment
|
||||
/*
|
||||
* xxxx yyyy
|
||||
* zzzz
|
||||
*/
|
||||
- Documentation : doxygen (do not set un-nneded field)
|
||||
/**
|
||||
* @brief my summery
|
||||
* @param[in,out] _xxxx Comment on the variable
|
||||
* @return my return explanation
|
||||
*/
|
||||
- one line documlentation:
|
||||
xxxxx, //!< my comment
|
||||
|
||||
---------------------------
|
||||
-- 2: number of colomn --
|
||||
---------------------------
|
||||
I do not linit the number of colomn, but it could be good to limit at
|
||||
150 char. Many screen have the main display like this
|
||||
|
||||
|
||||
-------------------------------
|
||||
-- 3: Indentation & braces --
|
||||
-------------------------------
|
||||
Tab size is a personal choice then, when you write code, you might be
|
||||
tab proof. If someone want to have the golden number for theire tabs,
|
||||
he will be able to do it.
|
||||
When you set a brace '{' you need to add a brace, and when you set a
|
||||
stop brace '}' you need to remove a tab
|
||||
To be simple : (tab stop at the 'if' start)
|
||||
if:
|
||||
if ( xxx == yyy
|
||||
&& xxx == kkk) {
|
||||
your action ...;
|
||||
}
|
||||
switch:
|
||||
switch (suffix) {
|
||||
case 'G':
|
||||
case 'g':
|
||||
mem <<= 30;
|
||||
break;
|
||||
case 'M':
|
||||
case 'm':
|
||||
mem <<= 20;
|
||||
break;
|
||||
case 'K':
|
||||
case 'k':
|
||||
mem <<= 10;
|
||||
// fall through
|
||||
default:
|
||||
break;
|
||||
}
|
||||
function:
|
||||
void myFunction(void) {
|
||||
actions ...;
|
||||
}
|
||||
classes:
|
||||
class MyClass {
|
||||
public:
|
||||
MyClass(void);
|
||||
~MyClass(void);
|
||||
private:
|
||||
const char* getName(void);
|
||||
};
|
||||
namespace:
|
||||
namespace appl {
|
||||
void get(void);
|
||||
};
|
||||
For special element like : you might add a tabulation too
|
||||
case xxx:
|
||||
actions...
|
||||
public:
|
||||
definition ...
|
||||
An exception for the inline function inside c++ header:
|
||||
class Plop {
|
||||
private:
|
||||
int32_t m_value; //!< my value of money gain
|
||||
public:
|
||||
int32_t getValue(void) const { return m_value; };
|
||||
|
||||
----------------
|
||||
-- 4: types --
|
||||
----------------
|
||||
the element 'typedef' must not be use, like this it is not needed to add
|
||||
special element like '_te' or '_ts' to say respectively 'tpedef enum' and
|
||||
'typedef struct'
|
||||
Structure is not availlable in c++, just use normal class, this is the same.
|
||||
|
||||
|
||||
------------------------
|
||||
-- 5: star position --
|
||||
------------------------
|
||||
The star will be near the type :
|
||||
void* myVariableName;
|
||||
|
||||
--------------------
|
||||
-- 6: C and c++ --
|
||||
--------------------
|
||||
All C header files might have :
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
...
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
-----------------
|
||||
-- 7: Naming --
|
||||
-----------------
|
||||
- Fonction/Methods:
|
||||
Camel case with first letter in lower case.
|
||||
void myExampleFontionName(void);
|
||||
- Valiable:
|
||||
Camel case with first letter in lower case.
|
||||
int32_t myVariableExample;
|
||||
- namespace:
|
||||
one world in lower case
|
||||
namspace ewol {
|
||||
- Class:
|
||||
Camel case with first letter in upper case.
|
||||
class MyClass;
|
||||
- Members fields :
|
||||
put a 'm' prefix and then a normal Variable name
|
||||
int32_t m_memberField;
|
||||
- enum:
|
||||
Camel case with first letter in lower case.
|
||||
enum myEnum {
|
||||
myEnumDef1,
|
||||
myEnumDef2,
|
||||
myEnumDef3,
|
||||
};
|
||||
- structure (C only)
|
||||
use naming like Classes (and for mamber too)
|
||||
- minimum size : Do not use variable with size <3, the for a iterator
|
||||
for a 'for' :
|
||||
for (int32_t iii=0; iii<xxx; ++iii) {
|
||||
actions ...
|
||||
}
|
||||
|
||||
----------------
|
||||
-- 8: types --
|
||||
----------------
|
||||
Une stanndard Type :
|
||||
bool
|
||||
int8_t / uint8_t
|
||||
int16_t / uint16_t
|
||||
int32_t / uint32_t
|
||||
int64_t / uint64_t
|
||||
size_t
|
||||
int (some case needed)
|
||||
float / double
|
||||
float_t to automatic match whith the compilation choice between float or double
|
||||
|
||||
-----------------------
|
||||
-- 9: return value --
|
||||
-----------------------
|
||||
use the best simple way to check the return value :
|
||||
use 'int' type and return 0 whenall is ok, or -errno if an error
|
||||
occured, note thet the >0 value, you can set what you want.
|
||||
|
||||
--------------------------
|
||||
-- 9: C++ specificity --
|
||||
--------------------------
|
||||
- STL
|
||||
You can use the Stl, but the porting and the result can be
|
||||
different depending on the board you are.
|
||||
- Heritage:
|
||||
Simple Heritage is a good use of the C++, multiple heritage is
|
||||
not really supported in every compilators.
|
||||
- const:
|
||||
Set the parameter and fonction const all time you can, this
|
||||
permit to avaoid re-copy.
|
||||
- exception:
|
||||
They are not manage in all platforms, then by restriction, do
|
||||
not use it.
|
||||
- -rtti & cast
|
||||
Runtime type information : not available on all systems
|
||||
(android), so don't use dynamic_cast. (only one availlable :
|
||||
static_cast<xxx>(****) )
|
||||
|
@ -6,5 +6,5 @@ precision mediump int;
|
||||
varying vec4 f_color;
|
||||
|
||||
void main(void) {
|
||||
gl_FragColor = f_color;
|
||||
gl_FragColor = f_color;
|
||||
}
|
||||
|
@ -7,12 +7,12 @@ precision mediump int;
|
||||
attribute vec3 EW_coord3d;
|
||||
attribute vec4 EW_color;
|
||||
uniform mat4 EW_MatrixTransformation;
|
||||
uniform mat4 EW_MatrixPosition;
|
||||
|
||||
// output :
|
||||
varying vec4 f_color;
|
||||
|
||||
void main(void) {
|
||||
gl_Position = EW_MatrixTransformation * vec4(EW_coord3d, 1.0);
|
||||
//gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * vec4(EW_coord2d, 0.0, 1.0);
|
||||
gl_Position = EW_MatrixTransformation * EW_MatrixPosition * vec4(EW_coord3d, 1.0);
|
||||
f_color = EW_color;
|
||||
}
|
||||
|
50
data/ewol-gui-file-chooser.xml
Normal file
@ -0,0 +1,50 @@
|
||||
<popup>
|
||||
<sizer mode="vert" lock="true" fill="true" expand="true">
|
||||
<sizer mode="hori">
|
||||
<checkbox name="[{ID}]file-shooser:show-hiden-file">
|
||||
<label>_T{ShowHiddenFiles}</label>
|
||||
</checkbox>
|
||||
<spacer expand="true,false"/>
|
||||
<button name="[{ID}]file-shooser:button-validate">
|
||||
<sizer mode="hori">
|
||||
<image src="THEME_GUI:///Load.svg?lib=ewol" fill="true" size="7,7mm"/>
|
||||
<label name="[{ID}]file-shooser:validate-label">_T{Validate}</label>
|
||||
</sizer>
|
||||
</button>
|
||||
<button name="[{ID}]file-shooser:button-cancel">
|
||||
<sizer mode="hori">
|
||||
<image src="THEME_GUI:///Remove.svg?lib=ewol" fill="true" size="7,7mm"/>
|
||||
<label name="[{ID}]file-shooser:cancel-label">_T{Cancel}</label>
|
||||
</sizer>
|
||||
</button>
|
||||
</sizer>
|
||||
<sizer mode="hori">
|
||||
<spacer min-size="2,2mm"/>
|
||||
<ListFileSystem name="[{ID}]file-shooser:list-folder"
|
||||
min-size="20,0%"
|
||||
expand="false,true"
|
||||
show-hidden="false"
|
||||
show-file="false"
|
||||
show-folder="true"
|
||||
show-temporary="false"/>
|
||||
<spacer min-size="2,2mm"/>
|
||||
<ListFileSystem name="[{ID}]file-shooser:list-files"
|
||||
expand="true,true"
|
||||
show-hidden="false"
|
||||
show-file="true"
|
||||
show-folder="false"
|
||||
show-temporary="false"/>
|
||||
<spacer min-size="2,2mm"/>
|
||||
</sizer>
|
||||
<sizer mode="hori">
|
||||
<image name="[{ID}]file-shooser:img-file" src="THEME_GUI:///File.svg?lib=ewol" expand="false" size="8,8mm"/>
|
||||
<entry name="[{ID}]file-shooser:entry-file" expand="true,false" fill="true,false"/>
|
||||
</sizer>
|
||||
<sizer mode="hori">
|
||||
<image name="[{ID}]file-shooser:img-folder" src="THEME_GUI:///Folder.svg?lib=ewol" expand="false" size="8,8mm"/>
|
||||
<entry name="[{ID}]file-shooser:entry-folder" expand="true,false" fill="true,false"/>
|
||||
<image name="[{ID}]file-shooser:img-home" src="THEME_GUI:///Home.svg?lib=ewol" expand="false" size="8,8mm"/>
|
||||
</sizer>
|
||||
<label name="[{ID}]file-shooser:title-label">_T{Title}</label>
|
||||
</sizer>
|
||||
</popup>
|
@ -30,7 +30,7 @@ void main(void) {
|
||||
|
||||
// Smooth
|
||||
gl_FragColor = vec4(f_color[0], f_color[1], f_color[2], f_color[3]*alpha);
|
||||
|
||||
//gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
// Outline
|
||||
/*
|
||||
float mu = smoothstep(outline_center-width, outline_center+width, dist);
|
||||
|
@ -50,9 +50,6 @@ void main(void) {
|
||||
specularLight = pow(ecNormalDotLightHalfplane, EW_material.shininess) * EW_directionalLight.specularColor * EW_material.specularFactor;
|
||||
specularLight = EW_directionalLight.specularColor * EW_material.specularFactor;
|
||||
}
|
||||
|
||||
|
||||
vec4 light = ambientLight + diffuseLight + specularLight;
|
||||
|
||||
gl_FragColor = tmpElementColor * light;
|
||||
gl_FragColor = tmpElementColor;// * light;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifdef GL_ES
|
||||
#extension GL_OES_standard_derivatives : enable
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#extension GL_OES_standard_derivatives : enable
|
||||
#endif
|
||||
|
||||
// Input :
|
||||
|
@ -3,7 +3,7 @@ precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
// Input :
|
||||
// Input:
|
||||
uniform sampler2D EW_texID;
|
||||
|
||||
varying vec2 f_texcoord;
|
||||
|
@ -2,17 +2,17 @@
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
// Input :
|
||||
// Input:
|
||||
attribute vec3 EW_coord3d;
|
||||
attribute vec2 EW_texture2d;
|
||||
uniform mat4 EW_MatrixTransformation;
|
||||
uniform mat4 EW_MatrixPosition;
|
||||
|
||||
// output :
|
||||
// output:
|
||||
varying vec2 f_texcoord;
|
||||
|
||||
void main(void) {
|
||||
gl_Position = EW_MatrixTransformation * EW_MatrixPosition * vec4(EW_coord3d, 1.0);
|
||||
// set texture output coord
|
||||
f_texcoord = EW_texture2d;
|
||||
gl_Position = EW_MatrixTransformation * EW_MatrixPosition * vec4(EW_coord3d, 1.0);
|
||||
}
|
||||
|
@ -5,6 +5,6 @@
|
||||
{ name:"EW_foreground", color:"#8884" },
|
||||
{ name:"EW_foregroundHover", color:"#00A6" },
|
||||
{ name:"EW_foregroundSelected", color:"#000A" },
|
||||
{ name:"EW_foregroundPressed", color:"#A006" },
|
||||
{ name:"EW_foregroundPressed", color:"#000A" },
|
||||
]
|
||||
}
|
||||
|
7
data/theme/default/Add.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2,0,0,1.2,-579.7336,-567.9832)">
|
||||
<path d="m 509.778,477.486 c -12.426,0 -22.5,10.072 -22.5,22.5 0,12.426 10.074,22.5 22.5,22.5 12.428,0 22.5,-10.074 22.5,-22.5 0,-12.427 -10.072,-22.5 -22.5,-22.5 z m 11.5,25 c 0,0.549 -0.451,1 -1,1 h -6 c -0.551,0 -1.001,0.449 -1.001,1 v 6 c 0,0.549 -0.45,1 -1,1 h -5 c -0.55,0 -1,-0.451 -1,-1 v -6 c 0,-0.551 -0.45,-1 -1,-1 h -6 c -0.55,0 -1,-0.451 -1,-1 v -5 c 0,-0.551 0.45,-1 1,-1 h 6 c 0.55,0 1,-0.451 1,-1 v -6 c 0,-0.551 0.45,-1 1,-1 h 5 c 0.55,0 1,0.449 1,1 v 6 c 0,0.549 0.45,1 1.001,1 h 6 c 0.549,0 1,0.449 1,1 v 5 z"
|
||||
style="fill:#333333;fill-rule:evenodd" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 735 B |
11
data/theme/default/AtoZ.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2,0,0,1.2,-651.9616,-494.5316)">
|
||||
<path d="m 562.663,451.271 -1.24,-3.193 h -0.188 c -0.463,0.631 -0.926,1.174 -1.389,1.629 -0.463,0.457 -0.967,0.832 -1.514,1.125 -0.547,0.295 -1.16,0.512 -1.838,0.65 -0.682,0.143 -1.469,0.211 -2.365,0.211 -0.953,0 -1.836,-0.148 -2.648,-0.455 -0.813,-0.299 -1.516,-0.756 -2.111,-1.361 -0.596,-0.611 -1.061,-1.381 -1.396,-2.314 -0.336,-0.932 -0.506,-2.035 -0.506,-3.311 0,-2.494 0.799,-4.332 2.396,-5.518 1.598,-1.184 3.986,-1.838 7.168,-1.965 l 3.74,-0.125 v -1.766 c 0,-0.967 -0.279,-1.682 -0.842,-2.145 -0.559,-0.461 -1.344,-0.693 -2.354,-0.693 -1.01,0 -1.994,0.146 -2.953,0.441 -0.959,0.295 -1.924,0.688 -2.891,1.178 l -2.08,-4.246 c 1.178,-0.658 2.48,-1.177 3.908,-1.554 1.43,-0.379 2.93,-0.568 4.498,-0.568 2.93,0 5.174,0.688 6.736,2.06 1.563,1.373 2.344,3.461 2.344,6.264 v 15.658 h -4.477 v -0.002 z m -1.891,-10.887 -2.123,0.084 c -0.854,0.027 -1.578,0.141 -2.164,0.336 -0.59,0.195 -1.063,0.457 -1.42,0.787 -0.357,0.33 -0.615,0.721 -0.777,1.178 -0.16,0.455 -0.24,0.963 -0.24,1.523 0,0.98 0.238,1.678 0.713,2.092 0.477,0.412 1.102,0.619 1.871,0.619 0.59,0 1.135,-0.102 1.641,-0.305 0.504,-0.203 0.941,-0.504 1.313,-0.902 0.373,-0.4 0.662,-0.891 0.873,-1.471 0.211,-0.582 0.314,-1.252 0.314,-2.01 v -1.931 l -10e-4,0 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 568.976,440.552 v -4.244 h 9.549 v 4.244 h -9.549 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 592.468,451.241 h -17.279 v -3.785 l 9.607,-14.816 h -8.953 v -4.896 h 16.225 v 4.159 l -9.289,14.441 h 9.689 v 4.897 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
7
data/theme/default/Attache.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.199923,0,0,1.199923,-436.75556,-134.85476)">
|
||||
<path d="m 374.192,161.556 c -1.619,0 -3.152,-0.607 -4.269,-1.707 -1.237,-1.221 -1.877,-2.961 -1.755,-4.776 l 0.501,-7.477 c 0.198,-2.952 1.959,-6.933 4.009,-9.065 l 20.588,-21.415 c 0.854,-0.89 2.268,-0.916 3.154,-0.063 0.886,0.853 0.916,2.266 0.063,3.154 l -20.589,21.416 c -1.347,1.401 -2.644,4.331 -2.772,6.271 l -0.502,7.477 c -0.035,0.526 0.119,0.988 0.436,1.3 0.317,0.312 0.776,0.465 1.306,0.417 l 6.095,-0.496 c 1.936,-0.158 4.842,-1.497 6.219,-2.865 l 21.382,-21.251 c 0.413,-0.411 0.64,-0.957 0.637,-1.537 -0.005,-0.58 -0.236,-1.123 -0.655,-1.529 l -4.043,-3.92 c -0.874,-0.847 -2.334,-0.832 -3.189,0.037 l -16.287,16.555 c -0.512,0.521 -0.809,1.177 -0.794,1.759 0.007,0.303 0.097,0.537 0.268,0.693 0.524,0.485 1.872,0.332 2.826,-0.589 l 12.685,-12.247 c 0.886,-0.856 2.297,-0.831 3.154,0.056 0.855,0.886 0.83,2.298 -0.057,3.153 l -12.684,12.248 c -2.605,2.517 -6.623,2.811 -8.952,0.656 -1.06,-0.979 -1.664,-2.352 -1.7,-3.865 -0.043,-1.788 0.713,-3.608 2.072,-4.992 l 16.289,-16.556 c 2.582,-2.623 6.83,-2.675 9.475,-0.111 l 4.043,3.92 c 1.285,1.246 2,2.917 2.01,4.705 0.012,1.788 -0.682,3.467 -1.952,4.729 l -21.382,21.25 c -2.098,2.086 -6.053,3.907 -9.002,4.148 l -6.094,0.496 c -0.18,0.013 -0.358,0.021 -0.534,0.021 l 0,0 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
13
data/theme/default/CaseSensitive.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata>
|
||||
<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>
|
||||
<path d="M57.268,52.064,55.78,48.233h-0.2256c-0.5556,0.7572-1.1112,1.4088-1.6668,1.9548-0.5556,0.5484-1.1604,0.9984-1.8168,1.35-0.6564,0.354-1.392,0.6144-2.2056,0.78-0.8184,0.1716-1.7628,0.2532-2.838,0.2532-1.1436,0-2.2032-0.1776-3.1776-0.546-0.9756-0.3588-1.8192-0.9072-2.5332-1.6332-0.7152-0.7332-1.2732-1.6572-1.6752-2.7768-0.4032-1.1184-0.6072-2.442-0.6072-3.9732,0-2.9928,0.9588-5.1984,2.8752-6.6216,1.9176-1.4208,4.7832-2.2056,8.6016-2.358l4.488-0.15v-2.1192c0-1.1604-0.3348-2.0184-1.0104-2.574-0.6708-0.5532-1.6128-0.8316-2.8248-0.8316s-2.3928,0.1752-3.5436,0.5292-2.3088,0.8256-3.4692,1.4136l-2.496-5.0952c1.4136-0.7896,2.976-1.4124,4.6896-1.8648,1.716-0.4548,3.516-0.6816,5.3976-0.6816,3.516,0,6.2088,0.8256,8.0832,2.472,1.8756,1.6476,2.8128,4.1532,2.8128,7.5168v18.79h-5.3724v-0.0024zm-0.781-9.233-2.548,0.101c-1.0248,0.0324-1.8936,0.1692-2.5968,0.4032-0.708,0.234-1.2756,0.5484-1.704,0.9444s-0.738,0.8652-0.9324,1.4136c-0.192,0.546-0.288,1.1556-0.288,1.8276,0,1.176,0.2856,2.0136,0.8556,2.5104,0.5724,0.4944,1.3224,0.7428,2.2452,0.7428,0.708,0,1.362-0.1224,1.9692-0.366,0.6048-0.2436,1.1292-0.6048,1.5756-1.0824,0.4476-0.48,0.7944-1.0692,1.0476-1.7652,0.252-0.699,0.376-1.503,0.376-2.413v-2.317h-0.0012z" fill="#333"/>
|
||||
<path d="M26,38,14,38,9,54,3,54,17,9h6l8,25h-6l-5-18-5,18h16l6,20h-6z" fill="#333"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
66
data/theme/default/ChevronLeft.svg
Normal file
@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<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"
|
||||
version="1.1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
enable-background="new 0 0 24 24"
|
||||
xml:space="preserve"
|
||||
id="svg8"
|
||||
sodipodi:docname="ChevronLeft.svg"
|
||||
inkscape:version="0.92.2 2405546, 2018-03-11"><metadata
|
||||
id="metadata14"><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><defs
|
||||
id="defs12" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1918"
|
||||
inkscape:window-height="1038"
|
||||
id="namedview10"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:zoom="27.812867"
|
||||
inkscape:cx="35.880854"
|
||||
inkscape:cy="43.550446"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="20"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8"><inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid821" /></sodipodi:namedview>
|
||||
<g
|
||||
id="Bounding_Boxes"
|
||||
transform="translate(0,40)">
|
||||
<path
|
||||
d="M 0,0 H 24 V 24 H 0 Z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none" />
|
||||
</g>
|
||||
<g
|
||||
id="Outline_1_"
|
||||
transform="matrix(4.1679329,0,0,4.1679329,-16.912008,-18.015195)">
|
||||
<path
|
||||
d="M 15.41,7.41 14,6 8,12 14,18 15.41,16.59 10.83,12 Z"
|
||||
id="path5"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
66
data/theme/default/ChevronLess.svg
Normal file
@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<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"
|
||||
version="1.1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
enable-background="new 0 0 24 24"
|
||||
xml:space="preserve"
|
||||
id="svg8"
|
||||
sodipodi:docname="ChevronLess.svg"
|
||||
inkscape:version="0.92.2 2405546, 2018-03-11"><metadata
|
||||
id="metadata14"><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="defs12" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1918"
|
||||
inkscape:window-height="1038"
|
||||
id="namedview10"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:zoom="13.906433"
|
||||
inkscape:cx="45.005732"
|
||||
inkscape:cy="37.911807"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="20"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8"><inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid821" /></sodipodi:namedview>
|
||||
<g
|
||||
id="Bounding_Boxes"
|
||||
transform="translate(0,40)">
|
||||
<path
|
||||
d="M 0,0 H 24 V 24 H 0 Z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none" />
|
||||
</g>
|
||||
<g
|
||||
id="Outline_1_"
|
||||
transform="matrix(0,4.1679329,-4.1679329,0,81.888841,-16.785655)">
|
||||
<path
|
||||
d="M 15.41,7.41 14,6 8,12 14,18 15.41,16.59 10.83,12 Z"
|
||||
id="path5"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
66
data/theme/default/ChevronMore.svg
Normal file
@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<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"
|
||||
version="1.1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
enable-background="new 0 0 24 24"
|
||||
xml:space="preserve"
|
||||
id="svg8"
|
||||
sodipodi:docname="ChevronMore.svg"
|
||||
inkscape:version="0.92.2 2405546, 2018-03-11"><metadata
|
||||
id="metadata14"><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="defs12" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1918"
|
||||
inkscape:window-height="1038"
|
||||
id="namedview10"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:zoom="13.906433"
|
||||
inkscape:cx="45.005732"
|
||||
inkscape:cy="37.911807"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="20"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8"><inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid821" /></sodipodi:namedview>
|
||||
<g
|
||||
id="Bounding_Boxes"
|
||||
transform="translate(0,40)">
|
||||
<path
|
||||
d="M 0,0 H 24 V 24 H 0 Z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none" />
|
||||
</g>
|
||||
<g
|
||||
id="Outline_1_"
|
||||
transform="matrix(0,-4.1679329,-4.1679329,0,81.888841,80.785654)">
|
||||
<path
|
||||
d="M 15.41,7.41 14,6 8,12 14,18 15.41,16.59 10.83,12 Z"
|
||||
id="path5"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
66
data/theme/default/ChevronRight.svg
Normal file
@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<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"
|
||||
version="1.1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
enable-background="new 0 0 24 24"
|
||||
xml:space="preserve"
|
||||
id="svg8"
|
||||
sodipodi:docname="ChevronRight.svg"
|
||||
inkscape:version="0.92.2 2405546, 2018-03-11"><metadata
|
||||
id="metadata14"><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="defs12" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1918"
|
||||
inkscape:window-height="1038"
|
||||
id="namedview10"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:zoom="27.812867"
|
||||
inkscape:cx="35.880854"
|
||||
inkscape:cy="43.550446"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="20"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8"><inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid821" /></sodipodi:namedview>
|
||||
<g
|
||||
id="Bounding_Boxes"
|
||||
transform="translate(0,40)">
|
||||
<path
|
||||
d="M 0,0 H 24 V 24 H 0 Z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none" />
|
||||
</g>
|
||||
<g
|
||||
id="Outline_1_"
|
||||
transform="matrix(-4.1679329,0,0,4.1679329,80.659301,-18.015195)">
|
||||
<path
|
||||
d="M 15.41,7.41 14,6 8,12 14,18 15.41,16.59 10.83,12 Z"
|
||||
id="path5"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
9
data/theme/default/Close.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2,0,0,1.2,-579.7336,-495.3904)">
|
||||
<path d="m 514.172,439.484 4.041,-4.041 c 0.26,-0.26 0.404,-0.605 0.404,-0.975 0,-0.371 -0.143,-0.717 -0.404,-0.977 l -2.441,-2.443 c -0.521,-0.521 -1.434,-0.52 -1.949,0 l -4.044,4.043 -4.043,-4.043 c -0.52,-0.52 -1.429,-0.52 -1.949,0 l -2.443,2.443 c -0.26,0.26 -0.402,0.605 -0.402,0.975 0,0.37 0.143,0.717 0.402,0.977 l 4.043,4.041 -4.041,4.041 c -0.261,0.26 -0.404,0.605 -0.404,0.975 0,0.371 0.143,0.717 0.402,0.979 l 2.444,2.443 c 0.521,0.52 1.429,0.52 1.95,-0.002 l 4.041,-4.041 4.042,4.041 c 0.26,0.26 0.605,0.404 0.975,0.404 0.37,0 0.715,-0.145 0.975,-0.404 l 2.441,-2.439 c 0.262,-0.262 0.406,-0.609 0.406,-0.98 0,-0.369 -0.145,-0.717 -0.404,-0.973 l -4.042,-4.044 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 509.778,425.027 c 7.976,0 14.464,6.488 14.464,14.465 0,7.975 -6.488,14.463 -14.464,14.463 -7.975,0 -14.464,-6.488 -14.464,-14.463 0,-7.976 6.489,-14.465 14.464,-14.465 m 0,-8.035 c -12.426,0 -22.5,10.073 -22.5,22.5 0,12.426 10.074,22.5 22.5,22.5 12.427,0 22.5,-10.074 22.5,-22.5 -10e-4,-12.428 -10.073,-22.5 -22.5,-22.5 l 0,0 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
14
data/theme/default/Contact.svg
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.1999733,0,0,1.1999733,-436.77498,-206.48907)">
|
||||
<path d="m 412.51,211.853 c 0.354,0.375 0.645,0.26 0.645,-0.256 v -24.754 c 0,-0.516 -0.321,-0.664 -0.714,-0.329 l -12.536,10.671 c -0.394,0.334 -0.425,0.914 -0.07,1.289 l 12.675,13.379 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 410.761,184.249 c 0.394,-0.334 0.292,-0.607 -0.223,-0.607 h -40.092 c -0.515,0 -0.614,0.271 -0.219,0.602 l 19.701,16.524 c 0.396,0.331 1.041,0.329 1.434,-0.006 l 19.399,-16.513 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 368.154,211.597 c 0,0.516 0.29,0.631 0.645,0.256 l 12.625,-13.326 c 0.354,-0.375 0.321,-0.951 -0.074,-1.283 l -12.477,-10.465 c -0.396,-0.332 -0.719,-0.181 -0.719,0.335 v 24.483 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 392.28,203.674 c -0.393,0.335 -0.979,0.759 -1.302,0.943 0,0 0,0 -0.324,0 -0.321,0 -0.321,0 -0.321,0 -0.32,-0.181 -0.905,-0.6 -1.301,-0.931 l -4.086,-3.428 c -0.396,-0.332 -1.009,-0.297 -1.363,0.078 l -12.847,13.561 c -0.354,0.375 -0.223,0.682 0.293,0.682 h 39.25 c 0.516,0 0.647,-0.307 0.293,-0.682 l -12.883,-13.599 c -0.354,-0.374 -0.966,-0.407 -1.358,-0.073 l -4.051,3.449 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
14
data/theme/default/Down.svg
Normal file
@ -0,0 +1,14 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata>
|
||||
<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 transform="matrix(0,1.2,-1.2,0,631.9838,-722.6014)">
|
||||
<polygon points="629.89,509.46,607.39,509.46,607.39,490.51,629.89,490.51,629.89,481.04,652.39,499.94,629.89,518.93" fill="#333"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 638 B |
7
data/theme/default/FavoriteDisable.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2136037,0,0,1.2136037,-732.43441,-64.413778)">
|
||||
<path d="m 617.617,100.868 c -0.703,0 -1.336,-0.279 -1.781,-0.785 -0.496,-0.56 -0.707,-1.346 -0.6,-2.215 l 1.354,-10.822 c 0.074,-0.585 -0.262,-1.62 -0.666,-2.049 l -7.453,-7.961 c -0.742,-0.792 -1.004,-1.754 -0.717,-2.637 0.287,-0.883 1.063,-1.508 2.129,-1.712 l 10.709,-2.056 c 0.578,-0.111 1.459,-0.752 1.746,-1.27 l 5.08,-9.213 c 0.199,-0.404 0.988,-1.78 2.469,-1.78 1.557,0 2.383,1.58 2.531,1.897 l 5.02,9.097 c 0.285,0.517 1.168,1.157 1.746,1.269 l 10.709,2.056 c 1.066,0.205 1.842,0.829 2.129,1.712 0.287,0.883 0.025,1.844 -0.717,2.637 l -7.453,7.96 c -0.404,0.43 -0.74,1.465 -0.668,2.051 l 1.352,10.822 c 0.109,0.866 -0.102,1.652 -0.596,2.213 -0.723,0.816 -1.939,1.017 -3.1,0.475 l -9.873,-4.633 c -0.197,-0.092 -0.582,-0.189 -1.08,-0.189 -0.498,0 -0.883,0.098 -1.078,0.188 l -9.873,4.633 c -0.444,0.207 -0.887,0.312 -1.319,0.312 l 0,0 z m 12.27,-8.239 c 0.883,0 1.734,0.172 2.398,0.484 l 9.057,4.249 -1.238,-9.932 c -0.186,-1.498 0.451,-3.457 1.482,-4.557 l 6.84,-7.304 -9.828,-1.891 c -1.48,-0.284 -3.148,-1.495 -3.879,-2.817 l -4.832,-8.764 -4.832,8.763 c -0.73,1.323 -2.396,2.534 -3.879,2.818 l -9.824,1.887 6.838,7.309 c 1.031,1.101 1.668,3.06 1.48,4.558 l -1.242,9.928 9.063,-4.247 c 0.663,-0.312 1.515,-0.484 2.396,-0.484 l 0,0 z"
|
||||
style="fill:#333369" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
9
data/theme/default/FavoriteEnable.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.1999726,0,0,1.1999726,-723.8473,-206.71515)">
|
||||
<path d="m 617.479,220.601 c -0.711,0 -1.352,-0.282 -1.803,-0.794 -0.5,-0.566 -0.715,-1.361 -0.605,-2.24 l 1.369,-10.944 c 0.074,-0.592 -0.266,-1.638 -0.674,-2.073 l -7.539,-8.051 c -0.75,-0.801 -1.016,-1.773 -0.725,-2.667 0.291,-0.893 1.074,-1.524 2.152,-1.731 l 10.832,-2.08 c 0.584,-0.112 1.477,-0.76 1.766,-1.284 l 5.137,-9.317 c 0.201,-0.408 1,-1.799 2.498,-1.799 1.574,0 2.408,1.598 2.561,1.918 l 5.074,9.2 c 0.289,0.523 1.182,1.171 1.766,1.283 l 10.832,2.08 c 1.078,0.207 1.861,0.838 2.152,1.731 0.291,0.893 0.027,1.866 -0.725,2.667 l -7.539,8.05 c -0.408,0.436 -0.748,1.482 -0.674,2.075 l 1.367,10.944 c 0.109,0.876 -0.104,1.671 -0.604,2.238 -0.73,0.826 -1.961,1.028 -3.135,0.48 l -9.984,-4.685 c -0.199,-0.093 -0.588,-0.192 -1.092,-0.192 -0.504,0 -0.895,0.099 -1.092,0.191 l -9.982,4.685 c -0.45,0.209 -0.897,0.315 -1.333,0.315 l 0,0 z m 12.409,-8.331 c 0.893,0 1.752,0.174 2.424,0.489 l 9.16,4.297 -1.252,-10.044 c -0.189,-1.515 0.455,-3.496 1.498,-4.609 l 6.918,-7.387 -9.939,-1.913 c -1.498,-0.288 -3.184,-1.512 -3.922,-2.85 l -4.887,-8.863 -4.887,8.862 c -0.738,1.338 -2.426,2.563 -3.924,2.851 l -9.936,1.908 6.916,7.391 c 1.043,1.113 1.688,3.094 1.498,4.61 l -1.256,10.041 9.164,-4.295 c 0.673,-0.315 1.532,-0.488 2.425,-0.488 l 0,0 z"
|
||||
style="fill:#333369" />
|
||||
<path d="m 629.28,189.527 c 0,0 0.244,-0.523 0.607,-0.523 0.363,0 0.627,0.56 0.627,0.56 l 2.816,5.108 c 0.285,0.514 0.988,1.026 1.564,1.137 l 5.955,1.144 c 0.578,0.111 0.721,0.553 0.32,0.981 l -4.146,4.427 c -0.402,0.428 -0.67,1.256 -0.598,1.838 l 0.752,6.02 c 0.074,0.581 -0.303,0.855 -0.834,0.606 l -5.49,-2.577 c -0.533,-0.249 -1.402,-0.249 -1.934,0 l -5.49,2.577 c -0.533,0.249 -0.908,-0.024 -0.836,-0.606 l 0.754,-6.02 c 0.072,-0.582 -0.197,-1.41 -0.598,-1.838 l -4.146,-4.427 c -0.402,-0.429 -0.258,-0.871 0.318,-0.981 l 5.957,-1.144 c 0.576,-0.111 1.279,-0.623 1.564,-1.137 l 2.838,-5.145 z"
|
||||
style="fill:#333369;fill-rule:evenodd" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
9
data/theme/default/FavoriteMiddle.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2135952,0,0,1.2135952,-732.42924,-136.47014)">
|
||||
<path d="m 617.617,160.243 c -0.701,0 -1.334,-0.279 -1.781,-0.785 -0.494,-0.56 -0.707,-1.346 -0.598,-2.215 l 1.354,-10.822 c 0.072,-0.585 -0.264,-1.62 -0.668,-2.049 l -7.453,-7.961 c -0.742,-0.792 -1.004,-1.753 -0.717,-2.637 0.287,-0.883 1.063,-1.507 2.129,-1.712 l 10.709,-2.056 c 0.578,-0.111 1.461,-0.751 1.746,-1.27 l 5.08,-9.213 c 0.199,-0.404 0.99,-1.779 2.469,-1.779 1.557,0 2.383,1.58 2.531,1.896 l 5.02,9.097 c 0.287,0.517 1.168,1.158 1.746,1.269 l 10.709,2.056 c 1.066,0.205 1.842,0.829 2.129,1.712 0.287,0.883 0.027,1.845 -0.717,2.637 l -7.453,7.96 c -0.404,0.431 -0.74,1.465 -0.668,2.051 l 1.354,10.822 c 0.107,0.866 -0.104,1.652 -0.598,2.213 -0.723,0.817 -1.939,1.017 -3.1,0.475 l -9.873,-4.633 c -0.195,-0.092 -0.582,-0.19 -1.08,-0.19 -0.496,0 -0.883,0.098 -1.078,0.189 l -9.871,4.633 c -0.446,0.207 -0.889,0.312 -1.321,0.312 l 0,0 z m 12.27,-8.238 c 0.883,0 1.734,0.171 2.398,0.484 l 9.057,4.249 -1.238,-9.932 c -0.186,-1.498 0.451,-3.457 1.482,-4.557 l 6.84,-7.304 -9.828,-1.891 c -1.48,-0.285 -3.148,-1.496 -3.879,-2.818 l -4.832,-8.764 -4.832,8.763 c -0.73,1.323 -2.396,2.534 -3.877,2.819 l -9.826,1.886 6.838,7.309 c 1.031,1.101 1.668,3.06 1.48,4.559 l -1.24,9.928 9.061,-4.247 c 0.663,-0.313 1.515,-0.484 2.396,-0.484 l 0,0 z"
|
||||
style="fill:#333369" />
|
||||
<path d="m 641.045,137.83 c 0.396,-0.424 0.254,-0.861 -0.316,-0.971 l -5.891,-1.131 c -0.568,-0.109 -1.264,-0.616 -1.547,-1.124 l -2.783,-5.05 c 0,0 -0.262,-0.554 -0.621,-0.554 -0.357,0 -0.6,0.518 -0.6,0.518 l -2.805,5.087 c -0.281,0.508 -0.977,1.015 -1.547,1.124 l -5.889,1.131 c -0.57,0.11 -0.713,0.547 -0.314,0.971 l 4.098,4.377 c 0.398,0.424 0.664,1.242 0.592,1.817 l -0.744,5.952 c -0.072,0.576 0.299,0.846 0.824,0.599 l 5.43,-2.547 c 0.264,-0.123 0.609,-0.185 0.955,-0.185 0.348,0 0.693,0.062 0.957,0.185 l 5.428,2.547 c 0.133,0.062 0.254,0.091 0.363,0.091 0.322,0 0.518,-0.26 0.463,-0.69 l -0.742,-5.952 c -0.074,-0.576 0.191,-1.394 0.59,-1.817 l 4.099,-4.378 z m -9.563,-2.222 c 0.578,1.042 1.797,1.928 2.967,2.153 l 3.242,0.623 -2.256,2.408 c -0.818,0.871 -1.283,2.308 -1.135,3.49 l 0.408,3.275 -2.988,-1.402 c -0.67,-0.314 -1.367,-0.38 -1.834,-0.38 v -13.059 l 1.596,2.892 z"
|
||||
style="fill:#333369" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
4
data/theme/default/File.svg
Normal file
@ -0,0 +1,4 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<path fill="#333" d="m50.318,5.003h-21.273c-5.515,6-11.03,12-16.545,18v34.714c0.10749,1.7195,2.0191,1.2097,3.1801,1.2857h34.638c1.6346-0.23497,1.0847-2.1237,1.1818-3.284v-49.431c0.018-0.6455-0.51-1.2961-1.182-1.285z"/>
|
||||
<path fill="#FFF" d="m29.038,22.993h-14.182c4.7273-5.143,9.4547-10.286,14.182-15.429v15.429z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 544 B |
7
data/theme/default/Folder.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64px" height="64px">
|
||||
<g transform="matrix(1.199961,0,0,1.2222222,-436.76926,-579.09522)">
|
||||
<path d="m 378.923,493.986 c -1.41,0 -2.684,1.188 -2.781,2.594 l -0.932,12.574 c -0.059,0.787 -0.717,1.389 -1.495,1.389 -0.037,0 -0.075,-0.002 -0.112,-0.004 -0.826,-0.063 -1.446,-0.781 -1.385,-1.607 l 0.932,-12.566 c 0.205,-2.963 2.796,-5.379 5.773,-5.379 h 28.369 c 0,-0.465 0,-0.873 0,-1.031 0,-1.635 -1.654,-2.973 -3.309,-2.973 h -17.744 c 0,0 0,-1.193 0,-2.543 0,-1.35 -1.354,-2.453 -3.008,-2.453 h -12.07 c -1.654,0 -3.008,1.35 -3.008,3 v 30 c 0,1.65 1.354,3 3.008,3 h 37.098 c 1.655,0 3.122,-1.346 3.262,-2.99 l 1.623,-19.021 c 0.065,-0.766 -0.177,-1.459 -0.612,-1.988 h -33.609 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 793 B |
60
data/theme/default/Forbidden.svg
Normal file
@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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"
|
||||
id="svg3028"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
sodipodi:docname="Forbidden.svg">
|
||||
<metadata
|
||||
id="metadata3038">
|
||||
<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="defs3036" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1340"
|
||||
inkscape:window-height="892"
|
||||
id="namedview3034"
|
||||
showgrid="false"
|
||||
inkscape:zoom="8"
|
||||
inkscape:cx="52.794424"
|
||||
inkscape:cy="15.718112"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg3028" />
|
||||
<g
|
||||
transform="matrix(1.2,0,0,1.2,-579.7324,-351.106)"
|
||||
id="g3030">
|
||||
<path
|
||||
d="m 532.27833,319.25811 c 0,-12.427 -10.07533,-22.50311 -22.50133,-22.50311 -12.426,0 -22.5,10.073 -22.5,22.5 0,12.427 10.074,22.5 22.5,22.5 l 0.021,-8.437 c -7.755,0 -14.08298,-6.308 -14.08298,-14.063 0,-2.343 0.584,-4.55 1.602,-6.493 l 18.955,18.953 c -1.943,1.019 -4.15,1.603 -6.494,1.603 l -0.001,8.45698 c 12.426,0 22.5,-10.09298 22.5,-22.51998 l -8.43744,5.9e-4 c 0,2.344 -0.58356,4.54941 -1.60156,6.49441 l -18.955,-18.955 c 1.945,-1.019 4.151,-1.603 6.494,-1.603 7.754,10e-4 14.063,6.309 14.063,14.063 z"
|
||||
style="fill:#333333"
|
||||
id="path3032"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssccsccccccccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
7
data/theme/default/Help.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2,0,0,1.2,-579.7336,-711.5908)">
|
||||
<path d="m 509.778,597.159 c -12.427,0 -22.5,10.074 -22.5,22.5 0,12.428 10.073,22.5 22.5,22.5 12.427,0 22.5,-10.072 22.5,-22.5 -10e-4,-12.426 -10.073,-22.5 -22.5,-22.5 z m -0.559,36.414 c -1.676,0 -3.054,-1.379 -3.054,-3.055 0,-1.676 1.378,-3.053 3.054,-3.053 1.677,0 3.054,1.377 3.054,3.053 0,1.676 -1.377,3.055 -3.054,3.055 z m 2.904,-11.791 c -0.892,1.305 -0.594,3.129 -3.052,3.129 -1.602,0 -2.385,-1.305 -2.385,-2.496 0,-4.432 6.519,-5.436 6.519,-9.086 0,-2.012 -1.34,-3.203 -3.576,-3.203 -4.767,0 -2.905,4.916 -6.518,4.916 -1.304,0 -2.421,-0.783 -2.421,-2.271 0,-3.65 4.172,-6.891 8.714,-6.891 4.769,0 9.46,2.197 9.46,7.449 10e-4,4.842 -5.55,6.703 -6.741,8.453 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 857 B |
11
data/theme/default/Home.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.1999968,0,0,1.3606385,-147.9521,-648.3007)">
|
||||
<path d="m 170.351,504.021 c -0.343,0.365 -0.922,0.385 -1.288,0.043 L 150.392,486.63 c -0.365,-0.342 -0.966,-0.342 -1.332,0 l -18.204,16.97 c -0.367,0.344 -0.945,0.322 -1.287,-0.045 l -1.865,-2 c -0.342,-0.365 -0.321,-0.945 0.045,-1.287 l 21.313,-19.869 c 0.367,-0.342 0.967,-0.342 1.334,0.002 l 21.777,20.334 c 0.365,0.342 0.386,0.922 0.043,1.289 l -1.865,1.997 z"
|
||||
style="fill:#333333"/>
|
||||
<path d="m 149.725,489.777 -15.345,14.305 v 14.83 c 0,0.504 0.414,0.918 0.919,0.918 h 10.085 v -12.857 c 0,-0.504 0.414,-0.918 0.919,-0.918 h 7.347 c 0.506,0 0.918,0.414 0.918,0.918 v 12.857 h 10.119 c 0.505,0 0.918,-0.414 0.918,-0.918 v -14.307 l -15.88,-14.828 z"
|
||||
style="fill:#333333"/>
|
||||
<path d="m 165.543,482.311 c 0,-0.506 -0.414,-0.92 -0.919,-0.92 h -5.51 c -0.505,0 -0.918,0.414 -0.918,0.92 v 1.604 l 7.347,6.918 v -8.522 z"
|
||||
style="fill:#333333"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
7
data/theme/default/Info.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2,0,0,1.2,-579.7336,-639.148)">
|
||||
<path d="m 509.778,536.79 c -12.427,0 -22.5,10.074 -22.5,22.5 0,12.428 10.073,22.5 22.5,22.5 12.426,0 22.5,-10.072 22.5,-22.5 0,-12.426 -10.074,-22.5 -22.5,-22.5 z m 3.749,35.66 c 0,0.516 -0.422,0.938 -0.937,0.938 h -5.625 c -0.516,0 -0.938,-0.422 -0.938,-0.938 v -15 c 0,-0.514 0.422,-0.938 0.938,-0.938 h 5.625 c 0.515,0 0.937,0.424 0.937,0.938 v 15 z m 0,-19.758 c 0,0.516 -0.422,0.938 -0.937,0.938 h -5.625 c -0.516,0 -0.938,-0.422 -0.938,-0.938 v -6.563 c 0,-0.516 0.422,-0.938 0.938,-0.938 h 5.625 c 0.515,0 0.937,0.422 0.937,0.938 v 6.563 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 736 B |
11
data/theme/default/List.svg
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.1999733,0,0,1.1999733,-364.43055,-494.42419)">
|
||||
<path d="m 352.572,429.142 c 0,0.494 -0.406,0.9 -0.9,0.9 h -43.201 c -0.494,0 -0.9,-0.406 -0.9,-0.9 v -8.099 c 0,-0.496 0.406,-0.9 0.9,-0.9 h 43.201 c 0.494,0 0.9,0.404 0.9,0.9 v 8.099 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 352.572,443.542 c 0,0.494 -0.406,0.9 -0.9,0.9 h -43.201 c -0.494,0 -0.9,-0.406 -0.9,-0.9 v -8.1 c 0,-0.496 0.406,-0.9 0.9,-0.9 h 43.201 c 0.494,0 0.9,0.404 0.9,0.9 v 8.1 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 352.572,457.942 c 0,0.494 -0.406,0.898 -0.9,0.898 h -43.201 c -0.494,0 -0.9,-0.404 -0.9,-0.898 v -8.102 c 0,-0.494 0.406,-0.898 0.9,-0.898 h 43.201 c 0.494,0 0.9,0.404 0.9,0.898 v 8.102 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 842 B |
7
data/theme/default/Load.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.1818182,0,0,1.2857143,-429.68201,-454.27086)">
|
||||
<path d="m 406.154,357.213 h -18 l -14,14 v 27 c 0,0.55 0.449,1 1,1 h 11 v -11 h -4 c -1.1,0 -1.418,-0.688 -0.709,-1.526 l 8.416,-9.947 c 0.711,-0.84 1.875,-0.84 2.584,0 l 8.416,9.947 c 0.711,0.839 0.393,1.526 -0.707,1.526 h -4 v 11 h 10 c 0.549,0 1,-0.45 1,-1 v -40 c 0,-0.551 -0.451,-1 -1,-1 z m -18,14 h -12 l 12,-12 v 12 z"
|
||||
style="fill:#333333"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 529 B |
7
data/theme/default/Lock.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2,0,0,1.2,-3.2008856,-206.932)">
|
||||
<path d="m 43.688,193.586 h -1.077 v -8.353 c 0,-4.743 -3.881,-8.623 -8.623,-8.623 h -8.623 c -4.742,0 -8.623,3.88 -8.623,8.623 v 8.353 h -1.078 c -1.778,0 -3.232,1.455 -3.232,3.234 v 21.557 c 0,1.778 1.454,3.233 3.232,3.233 h 28.024 c 1.779,0 3.233,-1.455 3.233,-3.233 V 196.82 c 10e-4,-1.779 -1.453,-3.234 -3.233,-3.234 z m -11.856,14.928 v 6.81 h -4.311 v -6.81 c -1.413,-0.769 -2.383,-2.248 -2.383,-3.969 0,-2.506 2.031,-4.538 4.538,-4.538 2.505,0 4.536,2.032 4.536,4.538 10e-4,1.721 -0.968,3.2 -2.38,3.969 z m 4.516,-14.928 H 23.006 v -7.545 c 0,-2.371 1.938,-4.31 4.311,-4.31 h 4.721 c 2.37,0 4.311,1.939 4.311,4.31 v 7.545 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 821 B |
7
data/theme/default/Next.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2,0,0,1.2,-723.8644,-566.7208)">
|
||||
<polygon points="629.887,481.039 652.387,499.941 629.887,518.934 629.887,509.459 607.387,509.459 607.387,490.512 629.887,490.512 "
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 322 B |
9
data/theme/default/OpenMenu.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2,0,0,1.2,-579.7336,-421.8556)">
|
||||
<path d="m 509.778,363.895 c 7.908,0 14.318,6.411 14.318,14.318 0,7.907 -6.41,14.318 -14.318,14.318 -7.908,0 -14.318,-6.411 -14.318,-14.318 0,-7.907 6.41,-14.318 14.318,-14.318 m 0,-8.182 c -12.406,0 -22.5,10.094 -22.5,22.5 0,12.406 10.094,22.5 22.5,22.5 12.406,0 22.5,-10.094 22.5,-22.5 0,-12.406 -10.094,-22.5 -22.5,-22.5 l 0,0 z"
|
||||
style="fill:#333333" />
|
||||
<polygon points="498.698,373.228 509.778,387.162 520.857,373.228 "
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 625 B |
61
data/theme/default/Parameter.svg
Normal file
@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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"
|
||||
height="64"
|
||||
width="64"
|
||||
version="1.1"
|
||||
id="svg3026"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
sodipodi:docname="Parameter.svg">
|
||||
<defs
|
||||
id="defs3034" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="968"
|
||||
id="namedview3032"
|
||||
showgrid="true"
|
||||
showguides="false"
|
||||
inkscape:zoom="10.429825"
|
||||
inkscape:cx="15.854083"
|
||||
inkscape:cy="35.324394"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3026">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3036" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata3028">
|
||||
<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>
|
||||
<path
|
||||
style="color:#000000;fill:#333333;enable-background:accumulate"
|
||||
d="m 4,51 c 6,-6 6,-6 6,-6 l 9,0 0,9 -6,6 C 23,63 28,51 26,45 33.5363,37.4993 38.48,32.485 46,25 52,27 63,24 60,14 L 55,19 45,19 45,9 50,4 C 40,1 37,12 39,18 31.467,25.472 26.513,30.476 19,38 13,36 1,41 4,51 z"
|
||||
id="path3030"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccc" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
7
data/theme/default/Previous.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(-1.2,0,0,1.2,787.8644,-566.7208)">
|
||||
<polygon points="652.387,499.941 629.887,518.934 629.887,509.459 607.387,509.459 607.387,490.512 629.887,490.512 629.887,481.039 "
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 322 B |
9
data/theme/default/Quit.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2000267,0,0,1.2000267,-3.5226163,-279.15673)">
|
||||
<path d="m 36.314,239.696 v 8.396 c 4.282,2.353 7.191,6.905 7.191,12.126 0,7.626 -6.203,13.829 -13.829,13.829 -7.626,0 -13.829,-6.203 -13.829,-13.829 0,-5.221 2.91,-9.773 7.191,-12.126 v -8.396 c -8.664,2.802 -14.936,10.925 -14.936,20.522 0,11.915 9.658,21.573 21.573,21.573 11.915,0 21.573,-9.658 21.573,-21.573 0.002,-9.596 -6.269,-17.72 -14.934,-20.522 z"
|
||||
style="fill:#333333"/>
|
||||
<path d="m 32.998,256.706 c 0,1.218 -0.995,2.213 -2.213,2.213 h -2.217 c -1.218,0 -2.213,-0.995 -2.213,-2.213 v -17.701 c 0,-1.218 0.995,-2.213 2.213,-2.213 h 2.217 c 1.218,0 2.213,0.995 2.213,2.213 v 17.701 z"
|
||||
style="fill:#333333"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 804 B |
12
data/theme/default/Redo.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.3012048,0,0,1.255814,-631.32431,-293.62251)">
|
||||
<circle d="m 514.52701,259.29199 c 0,2.20914 -1.79086,4 -4,4 -2.20914,0 -4,-1.79086 -4,-4 0,-2.20914 1.79086,-4 4,-4 2.20914,0 4,1.79086 4,4 z"
|
||||
style="fill:#333333"
|
||||
cx="510.52701"
|
||||
cy="259.29199"
|
||||
r="4"/>
|
||||
<path d="m 530.527,254.292 v -13 l -4.098,3.514 c -4.137,-4.393 -10.08,-7.014 -15.902,-7.014 -11.855,0 -21.5,9.646 -21.5,21.5 0,11.854 9.645,21.5 21.5,21.5 8.551,0 16.287,-5.064 19.711,-12.902 l -6.416,-2.801 c -2.309,5.287 -7.527,8.703 -13.295,8.703 -7.996,0 -14.5,-6.504 -14.5,-14.5 0,-7.994 6.504,-14.5 14.5,-14.5 3.824,0 7.744,1.715 10.568,4.584 l -4.568,3.916 14,1 z"
|
||||
style="fill:#333333"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 818 B |
7
data/theme/default/Remove.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2000267,0,0,1.2000267,-651.9777,-351.11481)">
|
||||
<path d="m 579.088,319.255 12.91,-12.908 c 0.627,-0.627 0.627,-1.654 0,-2.281 l -6.84,-6.842 c -0.627,-0.625 -1.652,-0.625 -2.279,0 l -12.91,12.91 -12.91,-12.91 c -0.627,-0.625 -1.654,-0.625 -2.281,0 l -6.84,6.842 c -0.625,0.627 -0.625,1.654 0,2.281 l 12.91,12.908 -12.908,12.908 c -0.627,0.627 -0.627,1.654 0,2.281 l 6.84,6.842 c 0.627,0.625 1.654,0.625 2.281,0 l 12.908,-12.91 12.908,12.91 c 0.627,0.625 1.652,0.625 2.279,0 l 6.84,-6.842 c 0.627,-0.627 0.627,-1.654 0,-2.281 l -12.908,-12.908 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 699 B |
63
data/theme/default/Remove2.svg
Normal file
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<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"
|
||||
id="svg3028"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.3.1 r9886"
|
||||
sodipodi:docname="Remove2.svg">
|
||||
<metadata
|
||||
id="metadata3038">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs3036" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="968"
|
||||
id="namedview3034"
|
||||
showgrid="true"
|
||||
inkscape:zoom="9.0377085"
|
||||
inkscape:cx="14.895958"
|
||||
inkscape:cy="28.796248"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3028">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3040" />
|
||||
</sodipodi:namedview>
|
||||
<g
|
||||
transform="matrix(1.2000267,0,0,1.2000267,-651.9777,-351.11481)"
|
||||
id="g3030">
|
||||
<path
|
||||
d="m 576.63525,319.25524 15.35699,-15.27674 c 0.627,-0.627 0.627,-1.654 0,-2.281 l -4.29338,-4.3352 c -0.627,-0.625 -1.652,-0.625 -2.279,0 l -15.45113,15.22642 -15.83298,-15.45692 c -0.627,-0.625 -1.654,-0.625 -2.281,0 l -3.9859,4.00946 c -0.625,0.627 -0.625,1.654 0,2.281 l 15.43337,15.83298 -15.31612,15.67389 c -0.61972,0.63419 -0.627,1.654 0,2.281 l 4.14303,4.07587 c 0.627,0.625 1.654,0.625 2.281,0 l 15.5586,-15.36424 16.05393,15.36226 c 0.627,0.625 1.652,0.625 2.279,0 l 3.69434,-4.06095 c 0.627,-0.627 0.62038,-1.64745 0,-2.281 z"
|
||||
style="fill:#fe0000;fill-opacity:0.88627452"
|
||||
id="path3032"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccscccccccsc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
15
data/theme/default/Replace.svg
Normal file
@ -0,0 +1,15 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata>
|
||||
<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>
|
||||
<path d="M56.308,30.297c-0.34-11.332-7.1-21.282-17.44-25.505-10.575-4.3193-22.883-1.4808-30.624,7.062l6.7808,6.444c5.1608-5.6978,13.367-7.5874,20.417-4.7076,6.802,2.7782,11.249,9.2808,11.584,16.709l-6.7794,0.0046,11.511,14.941,10.893-14.949-6.3435-0.000321z" fill="#333"/>
|
||||
<g transform="matrix(0.71188026,0,0,0.77215001,-386.35967,-207.86869)">
|
||||
<path fill="#333" d="m579.09,319.26,12.91-12.908c0.627-0.627,0.627-1.654,0-2.281l-6.84-6.842c-0.627-0.625-1.652-0.625-2.279,0l-12.91,12.91-12.91-12.91c-0.627-0.625-1.654-0.625-2.281,0l-6.84,6.842c-0.625,0.627-0.625,1.654,0,2.281l12.91,12.908-12.908,12.908c-0.627,0.627-0.627,1.654,0,2.281l6.84,6.842c0.627,0.625,1.654,0.625,2.281,0l12.908-12.91,12.908,12.91c0.627,0.625,1.652,0.625,2.279,0l6.84-6.842c0.627-0.627,0.627-1.654,0-2.281l-12.908-12.908z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
7
data/theme/default/SDCard.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.1999941,0,0,1.2,-75.451168,-351.106)">
|
||||
<path d="m 104.793,296.755 h -24.75 c -1.237,0 -2.25,1.013 -2.25,2.25 v 9 c 0,1.237 -0.562,3.093 -1.248,4.122 l -2.004,3.005 c -0.687,1.029 -1.248,2.885 -1.248,4.123 0,1.236 0.905,1.797 2.013,1.244 l 0.475,-0.238 c 1.107,-0.554 2.013,0.006 2.013,1.244 v 2.25 c 0,1.236 -0.717,2.967 -1.591,3.84 l -1.318,1.318 c -0.874,0.875 -1.591,2.604 -1.591,3.842 v 6.75 c 0,1.236 1.013,2.25 2.25,2.25 h 24.75 c 4.359,0 6.75,-2.25 6.75,-6.75 v -36 c -10e-4,-1.237 -1.014,-2.25 -2.251,-2.25 z m -20.25,13 c 0,0.275 -0.225,0.5 -0.5,0.5 h -1.25 c -0.275,0 -0.5,-0.225 -0.5,-0.5 v -8 c 0,-0.275 0.225,-0.5 0.5,-0.5 h 1.25 c 0.275,0 0.5,0.225 0.5,0.5 v 8 z m 4.5,0 c 0,0.275 -0.225,0.5 -0.5,0.5 h -1.25 c -0.275,0 -0.5,-0.225 -0.5,-0.5 v -8 c 0,-0.275 0.225,-0.5 0.5,-0.5 h 1.25 c 0.275,0 0.5,0.225 0.5,0.5 v 8 z m 4.5,0 c 0,0.275 -0.225,0.5 -0.5,0.5 h -1.25 c -0.275,0 -0.5,-0.225 -0.5,-0.5 v -8 c 0,-0.275 0.225,-0.5 0.5,-0.5 h 1.25 c 0.275,0 0.5,0.225 0.5,0.5 v 8 z m 4.5,0 c 0,0.275 -0.225,0.5 -0.5,0.5 h -1.25 c -0.275,0 -0.5,-0.225 -0.5,-0.5 v -8 c 0,-0.275 0.225,-0.5 0.5,-0.5 h 1.25 c 0.275,0 0.5,0.225 0.5,0.5 v 8 z m 4.5,0 c 0,0.275 -0.225,0.5 -0.5,0.5 h -1.25 c -0.275,0 -0.5,-0.225 -0.5,-0.5 v -8 c 0,-0.275 0.225,-0.5 0.5,-0.5 h 1.25 c 0.275,0 0.5,0.225 0.5,0.5 v 8 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
16
data/theme/default/Save.svg
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64px" height="64px">
|
||||
<g transform="matrix(1.2,0,0,1.2000267,-436.7836,-495.40152)">
|
||||
<rect style="fill:#333333"
|
||||
x="386.36899"
|
||||
y="419.13501"
|
||||
width="8.5719995"
|
||||
height="10.714"
|
||||
/>
|
||||
<path style="fill:#333333"
|
||||
d="m 403.435,416.992 h -3.139 v 16.071 h -25.713 v -16.071 h -5.893 c -0.295,0 -0.537,0.241 -0.537,0.535 v 43.929 c 0,0.295 0.242,0.535 0.537,0.535 h 43.928 c 0.295,0 0.535,-0.24 0.535,-0.535 V 426.71 l -9.718,-9.718 z m 3.291,41.784 h -32.143 v -21.428 h 32.143 v 21.428 z"
|
||||
/>
|
||||
<polygon style="fill:#333333" points="403.511,445.921 403.511,445.921 377.798,445.921 377.798,442.706 403.511,442.706 " />
|
||||
<polygon style="fill:#333333" points="403.511,453.421 403.511,453.421 377.798,453.421 377.798,450.206 403.511,450.206 " />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 859 B |
49
data/theme/default/Search.svg
Normal file
@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg height="64"
|
||||
width="64" >
|
||||
<metadata
|
||||
id="metadata3975">
|
||||
<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="defs3973" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="968"
|
||||
id="namedview3971"
|
||||
showgrid="false"
|
||||
inkscape:zoom="16"
|
||||
inkscape:cx="27.03623"
|
||||
inkscape:cy="33.687368"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3965" />
|
||||
<path
|
||||
d="M 39.436904,24.062448 C 39.915614,33.278293 29.16429,41.203307 19.736168,37.727362 10.452887,34.884476 6.7103607,23.258769 12.262163,15.90798 17.329733,7.8698857 31.048441,7.5763012 36.47627,15.419465 c 1.929199,2.496703 2.965789,5.568455 2.960389,8.64209 z"
|
||||
id="path3969"
|
||||
style="fill:#ffffff;fill-opacity:0.87450981"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="M 58.168,50.56 46.013,38.407 c -0.91442,-0.91442 -2.3016,-1.0644 -3.3865,-0.47161 l -2.592,-2.592 c 2.208,-3.1357 3.5185,-6.9493 3.5185,-11.068 0,-10.629 -8.6485,-19.276 -19.277,-19.276 -10.629,0 -19.276,8.6461 -19.276,19.276 0,10.6299 8.6461,19.277 19.276,19.277 4.1017,0 7.8985,-1.296 11.026,-3.4873 0,0 0.596082,-5.606306 -5.038478,-5.016691 -4.69706,2.902115 -12.054397,2.017375 -15.875086,-3.769003 -3.142722,-4.56604 -2.630816,-13.100523 2.668347,-16.731928 5.299163,-3.631405 14.142128,-3.981951 18.471312,4.363412 2.363082,6.040278 0.78609,12.603632 -5.311526,16.1632 7.665096,7.559567 7.694231,7.60221 7.694231,7.60221 -0.56041,1.0752 -0.40321,2.4348 0.49681,3.3373 l 12.155,12.153 c 1.1088,1.1112 2.9268,1.1112 4.0357,0 l 3.5725,-3.5701 c 1.1064,-1.1088 1.1064,-2.9256 -0.0024,-4.0369 z"
|
||||
id="path3967"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#333333"
|
||||
sodipodi:nodetypes="ccccssssccczccccccccc" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
9
data/theme/default/Trash.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2,0,0,1.2,-436.9344,-711.5908)">
|
||||
<path d="m 408.302,604.218 h -7.95 c 0.002,-0.055 0.009,-0.109 0.009,-0.166 v -1.6 c 0,-2.91 -2.384,-5.293 -5.294,-5.293 h -8.824 c -2.912,0 -5.294,2.383 -5.294,5.293 v 1.6 c 0,0.057 0.007,0.111 0.009,0.166 h -7.95 c -1.456,0 -2.646,1.191 -2.646,2.646 v 2.646 c 0,1.457 1.19,2.648 2.646,2.648 h 0.883 v -1.766 h 33.529 v 1.766 h 0.883 c 1.455,0 2.646,-1.191 2.646,-2.648 v -2.646 c -0.001,-1.455 -1.192,-2.646 -2.647,-2.646 z m -22.969,-2.647 h 10.588 v 2.646 h -10.588 v -2.646 z"
|
||||
style="fill:#333333"/>
|
||||
<path d="m 375.654,613.042 v 26.469 c 0,1.457 1.19,2.648 2.647,2.648 h 24.705 c 1.456,0 2.647,-1.191 2.647,-2.648 v -26.469 h -29.999 z m 8.824,23.381 c 0,0.486 -0.397,0.883 -0.882,0.883 h -1.765 c -0.486,0 -0.883,-0.396 -0.883,-0.883 v -17.646 c 0,-0.484 0.396,-0.883 0.883,-0.883 h 1.765 c 0.484,0 0.882,0.398 0.882,0.883 v 17.646 z m 7.941,0 c 0,0.486 -0.398,0.883 -0.882,0.883 h -1.766 c -0.485,0 -0.882,-0.396 -0.882,-0.883 v -17.646 c 0,-0.484 0.396,-0.883 0.882,-0.883 h 1.766 c 0.483,0 0.882,0.398 0.882,0.883 v 17.646 z m 7.941,0 c 0,0.486 -0.398,0.883 -0.883,0.883 h -1.765 c -0.485,0 -0.882,-0.396 -0.882,-0.883 v -17.646 c 0,-0.484 0.396,-0.883 0.882,-0.883 h 1.765 c 0.484,0 0.883,0.398 0.883,0.883 v 17.646 z"
|
||||
style="fill:#333333"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
12
data/theme/default/Undo.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(-1.3012048,0,0,1.255814,695.32425,-293.62251)">
|
||||
<circle d="m 514.52701,259.29199 c 0,2.20914 -1.79086,4 -4,4 -2.20914,0 -4,-1.79086 -4,-4 0,-2.20914 1.79086,-4 4,-4 2.20914,0 4,1.79086 4,4 z"
|
||||
style="fill:#333333"
|
||||
cx="510.52701"
|
||||
cy="259.29199"
|
||||
r="4"/>
|
||||
<path d="m 530.527,254.292 v -13 l -4.098,3.514 c -4.137,-4.393 -10.08,-7.014 -15.902,-7.014 -11.855,0 -21.5,9.646 -21.5,21.5 0,11.854 9.645,21.5 21.5,21.5 8.551,0 16.287,-5.064 19.711,-12.902 l -6.416,-2.801 c -2.309,5.287 -7.527,8.703 -13.295,8.703 -7.996,0 -14.5,-6.504 -14.5,-14.5 0,-7.994 6.504,-14.5 14.5,-14.5 3.824,0 7.744,1.715 10.568,4.584 l -4.568,3.916 14,1 z"
|
||||
style="fill:#333333"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 818 B |
14
data/theme/default/Up.svg
Normal file
@ -0,0 +1,14 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata>
|
||||
<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 transform="matrix(0,-1.2,1.2,0,-567.9838,789.1274)">
|
||||
<polygon points="652.39,499.94,629.89,518.93,629.89,509.46,607.39,509.46,607.39,490.51,629.89,490.51,629.89,481.04" fill="#333"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 638 B |
9
data/theme/default/Update.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.1999733,0,0,1.1999733,-579.72065,-63.509343)">
|
||||
<path d="m 528.054,71.68 c -3.166,-7.28 -10.25,-11.956 -18.232,-11.956 -8.164,0 -15.625,5.116 -18.564,12.729 l 6.188,2.39 c 1.959,-5.077 6.934,-8.486 12.377,-8.486 5.251,0 9.9,3.048 12.05,7.791 l -4.514,1.804 11.543,6.66 3.377,-12.617 -4.225,1.685 z"
|
||||
style="fill:#333333"/>
|
||||
<path d="m 509.822,92.88 c -5.205,0 -9.952,-3.14 -12.074,-7.853 l 4.45,-1.721 -11.423,-6.515 -3.497,12.281 4.26,-1.646 c 3.106,7.252 10.357,12.084 18.284,12.084 8.193,0 15.449,-4.917 18.484,-12.524 l -6.158,-2.457 c -2.026,5.073 -6.862,8.351 -12.326,8.351 z"
|
||||
style="fill:#333333"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 744 B |
7
data/theme/default/Validate.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2,0,0,1.2,-651.9628,-63.5416)">
|
||||
<path d="m 569.969,57.117 c -12.428,0 -22.5,10.073 -22.5,22.501 0,12.426 10.072,22.5 22.5,22.5 12.426,0 22.5,-10.074 22.5,-22.5 0,-12.428 -10.074,-22.501 -22.5,-22.501 z m 11.324,21.029 -10.391,10.391 c -0.514,0.514 -1.357,0.514 -1.871,0 L 558.642,78.148 c -0.514,-0.514 -0.514,-1.355 0,-1.869 l 2.279,-2.281 c 0.867,-0.867 2.174,-0.752 2.943,0.02 l 5.166,5.164 c 0.514,0.516 1.357,0.516 1.871,0 l 5.182,-5.18 c 0.867,-0.869 2.121,-0.816 2.934,-0.002 l 2.275,2.275 c 0.515,0.513 0.515,1.357 10e-4,1.871 z"
|
||||
style="fill:#333333;fill-rule:evenodd" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 711 B |
13
data/theme/default/VolumeMax.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.300523,0,0,1.300523,-4.3338536,-458.79144)">
|
||||
<polygon points="16.142,372.236 26.103,362.274 26.103,394.151 16.142,384.189 7.177,384.189 7.177,372.236 "
|
||||
style="fill:#333333" />
|
||||
<path d="m 34.567,369.749 -2.816,2.816 c 1.447,1.446 2.344,3.444 2.344,5.647 0,2.203 -0.896,4.201 -2.344,5.646 l 2.816,2.816 c 2.168,-2.168 3.512,-5.161 3.512,-8.463 0,-3.302 -1.344,-6.293 -3.512,-8.462 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 39.704,365.025 -2.816,2.816 c 2.645,2.645 4.283,6.297 4.283,10.324 0,4.027 -1.639,7.68 -4.283,10.324 l 2.816,2.816 c 3.365,-3.367 5.451,-8.015 5.451,-13.141 0,-5.123 -2.086,-9.771 -5.451,-13.139 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 44.56,359.854 -2.816,2.816 c 3.982,3.982 6.449,9.48 6.449,15.543 0,6.063 -2.467,11.561 -6.447,15.543 l 2.814,2.816 c 4.705,-4.704 7.617,-11.197 7.617,-18.359 0,-7.162 -2.914,-13.655 -7.617,-18.359 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
9
data/theme/default/VolumeMute.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2249898,0,0,1.2249898,-3.7905268,-358.08412)">
|
||||
<polygon points="16.82,325.684 7.176,325.684 7.176,312.827 16.82,312.827 27.534,302.112 27.534,336.398 "
|
||||
style="fill:#333333" />
|
||||
<path d="m 47.081,319.255 4.918,-4.917 c 0.238,-0.24 0.238,-0.631 0,-0.87 l -2.607,-2.606 c -0.237,-0.238 -0.629,-0.238 -0.866,0 l -4.919,4.918 -4.92,-4.918 c -0.236,-0.238 -0.629,-0.238 -0.867,0 l -2.605,2.606 c -0.239,0.239 -0.239,0.63 0,0.87 l 4.917,4.917 -4.917,4.917 c -0.239,0.24 -0.239,0.632 0,0.87 l 2.607,2.607 c 0.236,0.236 0.629,0.236 0.867,0 l 4.918,-4.919 4.916,4.919 c 0.24,0.236 0.632,0.236 0.869,0 l 2.607,-2.607 c 0.236,-0.237 0.236,-0.63 0,-0.87 l -4.918,-4.917 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 820 B |
7
data/theme/default/Warning.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2000035,0,0,1.2000035,-76.201658,-63.592236)">
|
||||
<path d="M 111.858,93.287 93.524,62.64 C 91.67,59.542 88.639,59.543 86.789,62.641 L 68.476,93.286 c -1.851,3.098 -0.413,5.633 3.197,5.633 h 36.993 c 3.608,-10e-4 5.045,-2.535 3.192,-5.632 z M 88.2,73.367 c 0,-1.084 0.887,-1.969 1.969,-1.969 1.083,0 1.969,0.885 1.969,1.969 v 9.192 c 0,1.085 -0.886,1.969 -1.969,1.969 -1.082,0 -1.969,-0.884 -1.969,-1.969 v -9.192 z m 1.969,19.596 c -1.449,0 -2.625,-1.177 -2.625,-2.625 0,-1.451 1.176,-2.624 2.625,-2.624 1.45,0 2.625,1.173 2.625,2.624 0,1.449 -1.175,2.625 -2.625,2.625 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 724 B |
17
data/theme/default/WhereAmI.svg
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.2000267,0,0,1.2000267,-220.089,-63.543123)">
|
||||
<path d="m 232.569,79.617 -16.755,-3.49 2.864,-5.115 -5.023,3.029 -3.585,-16.924 -3.585,16.924 -5.023,-3.029 2.864,5.115 -16.755,3.49 h -0.001 l 0.001,0 0,0 16.755,3.49 -2.864,5.114 5.023,-3.029 3.585,16.925 3.585,-16.925 5.023,3.029 -2.864,-5.114 16.755,-3.49 0,0 0,0 0,0 z m -22.499,4.302 c -2.376,0 -4.302,-1.925 -4.302,-4.301 0,-2.375 1.926,-4.301 4.302,-4.301 2.376,0 4.302,1.926 4.302,4.301 0,2.376 -1.926,4.301 -4.302,4.301 z"
|
||||
style="fill:#451c54" />
|
||||
<g>
|
||||
<path d="m 199.03,75.203 c 1.204,-2.997 3.589,-5.393 6.58,-6.609 l 1.242,-5.866 c -6.921,1.314 -12.371,6.771 -13.676,13.694 l 5.854,-1.219 z"
|
||||
style="fill:#451c54" />
|
||||
<path d="m 221.139,84.026 c -1.204,3.017 -3.604,5.428 -6.615,6.644 l -1.24,5.861 c 6.939,-1.307 12.404,-6.779 13.703,-13.723 l -5.848,1.218 z"
|
||||
style="fill:#451c54" />
|
||||
<path d="m 214.529,68.586 c 3.002,1.214 5.396,3.615 6.603,6.622 l 5.852,1.219 C 225.679,69.495 220.22,64.032 213.289,62.725 l 1.24,5.861 z"
|
||||
style="fill:#451c54" />
|
||||
<path d="m 205.614,90.663 c -3,-1.219 -5.391,-3.624 -6.592,-6.632 l -5.85,-1.218 c 1.299,6.935 6.754,12.402 13.684,13.715 l -1.242,-5.865 z"
|
||||
style="fill:#451c54" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
13
data/theme/default/WrapAround.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata>
|
||||
<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>
|
||||
<path d="m36.594,31.471,9.9047,12.555,9.3732-12.561-9.4514,0.0011z" fill="#333"/>
|
||||
<path fill="#353535" d="m31.724,51.573c-6.6423,0-11.845-9.0656-11.845-20.048s5.203-20.048,11.845-20.048c7.389,0,12.257,7.595,11.625,20.494,3.1648,0.01798,3.0508-0.01346,7.1142-0.17954,0.674-20.911-8.501-28.985-18.739-28.985-9.0867,0-18.935,12.636-18.935,28.584s9.849,29.002,18.935,28.855"/>
|
||||
</svg>
|
After Width: | Height: | Size: 818 B |
9
data/theme/default/ZoomIn.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="64" height="64">
|
||||
<g transform="matrix(1.20002,0,0,1.20002,-651.97375,-639.15903)">
|
||||
<path d="m 591.775,574.756 -10.129,-10.127 c -0.762,-0.762 -1.918,-0.887 -2.822,-0.393 l -2.16,-2.16 c 1.84,-2.613 2.932,-5.791 2.932,-9.223 0,-8.857 -7.207,-16.063 -16.064,-16.063 -8.857,0 -16.063,7.205 -16.063,16.063 0,8.858 7.205,16.064 16.063,16.064 3.418,0 6.582,-1.08 9.188,-2.906 l 2.174,2.176 c -0.467,0.896 -0.336,2.029 0.414,2.781 l 10.129,10.127 c 0.924,0.926 2.439,0.926 3.363,0 l 2.977,-2.975 c 0.922,-0.925 0.922,-2.438 -0.002,-3.364 z m -28.244,-11.787 c -5.584,0 -10.113,-4.529 -10.113,-10.115 0,-5.584 4.529,-10.113 10.113,-10.113 5.586,0 10.115,4.529 10.115,10.113 0,5.585 -4.529,10.115 -10.115,10.115 z"
|
||||
style="fill:#333333" />
|
||||
<path d="m 568.498,550.863 h -3 v -3 c 0,-1.104 -0.895,-2 -2,-2 -1.104,0 -2,0.896 -2,2 v 3 h -3 c -1.104,0 -2,0.896 -2,2 0,1.105 0.896,2 2,2 h 3 v 3 c 0,1.105 0.896,2 2,2 1.105,0 2,-0.895 2,-2 v -3 h 3 c 1.105,0 2,-0.895 2,-2 0,-1.103 -0.894,-2 -2,-2 z"
|
||||
style="fill:#333333" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
@ -18,6 +18,6 @@
|
||||
padding-in-buttom:1,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME:GUI:Button.prog",
|
||||
color:"THEME:COLOR:Button.json"
|
||||
program:"THEME_GUI:///Button.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///Button.json?lib=ewol"
|
||||
}
|
||||
|
@ -6,6 +6,6 @@
|
||||
padding-top:10,
|
||||
padding-buttom:10,
|
||||
change-time:356,
|
||||
program:"THEME:GUI:CheckBox.prog",
|
||||
color:"THEME:COLOR:CheckBox.json"
|
||||
program:"THEME_GUI:///CheckBox.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///CheckBox.json?lib=ewol"
|
||||
}
|
||||
|
@ -18,6 +18,6 @@
|
||||
padding-in-buttom:1,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME:GUI:ContextMenu.prog",
|
||||
color:"THEME:COLOR:ContextMenu.json"
|
||||
program:"THEME_GUI:///ContextMenu.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///ContextMenu.json?lib=ewol"
|
||||
}
|
||||
|
@ -18,6 +18,6 @@
|
||||
padding-in-buttom:1,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME:GUI:Entry.prog",
|
||||
color:"THEME:COLOR:Entry.json"
|
||||
program:"THEME_GUI:///Entry.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///Entry.json?lib=ewol"
|
||||
}
|
||||
|
@ -18,6 +18,6 @@
|
||||
padding-in-buttom:1,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME:GUI:PopUp.prog",
|
||||
color:"THEME:COLOR:PopUp.json"
|
||||
program:"THEME_GUI:///PopUp.prog?lib=ewol,
|
||||
color:"THEME_COLOR:///PopUp.json?lib=ewol"
|
||||
}
|
||||
|
@ -4,6 +4,6 @@
|
||||
padding-top:16,
|
||||
padding-buttom:16,
|
||||
change-time:200,
|
||||
program:"THEME:GUI:WidgetScrolled.prog",
|
||||
color:"THEME:COLOR:WidgetScrolled.json"
|
||||
program:"THEME_GUI:///WidgetScrolled.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///WidgetScrolled.json?lib=ewol"
|
||||
}
|
||||
|
@ -18,6 +18,6 @@
|
||||
padding-in-buttom:1,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME:GUI:Button.prog",
|
||||
color:"THEME:COLOR:Button.json"
|
||||
program:"THEME_GUI:///Button.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///Button.json?lib=ewol"
|
||||
}
|
||||
|
@ -20,6 +20,6 @@
|
||||
box-size:20,
|
||||
box-inside:12,
|
||||
change-time:356,
|
||||
program:"THEME:GUI:CheckBox.prog",
|
||||
color:"THEME:COLOR:CheckBox.json"
|
||||
program:"THEME_GUI:///CheckBox.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///CheckBox.json?lib=ewol"
|
||||
}
|
@ -42,12 +42,16 @@ void main(void) {
|
||||
colorOld = EW_foregroundPressed;
|
||||
} else if(EW_status.stateOld == 2) {
|
||||
colorOld = EW_foregroundHover;
|
||||
} else if(EW_status.stateOld == 3) {
|
||||
colorOld = EW_foregroundSelected;
|
||||
}
|
||||
vec4 colorNew = EW_foreground;
|
||||
if(EW_status.stateNew == 1) {
|
||||
colorNew = EW_foregroundPressed;
|
||||
} else if(EW_status.stateNew == 2) {
|
||||
colorNew = EW_foregroundHover;
|
||||
} else if(EW_status.stateNew == 3) {
|
||||
colorNew = EW_foregroundSelected;
|
||||
}
|
||||
|
||||
v_colorInside = EW_foreground;
|
||||
@ -58,6 +62,10 @@ void main(void) {
|
||||
// note : int() is needed for the OpenGL ES platform
|
||||
v_colorTansition = colorOld * (1.0 - EW_status.transition)
|
||||
+ colorNew * EW_status.transition;
|
||||
// for test ... TODO : Remove
|
||||
if (EW_status.activate == 1) {
|
||||
v_colorTansition = EW_foregroundSelected;
|
||||
}
|
||||
v_colorBorder = EW_border;
|
||||
v_colorBackground = EW_background;
|
||||
}
|
||||
|
@ -18,6 +18,6 @@
|
||||
padding-in-buttom:2,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME:GUI:ContextMenu.prog",
|
||||
color:"THEME:COLOR:ContextMenu.json"
|
||||
program:"THEME_GUI:///ContextMenu.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///ContextMenu.json?lib=ewol"
|
||||
}
|
||||
|
@ -18,6 +18,6 @@
|
||||
padding-in-buttom:2,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME:GUI:Entry.prog",
|
||||
color:"THEME:COLOR:Entry.json"
|
||||
program:"THEME_GUI:///Entry.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///Entry.json?lib=ewol"
|
||||
}
|
||||
|
@ -18,6 +18,6 @@
|
||||
padding-in-buttom:2,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME:GUI:PopUp.prog",
|
||||
color:"THEME:COLOR:PopUp.json"
|
||||
program:"THEME_GUI:///PopUp.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///PopUp.json?lib=ewol"
|
||||
}
|
||||
|
5
data/theme/shape/square/Select.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
entry-shaper:"THEME_GUI:///SelectEntry.json?lib=ewol",
|
||||
up-shaper:"THEME_GUI:///SelectBt.json?lib=ewol",
|
||||
up-data:"<label>*</label>",
|
||||
}
|
23
data/theme/shape/square/SelectBt.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
mode:2,
|
||||
display-outside:false,
|
||||
|
||||
padding-out-left:0,
|
||||
padding-out-right:1,
|
||||
padding-out-top:1,
|
||||
padding-out-buttom:1,
|
||||
|
||||
border-left:1,
|
||||
border-right:1,
|
||||
border-top:1,
|
||||
border-buttom:1,
|
||||
|
||||
padding-in-left:1,
|
||||
padding-in-right:1,
|
||||
padding-in-top:1,
|
||||
padding-in-buttom:1,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME_GUI:///Button.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///Button.json?lib=ewol"
|
||||
}
|
23
data/theme/shape/square/SelectEntry.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
mode:2,
|
||||
display-outside:false,
|
||||
|
||||
padding-out-left:0,
|
||||
padding-out-right:0,
|
||||
padding-out-top:1,
|
||||
padding-out-buttom:1,
|
||||
|
||||
border-left:1,
|
||||
border-right:0,
|
||||
border-top:1,
|
||||
border-buttom:1,
|
||||
|
||||
padding-in-left:2,
|
||||
padding-in-right:2,
|
||||
padding-in-top:1,
|
||||
padding-in-buttom:1,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME_GUI:///Entry.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///Entry.json?lib=ewol"
|
||||
}
|
7
data/theme/shape/square/Spin.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
entry-shaper:"THEME_GUI:///SpinEntry.json?lib=ewol",
|
||||
up-shaper:"THEME_GUI:///SpinUp.json?lib=ewol",
|
||||
up-data:"<label>+</label>",
|
||||
down-shaper:"THEME_GUI:///SpinDown.json?lib=ewol",
|
||||
down-data:"<label>-</label>",
|
||||
}
|
23
data/theme/shape/square/SpinDown.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
mode:2,
|
||||
display-outside:false,
|
||||
|
||||
padding-out-left:0,
|
||||
padding-out-right:0,
|
||||
padding-out-top:1,
|
||||
padding-out-buttom:1,
|
||||
|
||||
border-left:1,
|
||||
border-right:0,
|
||||
border-top:1,
|
||||
border-buttom:1,
|
||||
|
||||
padding-in-left:1,
|
||||
padding-in-right:1,
|
||||
padding-in-top:1,
|
||||
padding-in-buttom:1,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME_GUI:///Button.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///Button.json?lib=ewol"
|
||||
}
|
23
data/theme/shape/square/SpinEntry.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
mode:2,
|
||||
display-outside:false,
|
||||
|
||||
padding-out-left:0,
|
||||
padding-out-right:0,
|
||||
padding-out-top:1,
|
||||
padding-out-buttom:1,
|
||||
|
||||
border-left:1,
|
||||
border-right:0,
|
||||
border-top:1,
|
||||
border-buttom:1,
|
||||
|
||||
padding-in-left:2,
|
||||
padding-in-right:2,
|
||||
padding-in-top:1,
|
||||
padding-in-buttom:1,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME_GUI:///Entry.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///Entry.json?lib=ewol"
|
||||
}
|
23
data/theme/shape/square/SpinUp.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
mode:2,
|
||||
display-outside:false,
|
||||
|
||||
padding-out-left:0,
|
||||
padding-out-right:0,
|
||||
padding-out-top:1,
|
||||
padding-out-buttom:1,
|
||||
|
||||
border-left:1,
|
||||
border-right:1,
|
||||
border-top:1,
|
||||
border-buttom:1,
|
||||
|
||||
padding-in-left:1,
|
||||
padding-in-right:1,
|
||||
padding-in-top:1,
|
||||
padding-in-buttom:1,
|
||||
|
||||
change-time:356,
|
||||
program:"THEME_GUI:///Button.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///Button.json?lib=ewol"
|
||||
}
|
@ -18,6 +18,6 @@
|
||||
padding-in-buttom:3,
|
||||
|
||||
change-time:200,
|
||||
program:"THEME:GUI:WidgetScrolled.prog",
|
||||
color:"THEME:COLOR:WidgetScrolled.json"
|
||||
program:"THEME_GUI:///WidgetScrolled.prog?lib=ewol",
|
||||
color:"THEME_COLOR:///WidgetScrolled.json?lib=ewol"
|
||||
}
|
||||
|
@ -1,35 +0,0 @@
|
||||
=?=EWOL: Bases =?=
|
||||
__________________________________________________
|
||||
[right][tutorial[000_Build | Next: Tutorals]][/right]
|
||||
|
||||
=== Overview:===
|
||||
EWOL is an OpenGL library for creating graphical user interfaces.
|
||||
It works on many UNIX-like platforms, Windows, and OS X and some mobile platforms Android, iOs(soon).
|
||||
EWOL is released under the APACHE-2 license, which allows for very flexible licensing of client applications.
|
||||
EWOL has a C++ architecture that allows for maximum flexibility.
|
||||
|
||||
The main idea of EWOL is to create a complete abstraction of the platforms.
|
||||
This generate some restriction that you will see an overwiew in the under section.
|
||||
|
||||
===User requires:===
|
||||
To use ewol you need to know only C++ language. It could be usefull to know:
|
||||
:** [b]Python[/b] for all build tool.
|
||||
:** [b]git[/b] for all version management
|
||||
:** [b]OpenGL-ES2[/b] if you want to create custum advenced widget.
|
||||
|
||||
=== Architecture:===
|
||||
One of the important point to know in this framwork is some of absurd things came from the multiple architecture type.
|
||||
|
||||
I will Explain the main points:
|
||||
:** IOs does [b]NOT[/b] simply support the shared object sub lib, this force ewol to be APACHE-2, and depend on some sub-library with small license restriction.
|
||||
:** Android have a JAVA main, then the application main will not be used with this platform
|
||||
:** Android event (keyboard, mouse, touch-screen and ...) will arrive in asynchron mode ==> need to be resynchronyse in one thread
|
||||
:** Only one graphyc framework is availlable on all platform. This is OpenGL
|
||||
:** Main interesting point is packaging of the application data:
|
||||
::** Linux store it in /usr/share/applName/*
|
||||
::** MacOs store it in applName.app/subFolder/*
|
||||
::** Android store it in the .pkg that is a renamed .zip that the name is dynamic
|
||||
::** Windows (TODO : Never done a pakage)
|
||||
:: This will generate a complex result of data access...
|
||||
:** Sub lib Change on all the platform, the I will use the idea of Apple, that incluse in a package all needed libs. This could be a problem for small platform, but this framwork need to have a OpenGL-ES2 instance then the memory problem, is not really a problem.
|
||||
|
53
doc/001_bases.md
Normal file
@ -0,0 +1,53 @@
|
||||
EWOL: Bases {#ewol_page_bases}
|
||||
===========
|
||||
|
||||
@tableofcontents
|
||||
|
||||
Overview: {#ewol_page_bases_overview}
|
||||
=========
|
||||
|
||||
EWOL is an OpenGL library for creating graphical user interfaces.
|
||||
It works on many UNIX-like platforms, Windows, and OS X and some mobile platforms Android, iOs.
|
||||
EWOL is released under the MPL v2.0 license, which allows for very flexible licensing of client applications.
|
||||
EWOL has a C++ architecture that allows for maximum flexibility.
|
||||
|
||||
**MPL v2.0 license limitation:** I limit myself to use only Apache2 / MIT / BSD / PNG / MPL licencing to permit to release binary on IOs.
|
||||
This I a big point, because it need to rewrite many libraries (like SVG...).
|
||||
|
||||
|
||||
The main idea of EWOL is to create a complete abstraction of the platforms.
|
||||
This generate some restriction that you will see an overwiew in the under section.
|
||||
|
||||
User requires: {#ewol_page_bases_require}
|
||||
==============
|
||||
|
||||
To use ewol you need to know only C++ language. It could be usefull to know:
|
||||
- **Python** for [lutin](http://HeeroYui.github.io/lutin) build tool.
|
||||
- **git** and **repo** for all version management.
|
||||
- **OpenGL-ES2** if you want to create custum advanced widget.
|
||||
|
||||
If you just want to have an interface of the openGl just refer to the [gale library](http://atria-soft.github.io/gale)
|
||||
|
||||
Ewol does not manage the Audio but it is full integrated in [audio-river library](http://musicdsp.github.io/audio-river).
|
||||
|
||||
|
||||
Architecture: {#ewol_page_bases_architecture}
|
||||
=============
|
||||
|
||||
One of the important point to know in this framework is some of absurd things came from the multiple architecture type.
|
||||
|
||||
I will Explain the main points:
|
||||
- IOs does **NOT** simply support the shared object sub lib, this force ewol to be MPL v2.0, and depend on some sub-library with small license restriction.
|
||||
- Android have a JAVA main, then the application main will not be used with this platform
|
||||
- Android event (keyboard, mouse, touch-screen and ...) will arrive in asynchron mode ==> need to be resynchronyse in one thread
|
||||
- Only one graphyc framework is availlable on all platform. This is OpenGL (windows phone is not supported (moribund archi))
|
||||
- Main interesting point is packaging of the application data:
|
||||
* Linux store it in /usr/share/applName/*
|
||||
* MacOs store it in applName.app/subFolder/*
|
||||
* Android store it in the .pkg that is a renamed .zip that the name is dynamic
|
||||
* Windows (TODO : Never done a pakage)
|
||||
This will generate a complex result of data access...
|
||||
- Sub lib Change on all the platform, then I will use the idea of Apple, that incluse in a package all needed libs.
|
||||
This could be a problem for small platform, but this framwork need to have a OpenGL-ES2 instance then the memory problem,
|
||||
is not really a problem.
|
||||
|
188
doc/build.md
Normal file
@ -0,0 +1,188 @@
|
||||
Build lib & build sample {#ewol_build}
|
||||
========================
|
||||
|
||||
@tableofcontents
|
||||
Linux dependency packages {#ewol_build_dependency}
|
||||
=========================
|
||||
|
||||
Ubuntu or Debian {#ewol_build_dependency_debian}
|
||||
----------------
|
||||
|
||||
```{.sh}
|
||||
sudo apt-get install g++ libgl1-mesa-dev zlib1g-dev libasound2-dev
|
||||
# Compile with Clang:
|
||||
sudo apt-get install clang
|
||||
# For andoid compilation (jdk 7 does not work...):
|
||||
sudo apt-get install javacc openjdk-6-jdk
|
||||
# Cross compile for windows:
|
||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||
sudo apt-get update
|
||||
sudo apt-get install gcc-mingw-w64
|
||||
# On 64 bits processor for compatibility:
|
||||
sudo apt-get install ia32-libs
|
||||
sudo apt-get install g++-multilib libc6-dev-i386
|
||||
```
|
||||
|
||||
Arch-linux {#ewol_build_dependency_archlinux}
|
||||
----------
|
||||
```{.sh}
|
||||
# Cross compile for windows:
|
||||
pacman -S mingw-w64-gcc
|
||||
|
||||
# Cross compile for Android:
|
||||
in /etc/pacman.conf file uncomment:
|
||||
[multilib]
|
||||
Include = /etc/pacman.d/mirrorlist
|
||||
# update the system:
|
||||
Pacman -Syu
|
||||
# install lib C:
|
||||
pacman -S lib32-glibc lib32-zlib lib32-gcc-libs
|
||||
# install open-jdk 7.0
|
||||
pacman -S jdk7-openjdk
|
||||
# connect adb: (and you can do a "android/sdk/platform-tools/adb shell" to enable computer key on device)
|
||||
pacman -S android-udev
|
||||
```
|
||||
|
||||
Download: {#ewol_build_download}
|
||||
=========
|
||||
|
||||
ewol use some tools to manage source and build it:
|
||||
|
||||
need google repo: {#ewol_build_download_repo}
|
||||
-----------------
|
||||
|
||||
see: http://source.android.com/source/downloading.html#installing-repo
|
||||
|
||||
On all platform:
|
||||
```{.sh}
|
||||
mkdir ~/.bin
|
||||
PATH=~/.bin:$PATH
|
||||
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
|
||||
chmod a+x ~/.bin/repo
|
||||
```
|
||||
|
||||
On ubuntu
|
||||
```{.sh}
|
||||
sudo apt-get install repo
|
||||
```
|
||||
|
||||
On archlinux
|
||||
```{.sh}
|
||||
sudo pacman -S repo
|
||||
```
|
||||
|
||||
lutin (build-system): {#ewol_build_download_lutin}
|
||||
---------------------
|
||||
|
||||
```{.sh}
|
||||
pip install lutin --user
|
||||
# optionnal dependency of lutin (manage image changing size for application release)
|
||||
pip install pillow --user
|
||||
```
|
||||
|
||||
The full build tool documentation is availlable here : [lutin](http://heeroyui.github.io/lutin/)
|
||||
|
||||
|
||||
dependency: {#ewol_build_download_dependency}
|
||||
-----------
|
||||
|
||||
```{.sh}
|
||||
mkdir -p WORKING_DIRECTORY/framework
|
||||
cd WORKING_DIRECTORY/framework
|
||||
repo init -u git://github.com/atria-soft/manifest.git
|
||||
repo sync -j8
|
||||
cd ../..
|
||||
```
|
||||
|
||||
sources: {#ewol_build_download_sources}
|
||||
--------
|
||||
|
||||
They are already download in the repo manifest in:
|
||||
|
||||
```{.sh}
|
||||
cd WORKING_DIRECTORY/framework/atria-soft/ewol
|
||||
```
|
||||
|
||||
Build: {#ewol_build_build}
|
||||
======
|
||||
|
||||
you must stay in zour working directory...
|
||||
```{.sh}
|
||||
cd WORKING_DIRECTORY
|
||||
```
|
||||
|
||||
library: {#ewol_build_build_library}
|
||||
--------
|
||||
|
||||
```{.sh}
|
||||
lutin -mdebug ewol
|
||||
```
|
||||
|
||||
Sample: {#ewol_build_build_sample}
|
||||
-------
|
||||
|
||||
```{.sh}
|
||||
lutin -mdebug ewol-sample-*
|
||||
```
|
||||
|
||||
Run sample: {#ewol_build_run_sample}
|
||||
-----------
|
||||
|
||||
Basic way
|
||||
|
||||
```{.sh}
|
||||
lutin -mdebug ewol-sample-*?run
|
||||
```
|
||||
|
||||
With some option: (set global log leval at 2 (print, error, warning), and "appl" library at log level 6
|
||||
|
||||
```{.sh}
|
||||
lutin -mdebug ewol-sample-*?run:--elog-level=2:--elog-lib=appl:6
|
||||
```
|
||||
|
||||
|
||||
Build for Android and install: {#ewol_build_android}
|
||||
==============================
|
||||
|
||||
Sample: {#ewol_build_android_sample}
|
||||
-------
|
||||
|
||||
```{.sh}
|
||||
lutin -tAndroid -mdebug ewol-sample-*
|
||||
```
|
||||
|
||||
Sample: {#ewol_build_android_install_sample}
|
||||
-------
|
||||
|
||||
```{.sh}
|
||||
lutin -tAndroid -mdebug ewol-sample-*?install
|
||||
```
|
||||
|
||||
Worktree explanation: {#ewol_build_workspace}
|
||||
=====================
|
||||
|
||||
The workspace is a simple folder that contain all the modules ans sub module availlable for build.
|
||||
It will create a tree like this :
|
||||
|
||||
- **workspace**
|
||||
* **application:** set your application here, it is a good position
|
||||
* **framework:** framework download by repo
|
||||
+ **atria-soft:** graphic framework
|
||||
+ **generic-library:** open sources library that is wrapped on lutin builder
|
||||
+ **musicdsp:** Common library for audio interfacing
|
||||
+ **tools:** build tools (now only the IOs flasher)
|
||||
* **out:**
|
||||
+ Android_arm_32
|
||||
+ Android_arm_64
|
||||
+ Windows_x86_32
|
||||
+ Windows_x86_64
|
||||
+ Linux_x86_32
|
||||
+ Linux_x86_64
|
||||
+ MacOs_x86_32
|
||||
+ MacOs_x86_64
|
||||
+ IOs_x86_32
|
||||
+ IOs_x86_64
|
||||
|
||||
All the build object are set in the out path, then to restart with a clean build simply remove this folder
|
||||
|
||||
|
259
doc/codingStyle.md
Normal file
@ -0,0 +1,259 @@
|
||||
Ewol coding style {#ewol_coding_style}
|
||||
=================
|
||||
|
||||
@tableofcontents
|
||||
|
||||
|
||||
Comments {#ewol_coding_style_comment}
|
||||
========
|
||||
|
||||
- One line comment: (never in #define xxx ==> too dangerous)
|
||||
```{.cpp}
|
||||
//
|
||||
```
|
||||
|
||||
- Multiple line comment
|
||||
```{.cpp}
|
||||
/*
|
||||
* xxxx yyyy
|
||||
* zzzz
|
||||
*/
|
||||
```
|
||||
|
||||
- Documentation : doxygen (do not set un-nneded field)
|
||||
|
||||
@verbatim
|
||||
/**
|
||||
* @brief my summery
|
||||
* @param[in,out] _xxxx Comment on the variable
|
||||
* @return my return explanation
|
||||
*/
|
||||
@endverbatim
|
||||
|
||||
- one line documlentation:
|
||||
```{.cpp}
|
||||
xxxxx, //!< my comment
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
Number of colomn {#ewol_coding_style_number_of_colomn}
|
||||
================
|
||||
|
||||
I do not linit the number of colomn, but it could be good to limit at 150 char. Many screen have the main display like this
|
||||
|
||||
|
||||
|
||||
Indentation & braces {#ewol_coding_style_indent}
|
||||
====================
|
||||
|
||||
Tab size is a personal choice then, when you write code, you might be
|
||||
tab proof. If someone want to have the golden number for theire tabs,
|
||||
he will be able to do it.
|
||||
When you set a brace '{' you need to add a brace, and when you set a
|
||||
stop brace '}' you need to remove a tab
|
||||
To be simple : (tab stop at the 'if' start)
|
||||
|
||||
- if:
|
||||
```{.cpp}
|
||||
if ( xxx == yyy
|
||||
&& ( xxx == kkk
|
||||
|| xxx == zzz )) {
|
||||
//your action ...;
|
||||
}
|
||||
```
|
||||
|
||||
- switch:
|
||||
```{.cpp}
|
||||
switch (suffix) {
|
||||
case 'G':
|
||||
case 'g':
|
||||
mem <<= 30;
|
||||
break;
|
||||
case 'M':
|
||||
case 'm':
|
||||
mem <<= 20;
|
||||
break;
|
||||
case 'K':
|
||||
case 'k':
|
||||
mem <<= 10;
|
||||
// fall through
|
||||
default:
|
||||
break;
|
||||
}
|
||||
```
|
||||
|
||||
- function:
|
||||
```{.cpp}
|
||||
void myFunction(void) {
|
||||
actions ...;
|
||||
}
|
||||
```
|
||||
|
||||
- classes:
|
||||
```{.cpp}
|
||||
class MyClass {
|
||||
public:
|
||||
MyClass(void);
|
||||
~MyClass(void);
|
||||
private:
|
||||
const char* getName(void);
|
||||
};
|
||||
```
|
||||
|
||||
- namespace:
|
||||
```{.cpp}
|
||||
namespace appl {
|
||||
void get(void);
|
||||
}
|
||||
```
|
||||
|
||||
- For special element like : you might add a tabulation too
|
||||
```{.cpp}
|
||||
case xxx:
|
||||
actions...
|
||||
public:
|
||||
definition ...
|
||||
```
|
||||
|
||||
- An exception for the inline function inside c++ header:
|
||||
```{.cpp}
|
||||
class Plop {
|
||||
private:
|
||||
int32_t m_value; //!< my value of money gain
|
||||
public:
|
||||
int32_t getValue(void) const { return m_value; };
|
||||
```
|
||||
|
||||
|
||||
|
||||
Types {#ewol_coding_style_type}
|
||||
=====
|
||||
|
||||
the element 'typedef' must not be use, like this it is not needed to add
|
||||
special element like '_te' or '_ts' to say respectively 'tpedef enum' and
|
||||
'typedef struct'
|
||||
Structure is not availlable in c++, just use normal class, this is the same.
|
||||
|
||||
|
||||
|
||||
Star position {#ewol_coding_style_star}
|
||||
=============
|
||||
|
||||
The star will be near the type :
|
||||
```{.cpp}
|
||||
void* myVariableName;
|
||||
```
|
||||
|
||||
|
||||
|
||||
C and c++ {#ewol_coding_style_c_and_cpp}
|
||||
=========
|
||||
|
||||
All C header files might have :
|
||||
```{.cpp}
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
...
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
Naming {#ewol_coding_style_naming}
|
||||
======
|
||||
|
||||
- Fonction/Methods:
|
||||
Camel case with first letter in lower case.
|
||||
```{.cpp}
|
||||
void myExampleFontionName(void);
|
||||
```
|
||||
|
||||
- Variable:
|
||||
Camel case with first letter in lower case.
|
||||
```{.cpp}
|
||||
nt32_t myVariableExample;
|
||||
```
|
||||
|
||||
- namespace:
|
||||
one world in lower case
|
||||
```{.cpp}
|
||||
namspace ewol {
|
||||
```
|
||||
|
||||
- Class:
|
||||
Camel case with first letter in upper case.
|
||||
```{.cpp}
|
||||
class MyClass;
|
||||
```
|
||||
|
||||
- Members fields:
|
||||
Put a 'm' prefix and then a normal Variable name
|
||||
```{.cpp}
|
||||
int32_t m_memberField;
|
||||
```
|
||||
|
||||
- enum:
|
||||
Camel case with first letter in lower case.
|
||||
```{.cpp}
|
||||
enum myEnum {
|
||||
myEnum_def1,
|
||||
myEnum_def2,
|
||||
myEnum_def3,
|
||||
};
|
||||
```
|
||||
- structure (C only)
|
||||
use naming like Classes (and for mamber too)
|
||||
|
||||
- minimum size : Do not use variable with size <3, the for a iterator
|
||||
for a 'for' :
|
||||
```{.cpp}
|
||||
for (int32_t iii=0; iii<xxx; ++iii) {
|
||||
// actions ...
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
Types {#ewol_coding_style_types}
|
||||
=====
|
||||
|
||||
Une stanndard Type :
|
||||
```{.cpp}
|
||||
bool
|
||||
int8_t / uint8_t
|
||||
int16_t / uint16_t
|
||||
int32_t / uint32_t
|
||||
int64_t / uint64_t
|
||||
size_t
|
||||
int (some case needed)
|
||||
float / double
|
||||
float_t to automatic match whith the compilation choice between float or double
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
C++ specificity {#ewol_coding_style_specific}
|
||||
===============
|
||||
|
||||
- STL
|
||||
You can use the Stl, but the porting and the result can be
|
||||
different depending on the board you are.
|
||||
- Heritage:
|
||||
Simple Heritage is a good use of the C++, multiple heritage is
|
||||
not really supported in every compilators.
|
||||
- const:
|
||||
Set the parameter and fonction const all time you can.
|
||||
- exception:
|
||||
They are not manage in all platforms, then by restriction, do
|
||||
not use it.
|
||||
|
@ -1,16 +1,18 @@
|
||||
=?= FAQ =?=
|
||||
FAQ {#page_FAQ}
|
||||
===
|
||||
|
||||
== What is ewol licence ==
|
||||
What is ewol licence
|
||||
--------------------
|
||||
|
||||
This is really simple : APACHE-2 :
|
||||
This is really simple : MPL v2.0 :
|
||||
|
||||
Copyright ewol Edouard DUPIN
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
Licensed under the Mozilla Public License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
[[http://www.apache.org/licenses/LICENSE-2.0]]
|
||||
<https://www.mozilla.org/MPL/2.0>
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@ -21,13 +23,14 @@ limitations under the License.
|
||||
|
||||
|
||||
|
||||
== Why we use "DECLARE_FACTORY" Macro ? ==
|
||||
Why we use "DECLARE_FACTORY" Macro?
|
||||
-----------------------------------
|
||||
|
||||
For some reason!!! But everything might be clear:
|
||||
:** In ewol we masively use std::shared_ptr<xxx> (I have create my own but it is not "standard" (I like when we use genecic system)).
|
||||
:** The main class : [class[ewol::Object]] herited from [i]std::enable_shared_from_this<Object>[/i] to permit to access at his own [i]std::shared_ptr[/i].
|
||||
:** Acces At his own [i]std::shared_ptr[/i] is not allowed in the class contructor/destructor.
|
||||
:** Many time for meta-widget we need to propagate our [i]std::shared_ptr[/i] in child.
|
||||
- In ewol we masively use ememory::SharedPtr.
|
||||
- The main class : ewol::Object herited from ememory::EnableSharedFromThis<ewol::Object> to permit to access at his own ememory::SharedPtr.
|
||||
- Acces At his own ememory::SharedPtr is not allowed in the class contructor/destructor.
|
||||
- Many time for meta-widget we need to propagate our ememory::SharedPtr in child through the ememory::WeakPtr.
|
||||
|
||||
Then for all these reasons, I have create a simple MACRO that create a static template funtion that create the object and just after
|
||||
creation call the init(...) function to permit to create a complex widget or others with some writing convinience.
|
94
doc/index.bb
@ -1,94 +0,0 @@
|
||||
== [center]Ewol library[/center] ==
|
||||
__________________________________________________
|
||||
|
||||
===What is EWOL, and how can I use it?===
|
||||
EWOL, or Edn Widget OpenGl Layer, is a multi-platform library for creating graphical user interfaces in OpenGL. Offering a complete set of widgets.
|
||||
|
||||
===Where can I use it?===
|
||||
Everywhere! EWOL is cross-platform devolopped to support bases OS:
|
||||
: ** Linux (X11) (mouse)
|
||||
: ** Windows (mouse) (not compile anymore ==> TODO)
|
||||
: ** MacOs (mouse)
|
||||
: ** Android (mouse + touch)
|
||||
: ** IOs (touch)
|
||||
|
||||
===What languages are supported?===
|
||||
EWOL is written in C++ and is not (for now) supported for other languages.
|
||||
|
||||
===Are there any licensing restrictions?===
|
||||
EWOL is [b]FREE software[/b] and [i]all sub-library are FREE and staticly linkable !!![/i]
|
||||
|
||||
That allow you to use it for every program you want, including those developing proprietary software, without any license fees or royalties.
|
||||
|
||||
[note]The static support is important for some platform like IOs, and this limit the external library use at some license like :
|
||||
:** BSD*
|
||||
:** MIT
|
||||
:** APPACHE-2
|
||||
:** PNG
|
||||
:** ZLIB
|
||||
This exclude the classical extern library with licence:
|
||||
:** L-GPL
|
||||
:** GPL
|
||||
[/note]
|
||||
|
||||
==== License (APACHE 2) ====
|
||||
Copyright ewol Edouard DUPIN
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
[[http://www.apache.org/licenses/LICENSE-2.0]]
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
||||
==== Sub library: ====
|
||||
===== License: =====
|
||||
:** [b][lib[etk | e-tk]][/b] : APACHE-2
|
||||
::** [b][lib[linearmath | Linear-Math]][/b] : z-lib (subset of bullet lib)
|
||||
::** [b][lib[earchive | e-Archive]][/b] : APACHE-2
|
||||
:::** [b][lib[z | Z lib]][/b] : z-lib
|
||||
:** [b][lib[egami | e-gami]][/b] : APACHE-2
|
||||
::** [b][lib[esvg | e-svg]][/b] : APACHE-2
|
||||
:::** [b][lib[agg | AGG]][/b] : BSD-like
|
||||
::** [b][lib[png | libPNG]][/b] : PNG
|
||||
:** [b][lib[portaudio | portaudio]][/b] : MIT
|
||||
:** [b][lib[ogg | ogg]][/b] : BSD-like
|
||||
:** [b][lib[freetype | Free-Type]][/b] : BSD-like
|
||||
:** [b][lib[ejson | e-json]][/b] : APACHE-2
|
||||
:** [b][lib[exml | e-xml]][/b] : APACHE-2
|
||||
|
||||
|
||||
==== Description : ====
|
||||
===== Internal: =====
|
||||
:** [b][lib[etk | e-tk]][/b] : Generic toolkit to acces on file, standardize acces on string (for Android and MacOs) ...
|
||||
:** [b][lib[earchive | e-Archive]][/b] : Generic access to a zip file (used to access on file on Android)
|
||||
:** [b][lib[eggami | e-gami]][/b] : generic image accessor for PNG, svg and bmp image (might add some other type ...)
|
||||
:** [b][lib[esvg | e-svg]][/b] : Generic SVG image parser and displayer
|
||||
:** [b][lib[ejson | e-json]][/b] : JSON file access (read and write)
|
||||
:** [b][lib[exml | e-xml]][/b] : XML file access (read and write)
|
||||
:** [b][lib[ege | e-ge]][/b] : (library in BSDv3) Ewol Game engine is a wrapper on the the bullet physical engine and ewol renderer engin. this is in developpement for now (the simple objective is to produce game to make profitable all my work)
|
||||
|
||||
===== External: =====
|
||||
:** [b][lib[linearmath | Linear-Math]][/b] : bullet mathamatical sub lib (for using same vec3).
|
||||
:** [b][lib[z | Z lib]][/b] : Clkassical zlib lib.
|
||||
:** [b][lib[agg | AGG]][/b] : A c++ drawing lib.
|
||||
:** [b][lib[png | libPNG]][/b] : the classical png display lib.
|
||||
:** [b][lib[portaudio | portaudio]][/b] : The classical audio wrapper lib.
|
||||
:** [b][lib[ogg | ogg]][/b] : The classical Ogg coder reader lib.
|
||||
:** [b][lib[freetype | Free-Type]][/b] : The classicle true-type reader lib.
|
||||
:** [b][lib[bullet | bullet]][/b] : the classical bullet library physical engine. (dependence by ege)
|
||||
|
||||
===== Program Using EWOL =====
|
||||
:** [b][lib[edn | edn]][/b] : (Application in GPLv3) Edn is the main application using this lib and designed for (in the first time). This is a "Code editor".
|
||||
|
||||
== Main documentation: ==
|
||||
|
||||
[doc[001_bases | Global Documantation]]
|
||||
|
||||
[tutorial[000_Build | Tutorials]]
|
135
doc/mainpage.md
Normal file
@ -0,0 +1,135 @@
|
||||
Ewol library {#mainpage}
|
||||
============
|
||||
|
||||
@tableofcontents
|
||||
|
||||
What is EWOL? {#ewol_mainpage_what}
|
||||
=============
|
||||
|
||||
EWOL, or Edn Widget OpenGl Layer, is a multi-platform library for creating graphical user interfaces in OpenGL. Offering a complete set of widgets.
|
||||
|
||||
Where can I use it? {#ewol_mainpage_where}
|
||||
===================
|
||||
|
||||
Everywhere! EWOL is cross-platform devolopped to support bases OS:
|
||||
- Linux (X11) (mouse)
|
||||
- Windows (mouse) (build on linux...)
|
||||
- MacOs (mouse)
|
||||
- Android (mouse + touch)
|
||||
- IOs (touch)
|
||||
|
||||
What languages are supported? {#ewol_mainpage_language}
|
||||
=============================
|
||||
|
||||
EWOL is written in C++ and is not (for now) supported for other languages.
|
||||
|
||||
|
||||
Are there any licensing restrictions? {#ewol_mainpage_restriction}
|
||||
=====================================
|
||||
|
||||
EWOL is **FREE software** and _all sub-library are FREE and staticly linkable !!!_
|
||||
|
||||
That allow you to use it for every program you want, including those developing proprietary software, without any license fees or royalties.
|
||||
|
||||
The static support is important for some platform like IOs, and this limit the external library use at some license like:
|
||||
- BSD*
|
||||
- MIT
|
||||
- APPACHE-2
|
||||
- PNG
|
||||
- ZLIB
|
||||
|
||||
This exclude the classical extern library with licence:
|
||||
- L-GPL
|
||||
- GPL
|
||||
|
||||
License (MPL v2.0) {#ewol_mainpage_license}
|
||||
==================
|
||||
|
||||
Copyright ewol Edouard DUPIN
|
||||
|
||||
Licensed under the Mozilla Public License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
<https://www.mozilla.org/MPL/2.0>
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
||||
Sub library: {#ewol_mainpage_sub}
|
||||
============
|
||||
|
||||
License:
|
||||
|
||||
- [**etk**](http://atria-soft.github.io/etk) : MPL v2.0
|
||||
- [**elog**](http://atria-soft.github.io/elog) : MPL v2.0
|
||||
+ **linearmath** : z-lib (subset of bullet lib)
|
||||
+ [**earchive**](http://atria-soft.github.io/earchive) : MPL v2.0
|
||||
* **zlib** : z-lib
|
||||
- [**egami**](http://atria-soft.github.io/egami) : MPL v2.0
|
||||
+ [**esvg**](http://atria-soft.github.io/esvg) : MPL v2.0
|
||||
+ **libpng** : PNG
|
||||
- **libogg** : BSD-like
|
||||
- **libfreetype** : BSD-like
|
||||
- [**e-json**](http://atria-soft.github.io/ejson) : MPL v2.0
|
||||
- [**e-xml**](http://atria-soft.github.io/exml) : MPL v2.0
|
||||
- [**audio**](http://musicdsp.github.io/audio) : MPL v2.0
|
||||
- [**audio-orchestra**](http://musicdsp.github.io/audio-orchestra) : MIT
|
||||
- [**audio-drain**](http://musicdsp.github.io/audio-drain) : MPL v2.0
|
||||
- [**audio-river**](http://musicdsp.github.io/audio-river) : MPL v2.0
|
||||
- [**audio-ess**](http://musicdsp.github.io/audio-ess) : MPL v2.0
|
||||
- [**ege**](http://atria-soft.github.io/ege) : MPL v2.0
|
||||
- [**dollar**](http://atria-soft.github.io/dollar) : MPL v2.0
|
||||
...
|
||||
|
||||
Description: {#ewol_mainpage_desc}
|
||||
------------
|
||||
|
||||
Internal:
|
||||
|
||||
- [**elog**](http://atria-soft.github.io/elog) : Generic Log interface (for Android and MacOs) ...
|
||||
- [**etk**](http://atria-soft.github.io/etk) : Generic toolkit to acces on file, standardize acces on string (for Android and MacOs) ...
|
||||
- [**earchive**](http://atria-soft.github.io/earchive) : Generic access to a zip file (used to access on file on Android)
|
||||
- [**egami**](http://atria-soft.github.io/egami) : generic image accessor for PNG, svg and bmp image (might add some other type ...)
|
||||
- [**e-svg**](http://atria-soft.github.io/esvg) : Generic SVG image parser and displayer
|
||||
- [**e-json**](http://atria-soft.github.io/ejson) : JSON file access (read and write)
|
||||
- [**e-xml**](http://atria-soft.github.io/exml) : XML file access (read and write)
|
||||
- [**audio**](http://musicdsp.github.io/audio) : Basic audio format
|
||||
- [**audio-orchestra**](http://musicdsp.github.io/audio-orchestra) : Low level wrapper of audio interface (Linux/Windows/MacOs/IOs/Android)
|
||||
- [**audio-drain**](http://musicdsp.github.io/audio-drain) : single stream audio processing
|
||||
- [**audio-river**](http://musicdsp.github.io/audio-river) : High level audio abstraction
|
||||
- [**audio-ess**](http://musicdsp.github.io/audio-ess) : basic sound set manager
|
||||
- [**ege**](http://musicdsp.github.io/ege) : Ewol Game engine is a wrapper on the the bullet physical engine and ewol renderer engin. This is in developpement for now (the simple objective is to produce game to make profitable all my work)
|
||||
- [**zeus**](http://atria-soft.github.io/zeus) : RPC over websocket
|
||||
- [**dollar**](http://atria-soft.github.io/dollar) : $1 $n $p and $p+
|
||||
|
||||
External: {#ewol_mainpage_ext}
|
||||
---------
|
||||
|
||||
- **linearmath** : bullet mathamatical sub lib (for using same vec3).
|
||||
- **Z lib** : Clkassical zlib lib.
|
||||
- **libPNG** : the classical png display lib.
|
||||
- **ogg** : The classical Ogg coder reader lib.
|
||||
- **freetype** : The classicle true-type reader lib.
|
||||
- **bulletlib** : the classical bullet library physical engine. (dependence by ege)
|
||||
- **openSSL** : generic SSL library. (dependence by zeus)
|
||||
|
||||
Program Using EWOL {#ewol_mainpage_using}
|
||||
------------------
|
||||
|
||||
- [**edn**](http://github.com/HeeroYui/edn): (Application in GPLv3) Edn is the main application using this lib and designed for (in the first time). This is a "Code editor".
|
||||
- [**worddown**](http://play.google.com/store/apps/details?id=com.edouarddupin.worddown): (Proprietary) Worddown is a simple word game.
|
||||
|
||||
|
||||
Main documentation: {#ewol_mainpage_sub_doc}
|
||||
===================
|
||||
|
||||
- @ref ewol_build
|
||||
- @ref ewol_page_bases
|
||||
- @ref ewol_tutorials
|
||||
- @ref ewol_coding_style
|
||||
|
@ -1,110 +0,0 @@
|
||||
=?=Ewol extract and build examples=?=
|
||||
__________________________________________________
|
||||
[left][doc[001_bases | Previous: Doc]][/left] [right][tutorial[001_HelloWord | Next: Hello-Word]][/right]
|
||||
|
||||
All developpement software will start by getting the dependency and the sources.
|
||||
|
||||
=== Linux dependency packages ===
|
||||
[code style=shell]
|
||||
sudo apt-get install g++ libgl1-mesa-dev zlib1g-dev libasound2-dev
|
||||
# if you want to compile with clang :
|
||||
sudo apt-get install clang
|
||||
# For andoid compilation (jdk 7 does not work...)
|
||||
sudo apt-get install javacc openjdk-6-jdk
|
||||
# if you want to compile for windows :
|
||||
sudo apt-get install mingw32
|
||||
# on 64 bits processor for compatibility
|
||||
sudo apt-get install ia32-libs
|
||||
[/code]
|
||||
|
||||
|
||||
=== Download instructions ===
|
||||
|
||||
Download the software :
|
||||
[code style=shell]
|
||||
# create a working directory path
|
||||
mkdir your_workspace_path
|
||||
cd your_workspace_path
|
||||
# clone ewol and all sub-library
|
||||
git clone git://github.com/HeeroYui/ewol.git
|
||||
cd ewol
|
||||
git submodule init
|
||||
git submodule update
|
||||
cd ..
|
||||
# clone the exemple repository
|
||||
git clone git://github.com/HeeroYui/example.git
|
||||
[/code]
|
||||
|
||||
[note]
|
||||
The full build tool documentation is availlable here : [[http://heeroyui.github.io/lutin/ | lutin]]
|
||||
[/note]
|
||||
|
||||
=== Common build instructions ===
|
||||
|
||||
Compile software in debug for the curent platform :
|
||||
[code style=shell]
|
||||
./ewol/build/lutin.py -mdebug
|
||||
[/code]
|
||||
|
||||
You can specify the platform with:
|
||||
[code style=shell]
|
||||
./ewol/build/lutin.py -tAndroid -mdebug
|
||||
[/code]
|
||||
|
||||
It coud be usefull to disable the package generation in local debug :
|
||||
[code style=shell]
|
||||
./ewol/build/lutin.py -mdebug -p
|
||||
[/code]
|
||||
|
||||
Build with clang instead of gcc:
|
||||
[code style=shell]
|
||||
./ewol/build/lutin.py -C -cclang
|
||||
[/code]
|
||||
|
||||
Display the build in color :
|
||||
[code style=shell]
|
||||
./ewol/build/lutin.py -C -mdebug -p
|
||||
[/code]
|
||||
|
||||
Build in realease and install the program named 'edn'
|
||||
[code style=shell]
|
||||
./ewol/build/lutin.py -C edn-install
|
||||
[/code]
|
||||
|
||||
To run an application you will find it directly on the out 'staging' tree :
|
||||
[code style=shell]
|
||||
./out/Linux/debug/staging/clang/edn/usr/bin/edn
|
||||
[/code]
|
||||
|
||||
== Simple explanation : ==
|
||||
|
||||
The workspace is a simple folder that contain all the modules ans sub module.
|
||||
It will create a tree like this :
|
||||
|
||||
:** workspace
|
||||
::** ewol
|
||||
:::** external [i](ewol external dependency sub-lib)[/i]
|
||||
::::** agg
|
||||
::::** bullet
|
||||
::::** date
|
||||
::::** egami
|
||||
::::** ege
|
||||
::::** ejson
|
||||
::::** etk
|
||||
::::** exml
|
||||
::::** freetype
|
||||
::::** glew
|
||||
::::** lua
|
||||
::::** ogg
|
||||
::::** png
|
||||
::::** portaudio
|
||||
::::** z
|
||||
:::** souces
|
||||
::::** ewol
|
||||
::** example
|
||||
::** youApplication_1
|
||||
::** youApplication_2
|
||||
::** youOtherLib_1
|
||||
::** youOtherLib_2
|
||||
::** out
|
||||
|
@ -1,321 +0,0 @@
|
||||
|
||||
=== Objectif ===
|
||||
:** Understand basis of ewol
|
||||
:** Create a simple windows with a label "Hello Word"
|
||||
|
||||
=== Application Sources: ===
|
||||
|
||||
==== Application Main: ====
|
||||
|
||||
A generic Ewol application is manage by creating an [class[ewol::context::Application]] that is the basis of your application.
|
||||
|
||||
Due to the fact the ewol library is a multi-platform framework, you will have many contraint like:
|
||||
:** One application at the same time
|
||||
:** One Windows displayable at the time
|
||||
:** Not a big CPU ...
|
||||
|
||||
Then we will create the application:
|
||||
|
||||
[code style=c++]
|
||||
namespace appl {
|
||||
class MainApplication : public ewol::context::Application {
|
||||
public:
|
||||
bool init(ewol::Context& _context, size_t _initId) {
|
||||
APPL_INFO("==> Init APPL (START)");
|
||||
// nothing to do ...
|
||||
APPL_INFO("==> Init APPL (END)");
|
||||
return true;
|
||||
}
|
||||
void unInit(ewol::Context& _context) {
|
||||
APPL_INFO("==> Un-Init APPL (START)");
|
||||
// nothing to do ...
|
||||
APPL_INFO("==> Un-Init APPL (END)");
|
||||
}
|
||||
};
|
||||
};
|
||||
[/code]
|
||||
|
||||
The input [class[ewol::Context]] is the main system context.
|
||||
|
||||
[note]
|
||||
It is important to know that the system can create your application multiple times, the basic exemple of this is the Wallpaper on Android.
|
||||
|
||||
What is done:
|
||||
** When we select the wallpaper it create a new application (to show an example)
|
||||
** When applying your choice, it create the real one an remove the previous one.
|
||||
[/note]
|
||||
|
||||
In all program we need to have a main()
|
||||
|
||||
To be portable on Android, the "main" in the java might call your main through the Android wrapper.
|
||||
|
||||
To simplify compabilities between platform it is recommanded to not add other things in the application main:
|
||||
|
||||
[code style=c++]
|
||||
int main(int argc, const char *argv[]) {
|
||||
// only one things to do :
|
||||
return ewol::run(new appl::MainApplication(), _argc, _argv);
|
||||
}
|
||||
[/code]
|
||||
|
||||
|
||||
==== Some configuration are needed ====
|
||||
|
||||
In your application you can use many configuration, it is really better to set all your configuration dynamic.
|
||||
With this basic condiction will simplify the interface of the library if you would have many different application
|
||||
(never forger the compilator garbage collector is really very efficient).
|
||||
|
||||
|
||||
|
||||
[b]Select fonts:[/b]
|
||||
|
||||
This can be a problem when you design an application for some other operating system (OS),
|
||||
They do not have the same default font.
|
||||
|
||||
We select an order to search the font names and the system basic size.
|
||||
[code style=c++]
|
||||
// Use External font depending on the system (for specific application, it is better to provide fonts)
|
||||
_context.getFontDefault().setUseExternal(true);
|
||||
// Select font in order you want : if Ewol find FreeSerif, it selected it ...
|
||||
_context.getFontDefault().set("FreeSerif;DejaVuSansMono", 19);
|
||||
[/code]
|
||||
|
||||
|
||||
==== Main Windows: ====
|
||||
|
||||
Create the main Windows:
|
||||
|
||||
For this point we will create a class that herited form the basic [class[ewol::wiget::Windows]] class:
|
||||
|
||||
[b]Windows.h[/b]
|
||||
[code style=c++]
|
||||
#ifndef __APPL_WINDOWS_H__
|
||||
#define __APPL_WINDOWS_H__
|
||||
|
||||
#include <ewol/widget/Windows.h>
|
||||
|
||||
namespace appl {
|
||||
class Windows : public ewol::widget::Windows {
|
||||
protected:
|
||||
Windows(void);
|
||||
init()
|
||||
public:
|
||||
DECLARE_FACTORY(Windows);
|
||||
virtual ~Windows(void) {};
|
||||
};
|
||||
};
|
||||
#endif
|
||||
[/code]
|
||||
|
||||
See [tutorial[010_ObjectModel | Next: Object model]] to understand why this structure is so complex.
|
||||
|
||||
[b]Windows.cpp[/b]
|
||||
[code style=c++]
|
||||
#include <ewol/ewol.h>
|
||||
#include <appl/debug.h>
|
||||
#include <appl/Windows.h>
|
||||
#include <ewol/widget/Label.h>
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "Windows"
|
||||
|
||||
appl::Windows::Windows(void) {
|
||||
// To simplify log (if you have a better solution, I am aware)
|
||||
addObjectType("appl::Windows");
|
||||
}
|
||||
appl::Windows::init(void) {
|
||||
ewol::widget::Windows::init();
|
||||
setTitle("example 001_HelloWord");
|
||||
std::shared_ptr<ewol::widget::Label> tmpWidget = ewol::widget::Label::create();
|
||||
if (NULL == tmpWidget) {
|
||||
APPL_ERROR("Can not allocate widget ==> display might be in error");
|
||||
} else {
|
||||
tmpWidget->setLabel("Hello <font color='blue'>Word</font>");
|
||||
tmpWidget->setExpand(bvec2(true,true));
|
||||
setSubWidget(tmpWidget);
|
||||
}
|
||||
}
|
||||
[/code]
|
||||
|
||||
The init function can not be virtual due to his polymorphic status, then we need to call parrent init
|
||||
[code style=c++]
|
||||
ewol::widget::Windows::init();
|
||||
[/code]
|
||||
|
||||
The fist basic property to set is the Title:
|
||||
[code style=c++]
|
||||
setTitle("example 001_HelloWord");
|
||||
[/code]
|
||||
|
||||
After we simple create a [class[widget::Label]] in the main windows constructor.
|
||||
And we set the widget property (label).
|
||||
[code style=c++]
|
||||
std::shared_ptr<ewol::widget::Label> tmpWidget = ewol::widget::Label::create();
|
||||
tmpWidget->setLabel("Hello <font color='blue'>Word</font>");
|
||||
tmpWidget->setExpand(bvec2(true,true));
|
||||
[/code]
|
||||
We can see in this example that the label have some other property like the font color.
|
||||
|
||||
|
||||
The label can have decorated text based on the html generic writing but it is composed with really simple set of balise.
|
||||
I will take a really long time to create a real html parser.
|
||||
|
||||
The availlable property is:
|
||||
:** [b]<br/>[/b] : New line
|
||||
:** [b]<font color="#FF0000\"> ... </font>[/b] : change the font color.
|
||||
:** [b]<center> ... </center>[/b] : center the text.
|
||||
:** [b]<left> ... </left>[/b] : Set the text on the left.
|
||||
:** [b]<right> ... </right>[/b] : Set the text on the right.
|
||||
:** [b]<justify> ... </justify>[/b] : Set the text mode in justify.
|
||||
|
||||
[note]
|
||||
The xml parser is a little strict on the case and end node (!! </br> !!),
|
||||
but it support to:
|
||||
:** Not have a main node.
|
||||
:** replace '"' with ''' to simplify xml writing in C code.
|
||||
[/note]
|
||||
|
||||
The last step is to add the widget on the windows :
|
||||
[code style=c++]
|
||||
setSubWidget(tmpWidget);
|
||||
[/code]
|
||||
When we call this function, it use the shard_from_this() function that create an exception if we are in constructor
|
||||
|
||||
|
||||
==== Configure Ewol to have display the windows ====
|
||||
|
||||
At this point we have created the basic windows.
|
||||
But the system does not know it.
|
||||
Then we create windows and set it in the main contect main (in the MainApplication::init()):
|
||||
[code style=c++]
|
||||
std::shared_ptr<ewol::Windows> basicWindows = appl::Windows::create());
|
||||
// create the specific windows
|
||||
_context.setWindows(basicWindows);
|
||||
[/code]
|
||||
Her we call the create function that is created by the DECLARE_FACTORY macro
|
||||
|
||||
|
||||
Then the init fuction is :
|
||||
[code style=c++]
|
||||
bool MainApplication::init(ewol::Context& _context, size_t _initId) {
|
||||
APPL_INFO("==> Init APPL (START)");
|
||||
// select internal data for font ...
|
||||
_context.getFontDefault().setUseExternal(true);
|
||||
_context.getFontDefault().set("FreeSerif;DejaVuSansMono", 19);
|
||||
|
||||
std::shared_ptr<ewol::Windows> basicWindows = appl::Windows::create();
|
||||
// create the specific windows
|
||||
_context.setWindows(basicWindows);
|
||||
APPL_INFO("==> Init APPL (END)");
|
||||
return true;
|
||||
}
|
||||
[/code]
|
||||
|
||||
To un-init the application, the context call a generic function [b]MainApplication::unInit[/b].
|
||||
In this function we just need to remove the windows and un-init all needed by the system.
|
||||
[code style=c++]
|
||||
void MainApplication::unInit(ewol::Context& _context) {
|
||||
APPL_INFO("==> Un-Init APPL (START)");
|
||||
// Windows is auto-removed just before
|
||||
APPL_INFO("==> Un-Init APPL (END)");
|
||||
}
|
||||
[/code]
|
||||
|
||||
|
||||
[note]
|
||||
You can use many windows and select the one you want to display, but I do not think it is the best design.
|
||||
[/note]
|
||||
|
||||
=== Build declaration: ===
|
||||
|
||||
ewol commonly use the [b]lutin.py[/b] build system.
|
||||
|
||||
Then we need to add a "lutin_YourApplicationName.py", then for this example: [b]lutin_001_HelloWord.py[/b]
|
||||
|
||||
|
||||
[code style=python]
|
||||
#!/usr/bin/python
|
||||
import lutinModule as module
|
||||
import lutinTools as tools
|
||||
|
||||
# optionnal : Describe in the "lutin.py --help"
|
||||
def get_desc():
|
||||
return "Tutorial 001 : Hello Word"
|
||||
|
||||
# Module creation instance (not optionnal)
|
||||
def create(target):
|
||||
# module name is '001_HelloWord' and type binary.
|
||||
myModule = module.Module(__file__, '001_HelloWord', 'BINARY')
|
||||
# add the file to compile:
|
||||
myModule.add_src_file([
|
||||
'appl/Main.cpp',
|
||||
'appl/debug.cpp',
|
||||
'appl/Windows.cpp',
|
||||
])
|
||||
# add Library dependency name
|
||||
myModule.add_module_depend(['ewol'])
|
||||
# add application C flags
|
||||
myModule.compile_flags_CC([
|
||||
"-DPROJECT_NAME=\"\\\""+myModule.name+"\\\"\""])
|
||||
# Add current include Path
|
||||
myModule.add_path(tools.get_current_path(__file__))
|
||||
return the created module
|
||||
return myModule
|
||||
[/code]
|
||||
|
||||
show lutin doc for more information...
|
||||
|
||||
[note]
|
||||
I do not explain again the lutin file, for next tutorial, show example sources ...
|
||||
[/note]
|
||||
|
||||
=== Build your application ===
|
||||
|
||||
Go to your workspace folder and launch
|
||||
[code style=shell]
|
||||
./ewol/build/lutin.py -C -mdebug 001_HelloWord
|
||||
[/code]
|
||||
|
||||
Your program example will build correctly...
|
||||
|
||||
Launch it :
|
||||
[code style=shell]
|
||||
./out/Linux/debug/staging/gcc/001_HelloWord/usr/bin/001_HelloWord -l6
|
||||
[/code]
|
||||
|
||||
The [b]-l6[/b] is used to specify the Log level of the application display (this log is synchronous)
|
||||
|
||||
|
||||
The output compile in a separate folder depending on the compilation tool (gcc or clang)
|
||||
|
||||
|
||||
It create a complete final tree in the ./out/Linux/debug/staging/gcc/001_HelloWord/ folder
|
||||
|
||||
|
||||
The final folder contain the package generated:
|
||||
:** out
|
||||
::** MacOs
|
||||
::** Android
|
||||
::** Windows
|
||||
::** ...
|
||||
::** Linux
|
||||
:::** release
|
||||
:::** debug
|
||||
::::** build
|
||||
:::::** clang
|
||||
:::::** gcc
|
||||
::::::** ewol
|
||||
::::::** exml
|
||||
::::::** ejson
|
||||
::::::** 001_HelloWord
|
||||
::::::** ...
|
||||
::::** staging
|
||||
:::::** clang
|
||||
:::::** gcc
|
||||
::::::** 001_HelloWord
|
||||
:::::::** usr
|
||||
::::::::** bin
|
||||
::::::::** share
|
||||
::::** final
|
||||
:::::** 001_HelloWord.deb
|
||||
|
214
doc/tutorial/001_HelloWord.md
Normal file
@ -0,0 +1,214 @@
|
||||
EWOL: Hello world {#ewol_tutorial_hello_world}
|
||||
=================
|
||||
|
||||
@tableofcontents
|
||||
|
||||
Objectif: {#ewol_tutorial_hello_world_objectives}
|
||||
=========
|
||||
- Understand basis of ewol
|
||||
- Create a simple windows with a label "Hello Word"
|
||||
|
||||
debug tools: {#ewol_tutorial_hello_world_debug}
|
||||
============
|
||||
|
||||
I will use for all test a basic template [elog](http://atria-soft.github.io/elog) for debug logger that redirect logs in Android and IOs
|
||||
|
||||
File ```appl/debug.hpp```:
|
||||
|
||||
@include HelloWord/appl/debug.hpp
|
||||
|
||||
File ```appl/debug.cpp```:
|
||||
|
||||
@include HelloWord/appl/debug.cpp
|
||||
|
||||
|
||||
Application Sources: {#ewol_tutorial_hello_world_sources}
|
||||
====================
|
||||
|
||||
Application Main: {#ewol_tutorial_hello_world_sources_main}
|
||||
-----------------
|
||||
|
||||
A generic Ewol application is manage by creating an ewol::context::Application that is the basis of your application.
|
||||
|
||||
Due to the fact the ewol library is a multi-platform framework (base on [GALE](http://atria-soft.github.io/gale)), you will have many contraint like:
|
||||
- One application at the same time (note an exception for android wallpaper)
|
||||
- One Windows displayable at the time (main point of view of apple developpers)
|
||||
- Not a big CPU ...
|
||||
|
||||
Then we will create the application:
|
||||
|
||||
First things: Some includes:
|
||||
|
||||
@snippet HelloWord/appl/Main.cpp ewol_sample_HW_main_include
|
||||
|
||||
Declare the application:
|
||||
|
||||
@snippet HelloWord/appl/Main.cpp ewol_sample_HW_main_application
|
||||
|
||||
|
||||
The input ewol::Context is the main system context (for ewol).
|
||||
|
||||
**Note:**
|
||||
|
||||
```
|
||||
It is important to know that the system can create your application multiple times, the basic example of this is the Wallpaper on Android.
|
||||
|
||||
What is done:
|
||||
- When we select the wallpaper it create a new application (to show an example)
|
||||
- When applying your choice, it create the real one an remove the previous one.
|
||||
```
|
||||
|
||||
In all program we need to have a main()
|
||||
|
||||
To be portable on Android, the "main" in the java might call your main through the Android wrapper.
|
||||
|
||||
To simplify compabilities between platform it is recommanded to not add other things in the application main:
|
||||
|
||||
@snippet HelloWord/appl/Main.cpp ewol_sample_HW_main_main
|
||||
|
||||
|
||||
Some configuration are needed {#ewol_tutorial_hello_world_sources_config}
|
||||
-----------------------------
|
||||
|
||||
In your application you can use many configuration, it is really better to set all your configuration dynamic.
|
||||
With this basic condition will simplify the interface of the library if you would have many different application
|
||||
(never forget the compilator garbage collector is really very efficient).
|
||||
|
||||
All of this will be done one time:
|
||||
Then we will do it in:
|
||||
|
||||
@snippet HelloWord/appl/Main.cpp ewol_sample_HW_main_create
|
||||
|
||||
### Parse arguments: ####
|
||||
|
||||
All the argument is store in the ewol main application context: just get it...
|
||||
|
||||
@snippet HelloWord/appl/Main.cpp ewol_sample_HW_main_parse_arguments
|
||||
|
||||
### Set basic windosw size (for desktop): ####
|
||||
|
||||
On descktop you can specify a start windows size:
|
||||
|
||||
@snippet HelloWord/appl/Main.cpp ewol_sample_HW_main_set_windows_size
|
||||
|
||||
|
||||
### Select fonts: ####
|
||||
|
||||
This can be a problem when you design an application for some other operating system (OS),
|
||||
They do not have the same default fonts, than you can embended some of them or try to use the system fonts.
|
||||
|
||||
We select an order to search the font names and the system basic size.
|
||||
|
||||
@snippet HelloWord/appl/Main.cpp ewol_sample_HW_main_set_font_property
|
||||
|
||||
|
||||
Main Windows: {#ewol_tutorial_hello_world_sources_windows}
|
||||
-------------
|
||||
|
||||
Create the main Windows:
|
||||
|
||||
For this point we will create a class that herited form the basic ewol::widget::Windows class:
|
||||
|
||||
@include HelloWord/appl/Windows.hpp
|
||||
|
||||
The C macro "DECLARE_FACTORY" create a simple factory function "create" that return the ewol::Object well create.
|
||||
|
||||
For some internal reason, we create the object and we call the "init" function after creating the object. When well done we return the shared object created.
|
||||
|
||||
See @ref ewol_tutorial_object_model to understand why this structure is so complex.
|
||||
|
||||
@include HelloWord/appl/Windows.cpp
|
||||
|
||||
The init function is virtual and you must call your parent object (or at least the ewol::Object::init)
|
||||
|
||||
@snippet HelloWord/appl/Windows.cpp ewol_sample_HW_windows_init
|
||||
|
||||
|
||||
|
||||
The title is associated on the current windows then it is a simple property of ewol::widget::Windows.
|
||||
|
||||
We can change with calling the "setDirectCheck" function instead of "set" function when you are in the constructor (the callback can be unstable when we construct the object)
|
||||
|
||||
@snippet HelloWord/appl/Windows.cpp ewol_sample_HW_windows_title
|
||||
|
||||
|
||||
The object ewol::widget::Windows is a simple container.
|
||||
But the reference between Object is ememory::SharedPtr, and this is not accessible in the constructor.
|
||||
This is the reason we use init function.
|
||||
|
||||
After we simple create a ewol::widget::Label in the main windows init.
|
||||
We set label and basic properties:
|
||||
|
||||
@snippet HelloWord/appl/Windows.cpp ewol_sample_HW_windows_label
|
||||
|
||||
When we call the function ```ewol::Windows::setSubWidget```, it use the SharedFromThis() function that create an exception if we are in constructor (when setting the sub-widget parrent)
|
||||
|
||||
|
||||
We can see in this example that the label have some other property like the font color.
|
||||
|
||||
The label can have decorated text based on the html generic writing but it is composed with really simple set of balise.
|
||||
I will take a really long time to create a real html parser.
|
||||
|
||||
The availlable property is:
|
||||
- ```<br/>``` : New line
|
||||
- ```<font color="#FF0000\"> ... </font>``` : change the font color.
|
||||
- ```<center> ... </center>``` : center the text.
|
||||
- ```<left> ... </left>``` : Set the text on the left.
|
||||
- ```<right> ... </right>``` : Set the text on the right.
|
||||
- ```<justify> ... </justify>``` : Set the text mode in justify.
|
||||
|
||||
**Note:**
|
||||
|
||||
```
|
||||
The xml parser is a little strict on the case and end node (!! </br> !!),
|
||||
but it support to:
|
||||
- Not have a main node.
|
||||
- replace '"' with ''' to simplify xml writing in C code.
|
||||
```
|
||||
|
||||
|
||||
Configure Ewol to have display the windows {#ewol_tutorial_hello_world_sources_configure_ewol}
|
||||
------------------------------------------
|
||||
|
||||
At this point we have created the basic windows.
|
||||
But the system does not know it.
|
||||
Then we create windows and set it in the main context main ```appl::MainApplication::onCreate```:
|
||||
|
||||
@snippet HelloWord/appl/Main.cpp ewol_sample_HW_main_set_windows
|
||||
|
||||
Here we call the create function that is created by the DECLARE_FACTORY macro
|
||||
|
||||
|
||||
**Note:**
|
||||
|
||||
```
|
||||
You can use many windows and select the one you want to display, but I do not think it is the best design.
|
||||
```
|
||||
|
||||
Build declaration: {#ewol_tutorial_hello_world_build}
|
||||
==================
|
||||
|
||||
Ewol commonly use the [lutin](http://HeeroYui.github.io/lutin) build system.
|
||||
|
||||
Then we need to add a "lutin_YourApplicationName.py", then for this example: ```lutin_ewol-sample-HelloWord.py```
|
||||
|
||||
@include lutin_ewol-sample-HelloWord.py
|
||||
|
||||
Show [lutin](http://HeeroYui.github.io/lutin/lutin_module.html) doc for more information...
|
||||
|
||||
Build your application {#ewol_tutorial_hello_world_buildappl}
|
||||
======================
|
||||
|
||||
Go to your workspace folder and launch:
|
||||
|
||||
```{.sh}
|
||||
lutin -C -mdebug ewol-sample-HelloWord
|
||||
# or
|
||||
lutin -C -mdebug ewol-sample-HelloWord?build
|
||||
```
|
||||
|
||||
You can now execute your application:
|
||||
|
||||
```{.sh}
|
||||
lutin -C -mdebug ewol-sample-HelloWord?run
|
||||
```
|
@ -1,108 +0,0 @@
|
||||
|
||||
=== Objectif ===
|
||||
:** Understand ewol basic [class[ewol::Object]]
|
||||
:** Use [class[ewol::Object]] correctly
|
||||
|
||||
== Basis of the ewol::Object ==
|
||||
|
||||
An object in Ewol is a simple class : [class[ewol::Object]] This object is the basis of all element in the ewol system.
|
||||
This is designed to manage many common things:
|
||||
|
||||
:** Unique ID
|
||||
:** Name
|
||||
:** Parameters
|
||||
:** Signal generation
|
||||
:** Xml configuration
|
||||
:** Removing
|
||||
:** Perodic calling
|
||||
|
||||
[note]
|
||||
Please do not compare with the gObject basic class...
|
||||
[/note]
|
||||
|
||||
|
||||
== Create an Object: ==
|
||||
|
||||
Creating an object is really simple:
|
||||
|
||||
[code style=c++]
|
||||
std::shared_ptr<ewol::Button> tmpButon = ewol::Button::create();
|
||||
APPL_INFO("We just create a button widget with unique ID=" << tmpButon->getId() << " name='" << tmpButon->getName() << "'");
|
||||
[/code]
|
||||
|
||||
Note that all object created are std::shared_ptr.
|
||||
|
||||
|
||||
Set the name of the object:
|
||||
|
||||
[code style=c++]
|
||||
tmpButon->setName("my widget name");
|
||||
APPL_INFO("We just create an Object with ID=" << tmpButon->getId() << " name='" << tmpButon->getName() << "'");
|
||||
[/code]
|
||||
|
||||
|
||||
== Remove an Object: ==
|
||||
|
||||
Simply use the function:
|
||||
[code style=c++]
|
||||
tmpButon->destroy();
|
||||
[/code]
|
||||
|
||||
This function request his parrent to remove the std::shared_ptr it keep on it.
|
||||
And when all std::shared_ptr is removed the object will be really removed.
|
||||
|
||||
At his point we can think an object is allive all the time someone keep a reference on it, then when you are not a parrent of the object, do not keep a std::shared_ptr but a std::weak_ptr.
|
||||
|
||||
[note]
|
||||
If some Object is not removed when you close the application, the system inform you with displaying all object already alive.
|
||||
[/note]
|
||||
|
||||
|
||||
== Retrieve an Object: ==
|
||||
|
||||
In Ewol this is possible to get a object with his name.
|
||||
|
||||
=== Find a global Object (ouside an Object) ===
|
||||
|
||||
[code style=c++]
|
||||
#include <ewol/context/Context.h>
|
||||
|
||||
std::shared_ptr<ewol::Object> tmpObject = ewol::getContext().getEObjectManager().getObjectNamed("obj Name");
|
||||
if (tmpObject == NULL) {
|
||||
APPL_ERROR("The Object does not exist");
|
||||
}
|
||||
[/code]
|
||||
|
||||
=== Find a global Object (inside an Object) ===
|
||||
|
||||
[code style=c++]
|
||||
std::shared_ptr<ewol::Object> tmpObject = getObjectNamed("obj Name");
|
||||
if (tmpObject == NULL) {
|
||||
APPL_ERROR("The Object does not exist");
|
||||
}
|
||||
[/code]
|
||||
|
||||
=== Find a sub-object ===
|
||||
|
||||
[code style=c++]
|
||||
std::shared_ptr<ewol::Object> tmpObject = getSubObjectNamed("obj Name");
|
||||
if (tmpObject == NULL) {
|
||||
APPL_ERROR("The Object does not exist");
|
||||
}
|
||||
[/code]
|
||||
|
||||
=== retriving your object type ===
|
||||
|
||||
It could be really interesting to retrive your own instance:
|
||||
|
||||
[code style=c++]
|
||||
std::shared_ptr<ewol::Object> tmpObject ...;
|
||||
|
||||
std::shared_ptr<appl::MyOwnObject> myObject = std::dynamic_pointer_cast<appl::MyOwnObject>(tmpObject);
|
||||
[/code]
|
||||
|
||||
== conclusion ==
|
||||
|
||||
TODO ...
|
||||
|
||||
|
125
doc/tutorial/010_ObjectModel.md
Normal file
@ -0,0 +1,125 @@
|
||||
EWOL: Object model {#ewol_tutorial_object_model}
|
||||
==================
|
||||
|
||||
@tableofcontents
|
||||
|
||||
Objectifs: {#ewol_tutorial_object_model_objectives}
|
||||
==========
|
||||
|
||||
- Understand ewol basic ewol::Object
|
||||
- Use ewol::Object correctly
|
||||
|
||||
Basis of the ewol::Object {#ewol_tutorial_object_model_object}
|
||||
=========================
|
||||
|
||||
An object in Ewol is a simple class: ewol::Object This object is the basis of all element in the ewol system.
|
||||
This is designed to manage many common things:
|
||||
|
||||
- Unique ID
|
||||
- Name
|
||||
- Parameters
|
||||
- Signal generation
|
||||
- Xml configuration
|
||||
- Removing
|
||||
|
||||
**Note:**
|
||||
|
||||
```
|
||||
Please do not compare with the gObject basic class...
|
||||
```
|
||||
|
||||
|
||||
Create an Object: {#ewol_tutorial_object_model_create}
|
||||
=================
|
||||
|
||||
Creating an object is really simple:
|
||||
|
||||
```{.cpp}
|
||||
ewol::widget::ButtonShared tmpButon = ewol::widget::Button::create();
|
||||
APPL_INFO("We just create a button widget with unique ID=" << tmpButon->getId() << " name='" << tmpButon->propertyName.get() << "'");
|
||||
```
|
||||
|
||||
**Note:**
|
||||
|
||||
```
|
||||
The widget is not stored in a ememory::SharedPtr<ewol::widget::Button> but in a ewol::widget::ButtonShared to simplify the using of the pointer.
|
||||
You have also: ememory::WeakPtr<ewol::widget::Button> = ewol::widget::ButtonWeak
|
||||
```
|
||||
|
||||
Set the name of the object:
|
||||
|
||||
```{.cpp}
|
||||
tmpButon->propertyName.set("my widget name");
|
||||
APPL_INFO("We just create an Object with ID=" << tmpButon->getId() << " name='" << tmpButon->propertyName.get() << "'");
|
||||
```
|
||||
|
||||
|
||||
Remove an Object: {#ewol_tutorial_object_model_remove}
|
||||
=================
|
||||
|
||||
Simply use the function:
|
||||
```{.cpp}
|
||||
tmpButon->destroy();
|
||||
```
|
||||
|
||||
This function request his parrent to remove the ememory::SharedPtr it keep on it.
|
||||
And when all ememory::SharedPtr is removed the object will be really removed.
|
||||
|
||||
At his point we can think an object is alive all the time someone keep a reference on it,
|
||||
then when you are not a parrent of the object, do not keep a ememory::SharedPtr but a ememory::WeakPtr.
|
||||
|
||||
**Note:**
|
||||
|
||||
```
|
||||
If some Object is not removed when you close the application, the system inform you with displaying all object alive.
|
||||
```
|
||||
|
||||
|
||||
Retrieve an Object: {#ewol_tutorial_object_model_find}
|
||||
===================
|
||||
|
||||
In Ewol this is possible to get a object with his name.
|
||||
|
||||
Find a global Object (ouside an Object)
|
||||
---------------------------------------
|
||||
|
||||
```{.cpp}
|
||||
#include <ewol/context/Context.hpp>
|
||||
|
||||
ewol::ObjectShared tmpObject = ewol::getContext().getEObjectManager().getObjectNamed("obj Name");
|
||||
if (tmpObject == null) {
|
||||
APPL_ERROR("The Object does not exist");
|
||||
}
|
||||
```
|
||||
|
||||
Find a global Object (inside an Object)
|
||||
---------------------------------------
|
||||
|
||||
```{.cpp}
|
||||
ewol::ObjectShared tmpObject = getObjectNamed("obj Name");
|
||||
if (tmpObject == null) {
|
||||
APPL_ERROR("The Object does not exist");
|
||||
}
|
||||
```
|
||||
|
||||
Find a sub-object
|
||||
-----------------
|
||||
|
||||
```{.cpp}
|
||||
ewol::ObjectShared tmpObject = getSubObjectNamed("obj Name");
|
||||
if (tmpObject == NULL) {
|
||||
APPL_ERROR("The Object does not exist");
|
||||
}
|
||||
```
|
||||
|
||||
retriving your object type
|
||||
--------------------------
|
||||
|
||||
It could be really interesting to retrive your own instance:
|
||||
|
||||
```{.cpp}
|
||||
ewol::ObjectShared tmpObject ...;
|
||||
|
||||
appl::MyOwnObjectShared myObject = ememory::dynamicPointerCast<appl::MyOwnObject>(tmpObject);
|
||||
```
|
||||
|
@ -1,98 +0,0 @@
|
||||
|
||||
=== Objectif ===
|
||||
:** Understand ewol::Object configuration parameter
|
||||
:** Create an configurable object
|
||||
|
||||
== Configuration using ==
|
||||
|
||||
All [class[ewol::Object]] have a configuration of parameters (the object name is a parameter), Then we need to set get and use xml to update parameters.
|
||||
|
||||
=== Set a Parameter ===
|
||||
|
||||
[note]
|
||||
Using getter and setter is really better, and faster.
|
||||
[/note]
|
||||
|
||||
==== With a string configuration ====
|
||||
|
||||
[code style=c++]
|
||||
if (tmpObject->parameterSet("name", "new name of object") == false) {
|
||||
APPL_ERROR("Can not set object parameter");
|
||||
}
|
||||
[/code]
|
||||
|
||||
==== whith the object name ====
|
||||
|
||||
[code style=c++]
|
||||
if (parameterSetOnWidgetNamed("objectName", "value", "16.2") == false) {
|
||||
APPL_ERROR("Can not set object parameter");
|
||||
}
|
||||
[/code]
|
||||
|
||||
=== Get Parameter ===
|
||||
|
||||
[code style=c++]
|
||||
std::string val = tmpObject->parameterGet("name");
|
||||
APPL_INFO("Get Object property : name='" << val << "'");
|
||||
[/code]
|
||||
|
||||
== Implement configuration ==
|
||||
|
||||
[code style=c++]
|
||||
#include <ewol/object/Object.h>
|
||||
namespace appl {
|
||||
class MyObj : public ewol::Object {
|
||||
protected:
|
||||
//! @brief Constructor
|
||||
MyObj(void) :
|
||||
m_value(*this, "value", false, "Value of the parameter (descrition string)") {
|
||||
// nothing to do..
|
||||
}
|
||||
void init() {
|
||||
ewol::Object::init();
|
||||
}
|
||||
public:
|
||||
//! @brief Destructor
|
||||
virtual ~MyObj(void) { }
|
||||
DECLARE_FACTORY(MyObj);
|
||||
private:
|
||||
ewol::object::Param<bool> m_value; //!< Internal Object value
|
||||
public:
|
||||
//! @brief Setter
|
||||
void setValue(bool _val) {
|
||||
m_value.set(_val);
|
||||
}
|
||||
//! @brief Getter
|
||||
bool getValue() const {
|
||||
return m_value.get();
|
||||
}
|
||||
public: // herited function:
|
||||
void onParameterChangeValue(const ewol::object::ParameterRef& _paramPointer) {
|
||||
if (_paramPointer == m_value) {
|
||||
APPL_DEBUG("The internal value has change, new value is : '" << m_value.get() << "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[/code]
|
||||
|
||||
In the contructor we need to add:
|
||||
[code style=c++]
|
||||
m_value(*this, "value", false, "Value of the parameter (descrition string)")
|
||||
[/code]
|
||||
:** [b]'*this':[/b] Reference the main class to call it chen value change.
|
||||
:** [b]"value":[/b] Is the name of the parameter.
|
||||
:** [b]false:[/b] The default value.
|
||||
:** [b]"....."[/b] Description of the parameter (optionnal).
|
||||
|
||||
|
||||
The function [b]onParameterChangeValue[/b] is called only the parameter change (no historic has been registered)
|
||||
|
||||
The last point is that the m_value.get() is an inline fuction then it take no more CPU cycle to access the value than normal variable.
|
||||
|
||||
Some other parameter are availlable :
|
||||
:** ewol::object::Param<T> Basic parameter.
|
||||
:** ewol::object::ParamRange<T> For numeric parameter that range value are check befor setting new value.
|
||||
:** ewol::object::ParamList<T> For List of parameter values.
|
||||
|
||||
|
110
doc/tutorial/011_ObjectConfig.md
Normal file
@ -0,0 +1,110 @@
|
||||
EWOL: Object config {#ewol_tutorial_object_config}
|
||||
===================
|
||||
|
||||
@tableofcontents
|
||||
|
||||
Objectifs: {#ewol_tutorial_object_config_objectives}
|
||||
==========
|
||||
|
||||
- Understand base of [e-property](http://atria-soft.github.io/eproperty) configuration parameter
|
||||
- Create an configurable object
|
||||
|
||||
Configuration using {#ewol_tutorial_object_configusing}
|
||||
===================
|
||||
|
||||
All ewol::Object have a configuration of parameters (the object name is a parameter),
|
||||
then we need to set get and use xml to update parameters.
|
||||
|
||||
Set a Parameter/Property {#ewol_tutorial_object_config_prop}
|
||||
------------------------
|
||||
|
||||
**Note:**
|
||||
|
||||
```
|
||||
Parameter is managed by the [e-property](http://atria-soft.github.io/eproperty)
|
||||
```
|
||||
|
||||
With a string configuration
|
||||
***************************
|
||||
|
||||
```{.cpp}
|
||||
if (tmpObject->properties.set("name", "new name of object") == false) {
|
||||
APPL_ERROR("Can not set object parameter");
|
||||
}
|
||||
```
|
||||
|
||||
whith the object name
|
||||
*********************
|
||||
|
||||
```{.cpp}
|
||||
if (ewol::propertySetOnObjectNamed("objectName", "value", "16.2") == false) {
|
||||
APPL_ERROR("Can not set object parameter");
|
||||
}
|
||||
```
|
||||
|
||||
Get Parameter {#ewol_tutorial_object_config_param}
|
||||
-------------
|
||||
|
||||
```{.cpp}
|
||||
etk::String val = tmpObject->properties.get("name");
|
||||
APPL_INFO("Get Object property: name='" << val << "'");
|
||||
```
|
||||
|
||||
Implement configuration {#ewol_tutorial_object_config_impl}
|
||||
=======================
|
||||
|
||||
```{.cpp}
|
||||
#include <ewol/object/Object.hpp>
|
||||
namespace appl {
|
||||
class MyObj : public ewol::Object {
|
||||
public:
|
||||
eproperty::Value<bool> propertyValue; //!< Property interface (all time start with "property")
|
||||
protected:
|
||||
//! @brief Constructor
|
||||
MyObj(void) :
|
||||
propertyValue(this, "value",
|
||||
false,
|
||||
"Value of the parameter (descrition string)",
|
||||
&appl::MyObj::onChangeParameterValue) {
|
||||
// nothing to do..
|
||||
}
|
||||
void init() {
|
||||
ewol::Object::init();
|
||||
// do some stuff with the init value
|
||||
}
|
||||
public:
|
||||
//! @brief Destructor
|
||||
virtual ~MyObj(void) { }
|
||||
DECLARE_FACTORY(MyObj);
|
||||
public:
|
||||
void onChangeParameterValue() {
|
||||
APPL_DEBUG("The internal value has change, new value is : '" << *m_value << "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
In the contructor we need to add:
|
||||
```{.cpp}
|
||||
propertyValue(this,
|
||||
"value",
|
||||
false,
|
||||
"Value of the parameter (descrition string)",
|
||||
&appl::MyObj::onChangeParameterValue)
|
||||
```
|
||||
- **'this':** Pointer the main class to call it chen value change.
|
||||
- **"value":** Is the name of the parameter.
|
||||
- **false:** The default value.
|
||||
- **"....."** Description of the parameter (optionnal).
|
||||
- **&appl::MyObj::onChangeParameterValue** The callback when the value change (optionnal).
|
||||
|
||||
|
||||
The last point is that the ```*propertyValue``` same as ```propertyValue.get()``` are inline fuction then it take no more CPU cycle to access the value than normal variable.
|
||||
|
||||
Some other parameter are availlable :
|
||||
- eproperty::Value<T> Basic parameter.
|
||||
- eproperty::Range<T> For numeric parameter that range value are check befor setting new value.
|
||||
- eproperty::List<T> For List of parameter values.
|
||||
|
||||
For more information see [e-property](http://atria-soft.github.io/eproperty)
|
||||
|
@ -1,171 +0,0 @@
|
||||
|
||||
=== Objectif ===
|
||||
:** Understand ewol::Object Messaging system
|
||||
:** Create extern message and receive Object message
|
||||
|
||||
== Message system ==
|
||||
|
||||
Message system is based on generic std::funtion and std::bind methode:
|
||||
|
||||
It permit to an object to generate some [b]'signals'[/b].
|
||||
|
||||
All signal are synchronous
|
||||
|
||||
|
||||
== Receive signals from other object ==
|
||||
|
||||
[todo]
|
||||
Link with the signal name
|
||||
[/todo]
|
||||
|
||||
Register on the 'up' and 'value' signal of a button:
|
||||
|
||||
Button header :
|
||||
[code style=c++]
|
||||
...
|
||||
public:
|
||||
ewol::object::Signal<void> signalDown;
|
||||
ewol::object::Signal<void> signalUp;
|
||||
...
|
||||
ewol::object::Signal<bool> signalValue;
|
||||
...
|
||||
[/code]
|
||||
|
||||
=== simple signal connection: ===
|
||||
|
||||
[code style=c++]
|
||||
#include <ewol/object/Object.h>
|
||||
#include <ewol/widget/Button.h>
|
||||
namespace appl {
|
||||
class MyObj : public ewol::Object {
|
||||
private:
|
||||
std::shared_ptr<ewol::widget::Button> m_button;
|
||||
protected:
|
||||
//! @brief Constructor
|
||||
MyObj(void) {
|
||||
// nothing to do..
|
||||
}
|
||||
void init() {
|
||||
ewol::Object::init();
|
||||
m_button = ewol::widget::Button::Create();
|
||||
if (m_button == nullptr) {
|
||||
APPL_ERROR("Can not create button...");
|
||||
return;
|
||||
}
|
||||
// We connect signals here :
|
||||
m_button->signalUp.bind(shared_from_this(), &appl::MyObj::onCallbackUp);
|
||||
m_button->signalValue.bind(shared_from_this(), &appl::MyObj::onCallbackValue);
|
||||
}
|
||||
public:
|
||||
//! @brief Destructor
|
||||
virtual ~MyObj(void) { }
|
||||
DECLARE_FACTORY(MyObj);
|
||||
private:
|
||||
void onCallbackUp() {
|
||||
APPL_INFO("button pressed: UP);
|
||||
}
|
||||
void onCallbackValue(const bool& _value) {
|
||||
APPL_INFO("button value: " << _value);
|
||||
}
|
||||
}
|
||||
}
|
||||
[/code]
|
||||
|
||||
|
||||
=== Advenced signal connection: ===
|
||||
|
||||
Here we will see how to connect an advance function on a signal
|
||||
|
||||
[code style=c++]
|
||||
#include <ewol/object/Object.h>
|
||||
#include <ewol/widget/Button.h>
|
||||
namespace appl {
|
||||
class MyObj : public ewol::Object {
|
||||
private:
|
||||
std::shared_ptr<ewol::widget::Button> m_button;
|
||||
protected:
|
||||
//! @brief Constructor
|
||||
MyObj(void) {
|
||||
// nothing to do..
|
||||
}
|
||||
void init() {
|
||||
ewol::Object::init();
|
||||
m_button = ewol::widget::Button::Create();
|
||||
if (m_button == nullptr) {
|
||||
APPL_ERROR("Can not create button...");
|
||||
return;
|
||||
}
|
||||
// We connect signals here :
|
||||
m_button->signalUp.register(shared_from_this(), std::bind(&appl::MyObj::onCallbackUp, this, std::string("tmpVariableToSend")));
|
||||
m_button->signalValue.register(shared_from_this(), std::bind(&appl::MyObj::onCallbackValue, this));
|
||||
}
|
||||
public:
|
||||
//! @brief Destructor
|
||||
virtual ~MyObj(void) { }
|
||||
DECLARE_FACTORY(MyObj);
|
||||
private:
|
||||
void onCallbackUp(const std::string& _value) {
|
||||
APPL_INFO("button pressed: UP inputMessage: " << _value);
|
||||
}
|
||||
void onCallbackValue() {
|
||||
APPL_INFO("button value: " << _value);
|
||||
}
|
||||
}
|
||||
}
|
||||
[/code]
|
||||
|
||||
=== Connect to a signal with a named widget ===
|
||||
|
||||
TODO: documentation :
|
||||
:** subBind(_type, _name, _event, _obj, _func)
|
||||
:** globalBind(_type, _name, _event, _obj, _func)
|
||||
:** externSubBind(_object, _type, _name, _event, _obj, _func)
|
||||
|
||||
|
||||
== Declare Signal ==
|
||||
|
||||
=== source ===
|
||||
|
||||
[code style=c++]
|
||||
#include <ewol/object/Object.h>
|
||||
#include <ewol/widget/Button.h>
|
||||
namespace appl {
|
||||
class MyObj : public ewol::Object {
|
||||
public:
|
||||
ewol::object::Signal<void> signalEmpty;
|
||||
ewol::object::Signal<bool> signalBoolean;
|
||||
ewol::object::Signal<std::string> signalString;
|
||||
protected:
|
||||
//! @brief Constructor
|
||||
MyObj(void) :
|
||||
signalEmpty(*this, "empty"),
|
||||
signalBoolean(*this, "boolean"),
|
||||
signalString(*this, "string") {
|
||||
// nothing to do..
|
||||
}
|
||||
void init() {
|
||||
ewol::Object::init();
|
||||
}
|
||||
public:
|
||||
//! @brief Destructor
|
||||
virtual ~MyObj(void) { }
|
||||
DECLARE_FACTORY(MyObj);
|
||||
private:
|
||||
void process() {
|
||||
signalEmpty.emit();
|
||||
signalBoolean.emit(false);
|
||||
signalString.emit("plop... plop");
|
||||
}
|
||||
}
|
||||
}
|
||||
[/code]
|
||||
|
||||
== Conclusion ==
|
||||
|
||||
You will now able to reise signals between objects...
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|