forked from enlightenment/efl
Compare commits
23 Commits
Author | SHA1 | Date |
---|---|---|
Carsten Haitzler | 185e1c56fc | |
Carsten Haitzler | 0eda6e589d | |
Carsten Haitzler | cfef8a6a6c | |
Carsten Haitzler | 1c0e846e3b | |
junsu choi | a9dbba3f63 | |
junsu choi | 9dae699424 | |
junsu choi | 2c9f08f8cb | |
junsu choi | 76f698faf0 | |
Carsten Haitzler | c3a5aa2f2c | |
junsu choi | 1b64de1cca | |
Carsten Haitzler | 071fc06ec5 | |
Carsten Haitzler | 0647b7e576 | |
Carsten Haitzler | 553c418b10 | |
Carsten Haitzler | 202a58b7ab | |
Carsten Haitzler | 7b75d399e2 | |
Carsten Haitzler | f39af23cee | |
Carsten Haitzler | b817d223cb | |
Carsten Haitzler | 3efa56568f | |
Carsten Haitzler | 7f2d54ab7f | |
Carsten Haitzler | 5c19727c91 | |
Carsten Haitzler | a78b174e03 | |
Carsten Haitzler | 5b40705cf1 | |
Carsten Haitzler | e975b98021 |
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"project_id" : "efl",
|
||||
"projects" : "efl",
|
||||
"conduit_uri" : "https://phab.enlightenment.org/",
|
||||
"phabricator.uri" : "https://phab.enlightenment.org/",
|
||||
"repository.callsign" : "EFL"
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
mkdir build-bootstrap-native
|
||||
meson --prefix=/usr/ --libdir=/usr/lib -Dbuild-examples=false -Dbuild-tests=false -Dbindings=cxx build-bootstrap-native
|
||||
ninja -C build-bootstrap-native install
|
||||
rm -rf build-bootstrap-native
|
||||
ldconfig
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
if [ -d /usr/local/lib64 ] ; then
|
||||
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
|
||||
else
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
||||
fi
|
||||
cd .ci/example
|
||||
|
||||
#build the example
|
||||
mkdir build
|
||||
meson . build
|
||||
ninja -C build all
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
max_size = 500M
|
||||
compression = true
|
||||
compression_level = 1
|
||||
sloppiness = time_macros,include_file_mtime,include_file_ctime,file_macro
|
||||
run_second_cpp = false
|
||||
hash_dir = false
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" = "codecov" ] || [ "$1" = "coverity" ] || [ "$1" = "mingw" ] || [ "$1" = "release-ready" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "app-compile-test"
|
||||
travis_time_start "app-compile-test"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) .ci/build-example.sh
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
exit 0
|
||||
#FIXME: we don't install efl_ui.pc on osx?
|
||||
export PATH="$(brew --prefix gettext)/bin:$PATH"
|
||||
.ci/build-example.sh
|
||||
fi
|
||||
travis_time_finish "app-compile-test"
|
||||
travis_fold end "app-compile-test"
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
travis_fold start "ccache-stats"
|
||||
travis_time_start "ccache-stats"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec $(cat $HOME/cid) ccache -s
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
ccache -s
|
||||
fi
|
||||
travis_time_finish "ccache-stats"
|
||||
travis_fold end "ccache-stats"
|
|
@ -0,0 +1,114 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
travis_fold start "meson"
|
||||
travis_time_start "meson"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
# Why do we need to disable the imf loaders here?
|
||||
OPTS=" -Decore-imf-loaders-disabler=scim,ibus"
|
||||
|
||||
MONO_LINUX_COPTS=" -Dbindings=cxx,mono -Dmono-beta=true"
|
||||
|
||||
WAYLAND_LINUX_COPTS=" -Dwl=true -Ddrm=true -Dopengl=es-egl -Dwl-deprecated=true -Ddrm-deprecated=true"
|
||||
|
||||
# TODO:
|
||||
# - No libelogind package in fedora 30 repo
|
||||
# - Ibus
|
||||
ENABLED_LINUX_COPTS=" -Dfb=true -Dsdl=true -Dbuffer=true -Dbuild-id=travis-build \
|
||||
-Ddebug-threads=true -Dglib=true -Dg-mainloop=true -Dxpresent=true -Dxinput22=true \
|
||||
-Decore-imf-loaders-disabler= \
|
||||
-Dharfbuzz=true -Dpixman=true -Dhyphen=true -Defl-one=true \
|
||||
-Dvnc-server=true -Delua=true -Dbindings=lua,cxx,mono -Delogind=false -Dinstall-eo-files=true -Dphysics=true"
|
||||
|
||||
# Enabled png, jpeg evas loader for in tree edje file builds
|
||||
DISABLED_LINUX_COPTS=" -Daudio=false -Davahi=false -Dx11=false -Dphysics=false -Deeze=false \
|
||||
-Dopengl=none -Deina-magic-debug=false -Dbuild-examples=false -Dbuild-tests=false \
|
||||
-Dcrypto=gnutls -Dglib=false -Dgstreamer=false -Dsystemd=false -Dpulseaudio=false \
|
||||
-Dnetwork-backend=connman -Dxinput2=false -Dtslib=false \
|
||||
-Devas-loaders-disabler=gst,pdf,ps,raw,svg,xcf,bmp,dds,eet,generic,gif,ico,jp2k,json,pmaps,psd,tga,tgv,tiff,wbmp,webp,xpm,avif,heif \
|
||||
-Decore-imf-loaders-disabler=xim,ibus,scim \
|
||||
-Dfribidi=false -Dfontconfig=false \
|
||||
-Dedje-sound-and-video=false -Dembedded-lz4=false -Dlibmount=false -Dv4l2=false \
|
||||
-Delua=false -Dnls=false -Dbindings= -Dlua-interpreter=luajit -Dnative-arch-optimization=false"
|
||||
#evas_filter_parser.c:(.text+0xc59): undefined reference to `lua_getglobal' with interpreter lua
|
||||
|
||||
RELEASE_READY_LINUX_COPTS=" --buildtype=release"
|
||||
|
||||
MINGW_COPTS="--cross-file .ci/cross_toolchain.txt -Davahi=false -Deeze=false -Dsystemd=false \
|
||||
-Dpulseaudio=false -Dx11=false -Dopengl=none -Dlibmount=false \
|
||||
-Devas-loaders-disabler=json,pdf,ps,raw,svg,rsvg,avif,heif \
|
||||
-Dharfbuzz=true -Dpixman=true -Dembedded-lz4=false "
|
||||
|
||||
if [ "$1" = "default" ]; then
|
||||
OPTS="$OPTS $MONO_LINUX_COPTS"
|
||||
elif [ "$1" = "options-enabled" ]; then
|
||||
OPTS="$OPTS $ENABLED_LINUX_COPTS $WAYLAND_LINUX_COPTS"
|
||||
elif [ "$1" = "options-disabled" ]; then
|
||||
OPTS="$OPTS $DISABLED_LINUX_COPTS"
|
||||
elif [ "$1" = "wayland" ]; then
|
||||
OPTS="$OPTS $WAYLAND_LINUX_COPTS"
|
||||
elif [ "$1" = "release-ready" ]; then
|
||||
OPTS="$OPTS $RELEASE_READY_LINUX_COPTS"
|
||||
elif [ "$1" = "coverity" ]; then
|
||||
travis_fold start "cov-download"
|
||||
travis_time_start "cov-download"
|
||||
OPTS="$OPTS $WAYLAND_LINUX_COPTS"
|
||||
docker exec --env COVERITY_SCAN_TOKEN=$COVERITY_SCAN_TOKEN $(cat $HOME/cid) sh -c '.ci/coverity-tools-install.sh'
|
||||
travis_time_finish "cov-download"
|
||||
travis_fold end "cov-download"
|
||||
elif [ "$1" = "mingw" ]; then
|
||||
travis_fold start "cross-native"
|
||||
travis_time_start "cross-native"
|
||||
OPTS="$OPTS $MINGW_COPTS"
|
||||
docker exec $(cat $HOME/cid) sh -c '.ci/bootstrap-efl-native-for-cross.sh'
|
||||
travis_time_finish "cross-native"
|
||||
travis_fold end "cross-native"
|
||||
fi
|
||||
|
||||
if [ "$1" = "asan" ]; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env CC="ccache gcc" \
|
||||
--env CXX="ccache g++" --env CFLAGS="-O0 -g" --env CXXFLAGS="-O0 -g" \
|
||||
--env LD="ld.gold" $(cat $HOME/cid) sh -c "mkdir build && meson build $OPTS -Db_sanitize=address"
|
||||
elif [ "$1" = "mingw" ]; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env PKG_CONFIG_PATH="/ewpi-64-install/lib/pkgconfig/" \
|
||||
$(cat $HOME/cid) sh -c "mkdir build && meson build $OPTS"
|
||||
elif [ "$1" = "coverity" ]; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env CFLAGS="-fdirectives-only" --env CC="gcc" --env CXX="g++"\
|
||||
--env CXXFLAGS="-fdirectives-only" $(cat $HOME/cid) sh -c "mkdir build && meson build $OPTS"
|
||||
else
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env CC="ccache gcc" \
|
||||
--env CXX="ccache g++" --env CFLAGS="-fdirectives-only" --env CXXFLAGS="-fdirectives-only" \
|
||||
--env LD="ld.gold" $(cat $HOME/cid) sh -c "mkdir build && meson build $OPTS"
|
||||
fi
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
# Prepare OSX env for build
|
||||
mkdir -p ~/Library/LaunchAgents
|
||||
ln -sfv /usr/local/opt/d-bus/*.plist ~/Library/LaunchAgents
|
||||
launchctl load ~/Library/LaunchAgents/org.freedesktop.dbus-session.plist
|
||||
export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH"
|
||||
|
||||
export CFLAGS="-I/usr/local/opt/openssl/include -frewrite-includes $CFLAGS"
|
||||
export LDFLAGS="-L/usr/local/opt/openssl/lib $LDFLAGS"
|
||||
LIBFFI_VER=$(brew list --versions libffi|head -n1|cut -d' ' -f2)
|
||||
export CC="ccache gcc"
|
||||
#force using system zlib, which doesn't have a pc file provided because that's the smartest thing possible
|
||||
zlib_vers=$(grep ZLIB_VERSION /usr/include/zlib.h|head -n1|awk '{print $3}'|cut -d'"' -f2)
|
||||
sed -iE "s/REPLACE_THIS/$zlib_vers/" .ci/zlib.pc
|
||||
export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig:/usr/local/Cellar/libffi/$LIBFFI_VER/lib/pkgconfig:$(pwd)/.ci"
|
||||
mkdir build && meson build -Dopengl=full -Decore-imf-loaders-disabler=scim,ibus -Dx11=false -Davahi=false -Deeze=false -Dsystemd=false -Dnls=false -Dcocoa=true -Dgstreamer=false -Dbuild-tests=false
|
||||
else # Native Ubuntu Linux Travis builds (non-docker)
|
||||
OPTS=" -Decore-imf-loaders-disabler=scim,ibus"
|
||||
|
||||
if [ "$TRAVIS_CPU_ARCH" = "ppc64le" ]; then
|
||||
OPTS="$OPTS -Dbindings="
|
||||
elif [ "$TRAVIS_CPU_ARCH" = "s390x" ] ; then
|
||||
OPTS="$OPTS -Dbindings= -Delua=false -Dlua-interpreter=lua"
|
||||
fi
|
||||
if [ "$1" = "codecov" ]; then
|
||||
OPTS="$OPTS -Db_coverage=true"
|
||||
fi
|
||||
mkdir build && meson build $OPTS
|
||||
fi
|
||||
travis_time_finish "meson"
|
||||
travis_fold end "meson"
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" != "exactness" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "exactness"
|
||||
travis_time_start "exactness"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) sh -c 'git -C /exactness-elm-data pull'
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/lib64 --env EINA_LOG_LEVELS_GLOB=eina_*:0,ecore*:0,efreet*:0,eldbus:0,elementary:0 $(cat $HOME/cid) exactness -j 20 -b /exactness-elm-data/default-profile -p /exactness-elm-data/default-profile/ci-fedora32-tests.txt
|
||||
fi
|
||||
travis_time_finish "exactness"
|
||||
travis_fold end "exactness"
|
|
@ -0,0 +1,17 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" != "default" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
travis_fold start "ninja-benchmark"
|
||||
travis_time_start "ninja-benchmark"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env ELM_ENGINE=buffer $(cat $HOME/cid) ninja benchmark -C build
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH"
|
||||
ninja benchmark -C build
|
||||
fi
|
||||
travis_time_finish "ninja-benchmark"
|
||||
travis_fold end "ninja-benchmark"
|
|
@ -0,0 +1,41 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" = "release-ready" ] || [ "$1" = "mingw" ] || [ "$1" = "coverity" ] || [ "$1" = "options-enabled" ] || [ "$1" = "options-disabled" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
NUM_TRIES=5
|
||||
|
||||
if [ "$1" = "codecov" ] ; then
|
||||
travis_fold start "codecov"
|
||||
travis_time_start "codecov"
|
||||
for tries in $(seq 1 ${NUM_TRIES}); do
|
||||
export EFL_TEST_ECORE_CON_IPV6=1
|
||||
meson test -t 120 -C build --wrapper dbus-launch && break
|
||||
cat build/meson-logs/testlog-dbus-launch.txt
|
||||
if [ $tries != ${NUM_TRIES} ] ; then echo "tests failed, trying again!" ; fi
|
||||
false
|
||||
done
|
||||
curl -s https://codecov.io/bash | bash -s -
|
||||
travis_time_finish "codecov"
|
||||
travis_fold end "codecov"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "ninja-test"
|
||||
travis_time_start "ninja-test"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
for tries in $(seq 1 ${NUM_TRIES}); do
|
||||
(docker exec --env EINA_LOG_BACKTRACE="0" --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) meson test -t 120 -C build --wrapper dbus-launch ) && break
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) cat build/meson-logs/testlog-dbus-launch.txt
|
||||
if [ $tries != ${NUM_TRIES} ] ; then echo "tests failed, trying again!" ; fi
|
||||
false
|
||||
done
|
||||
fi
|
||||
ret=$?
|
||||
travis_time_finish "ninja-test"
|
||||
travis_fold end "ninja-test"
|
||||
|
||||
exit $ret
|
|
@ -0,0 +1,22 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" != "release-ready" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "ninja-dist"
|
||||
travis_time_start "ninja-dist"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env CC="ccache gcc" \
|
||||
--env CXX="ccache g++" \
|
||||
--env CFLAGS="-fdirectives-only" --env CXXFLAGS="-fdirectives-only" \
|
||||
--env LD="ld.gold" $(cat $HOME/cid) dbus-launch ninja -C build dist || \
|
||||
(sudo cat efl-*/_build/sub/src/test-suite.log; false)
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH"
|
||||
ninja -C build dist
|
||||
fi
|
||||
travis_time_finish "ninja-dist"
|
||||
travis_fold end "ninja-dist"
|
|
@ -0,0 +1,20 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" = "release-ready" ] || [ "$1" = "coverity" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "ninja-install"
|
||||
travis_time_start "ninja-install"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) ninja -C build install
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH"
|
||||
ninja -C build install
|
||||
else
|
||||
sudo ninja -C build install
|
||||
fi
|
||||
travis_time_finish "ninja-install"
|
||||
travis_fold end "ninja-install"
|
|
@ -0,0 +1,31 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$1" = "release-ready" ] ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
travis_fold start "ninja"
|
||||
travis_time_start "ninja"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
if [ "$1" = "coverity" ] ; then
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env PATH="/src/cov-analysis-linux64-2019.03/bin:$PATH" $(cat $HOME/cid) sh -c "cov-build --dir cov-int ninja -C build"
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) sh -c "tar caf efl-$(git rev-parse --short HEAD).xz cov-int"
|
||||
docker exec --env EIO_MONITOR_POLL=1 --env COVERITY_SCAN_TOKEN=$COVERITY_SCAN_TOKEN $(cat $HOME/cid) sh -c ".ci/coverity-upload.sh"
|
||||
else
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) ninja -C build
|
||||
if [ "$1" = "options-enabled" ]; then # we have efl-one on and want to check it after build
|
||||
docker exec --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) python scripts/test-efl-one.py build
|
||||
fi
|
||||
fi
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
latest_brew_python3_bin="$(ls -1d /usr/local/Cellar/python/3.*/bin | sort -n | tail -n1)"
|
||||
export PATH="${latest_brew_python3_bin}${PATH:+:}${PATH}"
|
||||
export PATH="$(brew --prefix gettext)/bin:$PATH"
|
||||
ninja -C build
|
||||
else
|
||||
ninja -C build
|
||||
fi
|
||||
travis_time_finish "ninja"
|
||||
travis_fold end "ninja"
|
|
@ -0,0 +1,17 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
travis_fold start "ccache-setup"
|
||||
travis_time_start "ccache-setup"
|
||||
if [ "$DISTRO" != "" ] ; then
|
||||
docker exec $(cat $HOME/cid) sh -c ".ci/docker-ccache-setup.sh $1"
|
||||
docker exec $(cat $HOME/cid) ccache -pz
|
||||
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||
cp .ci/ccache.conf ~/.ccache
|
||||
sed -iE '/^base_dir/d' ~/.ccache/ccache.conf
|
||||
echo "base_dir = $pwd" >> ~/.ccache/ccache.conf
|
||||
ccache -pz
|
||||
fi
|
||||
travis_time_finish "ccache-setup"
|
||||
travis_fold end "ccache-setup"
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
|
||||
wget https://scan.coverity.com/download/linux64 --post-data="token=$COVERITY_SCAN_TOKEN&project=Enlightenment+Foundation+Libraries" -O coverity_tool.tgz
|
||||
tar xzf coverity_tool.tgz
|
|
@ -0,0 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
curl --form token=$COVERITY_SCAN_TOKEN \
|
||||
--form email=stefan@datenfreihafen.org \
|
||||
--form file=@efl-$(git rev-parse --short HEAD).xz \
|
||||
--form version=$(git rev-parse --short HEAD) \
|
||||
--form description="Submission from Travis CI" \
|
||||
https://scan.coverity.com/builds?project=Enlightenment+Foundation+Libraries
|
|
@ -0,0 +1,20 @@
|
|||
[binaries]
|
||||
c = ['ccache', 'x86_64-w64-mingw32-gcc']
|
||||
cpp = ['ccache', 'x86_64-w64-mingw32-g++']
|
||||
ar = 'x86_64-w64-mingw32-ar'
|
||||
ranlib = 'x86_64-w64-mingw32-ranlib'
|
||||
strip = 'x86_64-w64-mingw32-strip'
|
||||
windres = 'x86_64-w64-mingw32-windres'
|
||||
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
|
||||
|
||||
[host_machine]
|
||||
system = 'windows'
|
||||
cpu_family = 'x86_64'
|
||||
cpu = 'x86_64'
|
||||
endian = 'little'
|
||||
|
||||
[properties]
|
||||
c_args = ['-D_WIN32_WINNT=0x0601', '-I/ewpi-64-install/include', '-O2', '-pipe', '-march=x86-64']
|
||||
c_link_args = ['-L/ewpi-64-install/lib', '-s']
|
||||
cpp_args = ['-D_WIN32_WINNT=0x0601', '-I/ewpi-64-install/include', '-O2', '-pipe', '-march=x86-64']
|
||||
cpp_link_args = ['-L/ewpi-64-install/lib', '-s']
|
|
@ -0,0 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
CI_BUILD_TYPE="$1"
|
||||
|
||||
cp .ci/ccache.conf ~/.ccache
|
||||
|
||||
sed -iE '/^base_dir/d' ~/.ccache/ccache.conf
|
||||
echo "base_dir = $pwd" >> ~/.ccache/ccache.conf
|
|
@ -0,0 +1,13 @@
|
|||
project(
|
||||
'efl-example', 'c',
|
||||
version : '0.0.1',
|
||||
default_options: [ 'c_std=gnu99', 'warning_level=2' ],
|
||||
meson_version : '>= 0.38.0')
|
||||
|
||||
eina = dependency('eina', version : '>=1.20.99')
|
||||
efl = dependency('efl-ui', version : '>=1.20.99')
|
||||
elm = dependency('elementary', version : '>=1.20.99')
|
||||
|
||||
inc = include_directories('.')
|
||||
subdir('src')
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
#define EFL_BETA_API_SUPPORT 1
|
||||
#define EFL_NOLEGACY_API_SUPPORT
|
||||
#include <Efl_Ui.h>
|
||||
|
||||
|
||||
EAPI_MAIN void
|
||||
efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
|
||||
{
|
||||
return;
|
||||
}
|
||||
EFL_MAIN()
|
|
@ -0,0 +1,12 @@
|
|||
src = files([
|
||||
'main.c',
|
||||
])
|
||||
|
||||
deps = [eina, efl, elm]
|
||||
|
||||
executable('efl_example', src,
|
||||
dependencies : deps,
|
||||
include_directories : inc,
|
||||
install : true
|
||||
)
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
travis_fold start "bionic-deps"
|
||||
travis_time_start "bionic-deps"
|
||||
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y build-essential autoconf automake autopoint doxygen check libharfbuzz-dev libpng-dev libudev-dev libwebp-dev libssl-dev libfribidi-dev libcogl-gles2-dev libgif-dev libtiff5-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libdbus-1-dev libmount-dev libblkid-dev libpulse-dev libxrandr-dev libxtst-dev libxcursor-dev libxcomposite-dev libxinerama-dev libxkbfile-dev libbullet-dev libsndfile1-dev libraw-dev libspectre-dev libpoppler-cpp-dev libpam0g-dev liblz4-dev faenza-icon-theme gettext git imagemagick libasound2-dev libbluetooth-dev libfontconfig1-dev libfreetype6-dev libibus-1.0-dev libiconv-hook-dev libjpeg-dev libjpeg-turbo8-dev libpoppler-dev libpoppler-private-dev libproxy-dev librsvg2-dev libscim-dev libsystemd-dev libtool libudisks2-dev libunibreak-dev libxcb-keysyms1-dev libxss-dev linux-tools-common libcurl4-openssl-dev systemd ccache git binutils-gold python3-pip ninja-build dbus-x11 libavahi-client-dev python3-setuptools libopenjp2-7-dev libc6-dev libpcre3-dev
|
||||
# s390x on Ubuntu Bionic on Travis does not have a luajit package and fails install, use lua5.1
|
||||
if [ "$TRAVIS_CPU_ARCH" = "s390x" ] ; then
|
||||
sudo apt-get install -y liblua5.1-dev
|
||||
else
|
||||
sudo apt-get install -y luajit libluajit-5.1-dev
|
||||
fi
|
||||
sudo pip3 install meson==0.54.3
|
||||
|
||||
travis_time_finish "bionic-deps"
|
||||
travis_fold end "bionic-deps"
|
|
@ -0,0 +1,13 @@
|
|||
prefix=/usr
|
||||
exec_prefix=${prefix}
|
||||
libdir=/usr/lib64
|
||||
sharedlibdir=${libdir}
|
||||
includedir=/usr/include
|
||||
|
||||
Name: zlib
|
||||
Description: zlib compression library
|
||||
Version: REPLACE_THIS
|
||||
|
||||
Requires:
|
||||
Libs: -L${libdir} -L${sharedlibdir} -lz
|
||||
Cflags: -I${includedir}
|
|
@ -0,0 +1 @@
|
|||
geninfo_auto_base=1
|
|
@ -0,0 +1,7 @@
|
|||
extraction:
|
||||
python:
|
||||
python_setup:
|
||||
version: 3
|
||||
queries:
|
||||
-
|
||||
exclude: cpp/fixme-comment
|
|
@ -0,0 +1,153 @@
|
|||
version: ~> 1.0
|
||||
|
||||
language: c
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/cachedir
|
||||
- $HOME/.ccache
|
||||
dist: bionic
|
||||
|
||||
osx_image: xcode11.3
|
||||
|
||||
addons:
|
||||
homebrew:
|
||||
packages:
|
||||
- gettext
|
||||
- check
|
||||
- bullet
|
||||
- dbus
|
||||
- fontconfig
|
||||
- freetype
|
||||
- fribidi
|
||||
- gst-plugins-good
|
||||
- gstreamer
|
||||
- luajit
|
||||
- openssl
|
||||
- webp
|
||||
- libsndfile
|
||||
- glib
|
||||
- libspectre
|
||||
- libraw
|
||||
- librsvg
|
||||
- poppler
|
||||
- lz4
|
||||
- pulseaudio
|
||||
- ccache
|
||||
- ninja
|
||||
- python3
|
||||
- libffi
|
||||
update: true
|
||||
|
||||
env:
|
||||
global:
|
||||
- EIO_MONITOR_POLL=1
|
||||
- CC="ccache gcc"
|
||||
- CXX="ccache g++"
|
||||
|
||||
jobs:
|
||||
include:
|
||||
- os: linux
|
||||
env: DISTRO=Fedora32-mingw CI_BUILD_TYPE=mingw
|
||||
- os: linux
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=options-enabled
|
||||
- os: linux
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=options-disabled
|
||||
- os: linux
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=wayland
|
||||
- os: linux
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=default
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=release-ready
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Ubuntu2004
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Ubuntu1910
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Debian103
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Fedora31 CI_BUILD_TYPE=coverity
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: DISTRO=Fedora32 CI_BUILD_TYPE=asan
|
||||
- os: linux
|
||||
if: type = cron
|
||||
env: CI_BUILD_TYPE=codecov
|
||||
- os: linux
|
||||
if: type = cron
|
||||
arch: arm64
|
||||
env: CI_BUILD_TYPE=default
|
||||
- os: linux
|
||||
if: type = cron
|
||||
arch: ppc64le
|
||||
env: CI_BUILD_TYPE=no-bindings
|
||||
- os: linux
|
||||
if: type = cron
|
||||
arch: s390x
|
||||
env: CI_BUILD_TYPE=no-bindings
|
||||
|
||||
services:
|
||||
- docker
|
||||
|
||||
before_install:
|
||||
- export -f travis_nanoseconds
|
||||
- export -f travis_fold
|
||||
- export -f travis_time_start
|
||||
- export -f travis_time_finish
|
||||
- |
|
||||
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
||||
rm -rf $HOME/Library/Caches/Homebrew
|
||||
rm -rf $HOME/cachedir/Homebrew/Homebrew
|
||||
mv $HOME/cachedir/Homebrew $HOME/Library/Caches/Homebrew
|
||||
pip3 install meson
|
||||
fi
|
||||
|
||||
before_script:
|
||||
- |
|
||||
if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$DISTRO" != "" ]]; then
|
||||
docker pull stefanschmidt1/ci-support-files:$DISTRO
|
||||
docker version
|
||||
docker run --cap-add SYS_PTRACE --cidfile $HOME/cid -t -d -v `pwd`:/src -v $HOME/.ccache:/root/.ccache -w /src stefanschmidt1/ci-support-files:$DISTRO bash
|
||||
fi
|
||||
- |
|
||||
if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "$DISTRO" == "" ]]; then
|
||||
.ci/ubuntu-bionic-install-deps.sh
|
||||
fi
|
||||
- .ci/ci-ccache-stats.sh
|
||||
|
||||
script:
|
||||
- .ci/ci-configure.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-setup-ccache.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-make.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-make-install.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-make-benchmark.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-make-check.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-exactness.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-make-distcheck.sh "$CI_BUILD_TYPE"
|
||||
- .ci/ci-build-test.sh "$CI_BUILD_TYPE"
|
||||
|
||||
before_cache:
|
||||
- .ci/ci-ccache-stats.sh
|
||||
- |
|
||||
mkdir -p $HOME/cachedir
|
||||
if [[ "$TRAVIS_OS_NAME" == "linux" ]] ; then
|
||||
sudo chown travis:travis $HOME/.ccache
|
||||
else
|
||||
mv $HOME/Library/Caches/Homebrew $HOME/cachedir/Homebrew
|
||||
fi
|
||||
|
||||
notifications:
|
||||
irc:
|
||||
channels:
|
||||
- "chat.freenode.net#edevelop"
|
||||
on_success: change
|
||||
on_failure: always
|
||||
template:
|
||||
- "TravisCI build %{build_number} in branch %{branch}: %{result} - %{message} (%{elapsed_time})"
|
||||
- "Commit: %{commit_subject} (%{commit}) from %{author}"
|
||||
- "Change view : %{compare_url}"
|
||||
- "Build details : %{build_url}"
|
|
@ -0,0 +1,10 @@
|
|||
Gesture Layer 2 (all the icons in data/elementary/images/g_layer):
|
||||
Illustrations provided by GestureWorks® (www.gestureworks.com)
|
||||
Creative Commons Attribution Sharealike license v 3.0.
|
||||
http://gestureworks.com/
|
||||
http://gestureworks.com/icons-fonts
|
||||
http://creativecommons.org/licenses/by-sa/3.0/us/
|
||||
|
||||
EFL Bluish-X icons theme (all the icons in data/elementary/themes/fdo):
|
||||
GNU General Public License v3
|
||||
see the README in data/elementary/themes/fdo for more info
|
|
@ -0,0 +1,59 @@
|
|||
** COMPILING and INSTALLING **
|
||||
------------------------------
|
||||
|
||||
Meson is the build system used for this project. For more information please
|
||||
see:
|
||||
|
||||
http://mesonbuild.com
|
||||
|
||||
----
|
||||
|
||||
Normal compilation in /usr/local:
|
||||
|
||||
meson . build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
For meson build generic options:
|
||||
|
||||
meson --help
|
||||
|
||||
For a list of project specific options supported:
|
||||
|
||||
cat meson_options.txt
|
||||
|
||||
To set 1 or more project specific options:
|
||||
|
||||
meson --prefix=/path/to -Doption=value [-Dother=value2] [...] . build
|
||||
|
||||
To display current configuration:
|
||||
|
||||
meson configure build
|
||||
|
||||
The above will only work after at least the following is done:
|
||||
|
||||
meson . build
|
||||
|
||||
** QUICK AND DIRTY HELP **
|
||||
--------------------------
|
||||
|
||||
How clean out the build and config and start fresh:
|
||||
|
||||
rm -rf build
|
||||
|
||||
How to make a dist tarball and check its build:
|
||||
(must do it from git tree clone and commit all changes to git first)
|
||||
|
||||
ninja -C build dist
|
||||
|
||||
How to change prefix:
|
||||
|
||||
meson --prefix=/path/to/prefix . build
|
||||
|
||||
How to install in a specific destination directory for packaging:
|
||||
|
||||
DESTDIR=/path/to/destdir ninja -C build install
|
||||
|
||||
How to build with verbose output (full commands run):
|
||||
|
||||
ninja -C build -v
|
|
@ -1,12 +1,10 @@
|
|||
![EFL](/data/readme/efl.png)
|
||||
# EFL
|
||||
EFL
|
||||
===
|
||||
|
||||
-----
|
||||
|
||||
*Please report bugs/issues at*
|
||||
[git.enlightenment.org](https://git.enlightenment.org/enlightenment/efl/issues)
|
||||
|
||||
-----
|
||||
******************************************************************************
|
||||
FOR ANY ISSUES PLEASE EMAIL:
|
||||
enlightenment-devel@lists.sourceforge.net
|
||||
******************************************************************************
|
||||
|
||||
EFL is a collection of libraries for handling many common tasks a
|
||||
developer may have such as data structures, communication, rendering,
|
||||
|
@ -26,21 +24,23 @@ Config files installed to help developers build against EFL.
|
|||
|
||||
For more documentation please see:
|
||||
|
||||
[www.enlightenment.org/doc](https://www.enlightenment.org/docs)
|
||||
https://www.enlightenment.org/docs
|
||||
|
||||
## Platforms
|
||||
PLATFORMS
|
||||
---------
|
||||
|
||||
EFL is primarily developed on Linux (GNU/Linux) and should work on
|
||||
EFL is primarily developerd on Linux (GNU/Linux) and should work on
|
||||
most distributions as long as dependencies are provided. It has been
|
||||
compiled and run also on Windows (using MSYS2 + mingw-w64 - please see
|
||||
[Phabricator windows docs](https://phab.enlightenment.org/w/windows)),
|
||||
Mac OS X, FreeBSD and NetBSD.
|
||||
https://phab.enlightenment.org/w/windows/), Mac OS X, FreeBSD and
|
||||
NetBSD.
|
||||
|
||||
## Components
|
||||
COMPONENTS
|
||||
----------
|
||||
|
||||
**Ecore:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is the core main-loop, system events and execution layer. This
|
||||
handles running the main loop, integrating with external data and
|
||||
|
@ -48,25 +48,31 @@ timing sources (the system clock, file descriptors, system signals),
|
|||
and producing an event queue, walking that queue and dispatching
|
||||
events to appropriate callbacks.
|
||||
|
||||
|
||||
|
||||
**Ecore Audio:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library provides an API for audio playback and recording. It uses
|
||||
pulse audio underneath to handle mixing and policies. The API for this
|
||||
should not be considered stable right now because it relies on EO and
|
||||
EO is not considered finalized yet.
|
||||
|
||||
|
||||
|
||||
**Ecore Cocoa:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This provides wrappers/abstractions around Max OS-X Cocoa APIs to help
|
||||
Mac porting.
|
||||
|
||||
|
||||
|
||||
**Ecore Con:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This provides a completely event-based TCP/UDP and Unix domain socket
|
||||
API that integrates with the main-loop. This means no blocking to send
|
||||
|
@ -77,9 +83,11 @@ verification, CURL wrapping for HTTP connection usage (GETs, POSTs
|
|||
etc.), asynchronous DNS lookups and provides the ability to also be a
|
||||
server, not just a client, with the same event-based API.
|
||||
|
||||
|
||||
|
||||
**Ecore Evas:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as glue between the display target (X11, Wayland,
|
||||
Frame buffer, Cocoa on OSX, Win32 etc.) and Evas. It creates/provides a
|
||||
|
@ -88,55 +96,69 @@ input events (Keyboard, Mouse, Multi-touch) into Evas, which then
|
|||
selects the target object and calls the callbacks. It also provides
|
||||
wrappers/glue for manipulating the Window/Surface.
|
||||
|
||||
|
||||
|
||||
**Ecore Fb:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This provides virtual terminal allocation, access and handling,
|
||||
frame buffer information, raw input handling for keyboard, mouse and
|
||||
touch (via tslib).
|
||||
|
||||
|
||||
|
||||
**Ecore File:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This provides file access convenience APIs for doing simple file
|
||||
operations like renames, copies, listing directories and more. It also
|
||||
supports file change monitoring and URL downloads.
|
||||
|
||||
|
||||
|
||||
**Ecore IMF:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is an input method abstraction framework to allow EFL to talk to
|
||||
things like SCIM, IBus, Wayland and XIM. This allows for complex text
|
||||
entry in languages such as Chinese, Japanese and Korean.
|
||||
|
||||
|
||||
|
||||
**Ecore IMF Evas:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library glues Input method support from Ecore IMF and Evas
|
||||
together.
|
||||
|
||||
|
||||
|
||||
**Ecore Input:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as a generic input layer where multiple display systems can
|
||||
post events in the same format to the event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore Input Evas:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This Routes events from Ecore Input into a given Evas canvas which
|
||||
will then route the event further to the destination object and
|
||||
callbacks.
|
||||
|
||||
|
||||
|
||||
**Ecore IPC:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as a layer on top of Ecore Con which handles entire IPC
|
||||
message packets, dealing with header delta compression and
|
||||
|
@ -145,39 +167,59 @@ go as a single IPC message, regardless of payload data size. The
|
|||
entire API is event based almost exactly like Ecore Con and thus it
|
||||
supports all the transport layers Ecore Con supports.
|
||||
|
||||
|
||||
|
||||
|
||||
**Ecore SDL:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as a wrapper/glue around SDL to handle SDL Windows as well
|
||||
as input events from SDL and tie them to the Ecore main-loop and event
|
||||
queue.
|
||||
|
||||
|
||||
|
||||
**Ecore Wayland:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is a glue/wrapper library to interface EFL to Wayland libraries
|
||||
to tie them into the Ecore main-loop and event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore Win32:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as glue/wrapper around Windows Win32 APIs to tie them into
|
||||
the Ecore main-loop and event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore WinCE:**
|
||||
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This acts as glue/wrapper around Windows CE APIs to tie them into the
|
||||
Ecore main-loop and event queue.
|
||||
|
||||
|
||||
|
||||
**Ecore X:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is a library to wrap/deal with Xlib make dealing with X11 less painful
|
||||
and less footwork as well as being glue to tie these into the Ecore main-loop
|
||||
and event queue.
|
||||
|
||||
|
||||
|
||||
**Edje:**
|
||||
|
||||
*BSD 2-Clause license* (except the epp binary which is GPLv2)
|
||||
//BSD 2-Clause license// (except the epp binary which is GPLv2)
|
||||
|
||||
This is a graphics event, input, theme, animation and theme
|
||||
abstraction library used to place many UI/UX elements into data files
|
||||
|
@ -189,9 +231,11 @@ data files managed by Eet). These "edj" files are fully portable and
|
|||
can work on any OS/Architecture just like a JPEG or PNG might be
|
||||
portable.
|
||||
|
||||
|
||||
|
||||
**Eet:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library is a data storage, encoding and decoding library
|
||||
designed to be extremely compact, fast and easy to use. It can take
|
||||
|
@ -206,23 +250,29 @@ Terminology. It supports encryption of data too via SSL, signing of
|
|||
files, as well as various compression techniques. It also supports
|
||||
encoding and decoding of image data in lossless or lossy form.
|
||||
|
||||
|
||||
|
||||
**Eeze:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library acts as an abstraction to discovering hardware interfaces
|
||||
for sensors as well as removable media and much more.
|
||||
|
||||
|
||||
|
||||
**EFL:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is just some core common header data like a common version number
|
||||
for EFL and how to expose the EO API.
|
||||
|
||||
|
||||
|
||||
**Efreet:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library provides code for handling Freedesktop.org standards such
|
||||
as .desktop files, XDG Menus, Icon search paths and more. It provides
|
||||
|
@ -230,9 +280,11 @@ a central daemon to handle monitoring for changes that the library
|
|||
talks to, and the daemon handles updating local cache files the
|
||||
library reads.
|
||||
|
||||
|
||||
|
||||
**Eina:**
|
||||
|
||||
*LGPL v2 license*
|
||||
//LGPL v2 license//
|
||||
|
||||
This library provides low-level routines for common things like linked
|
||||
lists, hash tables, growable arrays, basic string buffers, shared
|
||||
|
@ -241,23 +293,29 @@ memory pools, copy-on-write segments, iterators, matrices, general
|
|||
data models, red/black trees, quad-trees, a simple SAX XML parser and
|
||||
more.
|
||||
|
||||
|
||||
|
||||
**EIO:**
|
||||
|
||||
*LGPL v2 license*
|
||||
//LGPL v2 license//
|
||||
|
||||
This is an asynchronous I/O library for doing disk I/O without blocking.
|
||||
|
||||
|
||||
|
||||
**ElDBus:**
|
||||
|
||||
*LGPL v2 license*
|
||||
//LGPL v2 license//
|
||||
|
||||
This is a DBus access library to allow you to create DBus services as
|
||||
well as clients. This glues in DBus into the main-loop so all access is
|
||||
asynchronous.
|
||||
|
||||
|
||||
|
||||
**Embryo:**
|
||||
|
||||
*Small license (same as ZLib license)*
|
||||
//Small license (same as ZLib license)//
|
||||
|
||||
This is a small C-like language compiler and byte-code interpreter
|
||||
library. This is used for scripting in Edje. The code is based on
|
||||
|
@ -265,9 +323,11 @@ original source from the Pawn/Small Language but has been made
|
|||
portable (endianness issues fixed) and 64bit issues fixed, with the
|
||||
runtime library being refactored to be extremely small.
|
||||
|
||||
|
||||
|
||||
**Emotion:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is a wrapper around Gstreamer 1.x pluggable decoder libraries
|
||||
This glues in the decoder library, and its output into a smart Evas object
|
||||
|
@ -275,9 +335,11 @@ that will display the playback for you as the video plays, as well as
|
|||
providing higher level controls to seek, play, pause and query the stream
|
||||
regardless of the back-end used.
|
||||
|
||||
|
||||
|
||||
**EO:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is a core object system API that EFL 1.8 and on depend on. The
|
||||
API is not finalized, so do not depend on it yet in EFL 1.8, but
|
||||
|
@ -288,35 +350,43 @@ strong and weak references, auto-deletion of child objects, unifies
|
|||
callback handling with a single path, and also abstracts object
|
||||
pointers to be indirect table lookups for increased safety at runtime.
|
||||
|
||||
|
||||
|
||||
**EPhysics:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library provides a wrapper around the Bullet physics library,
|
||||
allowing for it to be linked directly with Evas objects and control
|
||||
their behavior as if they were real physical objects. This is now
|
||||
disabled by default as it's rarely if ever used by anything.
|
||||
|
||||
|
||||
|
||||
**Ethumb:**
|
||||
|
||||
*LGPL v2 license*
|
||||
//LGPL v2 license//
|
||||
|
||||
This library provides core API for a thumbnailing daemon as well as
|
||||
the thumbnail daemon itself. Ethumb Client talks with Ethumb to pass
|
||||
off thumbnail generation to a central location to be done
|
||||
asynchronously.
|
||||
|
||||
|
||||
|
||||
**Ethumb Client:**
|
||||
|
||||
*LGPL v2 license*
|
||||
//LGPL v2 license//
|
||||
|
||||
This is the client-side part of Ethumb that provides an API for
|
||||
clients to request the Ethumb thumbnailer to generate or find cached
|
||||
thumbnails of files.
|
||||
|
||||
|
||||
|
||||
**Evas:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This is the core rendering and scene graph abstraction library for
|
||||
EFL. It manages a stateful 2D scene graph that defines the entire
|
||||
|
@ -325,108 +395,124 @@ display systems like X11, Windows, Wayland, Frame-buffer etc. and via
|
|||
many rendering APIs like OpenGL, OpenGL-ES 2, and pure software
|
||||
implementations that are fast and accurate.
|
||||
|
||||
|
||||
|
||||
**Evil:**
|
||||
|
||||
*BSD 2-Clause license*
|
||||
//BSD 2-Clause license//
|
||||
|
||||
This library acts as a porting library for Windows to provide missing
|
||||
libc calls not in Mingw32 that EFL needs. It is used internally and
|
||||
no symbol is public.
|
||||
libc calls not in Mingw32 that EFL needs.
|
||||
|
||||
-----
|
||||
|
||||
## Requirements
|
||||
**Heif:**
|
||||
|
||||
//LGPL v3 license//
|
||||
|
||||
The license doesnt affect efl or apps using efl, but gpl3 or lgpl3
|
||||
affects the entire os requiring any gpl/lgpl3 component be
|
||||
user-replacable.
|
||||
The end user must be able to modify the libheif code and still be
|
||||
able to use the efl.
|
||||
|
||||
|
||||
COMPILING AND INSTALLING
|
||||
------------------------
|
||||
|
||||
For sample configuration options please look in the ./confs/ directory
|
||||
for scripts that pass in commonly used options.
|
||||
|
||||
See the INSTALL file: https://git.enlightenment.org/core/efl.git/tree/INSTALL
|
||||
|
||||
|
||||
REQUIREMENTS
|
||||
------------
|
||||
|
||||
EFL requires a C and C++ compiler by default. C++ exists mostly to interface
|
||||
to C++ libraries like Bullet and our C++ bindings.
|
||||
|
||||
Required by default:
|
||||
|
||||
* libpng
|
||||
* libjpeg
|
||||
* openjpeg2
|
||||
* gstreamer (Ensure all codecs you want are installed.)
|
||||
* zlib
|
||||
* luajit (lua 5.1 or 5.2 support optional)
|
||||
* libtiff
|
||||
* openssl
|
||||
* curl
|
||||
* dbus
|
||||
* libc
|
||||
* fontconfig
|
||||
* freetype2
|
||||
* fribidi
|
||||
* harfbuzz
|
||||
* libpulse
|
||||
* libsndfile
|
||||
* libx11
|
||||
* libxau
|
||||
* libxcomposite
|
||||
* libxdamage
|
||||
* libxdmcp
|
||||
* libxext
|
||||
* libxfixes
|
||||
* libxinerama
|
||||
* libxrandr
|
||||
* libxrender
|
||||
* libxss
|
||||
* libxtst
|
||||
* libxcursor
|
||||
* libxi (2.2 or newer)
|
||||
* opengl(mesa etc.) (opengl/glx/full or opengl-es2/egl. full opengl only on osx - must be explicitly specified to be full to have support)
|
||||
* giflib/libgif
|
||||
* util-linux (limbount + libblkid)
|
||||
* systemd / libudev
|
||||
* poppler / poppler-cpp
|
||||
* libraw
|
||||
* libspectre
|
||||
* librsvg
|
||||
* openmp (clang needs libomp, while gcc uses libgomp)
|
||||
* libwebp
|
||||
* libpng
|
||||
* libjpeg
|
||||
* openjpeg2
|
||||
* gstreamer (Ensure all codecs you want are installed.)
|
||||
* zlib
|
||||
* luajit (lua 5.1 or 5.2 support optional)
|
||||
* libtiff
|
||||
* openssl
|
||||
* curl
|
||||
* dbus
|
||||
* libc
|
||||
* fontconfig
|
||||
* freetype2
|
||||
* fribidi
|
||||
* harfbuzz
|
||||
* libpulse
|
||||
* libsndfile
|
||||
* libx11
|
||||
* libxau
|
||||
* libxcomposite
|
||||
* libxdamage
|
||||
* libxdmcp
|
||||
* libxext
|
||||
* libxfixes
|
||||
* libxinerama
|
||||
* libxrandr
|
||||
* libxrender
|
||||
* libxss
|
||||
* libxtst
|
||||
* libxcursor
|
||||
* libxi (2.2 or newer)
|
||||
* opengl(mesa etc.) (opengl/glx/full or opengl-es2/egl. full opengl only on osx - must be explicitly specified to be full to have support)
|
||||
* giflib/libgif
|
||||
* util-linux (limbount + libblkid)
|
||||
* systemd / libudev
|
||||
* poppler / poppler-cpp
|
||||
* libraw
|
||||
* libspectre
|
||||
* librsvg
|
||||
* openmp (clang needs libomp, while gcc uses libgomp)
|
||||
* libwebp
|
||||
|
||||
|
||||
### Wayland support
|
||||
Wayland support:
|
||||
|
||||
You may also want wayland support when on Linux. This enables support
|
||||
for EFL to target wayland support for client applications. To do this
|
||||
for EFL to trget wayland support for client applications. To do this
|
||||
supply:
|
||||
``` sh
|
||||
-Dwl=true
|
||||
```
|
||||
|
||||
### Framebuffer support
|
||||
-Dwl=true
|
||||
|
||||
Framebuffer support:
|
||||
|
||||
This requires linux frame-buffer support, headers etc. This supports
|
||||
basic frame-buffers like /dev/fb as well as input via /dev/input for
|
||||
keyboards and mice in a basic way. Enable this with:
|
||||
|
||||
-Dfb=true
|
||||
|
||||
For more modern framebuffer support you may want drm/kms rendering
|
||||
support so enable this. This is what you also want for wayland
|
||||
compositor support in enlightenment as it will want to be able to
|
||||
render to a modern framebuffer target with atomic buffer swapping. To
|
||||
render to a moder framebuffer tarbet with atomic buffer swapping. To
|
||||
do this provide:
|
||||
``` sh
|
||||
-Ddrm=true
|
||||
```
|
||||
|
||||
Legacy fbcon support also exists, but you probably no longer want to
|
||||
use this as it is not maintained anymore. This supports basic frame-buffers
|
||||
like /dev/fb as well as input via /dev/input for keyboards and mice in a
|
||||
basic way. Enable this with:
|
||||
``` sh
|
||||
-Dfb=true
|
||||
```
|
||||
-Ddrm=true
|
||||
|
||||
You may want to change the install prefix for EFL with:
|
||||
``` sh
|
||||
--prefix=/path/to/prefix
|
||||
```
|
||||
|
||||
--prefix=/path/to/prefix
|
||||
|
||||
The default prefix if not given is "/usr/local". Many people like to
|
||||
use prefixes like /opt/e or /opt/efl or /home/USERNAME/software etc.
|
||||
|
||||
### Compiler flags
|
||||
COMPILER FLAGS
|
||||
--------------
|
||||
|
||||
You can affect compilation optimization, debugging and other factors
|
||||
by setting your `CFLAGS` environment variable (and `CXXFLAGS`). Be aware
|
||||
that to ensure ABI stability you should use the exact same `CFLAGS` /
|
||||
`CXXFLAGS` for all the build of EFL and any applications/libraries that
|
||||
by setting your CFLAGS environment variable (and CXXFLAGS). Be aware
|
||||
that to ensure ABI stability you should use the exact same CFLAGS /
|
||||
CXXFLAGS for all the build of EFL and any applications/libraries that
|
||||
depend on them.
|
||||
|
||||
There are many other configure options that can be used, but in
|
||||
|
@ -439,108 +525,13 @@ these without understanding the implications. The defaults
|
|||
have been carefully considered to provide full functionality so users
|
||||
will not be missing anything.
|
||||
|
||||
### Cryptography
|
||||
|
||||
CRYPTOGRAPHY
|
||||
------------
|
||||
|
||||
EFL officially offers openssl or gnutls as cryptography backends. By
|
||||
default it uses "openssl" to do signature, cipher and related. Alternatively
|
||||
one can use "gnutls" (some distros are strict about licenses and want gnutls
|
||||
instead of openssl) You can switch to gnutls with:
|
||||
``` sh
|
||||
-Dcrypto=gnutls
|
||||
```
|
||||
|
||||
-----
|
||||
|
||||
## Compiling and Installing
|
||||
|
||||
Meson is the build system used for this project. For more information
|
||||
please see [mesonbuild.com](https://mesonbuild.com)
|
||||
|
||||
You will need normal build tooling installed such as a compiler (gcc
|
||||
or clang for example), pkg-config, ninja, any relevant package-dev or
|
||||
package-devel packages if your distribution splits out development
|
||||
headers (e.g. libc6-dev) etc.
|
||||
|
||||
Depending on where dependencies, you might have to set your
|
||||
`PKG_CONFIG_PATH` environment variable like:
|
||||
```sh
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
|
||||
```
|
||||
|
||||
Also note that some distributions like to add extra arch directories
|
||||
to your library locations so you might have to have more like:
|
||||
```sh
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig
|
||||
```
|
||||
|
||||
You will need to ensure that the destination library directory (e.g.
|
||||
`/usr/local/lib` is in your /etc/ld.so.conf or /etc/ld.so.conf.d/
|
||||
files and after installing anything that installs libraries you
|
||||
re-run `ldconfig`. Please see relevant documentation on ldconfig and
|
||||
ld.so.conf for your distribution.
|
||||
|
||||
You might also want to add the destination bin dir to your environment
|
||||
variable PATH (see documentation on your shell PATH variable) such as:
|
||||
```sh
|
||||
export PATH=/usr/local/bin:/usr/bin:/bin
|
||||
```
|
||||
|
||||
Normal compilation in /usr/local:
|
||||
```sh
|
||||
meson . build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
```
|
||||
|
||||
For meson build generic options:
|
||||
```sh
|
||||
meson --help
|
||||
```
|
||||
|
||||
For a list of project specific options supported:
|
||||
```sh
|
||||
cat meson_options.txt
|
||||
```
|
||||
|
||||
To set 1 or more project specific options:
|
||||
```sh
|
||||
meson --prefix=/path/to -Doption=value [-Dother=value2] [...] . build
|
||||
```
|
||||
|
||||
To display current configuration:
|
||||
```sh
|
||||
meson configure build
|
||||
```
|
||||
|
||||
The above will only work after at least the following is done:
|
||||
```sh
|
||||
meson . build
|
||||
```
|
||||
|
||||
### Quick build help
|
||||
|
||||
How to clean out the build and config and start fresh:
|
||||
```sh
|
||||
rm -rf build
|
||||
```
|
||||
|
||||
How to make a dist tarball and check its build:
|
||||
(must do it from git tree clone and commit all changes to git first)
|
||||
```sh
|
||||
ninja -C build dist
|
||||
```
|
||||
|
||||
How to change prefix:
|
||||
```sh
|
||||
meson --prefix=/path/to/prefix . build
|
||||
```
|
||||
|
||||
How to install in a specific destination directory for packaging:
|
||||
```sh
|
||||
DESTDIR=/path/to/destdir ninja -C build install
|
||||
```
|
||||
|
||||
How to build with verbose output (full commands run):
|
||||
```sh
|
||||
ninja -C build -v
|
||||
```
|
||||
-Dcrypto=gnutls
|
|
@ -1,3 +0,0 @@
|
|||
group "Elm_Palette" struct {
|
||||
value "version" int: 1000;
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
pals = [
|
||||
'default',
|
||||
'empty',
|
||||
'light',
|
||||
'mauve-sunset',
|
||||
'candy-mint',
|
||||
|
|
|
@ -172,7 +172,6 @@ color_tree {
|
|||
"/fg/normal/spinner/arrow";
|
||||
"/fg/normal/spinner/text";
|
||||
"/fg/normal/notification/text";
|
||||
"/fg/pressed/notification/text/title";
|
||||
"/fg/selected/winlist/item/text/iconified";
|
||||
"/fg/pressed/gadgets/tasks/text/iconified";
|
||||
"/fg/normal/gadgets/battery/level/discharge";
|
||||
|
|
|
@ -433,9 +433,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel.to: "top";
|
||||
rel2.relative: 0.0 0.0;
|
||||
rel2.offset: 31 3;
|
||||
min: RSZMINW RSZMINH;
|
||||
min: 40 6;
|
||||
align: 1.0 1.0;
|
||||
color: RSZCOL; // no cc
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -447,9 +447,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel1.to: "e.event.resize.tl";
|
||||
rel2.relative: 0.0 1.0;
|
||||
rel2.to: "e.event.resize.tr";
|
||||
min: 0 RSZMINH;
|
||||
min: 0 6;
|
||||
align: 0.5 1.0;
|
||||
color: RSZCOL2; // no cc
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
}
|
||||
|
@ -461,9 +461,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel1.offset: -32 0;
|
||||
rel2.relative: 1.0 0.0;
|
||||
rel2.offset: -1 3;
|
||||
min: RSZMINW RSZMINH;
|
||||
min: 40 6;
|
||||
align: 0.0 1.0;
|
||||
color: RSZCOL; // no cc
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -506,9 +506,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel.to: "bottom";
|
||||
rel2.relative: 0.0 1.0;
|
||||
rel2.offset: 31 -1;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 1.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -530,9 +530,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "e.event.resize.br";
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 0 RSZMINH;
|
||||
align: 0.5 0.0;
|
||||
color: RSZCOL2; // no cc
|
||||
min: 0 10;
|
||||
align: 0.5 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -553,9 +553,9 @@ group { name: "e/widgets/border/default/border";
|
|||
rel.to: "bottom";
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel1.offset: -32 0;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 0.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
|
|
@ -549,7 +549,7 @@ group { name: "e/comp/frame/fullscreen";
|
|||
visible: 1;
|
||||
}
|
||||
}
|
||||
part { name: "scr_shade"; type: RECT; mouse_events: 0;
|
||||
part { name: "scr_shade"; type: RECT;
|
||||
description { state: "default" 0.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
visible: 0;
|
||||
|
@ -584,7 +584,7 @@ group { name: "e/comp/frame/fullscreen";
|
|||
rel.to: "shower";
|
||||
}
|
||||
}
|
||||
part { name: "fader"; type: RECT; mouse_events: 0;
|
||||
part { name: "fader"; type: RECT;
|
||||
description { state: "default" 0.0;
|
||||
rel.to: "e.swallow.content";
|
||||
color: 255 255 255 0; // no cc
|
||||
|
|
|
@ -319,7 +319,7 @@ group { name: "e/comp/border/fullscreen";
|
|||
visible: 1;
|
||||
}
|
||||
}
|
||||
part { name: "scr_shade"; type: RECT; mouse_events: 0;
|
||||
part { name: "scr_shade"; type: RECT;
|
||||
description { state: "default" 0.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
visible: 0;
|
||||
|
@ -355,7 +355,7 @@ group { name: "e/comp/border/fullscreen";
|
|||
rel2.to: "shower";
|
||||
}
|
||||
}
|
||||
part { name: "fader"; type: RECT; mouse_events: 0;
|
||||
part { name: "fader"; type: RECT;
|
||||
description { state: "default" 0.0;
|
||||
rel.to: "e.swallow.content";
|
||||
color: 255 255 255 0; // no cc
|
||||
|
|
|
@ -490,9 +490,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel.to: "top_clip";
|
||||
rel2.relative: 0.0 0.0;
|
||||
rel2.offset: 31 3;
|
||||
min: RSZMINW RSZMINH;
|
||||
min: 40 6;
|
||||
align: 1.0 1.0;
|
||||
color: RSZCOL; // no cc
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -505,9 +505,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "efl.event.resize.tr";
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 0 RSZMINH;
|
||||
align: 1.0 1.0;
|
||||
color: RSZCOL2; // no cc
|
||||
min: 0 6;
|
||||
align: 0.5 1.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -521,9 +521,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel1.offset: -32 0;
|
||||
rel2.relative: 1.0 0.0;
|
||||
rel2.offset: -1 3;
|
||||
min: RSZMINW RSZMINH;
|
||||
min: 40 6;
|
||||
align: 0.0 1.0;
|
||||
color: RSZCOL; // no cc
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -573,9 +573,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel.to: "bottom_clip";
|
||||
rel2.relative: 0.0 1.0;
|
||||
rel2.offset: 31 -1;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 1.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -589,9 +589,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "efl.event.resize.br";
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 0 RSZMINH;
|
||||
align: 0.5 0.0;
|
||||
color: RSZCOL2; // no cc
|
||||
min: 0 10;
|
||||
align: 0.5 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -604,9 +604,9 @@ group { "efl/border"; data.item: "version" "123";
|
|||
rel.to: "bottom_clip";
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel1.offset: -32 0;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 0.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
|
|
@ -497,9 +497,9 @@ group { name: "elm/border/base/default";
|
|||
rel.to: "top_clip";
|
||||
rel2.relative: 0.0 0.0;
|
||||
rel2.offset: 31 3;
|
||||
min: RSZMINW RSZMINH;
|
||||
min: 40 6;
|
||||
align: 1.0 1.0;
|
||||
color: RSZCOL; // no cc
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -512,9 +512,9 @@ group { name: "elm/border/base/default";
|
|||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "elm.event.resize.tr";
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 0 RSZMINH;
|
||||
min: 0 6;
|
||||
align: 0.5 1.0;
|
||||
color: RSZCOL2; // no cc
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -528,9 +528,9 @@ group { name: "elm/border/base/default";
|
|||
rel1.offset: -32 0;
|
||||
rel2.relative: 1.0 0.0;
|
||||
rel2.offset: -1 3;
|
||||
min: RSZMINW RSZMINH;
|
||||
min: 40 6;
|
||||
align: 0.0 1.0;
|
||||
color: RSZCOL; // no cc
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
}
|
||||
desc { "hidden"; inherit: "default"; hid; }
|
||||
|
@ -580,9 +580,9 @@ group { name: "elm/border/base/default";
|
|||
rel.to: "bottom_clip";
|
||||
rel2.relative: 0.0 1.0;
|
||||
rel2.offset: 31 -1;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 1.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -596,9 +596,9 @@ group { name: "elm/border/base/default";
|
|||
rel1.relative: 1.0 0.0;
|
||||
rel2.to: "elm.event.resize.br";
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 0 RSZMINH;
|
||||
align: 0.5 0.0;
|
||||
color: RSZCOL2; // no cc
|
||||
min: 0 10;
|
||||
align: 0.5 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
@ -611,9 +611,9 @@ group { name: "elm/border/base/default";
|
|||
rel.to: "bottom_clip";
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel1.offset: -32 0;
|
||||
min: RSZMINW RSZMINH;
|
||||
align: 0.0 0.0;
|
||||
color: RSZCOL; // no cc
|
||||
min: 40 10;
|
||||
align: 0.0 0.5;
|
||||
color: 0 0 0 0; // no cc
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ group { name: "elm/notify/block_events/default";
|
|||
color: 255 255 255 0; // no cc
|
||||
}
|
||||
desc { "visible";
|
||||
inherit: "default" 0.0;
|
||||
color: 255 255 255 255; // no cc
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@ group { name: "e/ilist";
|
|||
offscale;
|
||||
}
|
||||
}
|
||||
alias: "e.text.typebuf_label" "e.text.label";
|
||||
part { name: "e.text.label"; type: TEXT; mouse_events: 0;
|
||||
clip_to: "typebuf_clip";
|
||||
scale: 1;
|
||||
|
|
|
@ -33,7 +33,8 @@ group { name: "e/modules/notification/main";
|
|||
tag: "b" "+ font="FNBD" text_class=module_bold color=cc:/fg/normal/notification/text/bold";
|
||||
tag: "i" "+ font="FNIT" text_class=module_italic";
|
||||
tag: "u" "+ underline=on underline_color=cc:/fg/normal/notification/text/underline";
|
||||
tag: "link" "+ color=cc:/fg/normal/text-link underline=on underline_color=cc:/fg/normal/text-link";
|
||||
tag: "img" ""; // images not supported
|
||||
tag: "a" ""; // links not supported
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -71,10 +72,10 @@ group { name: "e/modules/notification/main";
|
|||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.5;
|
||||
aspect: 1.0 1.0; aspect_preference: BOTH;
|
||||
aspect: 1.0 1.0;
|
||||
aspect_preference: BOTH;
|
||||
rel.to: "base";
|
||||
rel1.to_y: "notification.textblock.message";
|
||||
rel1.offset: 12 0;
|
||||
rel1.offset: 12 12;
|
||||
rel2.offset: 12 -13;
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 24 24;
|
||||
|
@ -82,11 +83,26 @@ group { name: "e/modules/notification/main";
|
|||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.textblock.message"; type: TEXTBLOCK; mouse_events: 0;
|
||||
clip_to: "bodyclip";
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
rel.to: "base";
|
||||
rel1.to_x: "notification.swallow.app_icon";
|
||||
rel1.to_y: "notification.text.title";
|
||||
rel1.relative: 1.0 1.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -27 -13;
|
||||
text { style: "notification_style";
|
||||
min: 0 1;
|
||||
}
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "message"; type: TEXTBLOCK; mouse_events: 0;
|
||||
scale: 1;
|
||||
entry_mode: EDITABLE;
|
||||
select_mode: EXPLICIT;
|
||||
multiline: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
min: 200 20;
|
||||
|
@ -96,9 +112,7 @@ group { name: "e/modules/notification/main";
|
|||
rel1.to_y: "notification.text.title";
|
||||
rel1.relative: 1.0 1.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -27 -5;
|
||||
rel2.to_y: "notification.swallow.actions";
|
||||
rel2.relative: 1.0 0.0;
|
||||
rel2.offset: -27 -13;
|
||||
text { style: "notification_style";
|
||||
text_source: "notification.textblock.message";
|
||||
min: 0 1;
|
||||
|
@ -107,45 +121,6 @@ group { name: "e/modules/notification/main";
|
|||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.textblock.message"; type: TEXTBLOCK;
|
||||
clip_to: "bodyclip";
|
||||
scale: 1;
|
||||
entry_mode: EDITABLE;
|
||||
select_mode: EXPLICIT;
|
||||
multiline: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
rel.to: "base";
|
||||
rel1.to_x: "notification.swallow.app_icon";
|
||||
rel1.to_y: "notification.text.title";
|
||||
rel1.relative: 1.0 1.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -27 -5;
|
||||
rel2.to_y: "notification.swallow.actions";
|
||||
rel2.relative: 1.0 0.0;
|
||||
text { style: "notification_style";
|
||||
min: 0 1;
|
||||
}
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.swallow.desktop_icon"; type: SWALLOW; mouse_events: 0;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.0 0.0;
|
||||
aspect: 1.0 1.0; aspect_preference: BOTH;
|
||||
rel1.to_x: "base";
|
||||
rel1.to_y: "notification.text.title";
|
||||
rel1.offset: 12 0;
|
||||
rel2.to: "notification.text.title";
|
||||
rel2.offset: 12 -1;
|
||||
rel2.relative: 0.0 1.0;
|
||||
min: 15 15;
|
||||
fixed: 1 1;
|
||||
offscale;
|
||||
}
|
||||
}
|
||||
part { name: "notification.text.title"; type: TEXT; mouse_events: 0;
|
||||
clip_to: "titleclip";
|
||||
scale: 1;
|
||||
|
@ -169,24 +144,6 @@ group { name: "e/modules/notification/main";
|
|||
}
|
||||
}
|
||||
|
||||
part { name: "notification.swallow.actions"; type: SWALLOW;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
align: 0.5 1.0;
|
||||
rel.to: "base";
|
||||
rel1.relative: 0.0 1.0;
|
||||
rel1.offset: 12 -13;
|
||||
rel2.offset: -13 -13;
|
||||
offscale;
|
||||
visible: 0;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
min: 40 20;
|
||||
}
|
||||
}
|
||||
|
||||
part { name: "close";
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
|
@ -233,81 +190,14 @@ group { name: "e/modules/notification/main";
|
|||
program { signal: "mouse,clicked,1"; source: "base";
|
||||
action: SIGNAL_EMIT "notification,find" "theme";
|
||||
}
|
||||
program { signal: "e,state,actions,show"; source: "e";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
target: "notification.swallow.actions";
|
||||
}
|
||||
program { signal: "e,state,actions,hide"; source: "e";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "notification.swallow.actions";
|
||||
}
|
||||
// program { signal: "e,category,device"; source: "e"; }
|
||||
// program { signal: "e,category,device.added"; source: "e"; }
|
||||
// program { signal: "e,category,device.error"; source: "e"; }
|
||||
// program { signal: "e,category,device.removed"; source: "e"; }
|
||||
// program { signal: "e,category,email"; source: "e"; }
|
||||
// program { signal: "e,category,email.arrived"; source: "e"; }
|
||||
// program { signal: "e,category,email.bounced"; source: "e"; }
|
||||
// program { signal: "e,category,im"; source: "e"; }
|
||||
// program { signal: "e,category,im.error"; source: "e"; }
|
||||
// program { signal: "e,category,im.received"; source: "e"; }
|
||||
// program { signal: "e,category,network"; source: "e"; }
|
||||
// program { signal: "e,category,network.connected"; source: "e"; }
|
||||
// program { signal: "e,category,network.disconnected"; source: "e"; }
|
||||
// program { signal: "e,category,network.error"; source: "e"; }
|
||||
// program { signal: "e,category,presence"; source: "e"; }
|
||||
// program { signal: "e,category,presence.offline"; source: "e"; }
|
||||
// program { signal: "e,category,presence.online"; source: "e"; }
|
||||
// program { signal: "e,category,transfer"; source: "e"; }
|
||||
// program { signal: "e,category,transfer.complete"; source: "e"; }
|
||||
// program { signal: "e,category,transfer.error"; source: "e"; }
|
||||
// program { signal: "e,urgency,low"; source: "e"; }
|
||||
// program { signal: "e,urgency,normal"; source: "e"; }
|
||||
// program { signal: "e,urgency,critical"; source: "e"; }
|
||||
// program { signal: "notification,new"; source: "notification"; }
|
||||
// program { signal: "notification,del"; source: "notification"; }
|
||||
// program { signal: "notification,deleted"; source: "notification"; }
|
||||
}
|
||||
}
|
||||
|
||||
group { name: "e/modules/notification/action";
|
||||
parts {
|
||||
part { name: "e.text.label"; type: TEXT;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
rel1.offset: 4 4;
|
||||
rel2.offset: -5 -5;
|
||||
color_class: "/fg/normal/notification/text/title";
|
||||
text { font: FNBD; size: 10;
|
||||
min: 1 1;
|
||||
text_class: "notification_title";
|
||||
}
|
||||
offscale;
|
||||
}
|
||||
description { state: "selected" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
color_class: "/fg/pressed/notification/text/title";
|
||||
}
|
||||
}
|
||||
part { name: "event"; type: RECT;
|
||||
scale : 1;
|
||||
description { state: "default" 0.0;
|
||||
color: 0 0 0 0; // no cc
|
||||
min: 40 20;
|
||||
}
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program { signal: "mouse,down,1"; source: "event";
|
||||
action: STATE_SET "selected" 0.0;
|
||||
target: "e.text.label";
|
||||
}
|
||||
program { signal: "mouse,up,1"; source: "event";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "e.text.label";
|
||||
}
|
||||
program { signal: "mouse,clicked,1"; source: "event";
|
||||
action: SIGNAL_EMIT "e,action,clicked" "e";
|
||||
}
|
||||
// program {
|
||||
// signal: "notification,new"; source: "notification";
|
||||
// }
|
||||
// program {
|
||||
// signal: "notification,del"; source: "notification";
|
||||
// }
|
||||
// program {
|
||||
// signal: "notification,deleted"; source: "notification";
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,10 +9,6 @@
|
|||
|
||||
#define SHELFPAD 3
|
||||
#define ICMIN 15
|
||||
#define RSZCOL 0 0 0 0
|
||||
#define RSZCOL2 0 0 0 0
|
||||
#define RSZMINW 44
|
||||
#define RSZMINH 10
|
||||
|
||||
#define SPACER_TEXT "NN";
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
checkme_files = ['ecore', 'ecore_imf', 'ecore_x', 'eeze', 'efreet', 'elua', 'emotion', 'ethumb', 'ethumb_client', 'evas']
|
||||
checkme_files = ['ecore', 'ecore_imf', 'ecore_x', 'eeze', 'efreet', 'elua', 'emotion', 'ethumb', 'ethumb_client']
|
||||
foreach checkme : checkme_files
|
||||
install_data(join_paths(checkme, 'checkme'),
|
||||
install_dir : join_paths(dir_data, checkme)
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 18 KiB |
|
@ -1,6 +1,6 @@
|
|||
project('efl', ['c','cpp'],
|
||||
version: '1.26.99',
|
||||
default_options : ['buildtype=plain', 'warning_level=1', 'cpp_std=c++11'],
|
||||
version: '1.26.2',
|
||||
default_options : ['buildtype=plain', 'cpp_std=c++11'],
|
||||
meson_version : '>=0.50'
|
||||
)
|
||||
|
||||
|
@ -73,6 +73,7 @@ local_scripts = join_paths('src', 'scripts')
|
|||
dev_cflags = []
|
||||
dev_cflags_try = [
|
||||
'-fvisibility=hidden',
|
||||
'-Wall',
|
||||
'-Wfloat-compare',
|
||||
'-Wpointer-arith',
|
||||
'-Wunused-parameter',
|
||||
|
|
|
@ -195,8 +195,8 @@ option('unmount-path',
|
|||
option('evas-loaders-disabler',
|
||||
type : 'array',
|
||||
description : 'List of modular image/vector loaders to disable in efl',
|
||||
choices : ['', 'gst', 'pdf', 'ps', 'raw', 'svg', 'rsvg', 'xcf', 'bmp', 'dds', 'eet', 'generic', 'gif', 'ico', 'jp2k', 'jpeg', 'pmaps', 'png', 'psd', 'tga', 'tgv', 'tiff', 'wbmp', 'webp', 'xpm', 'json', 'avif', 'heif', 'jxl'],
|
||||
value : ['json', 'avif', 'heif', 'jxl']
|
||||
choices : ['', 'gst', 'pdf', 'ps', 'raw', 'svg', 'rsvg', 'xcf', 'bmp', 'dds', 'eet', 'generic', 'gif', 'ico', 'jp2k', 'jpeg', 'pmaps', 'png', 'psd', 'tga', 'tgv', 'tiff', 'wbmp', 'webp', 'xpm', 'json', 'avif', 'heif'],
|
||||
value : ['json', 'avif', 'heif']
|
||||
)
|
||||
|
||||
option('ecore-imf-loaders-disabler',
|
||||
|
|
|
@ -3164,7 +3164,6 @@ src/modules/evas/image_loaders/heif/evas_image_load_heif.c
|
|||
src/modules/evas/image_loaders/ico/evas_image_load_ico.c
|
||||
src/modules/evas/image_loaders/jp2k/evas_image_load_jp2k.c
|
||||
src/modules/evas/image_loaders/jpeg/evas_image_load_jpeg.c
|
||||
src/modules/evas/image_loaders/jxl/evas_image_load_jxl.c
|
||||
src/modules/evas/image_loaders/pmaps/evas_image_load_pmaps.c
|
||||
src/modules/evas/image_loaders/png/evas_image_load_png.c
|
||||
src/modules/evas/image_loaders/psd/evas_image_load_psd.c
|
||||
|
|
112
po/ru.po
112
po/ru.po
|
@ -3,15 +3,15 @@
|
|||
# This file is put in the public domain.
|
||||
# Danny Moshnakov <dm@agent.co.il>, 2012.
|
||||
# Igor Murzov <garik@efl.so>, 2015.
|
||||
# Dmitri Chudinov <dmitri.chudinov@gmail.com>, 2022.
|
||||
#
|
||||
#: src/lib/elementary/elm_config.c:4267
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: elementary 1.11\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-04-19 16:13+0200\n"
|
||||
"PO-Revision-Date: 2022-06-07 11:55+0500\n"
|
||||
"Last-Translator: Дмитрий Чудинов <dmitri.chudinov@gmail.com>\n"
|
||||
"PO-Revision-Date: 2015-02-07 15:16+0300\n"
|
||||
"Last-Translator: Игорь Мурзов <garik@efl.so>\n"
|
||||
"Language-Team: ru <enlightenment-intl@lists.sourceforge.net>\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
@ -22,192 +22,191 @@ msgstr ""
|
|||
|
||||
#: src/lib/ecore/ecore_getopt.c:85
|
||||
msgid "Version:"
|
||||
msgstr "Версия:"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:94
|
||||
msgid "Usage:"
|
||||
msgstr "Пример использования:"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:101
|
||||
#, c-format
|
||||
msgid "%s [options]"
|
||||
msgstr "%s [опций]"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:301
|
||||
msgid "Copyright:"
|
||||
msgstr "Копирайт:"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:313
|
||||
msgid "License:"
|
||||
msgstr "Лицензия:"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:499
|
||||
msgid "Type: "
|
||||
msgstr "Тип: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:575
|
||||
msgid "Default: "
|
||||
msgstr "По умолчанию: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:602
|
||||
msgid "Choices: "
|
||||
msgstr "Варианты: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:640 src/lib/ecore/ecore_getopt.c:641
|
||||
msgid "No categories available."
|
||||
msgstr "Нет доступных категорий."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:645
|
||||
msgid "Categories: "
|
||||
msgstr "Категории: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:767
|
||||
msgid "Options:\n"
|
||||
msgstr "Опции:\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:776
|
||||
msgid "Positional arguments:\n"
|
||||
msgstr "Позиционные аргументы:\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:843
|
||||
#, c-format
|
||||
msgid "ERROR: unknown category '%s'.\n"
|
||||
msgstr "ОШИБКА: неизвестная категория '%s'.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:947
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option --%s.\n"
|
||||
msgstr "ОШИБКА: неизвестная опция --%s.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:949
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option -%c.\n"
|
||||
msgstr "ОШИБКА: неизвестная опция -%c.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1012
|
||||
msgid "ERROR: "
|
||||
msgstr "ОШИБКА: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1108 src/lib/ecore/ecore_getopt.c:1245
|
||||
#: src/lib/ecore/ecore_getopt.c:1261 src/lib/ecore/ecore_getopt.c:1276
|
||||
#: src/lib/ecore/ecore_getopt.c:1296 src/lib/ecore/ecore_getopt.c:1343
|
||||
#: src/lib/ecore/ecore_getopt.c:1463 src/lib/ecore/ecore_getopt.c:1504
|
||||
msgid "value has no pointer set.\n"
|
||||
msgstr "значение не имеет установленного указателя.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1140 src/lib/ecore/ecore_getopt.c:1363
|
||||
#, c-format
|
||||
msgid "unknown boolean value %s.\n"
|
||||
msgstr "неизвестное булево значение %s.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1191 src/lib/ecore/ecore_getopt.c:1451
|
||||
#, c-format
|
||||
msgid "invalid number format %s\n"
|
||||
msgstr "неверный формат числа %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1309
|
||||
#, c-format
|
||||
msgid "invalid choice \"%s\". Valid values are: "
|
||||
msgstr "недопустимый выбор \"%s\". Допустимыми значениями являются: "
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1337
|
||||
msgid "missing parameter to append.\n"
|
||||
msgstr "недостающий параметр для добавления.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1441
|
||||
msgid "could not parse value.\n"
|
||||
msgstr "не удалось разобрать значение.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1498
|
||||
msgid "missing parameter.\n"
|
||||
msgstr "отсутствует параметр\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1511
|
||||
msgid "missing callback function!\n"
|
||||
msgstr "отсутствует функция вызова (callback)\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1542
|
||||
msgid "no version was defined.\n"
|
||||
msgstr "версия не определена\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1559
|
||||
msgid "no copyright was defined.\n"
|
||||
msgstr "копирайт не определен\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1576
|
||||
msgid "no license was defined.\n"
|
||||
msgstr "лицензия не определена\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1666
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option --%s, ignored.\n"
|
||||
msgstr "ОШИБКА: неизвестная опция --%s, проигнорировано\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1706
|
||||
#, c-format
|
||||
msgid "ERROR: option --%s requires an argument!\n"
|
||||
msgstr "ОШИБКА: для опции --%s требуется указать аргумент!\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1748
|
||||
#, c-format
|
||||
msgid "ERROR: unknown option -%c, ignored.\n"
|
||||
msgstr "ОШИБКА: неизвестная опция -%c, проигнорировано.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1793
|
||||
#, c-format
|
||||
msgid "ERROR: option -%c requires an argument!\n"
|
||||
msgstr "ОШИБКА: для опции -%c требуется указать аргумент!\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1888
|
||||
#, c-format
|
||||
msgid "ERROR: missing required positional argument %s.\n"
|
||||
msgstr "ОШИБКА: отсутствует необходимый позиционный аргумент %s.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:1920
|
||||
#, c-format
|
||||
msgid "ERROR: unsupported action type %d for positional argument %s\n"
|
||||
msgstr ""
|
||||
"ОШИБКА: неподдерживаемый тип действия %d для позиционного аргумента %s\n"
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2041 src/lib/ecore/ecore_getopt.c:2107
|
||||
msgid "ERROR: no parser provided.\n"
|
||||
msgstr "ОШИБКА: не предоставлен анализатор (parser).\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2046 src/lib/ecore/ecore_getopt.c:2112
|
||||
msgid "ERROR: no values provided.\n"
|
||||
msgstr "ОШИБКА: не предоставлены значения.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2055 src/lib/ecore/ecore_getopt.c:2121
|
||||
msgid "ERROR: no arguments provided.\n"
|
||||
msgstr "ОШИБКА: не предоставлены аргументы.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2081
|
||||
msgid "ERROR: invalid options found."
|
||||
msgstr "ОШИБКА: обнаружены недопустимые опции."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2087 src/lib/ecore/ecore_getopt.c:2154
|
||||
#, c-format
|
||||
msgid " See --%s.\n"
|
||||
msgstr " Смотри --%s.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2089 src/lib/ecore/ecore_getopt.c:2156
|
||||
#, c-format
|
||||
msgid " See -%c.\n"
|
||||
msgstr " Смотри --%c.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2148
|
||||
msgid "ERROR: invalid positional arguments found."
|
||||
msgstr "ОШИБКА: найдены недопустимые позиционные аргументы."
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2183
|
||||
#, c-format
|
||||
msgid "ERROR: incorrect geometry value '%s'\n"
|
||||
msgstr "ОШИБКА: некорректное значение геометрии '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/ecore/ecore_getopt.c:2201
|
||||
#, c-format
|
||||
msgid "ERROR: incorrect size value '%s'\n"
|
||||
msgstr "ОШИБКА: некорректное значение размера '%s'\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/efreet/efreet_base.c:127
|
||||
msgid "Desktop"
|
||||
|
@ -223,7 +222,7 @@ msgstr "Шаблоны"
|
|||
|
||||
#: src/lib/efreet/efreet_base.c:153
|
||||
msgid "Public"
|
||||
msgstr "Открытый"
|
||||
msgstr "Общий каталог"
|
||||
|
||||
#: src/lib/efreet/efreet_base.c:162
|
||||
msgid "Documents"
|
||||
|
@ -250,8 +249,9 @@ msgid "Title"
|
|||
msgstr "Заголовок"
|
||||
|
||||
#: src/lib/elementary/elc_naviframe.c:415
|
||||
#, fuzzy
|
||||
msgid "Subtitle"
|
||||
msgstr "Подзаголовок"
|
||||
msgstr "Заголовок"
|
||||
|
||||
#: src/lib/elementary/elc_naviframe.c:966
|
||||
msgid "Back"
|
||||
|
@ -263,7 +263,7 @@ msgstr "Вверх"
|
|||
|
||||
#: src/lib/elementary/elc_fileselector.c:1769
|
||||
msgid "Home"
|
||||
msgstr "Главная"
|
||||
msgstr "Дом"
|
||||
|
||||
#: src/lib/elementary/elc_fileselector.c:1787
|
||||
msgid "Search"
|
||||
|
@ -281,16 +281,16 @@ msgstr "Отмена"
|
|||
#~ msgstr "Состояние: Отключено"
|
||||
|
||||
#~ msgid "multi button entry label"
|
||||
#~ msgstr "метка многокнопочного элемента"
|
||||
#~ msgstr "метка многокопочного элемента"
|
||||
|
||||
#~ msgid "multi button entry item"
|
||||
#~ msgstr "кнопка многокнопочного элемента"
|
||||
#~ msgstr "кнопка многокопочного элемента"
|
||||
|
||||
#~ msgid "multi button entry"
|
||||
#~ msgstr "многокнопочный элемент"
|
||||
|
||||
#~ msgid "Next"
|
||||
#~ msgstr "Далее"
|
||||
#~ msgstr "Вперёд"
|
||||
|
||||
#~ msgid "Popup Title"
|
||||
#~ msgstr "Заголовок всплывающего окна"
|
||||
|
@ -368,7 +368,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "элемент выбора дня"
|
||||
|
||||
#~ msgid "diskselector item"
|
||||
#~ msgstr "элемент выбора диска"
|
||||
#~ msgstr "элемент диска выбора"
|
||||
|
||||
#~ msgid "Cut"
|
||||
#~ msgstr "Вырезать"
|
||||
|
@ -383,7 +383,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "Выбрать"
|
||||
|
||||
#~ msgid "Entry"
|
||||
#~ msgstr "Ввод"
|
||||
#~ msgstr "Запись"
|
||||
|
||||
#~ msgid "Index"
|
||||
#~ msgstr "Алфавитный указатель"
|
||||
|
@ -419,7 +419,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "Состояние: Выбрано"
|
||||
|
||||
#~ msgid "State: Unselected"
|
||||
#~ msgstr "Состояние: Не выбрано"
|
||||
#~ msgstr "Состояние: Невыбрано"
|
||||
|
||||
#~ msgid "Segment Control Item"
|
||||
#~ msgstr "Элемент сегментного элемента управления"
|
||||
|
@ -438,7 +438,7 @@ msgstr "Отмена"
|
|||
|
||||
#, fuzzy
|
||||
#~ msgid "spinner text"
|
||||
#~ msgstr "текст счётчика"
|
||||
#~ msgstr "счётчик"
|
||||
|
||||
#~ msgid "Selected"
|
||||
#~ msgstr "Выбрано"
|
||||
|
@ -450,7 +450,7 @@ msgstr "Отмена"
|
|||
#~ msgstr "С меню"
|
||||
|
||||
#~ msgid "Unselected"
|
||||
#~ msgstr "Не выбраноы"
|
||||
#~ msgstr "Невыбрано"
|
||||
|
||||
#~ msgid "Toolbar Item"
|
||||
#~ msgstr "Элемент панели инструментов"
|
||||
|
|
|
@ -31,7 +31,6 @@ _selection(void *data, Evas_Object *obj EINA_UNUSED, Elm_Selection_Data *ev)
|
|||
case ELM_SEL_FORMAT_IMAGE: fmt = "IMAGE"; break;
|
||||
case ELM_SEL_FORMAT_VCARD: fmt = "VCARD"; break;
|
||||
case ELM_SEL_FORMAT_HTML: fmt = "HTML"; break;
|
||||
case ELM_SEL_FORMAT_URILIST: fmt = "URILIST"; break;
|
||||
}
|
||||
fprintf(stderr, "got selection type '%s': length %zu\n", fmt, ev->len);
|
||||
|
||||
|
|
|
@ -475,7 +475,7 @@ _list_item_cb11(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_
|
|||
{
|
||||
Evas_Object *ctxpopup;
|
||||
Evas_Coord x,y;
|
||||
char label[18];
|
||||
char label[16];
|
||||
int i = 0;
|
||||
|
||||
if (list_mouse_down > 0) return;
|
||||
|
|
|
@ -3816,19 +3816,6 @@ typedef void (*Ecore_Evas_Drag_Finished_Cb)(Ecore_Evas *ee, unsigned int seat, v
|
|||
*/
|
||||
EAPI Eina_Bool ecore_evas_drag_start(Ecore_Evas *ee, unsigned int seat, Eina_Content *content, Ecore_Evas *drag_rep,
|
||||
const char* action, Ecore_Evas_Drag_Finished_Cb terminate_cb, void *data);
|
||||
/**
|
||||
* @brief Set the offset of the dragged symbol. Only valid during a drag
|
||||
*
|
||||
* @param[in] ee The Ecore Evas the drag operation started on.
|
||||
* @param[in] seat The seat to use
|
||||
* @param[in] offset The offset to apply to the upper left corner ofthe dragged window
|
||||
*
|
||||
* This must be called on the ee where ecore_evas_drag_start is called on, NOT on the drag representation
|
||||
*
|
||||
* @since 1.24
|
||||
*/
|
||||
EAPI void ecore_evas_drag_offset_set(Ecore_Evas *ee, unsigned int seat, Eina_Size2D offset);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Cancels an ongoing drag operation.
|
||||
|
|
|
@ -5645,28 +5645,10 @@ ecore_evas_drag_start(Ecore_Evas *ee, unsigned int seat, Eina_Content *content,
|
|||
ee->drag.free = terminate_cb;
|
||||
ee->drag.data = data;
|
||||
ee->drag.accepted = EINA_FALSE;
|
||||
ee->drag.offset = EINA_SIZE2D(INT_MAX, INT_MAX);
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
ecore_evas_drag_offset_set(Ecore_Evas *ee, unsigned int seat, Eina_Size2D offset) {
|
||||
Ecore_Evas_Selection_Seat_Buffers *buffers;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN(ee);
|
||||
buffers = _fetch_selection_buffers_of_seat(ee, seat, EINA_FALSE);
|
||||
EINA_SAFETY_ON_NULL_RETURN(buffers);
|
||||
EINA_SAFETY_ON_TRUE_RETURN(buffers->selection_buffer[ECORE_EVAS_SELECTION_BUFFER_DRAG_AND_DROP_BUFFER] == NULL);
|
||||
if (offset.w == INT_MAX || offset.h == INT_MAX)
|
||||
{
|
||||
ERR("Offset is INT_MAX, this is a reserved value! Executing Fallback!");
|
||||
}
|
||||
|
||||
INF("Set offset to %d %d", offset.w, offset.h);
|
||||
ee->drag.offset = offset;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
ecore_evas_drag_cancel(Ecore_Evas *ee, unsigned int seat)
|
||||
{
|
||||
|
|
|
@ -404,7 +404,6 @@ struct _Ecore_Evas
|
|||
struct
|
||||
{
|
||||
Ecore_Evas *rep;
|
||||
Eina_Size2D offset;
|
||||
void *data;
|
||||
Ecore_Evas_Drag_Finished_Cb free;
|
||||
Eina_Bool accepted;
|
||||
|
|
|
@ -2530,11 +2530,10 @@ struct _Ecore_X_Event_Xkb
|
|||
int base_group; /** @since 1.21 */
|
||||
int latched_group; /** @since 1.21 */
|
||||
int locked_group; /** @since 1.21 */
|
||||
unsigned int mods; /** @since 1.21 */
|
||||
unsigned int mods; /** @since 1.21 */
|
||||
unsigned int base_mods; /** @since 1.21 */
|
||||
unsigned int latched_mods; /** @since 1.21 */
|
||||
unsigned int locked_mods; /** @since 1.21 */
|
||||
Eina_Bool map_notify; /** @since 1.27 */
|
||||
unsigned int latched_mods; /** @since 1.21 */
|
||||
unsigned int locked_mods; /** @since 1.21 */
|
||||
};
|
||||
typedef struct _Ecore_X_Event_Xkb Ecore_X_Event_Xkb; /** @since 1.7 */
|
||||
typedef struct _Ecore_X_Event_Xkb Ecore_X_Xkb_State; /** @since 1.21 */
|
||||
|
|
|
@ -2470,24 +2470,28 @@ _ecore_x_event_handle_generic_event(XEvent *event)
|
|||
#ifdef ECORE_XKB
|
||||
|
||||
void
|
||||
free_hash(void *data, void *ev)
|
||||
free_hash(void *userdata EINA_UNUSED, void *funcdata EINA_UNUSED)
|
||||
{
|
||||
eina_hash_del_by_key(emitted_events, (void *)&data);
|
||||
if (ev) free(ev);
|
||||
eina_hash_del_by_data(emitted_events, (void*) 1);
|
||||
}
|
||||
|
||||
void
|
||||
_ecore_x_event_handle_xkb(XEvent *xevent)
|
||||
{
|
||||
XkbEvent *xkbev = (XkbEvent *)xevent;
|
||||
Ecore_X_Event_Xkb *e;
|
||||
XkbEvent *xkbev;
|
||||
|
||||
xkbev = (XkbEvent *) xevent;
|
||||
|
||||
|
||||
if (xkbev->any.xkb_type == XkbStateNotify)
|
||||
{
|
||||
Ecore_X_Event_Xkb *e;
|
||||
|
||||
if (eina_hash_find(emitted_events, &xkbev->state.serial)) return;
|
||||
|
||||
e = calloc(1, sizeof(Ecore_X_Event_Xkb));
|
||||
if (!e) return;
|
||||
if (!e)
|
||||
return;
|
||||
|
||||
e->group = xkbev->state.group;
|
||||
e->base_group = xkbev->state.base_group;
|
||||
|
@ -2498,18 +2502,14 @@ _ecore_x_event_handle_xkb(XEvent *xevent)
|
|||
e->base_mods = xkbev->state.base_mods;
|
||||
e->latched_mods = xkbev->state.latched_mods;
|
||||
e->locked_mods = xkbev->state.locked_mods;
|
||||
ecore_event_add(ECORE_X_EVENT_XKB_STATE_NOTIFY, e, free_hash,
|
||||
(void *)(intptr_t)xkbev->new_kbd.serial);
|
||||
eina_hash_add(emitted_events, &xkbev->state.serial, (void *)1);
|
||||
ecore_event_add(ECORE_X_EVENT_XKB_STATE_NOTIFY, e, free_hash, NULL);
|
||||
eina_hash_add(emitted_events, &xkbev->state.serial, (void*) 1);
|
||||
}
|
||||
else if ((xkbev->any.xkb_type == XkbNewKeyboardNotify) ||
|
||||
(xkbev->any.xkb_type == XkbMapNotify))
|
||||
{
|
||||
if (eina_hash_find(emitted_events, &xkbev->state.serial)) return;
|
||||
|
||||
e = calloc(1, sizeof(Ecore_X_Event_Xkb));
|
||||
if (!e) return;
|
||||
|
||||
if (xkbev->any.xkb_type == XkbMapNotify)
|
||||
{
|
||||
XkbMapNotifyEvent *xkbmapping = (XkbMapNotifyEvent *)xkbev;
|
||||
|
@ -2522,16 +2522,14 @@ _ecore_x_event_handle_xkb(XEvent *xevent)
|
|||
_ecore_x_modifiers_get();
|
||||
_ecore_x_window_grab_resume();
|
||||
_ecore_x_key_grab_resume();
|
||||
e->map_notify = EINA_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
XkbNewKeyboardNotifyEvent *xkbnkn = (void*)xkbev;
|
||||
if (!(xkbnkn->changed & XkbNKN_KeycodesMask)) return;
|
||||
}
|
||||
ecore_event_add(ECORE_X_EVENT_XKB_NEWKBD_NOTIFY, e, free_hash,
|
||||
(void *)(intptr_t)xkbev->new_kbd.serial);
|
||||
eina_hash_add(emitted_events, &xkbev->new_kbd.serial, (void *)1);
|
||||
ecore_event_add(ECORE_X_EVENT_XKB_NEWKBD_NOTIFY, NULL, free_hash, NULL);
|
||||
eina_hash_add(emitted_events, &xkbev->new_kbd.serial, (void*) 1);
|
||||
}
|
||||
}
|
||||
#endif /* ifdef ECORE_XKB */
|
||||
|
|
|
@ -1636,7 +1636,7 @@ ecore_x_netwm_moveresize_request_send(Ecore_X_Window win,
|
|||
xev.xclient.data.l[3] = button;
|
||||
xev.xclient.data.l[4] = 1;
|
||||
|
||||
XSendEvent(_ecore_x_disp, DefaultRootWindow(_ecore_x_disp), False,
|
||||
XSendEvent(_ecore_x_disp, win, False,
|
||||
SubstructureNotifyMask | SubstructureRedirectMask, &xev);
|
||||
if (_ecore_xlib_sync) ecore_x_sync();
|
||||
}
|
||||
|
|
|
@ -382,7 +382,7 @@ _drm_vblank_handler(int fd EINA_UNUSED,
|
|||
D(" @%1.5f vblank %i\n", ecore_time_get(), frame);
|
||||
if (pframe != frame)
|
||||
{
|
||||
#if 0 // disable timestamp from vblank and use time event arrived
|
||||
#define DELTA_COUNT 10
|
||||
double t = (double)sec + ((double)usec / 1000000);
|
||||
unsigned long long tusec, ptusec, tdelt = 0;
|
||||
static unsigned int psec = 0, pusec = 0;
|
||||
|
@ -411,15 +411,10 @@ _drm_vblank_handler(int fd EINA_UNUSED,
|
|||
}
|
||||
}
|
||||
_drm_fail_count = 0;
|
||||
pusec = usec;
|
||||
psec = sec;
|
||||
#else
|
||||
double t = ecore_time_get();
|
||||
_drm_send_time(t);
|
||||
sec = 0;
|
||||
usec = 0;
|
||||
#endif
|
||||
pframe = frame;
|
||||
psec = sec;
|
||||
pusec = usec;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -4082,8 +4082,10 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
|
|||
}
|
||||
if (edje_object_update_hints_get(ep->typedata.swallow->swallowed_object))
|
||||
{
|
||||
Edje *ted = _edje_fetch(ep->typedata.swallow->swallowed_object);
|
||||
if (ted) _edje_recalc_do(ted);
|
||||
Edje *ted;
|
||||
|
||||
ted = _edje_fetch(ep->typedata.swallow->swallowed_object);
|
||||
_edje_recalc_do(ted);
|
||||
}
|
||||
|
||||
Edje_Size *min = NULL, *max = NULL;
|
||||
|
|
|
@ -13731,21 +13731,6 @@ _edje_source_with_double_values_append(const char *param_name, char val_num, dou
|
|||
|
||||
#define INHERIT_CHECK_STRING(ATTRIBUTE_STR) (strcmp(inherit_pd->ATTRIBUTE_STR, pd->ATTRIBUTE_STR))
|
||||
|
||||
static inline char *
|
||||
gen_indent_relative_str(int indent_space)
|
||||
{
|
||||
size_t str_len = strlen("relative") + indent_space + 1;
|
||||
char *relative_str = malloc(str_len);
|
||||
|
||||
if (!relative_str)
|
||||
{
|
||||
ERR("Out of memory");
|
||||
abort();
|
||||
}
|
||||
snprintf(relative_str, str_len, "%*srelative", indent_space, "");
|
||||
return relative_str;
|
||||
}
|
||||
|
||||
static void
|
||||
_edje_generate_source_state_relative(Edje *ed,
|
||||
Edje_Part_Description_Common *pd,
|
||||
|
@ -13841,14 +13826,13 @@ _edje_generate_source_state_relative(Edje *ed,
|
|||
|
||||
if (relative)
|
||||
{
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(pd->rel1.relative_x),
|
||||
TO_DOUBLE(pd->rel1.relative_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
char relative_str[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative_str, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative_str, 2,
|
||||
TO_DOUBLE(pd->rel1.relative_x),
|
||||
TO_DOUBLE(pd->rel1.relative_y),
|
||||
buf, &ret);
|
||||
}
|
||||
|
||||
if (offset)
|
||||
|
@ -13961,14 +13945,13 @@ _edje_generate_source_state_relative(Edje *ed,
|
|||
|
||||
if (relative)
|
||||
{
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(pd->rel2.relative_x),
|
||||
TO_DOUBLE(pd->rel2.relative_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
char relative_str[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative_str, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative_str, 2,
|
||||
TO_DOUBLE(pd->rel2.relative_x),
|
||||
TO_DOUBLE(pd->rel2.relative_y),
|
||||
buf, &ret);
|
||||
}
|
||||
|
||||
if (offset)
|
||||
|
@ -14213,14 +14196,13 @@ fill:
|
|||
|
||||
if (orig_rel)
|
||||
{
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(img->image.fill.pos_rel_x),
|
||||
TO_DOUBLE(img->image.fill.pos_rel_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
char relative[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative, 2,
|
||||
TO_DOUBLE(img->image.fill.pos_rel_x),
|
||||
TO_DOUBLE(img->image.fill.pos_rel_y),
|
||||
buf, &ret);
|
||||
}
|
||||
|
||||
if (orig_abs)
|
||||
|
@ -14244,14 +14226,13 @@ fill:
|
|||
|
||||
if (size_rel)
|
||||
{
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(img->image.fill.rel_x),
|
||||
TO_DOUBLE(img->image.fill.rel_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
char relative[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative, 2,
|
||||
TO_DOUBLE(img->image.fill.rel_x),
|
||||
TO_DOUBLE(img->image.fill.rel_y),
|
||||
buf, &ret);
|
||||
}
|
||||
|
||||
if (size_abs)
|
||||
|
@ -14558,14 +14539,13 @@ fill_proxy:
|
|||
|
||||
if (orig_rel)
|
||||
{
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(pro->proxy.fill.pos_rel_x),
|
||||
TO_DOUBLE(pro->proxy.fill.pos_rel_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
char relative[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative, 2,
|
||||
TO_DOUBLE(pro->proxy.fill.pos_rel_x),
|
||||
TO_DOUBLE(pro->proxy.fill.pos_rel_y),
|
||||
buf, &ret);
|
||||
}
|
||||
|
||||
if (orig_abs)
|
||||
|
@ -14589,14 +14569,13 @@ fill_proxy:
|
|||
|
||||
if (size_rel)
|
||||
{
|
||||
char *relative_str = gen_indent_relative_str(indent_space);
|
||||
|
||||
_edje_source_with_double_values_append
|
||||
(relative_str, 2,
|
||||
TO_DOUBLE(pro->proxy.fill.rel_x),
|
||||
TO_DOUBLE(pro->proxy.fill.rel_y),
|
||||
buf, &ret);
|
||||
free(relative_str);
|
||||
char relative[strlen("relative") + indent_space + 1];
|
||||
snprintf(relative, strlen("relative") + indent_space + 1,
|
||||
"%*srelative", indent_space, "");
|
||||
_edje_source_with_double_values_append(relative, 2,
|
||||
TO_DOUBLE(pro->proxy.fill.rel_x),
|
||||
TO_DOUBLE(pro->proxy.fill.rel_y),
|
||||
buf, &ret);
|
||||
}
|
||||
|
||||
if (size_abs)
|
||||
|
|
|
@ -511,7 +511,7 @@ _edje_message_propagate_send(Edje *ed, Edje_Queue queue, Edje_Message_Type type,
|
|||
if (_injob > 0)
|
||||
{
|
||||
if (!_job_loss_timer)
|
||||
_job_loss_timer = ecore_timer_add(0.000, _edje_job_loss_timer, NULL);
|
||||
_job_loss_timer = ecore_timer_add(0.001, _edje_job_loss_timer, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -691,23 +691,6 @@ eet_close(Eet_File *ef);
|
|||
EAPI Eet_Error
|
||||
eet_sync(Eet_File *ef);
|
||||
|
||||
/**
|
||||
* @ingroup Eet_File_Group
|
||||
* @brief does exactly what eet_xunc() does but also fsyncs file data
|
||||
* @param ef A valid eet file handle.
|
||||
* @return An eet error identifier.
|
||||
*
|
||||
* This function does everything eet_xunc() does with one addition - it
|
||||
* ensures data is written to/synced to disk (as best is possible) by
|
||||
* calling fdatasync() on the file before writes are all queued/done.
|
||||
*
|
||||
* If the eet file handle is not valid nothing will be done.
|
||||
*
|
||||
* @since 1.27
|
||||
*/
|
||||
EAPI Eet_Error
|
||||
eet_sync_sync(Eet_File *ef);
|
||||
|
||||
/**
|
||||
* @ingroup Eet_File_Group
|
||||
* @brief Returns a handle to the shared string dictionary of the Eet file
|
||||
|
|
|
@ -71,7 +71,7 @@ static Eet_Error
|
|||
eet_flush(Eet_File *ef);
|
||||
#endif /* if 0 */
|
||||
static Eet_Error
|
||||
eet_flush2(Eet_File *ef, Eina_Bool sync);
|
||||
eet_flush2(Eet_File *ef);
|
||||
static Eet_File_Node *
|
||||
find_node_by_name(Eet_File *ef,
|
||||
const char *name);
|
||||
|
@ -288,7 +288,7 @@ eet_string_match(const char *s1,
|
|||
|
||||
/* flush out writes to a v2 eet file */
|
||||
static Eet_Error
|
||||
eet_flush2(Eet_File *ef, Eina_Bool sync)
|
||||
eet_flush2(Eet_File *ef)
|
||||
{
|
||||
Eet_File_Node *efn;
|
||||
FILE *fp;
|
||||
|
@ -509,9 +509,6 @@ eet_flush2(Eet_File *ef, Eina_Bool sync)
|
|||
/* no more writes pending */
|
||||
ef->writes_pending = 0;
|
||||
|
||||
#ifndef _WIN32
|
||||
if (sync) fdatasync(fileno(fp));
|
||||
#endif
|
||||
fclose(fp);
|
||||
|
||||
return EET_ERROR_NONE;
|
||||
|
@ -667,30 +664,7 @@ eet_sync(Eet_File *ef)
|
|||
|
||||
LOCK_FILE(ef);
|
||||
|
||||
ret = eet_flush2(ef, EINA_FALSE);
|
||||
|
||||
UNLOCK_FILE(ef);
|
||||
return ret;
|
||||
}
|
||||
|
||||
EAPI Eet_Error
|
||||
eet_sync_sync(Eet_File *ef)
|
||||
{
|
||||
Eet_Error ret;
|
||||
|
||||
if (eet_check_pointer(ef))
|
||||
return EET_ERROR_BAD_OBJECT;
|
||||
|
||||
if ((ef->mode != EET_FILE_MODE_WRITE) &&
|
||||
(ef->mode != EET_FILE_MODE_READ_WRITE))
|
||||
return EET_ERROR_NOT_WRITABLE;
|
||||
|
||||
if (!ef->writes_pending)
|
||||
return EET_ERROR_NONE;
|
||||
|
||||
LOCK_FILE(ef);
|
||||
|
||||
ret = eet_flush2(ef, EINA_TRUE);
|
||||
ret = eet_flush2(ef);
|
||||
|
||||
UNLOCK_FILE(ef);
|
||||
return ret;
|
||||
|
@ -1309,7 +1283,7 @@ eet_internal_close(Eet_File *ef,
|
|||
goto on_error;
|
||||
}
|
||||
|
||||
err = eet_flush2(ef, EINA_FALSE);
|
||||
err = eet_flush2(ef);
|
||||
|
||||
eet_identity_unref(ef->key);
|
||||
ef->key = NULL;
|
||||
|
|
|
@ -607,6 +607,11 @@ _efl_gfx_path_append_arc_to(Eo *obj, Efl_Gfx_Path_Data *pd,
|
|||
// Correction of out-of-range radii, see F6.6.1 (step 2)
|
||||
rx = fabs(rx);
|
||||
ry = fabs(ry);
|
||||
if ((rx < 0.5) || (ry < 0.5))
|
||||
{
|
||||
_efl_gfx_path_append_line_to(obj, pd, x, y);
|
||||
return;
|
||||
}
|
||||
|
||||
angle = angle * M_PI / 180.0;
|
||||
cos_phi = cos(angle);
|
||||
|
|
|
@ -2197,7 +2197,7 @@ comp_surface_mouse_move(void *data, Evas *e EINA_UNUSED, Eo *obj EINA_UNUSED, vo
|
|||
Evas_Event_Mouse_Move *ev = event_info;
|
||||
Comp_Surface *cs = data;
|
||||
Eina_List *l = NULL, *ll;
|
||||
struct wl_resource *res = NULL;
|
||||
struct wl_resource *res;
|
||||
int x, y;
|
||||
Comp_Seat *s;
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ static const char *xdg_pictures_dir = NULL;
|
|||
static const char *xdg_videos_dir = NULL;
|
||||
static const char *hostname = NULL;
|
||||
|
||||
Eina_Prefix *_efreet_pfx= NULL;
|
||||
static Eina_Prefix *pfx= NULL;
|
||||
|
||||
static void efreet_dirs_init(void);
|
||||
static const char *efreet_dir_get(const char *key, const char *fallback);
|
||||
|
@ -74,7 +74,7 @@ efreet_base_init(void)
|
|||
EINA_LOG_ERR("Efreet: Could not create a log domain for efreet_base.\n");
|
||||
return 0;
|
||||
}
|
||||
if (!_efreet_pfx) _efreet_pfx = eina_prefix_new
|
||||
if (!pfx) pfx = eina_prefix_new
|
||||
(NULL, efreet_init, "EFREET", "efreet", "checkme",
|
||||
PACKAGE_BIN_DIR, PACKAGE_LIB_DIR, PACKAGE_DATA_DIR, PACKAGE_DATA_DIR);
|
||||
efreet_dirs_init();
|
||||
|
@ -110,10 +110,10 @@ efreet_base_shutdown(void)
|
|||
|
||||
IF_RELEASE(hostname);
|
||||
|
||||
if (_efreet_pfx)
|
||||
if (pfx)
|
||||
{
|
||||
eina_prefix_free(_efreet_pfx);
|
||||
_efreet_pfx = NULL;
|
||||
eina_prefix_free(pfx);
|
||||
pfx = NULL;
|
||||
}
|
||||
eina_log_domain_unregister(_efreet_base_log_dom);
|
||||
_efreet_base_log_dom = -1;
|
||||
|
@ -340,9 +340,9 @@ efreet_dirs_init(void)
|
|||
xdg_cache_home = efreet_dir_get("XDG_CACHE_HOME", "/.cache");
|
||||
|
||||
/* xdg_data_dirs */
|
||||
if (_efreet_pfx)
|
||||
if (pfx)
|
||||
{
|
||||
const char *dir = eina_prefix_get(_efreet_pfx);
|
||||
const char *dir = eina_prefix_get(pfx);
|
||||
if (dir)
|
||||
{
|
||||
size_t len = strlen(dir);
|
||||
|
|
|
@ -108,8 +108,6 @@ EAPI int EFREET_EVENT_ICON_CACHE_UPDATE = 0;
|
|||
EAPI int EFREET_EVENT_DESKTOP_CACHE_UPDATE = 0;
|
||||
EAPI int EFREET_EVENT_DESKTOP_CACHE_BUILD = 0;
|
||||
|
||||
extern Eina_Prefix *_efreet_pfx;
|
||||
|
||||
#define IPC_HEAD(_type) \
|
||||
Ecore_Ipc_Event_Server_##_type *e = event; \
|
||||
if (e->server != ipc) \
|
||||
|
@ -149,13 +147,7 @@ _ipc_launch(void)
|
|||
if (run_in_tree)
|
||||
bs_binary_get(buf, sizeof(buf), "efreet", "efreetd");
|
||||
else
|
||||
{
|
||||
const char *bindir = NULL;
|
||||
|
||||
if (_efreet_pfx) bindir = eina_prefix_bin_get(_efreet_pfx);
|
||||
if (bindir) snprintf(buf, sizeof(buf), "%s/efreetd", bindir);
|
||||
else snprintf(buf, sizeof(buf), PACKAGE_BIN_DIR "/efreetd");
|
||||
}
|
||||
snprintf(buf, sizeof(buf), PACKAGE_BIN_DIR "/efreetd");
|
||||
ecore_exe_run(buf, NULL);
|
||||
num = 0;
|
||||
while ((!ipc) && (num < tries))
|
||||
|
|
|
@ -138,8 +138,8 @@ _eina_debug_dump_fhandle_bt(FILE *f, void **bt, int btlen)
|
|||
}
|
||||
// rely on normal libc buffering for file ops to avoid syscalls.
|
||||
// may or may not be a good idea. good enough for now.
|
||||
if (file) fprintf(f, "%s 0x%llx 0x%llx\n", file, offset, base);
|
||||
else fprintf(f, "?? -\n");
|
||||
if (file) fprintf(f, "%s\t 0x%llx 0x%llx\n", file, offset, base);
|
||||
else fprintf(f, "??\t -\n");
|
||||
}
|
||||
#else
|
||||
(void)f;
|
||||
|
|
|
@ -316,9 +316,9 @@ void eio_monitor_backend_del(Eio_Monitor *monitor)
|
|||
eio_monitor_fallback_del(monitor);
|
||||
}
|
||||
|
||||
Eina_Bool eio_monitor_context_check(const Eio_Monitor *monitor, const char *path)
|
||||
Eina_Bool eio_monitor_content_check(const Eio_Monitor *monitor, const char *path)
|
||||
{
|
||||
return eio_monitor_fallback_context_check(monitor, path);
|
||||
return eio_monitor_fallback_content_check(monitor, path);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -274,7 +274,7 @@ _message_iter_struct_to_eina_value(Eldbus_Message_Iter *iter)
|
|||
Eina_Value *value_st = NULL;
|
||||
Eina_Array *st_members = eina_array_new(1);
|
||||
unsigned int offset = 0, z;
|
||||
char name[16];//arg000 + \0
|
||||
char name[7];//arg000 + \0
|
||||
Eina_Value_Struct_Member *members;
|
||||
Eldbus_Struct_Desc *st_desc;
|
||||
Eina_Array *st_values = eina_array_new(1);
|
||||
|
|
|
@ -64,12 +64,6 @@ _efl_ui_dnd_drag_start(Eo *obj, Efl_Ui_Dnd_Data *pd, Eina_Content *content, cons
|
|||
return drag_win;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_dnd_drag_offset_set(Eo *obj EINA_UNUSED, Efl_Ui_Dnd_Data *pd, unsigned int seat, Eina_Size2D size)
|
||||
{
|
||||
ecore_evas_drag_offset_set(pd->ee, seat, size);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_dnd_drag_cancel(Eo *obj EINA_UNUSED, Efl_Ui_Dnd_Data *pd, unsigned int seat)
|
||||
{
|
||||
|
|
|
@ -53,17 +53,6 @@ mixin @beta Efl.Ui.Dnd requires Efl.Object {
|
|||
of the content being dragged (like a thumbnail, for example).
|
||||
Use @Efl.Content.content.set on it to do so.]]
|
||||
}
|
||||
@property drag_offset {
|
||||
[[Set the offset during a drag that was initiated through drag_start]]
|
||||
keys {
|
||||
seat: uint; [[Seat setting the offset on.]]
|
||||
}
|
||||
values {
|
||||
offset : Eina.Size2D; [[The offset for which the window will be shifted. The upper left of the window is
|
||||
calculated by adding this offset to the cursor position]]
|
||||
}
|
||||
set {}
|
||||
}
|
||||
drag_cancel {
|
||||
[[Cancels an on-going drag operation.]]
|
||||
params {
|
||||
|
|
|
@ -3712,13 +3712,8 @@ _elm_win_xwin_update(Efl_Ui_Win_Data *sd)
|
|||
sd->wm_rot.preferred_rot);
|
||||
|
||||
#ifdef HAVE_ELEMENTARY_X
|
||||
const char *engine_name = ecore_evas_engine_name_get(sd->ee);
|
||||
if (engine_name) _elm_win_need_frame_adjust(sd, engine_name);
|
||||
if (sd->csd.need && sd->x.xwin)
|
||||
{
|
||||
TRAP(sd, borderless_set, EINA_TRUE);
|
||||
ecore_x_mwm_borderless_set(sd->x.xwin, EINA_TRUE);
|
||||
}
|
||||
TRAP(sd, borderless_set, EINA_TRUE);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -9226,7 +9221,6 @@ _ui_buffer_get(Ecore_Evas_Selection_Buffer buffer)
|
|||
void
|
||||
_register_selection_changed(Efl_Ui_Selection *selection)
|
||||
{
|
||||
if (!selection) return;
|
||||
ELM_WIN_DATA_GET(efl_provider_find(selection, EFL_UI_WIN_CLASS), pd);
|
||||
|
||||
eina_array_push(pd->planned_changes, selection);
|
||||
|
@ -9309,7 +9303,7 @@ _enter_state_change_cb(Ecore_Evas *ee, unsigned int seat EINA_UNUSED, Eina_Posit
|
|||
target->currently_inside = EINA_TRUE;
|
||||
efl_event_callback_call(target->obj, EFL_UI_DND_EVENT_DROP_ENTERED, &ev);
|
||||
}
|
||||
else if (!move_inside && target->currently_inside)
|
||||
else if (!move_inside && !target->currently_inside)
|
||||
{
|
||||
target->currently_inside = EINA_FALSE;
|
||||
efl_event_callback_call(target->obj, EFL_UI_DND_EVENT_DROP_LEFT, &ev);
|
||||
|
|
|
@ -24,8 +24,6 @@ static inline Eina_Array*
|
|||
_elm_sel_format_to_mime_type(Elm_Sel_Format format)
|
||||
{
|
||||
Eina_Array *ret = eina_array_new(10);
|
||||
if (format & ELM_SEL_FORMAT_URILIST)
|
||||
eina_array_push(ret, "text/uri-list");
|
||||
if (format & ELM_SEL_FORMAT_TEXT)
|
||||
eina_array_push(ret, "text/plain;charset=utf-8");
|
||||
if (format & ELM_SEL_FORMAT_MARKUP)
|
||||
|
@ -103,8 +101,6 @@ _mime_type_to_elm_sel_format(const char *mime_type)
|
|||
return ELM_SEL_FORMAT_MARKUP;
|
||||
else if (eina_streq(mime_type, "application/xhtml+xml"))
|
||||
return ELM_SEL_FORMAT_HTML;
|
||||
else if (eina_streq(mime_type, "text/uri-list"))
|
||||
return ELM_SEL_FORMAT_URILIST;
|
||||
else if (!strncmp(mime_type, "text/", strlen("text/")))
|
||||
return ELM_SEL_FORMAT_TEXT;
|
||||
else if (!strncmp(mime_type, "image/", strlen("image/")))
|
||||
|
@ -131,20 +127,7 @@ elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type selection,
|
|||
Eina_Array *tmp;
|
||||
unsigned char *mem_buf = NULL;
|
||||
|
||||
if (!obj)
|
||||
{
|
||||
ERR("elm_cnp_selection_set() passed NULL object");
|
||||
return EINA_FALSE;
|
||||
}
|
||||
ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
|
||||
if (!ee)
|
||||
{
|
||||
ERR("elm_cnp_selection_set() can't fine ecore_evas for obj %p", obj);
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
if (((format == ELM_SEL_FORMAT_TEXT) && ((char *)buf)[buflen - 1] != '\0') ||
|
||||
((format == ELM_SEL_FORMAT_URILIST) && ((char *)buf)[buflen - 1] != '\0'))
|
||||
if (format == ELM_SEL_FORMAT_TEXT && ((char*)buf)[buflen - 1] != '\0')
|
||||
{
|
||||
mem_buf = eina_memdup((unsigned char *)buf, buflen, EINA_TRUE);
|
||||
data.mem = mem_buf;
|
||||
|
@ -156,6 +139,8 @@ elm_cnp_selection_set(Evas_Object *obj, Elm_Sel_Type selection,
|
|||
data.len = buflen;
|
||||
}
|
||||
|
||||
ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
|
||||
|
||||
if (format == ELM_SEL_FORMAT_IMAGE)
|
||||
{
|
||||
tmp = _elm_sel_from_content_to_mime_type(buf, buflen);
|
||||
|
|
|
@ -80,8 +80,7 @@ typedef enum
|
|||
* inline images */
|
||||
ELM_SEL_FORMAT_IMAGE = 4, /**< Images */
|
||||
ELM_SEL_FORMAT_VCARD = 8, /**< Vcards */
|
||||
ELM_SEL_FORMAT_HTML = 16, /**< Raw HTML-like data (eg. webkit) */
|
||||
ELM_SEL_FORMAT_URILIST = 32 /**< URI List for file DND @since 1.27 */
|
||||
ELM_SEL_FORMAT_HTML = 16 /**< Raw HTML-like data (eg. webkit) */
|
||||
} Elm_Sel_Format;
|
||||
|
||||
/**
|
||||
|
|
|
@ -132,14 +132,11 @@ _format_to_mime_array(Elm_Sel_Format format)
|
|||
{
|
||||
Eina_Array *ret = eina_array_new(10);
|
||||
|
||||
if (format & ELM_SEL_FORMAT_URILIST)
|
||||
eina_array_push(ret, "text/uri-list");
|
||||
if (format & ELM_SEL_FORMAT_TEXT)
|
||||
{
|
||||
eina_array_push(ret, "text/plain");
|
||||
eina_array_push(ret, "text/plain;charset=utf-8");
|
||||
if (!(format & ELM_SEL_FORMAT_URILIST))
|
||||
eina_array_push(ret, "text/uri-list");
|
||||
eina_array_push(ret, "text/uri-list");
|
||||
}
|
||||
if (format & ELM_SEL_FORMAT_MARKUP)
|
||||
eina_array_push(ret, "application/x-elementary-markup");
|
||||
|
@ -776,11 +773,10 @@ elm_drag_start(Evas_Object *obj, Elm_Sel_Format format,
|
|||
Eina_Array *mime_types;
|
||||
Eina_Content *content;
|
||||
Efl_Content *ui;
|
||||
int x = 0, y = 0, w, h;
|
||||
int x, y, w, h;
|
||||
Efl_Ui_Widget *widget;
|
||||
Elm_Drag_Data *dd;
|
||||
const char *str_action;
|
||||
Eina_Position2D pointer;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
|
||||
|
||||
|
@ -804,9 +800,6 @@ elm_drag_start(Evas_Object *obj, Elm_Sel_Format format,
|
|||
content = eina_content_new((Eina_Slice) EINA_SLICE_STR_FULL(data), eina_array_data_get(mime_types, 0));
|
||||
ui = efl_ui_dnd_drag_start(obj, content, str_action, _default_seat(obj));
|
||||
widget = createicon(createdata, ui, &x, &y);
|
||||
|
||||
evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &pointer.x, &pointer.y);
|
||||
efl_ui_dnd_drag_offset_set(obj, _default_seat(obj), EINA_SIZE2D(x - pointer.x, y - pointer.y));
|
||||
evas_object_geometry_get(widget, NULL, NULL, &w, &h);
|
||||
evas_object_show(widget);
|
||||
efl_content_set(ui, widget);
|
||||
|
|
|
@ -44,7 +44,6 @@ emile_compress(const Eina_Binbuf *data,
|
|||
Eina_Bool ok = EINA_FALSE;
|
||||
|
||||
length = _emile_compress_buffer_size(data, t);
|
||||
if (length < 0) return NULL;
|
||||
|
||||
compact = malloc(length);
|
||||
if (!compact)
|
||||
|
|
|
@ -1462,7 +1462,6 @@ evas_object_smart_del(Evas_Object *eo_obj)
|
|||
free(sobj->interface_privates);
|
||||
sobj->interface_privates = NULL;
|
||||
|
||||
sobj->data = NULL;
|
||||
if (s) evas_object_smart_unuse(s);
|
||||
}
|
||||
|
||||
|
@ -1674,12 +1673,6 @@ evas_object_smart_cleanup(Evas_Object *eo_obj)
|
|||
}
|
||||
}
|
||||
else evas_object_smart_member_del(contained_obj);
|
||||
// EEK ... it qasn't removed? remove it forcibly...
|
||||
if ((Evas_Object_Protected_Data *)o->contained == contained)
|
||||
{
|
||||
o->contained = eina_inlist_remove
|
||||
(o->contained, EINA_INLIST_GET(contained));
|
||||
}
|
||||
}
|
||||
|
||||
while (o->callbacks)
|
||||
|
|
|
@ -18016,7 +18016,7 @@ EVAS_API int evas_textblock_fit_step_size_set(Evas_Object *obj, unsigned int st
|
|||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EVAS_ERROR_INVALID_PARAM);
|
||||
Efl_Canvas_Textblock_Data *o = efl_data_scope_get(obj, MY_CLASS);
|
||||
TEXT_FIT_CONTENT_CONFIG *fc = &o->fit_content_config;
|
||||
TEXT_FIT_CONTENT_CONFIG * fc = &o->fit_content_config;
|
||||
if (fc->step_size == step_size)
|
||||
return EVAS_ERROR_SUCCESS;
|
||||
|
||||
|
|
|
@ -379,8 +379,7 @@ _drop_glyphs_ref(const void *container EINA_UNUSED, void *data, void *fdata)
|
|||
Evas_Font_Array_Data *fad = data;
|
||||
Evas_Public_Data *pd = fdata;
|
||||
|
||||
if (fad->glyphs)
|
||||
evas_common_font_glyphs_unref(fad->glyphs);
|
||||
evas_common_font_glyphs_unref(fad->glyphs);
|
||||
eina_array_pop(&pd->glyph_unref_queue);
|
||||
|
||||
return EINA_TRUE;
|
||||
|
@ -554,12 +553,10 @@ evas_object_textgrid_render(Evas_Object *eo_obj EINA_UNUSED,
|
|||
|
||||
props = &text->text_props;
|
||||
evas_common_font_draw_prepare(props);
|
||||
if (props->glyphs)
|
||||
{
|
||||
evas_common_font_glyphs_ref(props->glyphs);
|
||||
evas_unref_queue_glyph_put(obj->layer->evas,
|
||||
props->glyphs);
|
||||
}
|
||||
|
||||
evas_common_font_glyphs_ref(props->glyphs);
|
||||
evas_unref_queue_glyph_put(obj->layer->evas,
|
||||
props->glyphs);
|
||||
|
||||
fad = eina_inarray_grow(texts->array, 1);
|
||||
if (!fad)
|
||||
|
|
|
@ -66,8 +66,6 @@ static const struct ext_loader_s loaders[] =
|
|||
|
||||
MATCHING(".dds", "dds"),
|
||||
|
||||
MATCHING(".jxl", "jxl"),
|
||||
|
||||
MATCHING(".avif", "avif"),
|
||||
MATCHING(".avifs", "avif"),
|
||||
|
||||
|
@ -195,7 +193,7 @@ static const struct ext_loader_s loaders[] =
|
|||
static const char *loaders_name[] =
|
||||
{ /* in order of most likely needed */
|
||||
"png", "jpeg", "eet", "xpm", "tiff", "gif", "svg", "webp", "pmaps",
|
||||
"bmp", "tga", "wbmp", "ico", "psd", "jp2k", "dds", "jxl", "avif", "heif",
|
||||
"bmp", "tga", "wbmp", "ico", "psd", "jp2k", "dds", "avif", "heif",
|
||||
"generic"
|
||||
};
|
||||
|
||||
|
|
|
@ -35,8 +35,6 @@ evas_common_save_image_to_file(RGBA_Image *im, const char *file, const char *key
|
|||
saver = "tgv";
|
||||
if (!strcasecmp(p, "avif"))
|
||||
saver = "avif";
|
||||
if (!strcasecmp(p, "jxl"))
|
||||
saver = "jxl";
|
||||
}
|
||||
|
||||
if (saver)
|
||||
|
|
|
@ -206,7 +206,6 @@ EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, heif);
|
|||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, ico);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, jpeg);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, jp2k);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, jxl);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, pmaps);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, png);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_loader, psd);
|
||||
|
@ -228,7 +227,6 @@ EVAS_EINA_STATIC_MODULE_DEFINE(vg_saver, svg);
|
|||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, avif);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, eet);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, jpeg);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, jxl);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, png);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, tiff);
|
||||
EVAS_EINA_STATIC_MODULE_DEFINE(image_saver, webp);
|
||||
|
@ -322,9 +320,6 @@ static const struct {
|
|||
#ifdef EVAS_STATIC_BUILD_JP2K
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, jp2k),
|
||||
#endif
|
||||
#ifdef EVAS_STATIC_BUILD_JXL
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, jxl),
|
||||
#endif
|
||||
#ifdef EVAS_STATIC_BUILD_PMAPS
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_loader, pmaps),
|
||||
#endif
|
||||
|
@ -374,9 +369,6 @@ static const struct {
|
|||
#ifdef EVAS_STATIC_BUILD_JPEG
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_saver, jpeg),
|
||||
#endif
|
||||
#ifdef EVAS_STATIC_BUILD_JXL
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_saver, jxl),
|
||||
#endif
|
||||
#ifdef EVAS_STATIC_BUILD_PNG
|
||||
EVAS_EINA_STATIC_MODULE_USE(image_saver, png),
|
||||
#endif
|
||||
|
|
|
@ -12,8 +12,6 @@ webpdemux = dependency('libwebpdemux', version: ['>=0.5.0'], required: get_optio
|
|||
libopenjp2 = dependency('libopenjp2', required: get_option('evas-loaders-disabler').contains('jp2k') == false)
|
||||
libavif = dependency('libavif', required: get_option('evas-loaders-disabler').contains('avif') == false, version: '>= 0.8.2')
|
||||
heif= dependency('libheif', required: get_option('evas-loaders-disabler').contains('heif') == false)
|
||||
libjxl = dependency('libjxl', required: get_option('evas-loaders-disabler').contains('jxl') == false, version: '>= 0.6.2')
|
||||
libjxl_threads = dependency('libjxl_threads', required: get_option('evas-loaders-disabler').contains('jxl') == false, version: '>= 0.6.2')
|
||||
|
||||
evas_image_loaders_file = [
|
||||
['avif', 'shared', [libavif]],
|
||||
|
@ -25,7 +23,6 @@ evas_image_loaders_file = [
|
|||
['ico', 'shared', []],
|
||||
['jpeg', 'static', [jpeg]],
|
||||
['jp2k', 'shared', [libopenjp2]],
|
||||
['jxl', 'shared', [libjxl, libjxl_threads]],
|
||||
['pmaps', 'shared', []],
|
||||
['png', 'static', [png]],
|
||||
['psd', 'shared', []],
|
||||
|
@ -41,7 +38,6 @@ evas_image_savers_file = [
|
|||
['avif', 'shared', [libavif]],
|
||||
['eet', 'static', [eet]],
|
||||
['jpeg', 'static', [jpeg]],
|
||||
['jxl' , 'shared', [libjxl, libjxl_threads]],
|
||||
['png', 'static', [png]],
|
||||
['tgv', 'shared', [rg_etc, lz4]],
|
||||
['tiff', 'shared', [tiff]],
|
||||
|
|
|
@ -331,9 +331,11 @@ _dri3_pixmap_from_fd(Ecore_X_Display *dpy, Ecore_X_Drawable draw, int width, int
|
|||
if (!dpy)
|
||||
return 0;
|
||||
|
||||
c = XGetXCBConnection(dpy);
|
||||
if (!c)
|
||||
return 0;
|
||||
|
||||
pixmap = xcb_generate_id(c);
|
||||
if (!pixmap)
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -173,9 +173,6 @@ _ecore_evas_drm_init(Ecore_Evas *ee, Ecore_Evas_Engine_Drm_Data *edata, const ch
|
|||
if (edata->output) ecore_drm2_output_user_data_set(edata->output, ee);
|
||||
else WRN("Could not find output at %d %d", edata->x, edata->y);
|
||||
|
||||
ecore_drm2_device_preferred_depth_get(edata->dev,
|
||||
&edata->depth, &edata->bpp);
|
||||
|
||||
ecore_event_evas_init();
|
||||
if (!handlers)
|
||||
{
|
||||
|
@ -1020,11 +1017,12 @@ _ecore_evas_new_internal(const char *device, int x, int y, int w, int h, Eina_Bo
|
|||
edata->once = EINA_TRUE;
|
||||
edata->offset = 0.0;
|
||||
}
|
||||
|
||||
edata->x = x;
|
||||
edata->y = y;
|
||||
edata->w = w;
|
||||
edata->h = h;
|
||||
edata->depth = 24; // FIXME: Remove hardcode
|
||||
edata->bpp = 32; // FIXME: Remove hardcode
|
||||
edata->format = DRM_FORMAT_XRGB8888;
|
||||
|
||||
if (_ecore_evas_drm_init(ee, edata, device) < 1)
|
||||
|
|
|
@ -4038,10 +4038,7 @@ _force_stop_self_dnd(Ecore_Evas *ee)
|
|||
//Selection buffer is freed as a response to the FINISHED event.
|
||||
ecore_x_pointer_ungrab();
|
||||
ecore_x_dnd_self_drop();
|
||||
if ((!ee->func.fn_dnd_drop) &&
|
||||
(!ee->func.fn_dnd_state_change) &&
|
||||
(!ee->func.fn_dnd_motion))
|
||||
ecore_x_dnd_aware_set(ee->prop.window, EINA_FALSE);
|
||||
ecore_x_dnd_aware_set(ee->prop.window, EINA_FALSE);
|
||||
ecore_event_handler_del(edata->mouse_up_handler);
|
||||
edata->mouse_up_handler = NULL;
|
||||
|
||||
|
@ -4451,22 +4448,11 @@ static void
|
|||
_x11_drag_move(void *data, Ecore_X_Xdnd_Position *pos)
|
||||
{
|
||||
Ecore_Evas *ee = data;
|
||||
Eina_Size2D offset;
|
||||
|
||||
Eina_Rect rect;
|
||||
|
||||
ecore_evas_geometry_get(ee->drag.rep, &rect.x, &rect.y, &rect.w, &rect.h);
|
||||
|
||||
if (ee->drag.offset.w == INT_MAX)
|
||||
offset.w = rect.size.w / -2;
|
||||
else
|
||||
offset.w = ee->drag.offset.w;
|
||||
|
||||
if (ee->drag.offset.h == INT_MAX)
|
||||
offset.h = rect.size.h / -2;
|
||||
else
|
||||
offset.h = ee->drag.offset.h;
|
||||
|
||||
ecore_evas_move(ee->drag.rep, pos->position.x + offset.w, pos->position.y + offset.h);
|
||||
ecore_evas_move(ee->drag.rep, pos->position.x - rect.w / 2, pos->position.y - rect.h/2);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
|
|
|
@ -1,521 +0,0 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <jxl/decode.h>
|
||||
#include <jxl/resizable_parallel_runner.h>
|
||||
|
||||
#include <Ecore.h>
|
||||
#include "Evas_Loader.h"
|
||||
#include "evas_common_private.h"
|
||||
|
||||
typedef struct _Evas_Loader_Internal Evas_Loader_Internal;
|
||||
struct _Evas_Loader_Internal
|
||||
{
|
||||
Eina_File *f;
|
||||
Evas_Image_Load_Opts *opts;
|
||||
Evas_Image_Animated *animated;
|
||||
JxlParallelRunner *runner;
|
||||
JxlDecoder *decoder;
|
||||
double duration;
|
||||
};
|
||||
|
||||
static int _evas_loader_jxl_log_dom = -1;
|
||||
|
||||
#ifdef ERR
|
||||
# undef ERR
|
||||
#endif
|
||||
#define ERR(...) EINA_LOG_DOM_ERR(_evas_loader_jxl_log_dom, __VA_ARGS__)
|
||||
|
||||
#ifdef WRN
|
||||
# undef WRN
|
||||
#endif
|
||||
#define WRN(...) EINA_LOG_DOM_WARN(_evas_loader_jxl_log_dom, __VA_ARGS__)
|
||||
|
||||
#ifdef INF
|
||||
# undef INF
|
||||
#endif
|
||||
#define INF(...) EINA_LOG_DOM_INFO(_evas_loader_jxl_log_dom, __VA_ARGS__)
|
||||
|
||||
void _rgba_to_bgra(void *pixels, int size /* in pixels */)
|
||||
{
|
||||
unsigned long long int *iter = pixels;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < (size >> 1); i++, iter++)
|
||||
{
|
||||
*iter =
|
||||
/* we keep A and G */
|
||||
(*iter & 0xff00ff00ff00ff00) |
|
||||
/* we shift R */
|
||||
((*iter & 0x000000ff000000ff) << 16) |
|
||||
/* we shift B */
|
||||
((*iter & 0x00ff000000ff0000) >> 16);
|
||||
}
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
evas_image_load_file_head_jxl_internal(Evas_Loader_Internal *loader,
|
||||
Emile_Image_Property *prop,
|
||||
void *map, size_t length,
|
||||
int *error)
|
||||
{
|
||||
Evas_Image_Animated *animated;
|
||||
JxlBasicInfo basic_info;
|
||||
JxlFrameHeader frame_header;
|
||||
JxlDecoder *decoder;
|
||||
JxlDecoderStatus s;
|
||||
JxlDecoderStatus st;
|
||||
uint32_t frame_count = 0;
|
||||
Eina_Bool ret;
|
||||
|
||||
animated = loader->animated;
|
||||
|
||||
ret = EINA_FALSE;
|
||||
prop->w = 0;
|
||||
prop->h = 0;
|
||||
prop->alpha = EINA_FALSE;
|
||||
|
||||
decoder = JxlDecoderCreate(NULL);
|
||||
if (!decoder)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||
return ret;
|
||||
}
|
||||
|
||||
JxlDecoderSetKeepOrientation(decoder, JXL_TRUE);
|
||||
|
||||
st = JxlDecoderSubscribeEvents(decoder,
|
||||
JXL_DEC_BASIC_INFO |
|
||||
JXL_DEC_FRAME);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not subscribe to JXL events");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto destroy_decoder;
|
||||
}
|
||||
|
||||
st = JxlDecoderSetInput(decoder, map, length);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not set JXL input");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto destroy_decoder;
|
||||
}
|
||||
|
||||
JxlDecoderCloseInput(decoder);
|
||||
|
||||
/* First, JXL_DEC_BASIC_INFO event */
|
||||
st = JxlDecoderProcessInput(decoder);
|
||||
if (st != JXL_DEC_BASIC_INFO)
|
||||
{
|
||||
ERR("Can not set JXL input (JXL_DEC_BASIC_INFO): %d", st);
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto release_input;
|
||||
}
|
||||
|
||||
s = JxlDecoderGetBasicInfo(decoder, &basic_info);
|
||||
if (s != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not retrieve basic info");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto release_input;
|
||||
}
|
||||
|
||||
prop->w = basic_info.xsize;
|
||||
prop->h = basic_info.ysize;
|
||||
/* if size is invalid, we exit */
|
||||
if ((prop->w < 1) ||
|
||||
(prop->h < 1) ||
|
||||
(prop->w > IMG_MAX_SIZE) ||
|
||||
(prop->h > IMG_MAX_SIZE) ||
|
||||
IMG_TOO_BIG(prop->w, prop->h))
|
||||
{
|
||||
if (IMG_TOO_BIG(prop->w, prop->h))
|
||||
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||
else
|
||||
*error= EVAS_LOAD_ERROR_GENERIC;
|
||||
goto release_input;
|
||||
}
|
||||
|
||||
prop->alpha = (basic_info.alpha_bits != 0);
|
||||
|
||||
/* Then, JXL_DEC_FRAME event */
|
||||
|
||||
if (basic_info.have_animation)
|
||||
{
|
||||
frame_count = 0;
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
st = JxlDecoderProcessInput(decoder);
|
||||
if (st == JXL_DEC_FRAME)
|
||||
{
|
||||
JxlDecoderGetFrameHeader(decoder, &frame_header);
|
||||
frame_count++;
|
||||
if (frame_header.is_last)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Finally, JXL_DEC_SUCCESS event */
|
||||
st = JxlDecoderProcessInput(decoder);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not set JXL input (JXL_DEC_SUCCESS)");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto release_input;
|
||||
}
|
||||
|
||||
if (basic_info.have_animation)
|
||||
{
|
||||
animated->loop_hint = basic_info.animation.num_loops ? EVAS_IMAGE_ANIMATED_HINT_NONE : EVAS_IMAGE_ANIMATED_HINT_LOOP;
|
||||
animated->frame_count = frame_count;
|
||||
animated->loop_count = basic_info.animation.num_loops;
|
||||
animated->animated = EINA_TRUE;
|
||||
loader->duration = ((double)frame_header.duration * (double)basic_info.animation.tps_denominator) / (double)basic_info.animation.tps_numerator;
|
||||
}
|
||||
|
||||
*error = EVAS_LOAD_ERROR_NONE;
|
||||
ret = EINA_TRUE;
|
||||
|
||||
release_input:
|
||||
JxlDecoderReleaseInput(decoder);
|
||||
destroy_decoder:
|
||||
JxlDecoderDestroy(decoder);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
evas_image_load_file_data_jxl_internal(Evas_Loader_Internal *loader,
|
||||
Emile_Image_Property *prop,
|
||||
void *pixels,
|
||||
void *map, size_t length,
|
||||
int *error)
|
||||
{
|
||||
Evas_Image_Animated *animated;
|
||||
JxlParallelRunner *runner;
|
||||
JxlDecoder *decoder;
|
||||
JxlPixelFormat pixel_format;
|
||||
JxlDecoderStatus st;
|
||||
size_t buffer_size;
|
||||
Eina_Bool ret = EINA_FALSE;
|
||||
|
||||
animated = loader->animated;
|
||||
|
||||
runner = loader->runner;
|
||||
decoder = loader->decoder;
|
||||
if (!runner || !decoder)
|
||||
{
|
||||
runner = JxlResizableParallelRunnerCreate(NULL);
|
||||
if (!runner)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
decoder = JxlDecoderCreate(NULL);
|
||||
if (!decoder)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
st = JxlDecoderSetParallelRunner(decoder,
|
||||
JxlResizableParallelRunner,
|
||||
runner);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not set JXL runner");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
JxlResizableParallelRunnerSetThreads(runner,
|
||||
JxlResizableParallelRunnerSuggestThreads(prop->w, prop->h));
|
||||
|
||||
JxlDecoderSetKeepOrientation(decoder, JXL_TRUE);
|
||||
|
||||
st = JxlDecoderSetInput(decoder, map, length);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not set JXL input");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
JxlDecoderCloseInput(decoder);
|
||||
|
||||
st = JxlDecoderSubscribeEvents(decoder,
|
||||
JXL_DEC_FULL_IMAGE);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not subscribe to JXL events");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
}
|
||||
|
||||
pixel_format.num_channels = 4;
|
||||
pixel_format.data_type = JXL_TYPE_UINT8;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
pixel_format.endianness = JXL_BIG_ENDIAN;
|
||||
#else
|
||||
pixel_format.endianness = JXL_LITTLE_ENDIAN;
|
||||
#endif
|
||||
pixel_format.align = 0;
|
||||
|
||||
if (animated->animated)
|
||||
{
|
||||
/*
|
||||
* According to the libjxl devsn there is a better way than
|
||||
* JxlDecoderSkipFrames(), but i can't...
|
||||
*/
|
||||
JxlDecoderSkipFrames(decoder, animated->cur_frame);
|
||||
}
|
||||
|
||||
st = JxlDecoderProcessInput(decoder);
|
||||
if (animated->animated)
|
||||
{
|
||||
if (st == JXL_DEC_SUCCESS)
|
||||
goto on_success;
|
||||
}
|
||||
|
||||
if (st != JXL_DEC_NEED_IMAGE_OUT_BUFFER)
|
||||
{
|
||||
ERR("Can not process JXL_DEC_NEED_IMAGE_OUT_BUFFER events (st=%d)", st);
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
st = JxlDecoderImageOutBufferSize(decoder,
|
||||
&pixel_format,
|
||||
&buffer_size);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("JxlDecoderImageOutBufferSize failed");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
if (buffer_size != (size_t)(prop->w * prop->h * 4))
|
||||
{
|
||||
ERR("buffer size does not match image size");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
st = JxlDecoderSetImageOutBuffer(decoder,
|
||||
&pixel_format,
|
||||
pixels,
|
||||
buffer_size);
|
||||
if (st != JXL_DEC_SUCCESS)
|
||||
{
|
||||
ERR("Can not set image output buffer");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
st = JxlDecoderProcessInput(decoder);
|
||||
if (st != JXL_DEC_FULL_IMAGE)
|
||||
{
|
||||
ERR("Can not process JXL_DEC_FULL_IMAGE events");
|
||||
*error = EVAS_LOAD_ERROR_GENERIC;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
_rgba_to_bgra(pixels, prop->w * prop->h);
|
||||
|
||||
on_success:
|
||||
*error = EVAS_LOAD_ERROR_NONE;
|
||||
ret = EINA_TRUE;
|
||||
|
||||
on_error:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void *
|
||||
evas_image_load_file_open_jxl(Eina_File *f, Eina_Stringshare *key EINA_UNUSED,
|
||||
Evas_Image_Load_Opts *opts,
|
||||
Evas_Image_Animated *animated,
|
||||
int *error)
|
||||
{
|
||||
Evas_Loader_Internal *loader;
|
||||
|
||||
loader = calloc(1, sizeof (Evas_Loader_Internal));
|
||||
if (!loader)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
loader->f = f;
|
||||
loader->opts = opts;
|
||||
loader->animated = animated;
|
||||
|
||||
return loader;
|
||||
}
|
||||
|
||||
static void
|
||||
evas_image_load_file_close_jxl(void *loader_data)
|
||||
{
|
||||
Evas_Loader_Internal *loader;
|
||||
|
||||
loader = loader_data;
|
||||
if (loader->decoder)
|
||||
{
|
||||
JxlDecoderReleaseInput(loader->decoder);
|
||||
JxlDecoderDestroy(loader->decoder);
|
||||
/* if decoder is valid, runner is necessarly valid */
|
||||
JxlResizableParallelRunnerDestroy(loader->runner);
|
||||
}
|
||||
free(loader_data);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
evas_image_load_file_head_jxl(void *loader_data,
|
||||
Evas_Image_Property *prop,
|
||||
int *error)
|
||||
{
|
||||
Evas_Loader_Internal *loader = loader_data;
|
||||
Eina_File *f;
|
||||
void *map;
|
||||
Eina_Bool val;
|
||||
|
||||
f = loader->f;
|
||||
|
||||
map = eina_file_map_all(f, EINA_FILE_RANDOM);
|
||||
if (!map)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_DOES_NOT_EXIST;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
val = evas_image_load_file_head_jxl_internal(loader,
|
||||
(Emile_Image_Property *)prop,
|
||||
map, eina_file_size_get(f),
|
||||
error);
|
||||
|
||||
eina_file_map_free(f, map);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
evas_image_load_file_data_jxl(void *loader_data,
|
||||
Evas_Image_Property *prop,
|
||||
void *pixels,
|
||||
int *error)
|
||||
{
|
||||
Evas_Loader_Internal *loader;
|
||||
Eina_File *f;
|
||||
void *map;
|
||||
Eina_Bool val = EINA_FALSE;
|
||||
|
||||
loader = (Evas_Loader_Internal *)loader_data;
|
||||
f = loader->f;
|
||||
|
||||
map = eina_file_map_all(f, EINA_FILE_WILLNEED);
|
||||
if (!map)
|
||||
{
|
||||
*error = EVAS_LOAD_ERROR_DOES_NOT_EXIST;
|
||||
goto on_error;
|
||||
}
|
||||
|
||||
val = evas_image_load_file_data_jxl_internal(loader,
|
||||
(Emile_Image_Property *)prop,
|
||||
pixels,
|
||||
map, eina_file_size_get(f),
|
||||
error);
|
||||
|
||||
eina_file_map_free(f, map);
|
||||
|
||||
on_error:
|
||||
return val;
|
||||
}
|
||||
|
||||
static double
|
||||
evas_image_load_frame_duration_jxl(void *loader_data,
|
||||
int start_frame,
|
||||
int frame_num)
|
||||
{
|
||||
Evas_Loader_Internal *loader;
|
||||
Evas_Image_Animated *animated;
|
||||
|
||||
loader = (Evas_Loader_Internal *)loader_data;
|
||||
animated = loader->animated;
|
||||
|
||||
if (!animated->animated)
|
||||
return -1.0;
|
||||
|
||||
if (frame_num < 0)
|
||||
return -1.0;
|
||||
|
||||
if ((start_frame + frame_num) > animated->frame_count)
|
||||
return -1.0;
|
||||
|
||||
if (frame_num < 1)
|
||||
frame_num = 1;
|
||||
|
||||
return loader->duration;
|
||||
}
|
||||
|
||||
static Evas_Image_Load_Func evas_image_load_jxl_func =
|
||||
{
|
||||
EVAS_IMAGE_LOAD_VERSION,
|
||||
evas_image_load_file_open_jxl,
|
||||
evas_image_load_file_close_jxl,
|
||||
evas_image_load_file_head_jxl,
|
||||
NULL,
|
||||
evas_image_load_file_data_jxl,
|
||||
evas_image_load_frame_duration_jxl,
|
||||
EINA_TRUE,
|
||||
EINA_FALSE
|
||||
};
|
||||
|
||||
static int
|
||||
module_open(Evas_Module *em)
|
||||
{
|
||||
if (!em) return 0;
|
||||
|
||||
_evas_loader_jxl_log_dom = eina_log_domain_register("evas-jxl", EINA_COLOR_BLUE);
|
||||
if (_evas_loader_jxl_log_dom < 0)
|
||||
{
|
||||
EINA_LOG_ERR("Can not create a module log domain.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
em->functions = (void *)(&evas_image_load_jxl_func);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
module_close(Evas_Module *em EINA_UNUSED)
|
||||
{
|
||||
if (_evas_loader_jxl_log_dom >= 0)
|
||||
{
|
||||
eina_log_domain_unregister(_evas_loader_jxl_log_dom);
|
||||
_evas_loader_jxl_log_dom = -1;
|
||||
}
|
||||
}
|
||||
|
||||
static Evas_Module_Api evas_modapi =
|
||||
{
|
||||
EVAS_MODULE_API_VERSION,
|
||||
"jxl",
|
||||
"none",
|
||||
{
|
||||
module_open,
|
||||
module_close
|
||||
}
|
||||
};
|
||||
|
||||
EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_IMAGE_LOADER, image_loader, jxl);
|
||||
|
||||
#ifndef EVAS_STATIC_BUILD_JXL
|
||||
EVAS_EINA_MODULE_DEFINE(image_loader, jxl);
|
||||
#endif
|
|
@ -596,17 +596,6 @@ evas_image_load_file_head_with_data_png(void *loader_data,
|
|||
}
|
||||
free(pixels2);
|
||||
|
||||
if ((epi.hasa) && (pack_offset == sizeof(DATA32)))
|
||||
{
|
||||
DATA32 *dst_ptr = (DATA32 *) surface;
|
||||
int total = w * h;
|
||||
|
||||
for (i = 0; i < total; i++)
|
||||
{
|
||||
if (A_VAL(dst_ptr) == 0) *dst_ptr = 0;
|
||||
dst_ptr++;
|
||||
}
|
||||
}
|
||||
prop->info.premul = EINA_TRUE;
|
||||
|
||||
*error = EVAS_LOAD_ERROR_NONE;
|
||||
|
@ -893,17 +882,6 @@ evas_image_load_file_data_png(void *loader_data,
|
|||
}
|
||||
}
|
||||
|
||||
if ((epi.hasa) && (pack_offset == sizeof(DATA32)))
|
||||
{
|
||||
DATA32 *dst_ptr = (DATA32 *) surface;
|
||||
int total = w * h;
|
||||
|
||||
for (i = 0; i < total; i++)
|
||||
{
|
||||
if (A_VAL(dst_ptr) == 0) *dst_ptr = 0;
|
||||
dst_ptr++;
|
||||
}
|
||||
}
|
||||
prop->info.premul = EINA_TRUE;
|
||||
|
||||
*error = EVAS_LOAD_ERROR_NONE;
|
||||
|
|
|
@ -457,28 +457,22 @@ psd_get_data(PSD_Header *head,
|
|||
{
|
||||
for (x = 0; x < pixels_count; x++)
|
||||
{
|
||||
buffer[x * 4 + 0] = data[(x * 3) + 2];
|
||||
buffer[x * 4 + 1] = data[(x * 3) + 1];
|
||||
buffer[x * 4 + 2] = data[(x * 3) + 0];
|
||||
buffer[x * 4 + 0] = data[x * 3 + 2];
|
||||
buffer[x * 4 + 1] = data[x * 3 + 1];
|
||||
buffer[x * 4 + 2] = data[x * 3 + 0];
|
||||
buffer[x * 4 + 3] = 255;
|
||||
}
|
||||
}
|
||||
else if (bpp == 4)
|
||||
{
|
||||
// BRGA to RGBA
|
||||
for (x= 0; x < pixels_count; x++)
|
||||
{
|
||||
buffer[x * 4 + 0] = data[(x * 4) + 2];
|
||||
buffer[x * 4 + 1] = data[(x * 4) + 1];
|
||||
buffer[x * 4 + 2] = data[(x * 4) + 0];
|
||||
buffer[x * 4 + 3] = data[(x * 4) + 3];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// can;'t handle non rgb formats
|
||||
*error = EVAS_LOAD_ERROR_UNKNOWN_FORMAT;
|
||||
goto file_read_error;
|
||||
// BRGA to RGBA
|
||||
for (x= 0; x < pixels_count; x++)
|
||||
{
|
||||
buffer[x * 4 + 0] = data[x * 4 + 2];
|
||||
buffer[x * 4 + 1] = data[x * 4 + 1];
|
||||
buffer[x * 4 + 2] = data[x * 4 + 0];
|
||||
buffer[x * 4 + 3] = data[x * 4 + 3];
|
||||
}
|
||||
}
|
||||
|
||||
free(channel);
|
||||
|
|
|
@ -1,213 +0,0 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <jxl/encode.h>
|
||||
#include <jxl/resizable_parallel_runner.h>
|
||||
|
||||
#include "evas_common_private.h"
|
||||
#include "evas_private.h"
|
||||
|
||||
|
||||
static int
|
||||
save_image_jxl(RGBA_Image *im, const char *file, int quality)
|
||||
{
|
||||
FILE *f;
|
||||
JxlParallelRunner *runner;
|
||||
JxlEncoder *encoder;
|
||||
JxlPixelFormat pixel_format;
|
||||
JxlBasicInfo basic_info;
|
||||
JxlColorEncoding color_encoding;
|
||||
JxlEncoderFrameSettings* frame_settings;
|
||||
JxlEncoderStatus st;
|
||||
JxlEncoderStatus process_result;
|
||||
unsigned char *compressed;
|
||||
unsigned char *next;
|
||||
void *pixels;
|
||||
unsigned long long int *iter_src;
|
||||
unsigned long long int *iter_dst;
|
||||
size_t size;
|
||||
size_t avail;
|
||||
size_t sz;
|
||||
unsigned int i;
|
||||
int ret = 0;
|
||||
|
||||
if (!im || !im->image.data || !file || !*file)
|
||||
return ret;
|
||||
|
||||
f = fopen(file, "wb");
|
||||
if (!f)
|
||||
return ret;
|
||||
|
||||
runner = JxlResizableParallelRunnerCreate(NULL);
|
||||
if (!runner)
|
||||
goto close_f;
|
||||
|
||||
encoder = JxlEncoderCreate(NULL);
|
||||
if (!encoder)
|
||||
goto destroy_runner;
|
||||
|
||||
st = JxlEncoderSetParallelRunner(encoder,
|
||||
JxlResizableParallelRunner,
|
||||
runner);
|
||||
if (st != JXL_ENC_SUCCESS)
|
||||
goto destroy_encoder;
|
||||
|
||||
JxlResizableParallelRunnerSetThreads(runner,
|
||||
JxlResizableParallelRunnerSuggestThreads(im->cache_entry.w, im->cache_entry.h));
|
||||
|
||||
pixel_format.num_channels = 4;
|
||||
pixel_format.data_type = JXL_TYPE_UINT8;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
pixel_format.endianness = JXL_BIG_ENDIAN;
|
||||
#else
|
||||
pixel_format.endianness = JXL_LITTLE_ENDIAN;
|
||||
#endif
|
||||
pixel_format.align = 0;
|
||||
|
||||
JxlEncoderInitBasicInfo(&basic_info);
|
||||
basic_info.xsize = im->cache_entry.w;
|
||||
basic_info.ysize = im->cache_entry.h;
|
||||
basic_info.bits_per_sample = 8;
|
||||
basic_info.exponent_bits_per_sample = 0;
|
||||
basic_info.uses_original_profile = JXL_FALSE;
|
||||
basic_info.num_color_channels = 3;
|
||||
basic_info.num_extra_channels =1;
|
||||
basic_info.alpha_bits = 8;
|
||||
st = JxlEncoderSetBasicInfo(encoder, &basic_info);
|
||||
if (st != JXL_ENC_SUCCESS)
|
||||
goto destroy_encoder;
|
||||
|
||||
memset(&color_encoding, 0, sizeof(JxlColorEncoding));
|
||||
JxlColorEncodingSetToSRGB(&color_encoding,
|
||||
/*is gray ? */
|
||||
pixel_format.num_channels < 3);
|
||||
st = JxlEncoderSetColorEncoding(encoder, &color_encoding);
|
||||
if (st != JXL_ENC_SUCCESS)
|
||||
goto destroy_encoder;
|
||||
|
||||
frame_settings = JxlEncoderFrameSettingsCreate(encoder, NULL);
|
||||
if (!frame_settings)
|
||||
goto destroy_encoder;
|
||||
|
||||
st = JxlEncoderFrameSettingsSetOption(frame_settings,
|
||||
JXL_ENC_FRAME_SETTING_EFFORT,
|
||||
(quality * 7) /100);
|
||||
if (st != JXL_ENC_SUCCESS)
|
||||
goto destroy_encoder;
|
||||
|
||||
/* conversion RGBA --> BGRA */
|
||||
pixels = malloc(4 * im->cache_entry.w * im->cache_entry.h);
|
||||
if (!pixels)
|
||||
goto destroy_encoder;
|
||||
|
||||
iter_src = (unsigned long long int *)im->image.data;
|
||||
iter_dst = (unsigned long long int *)pixels;
|
||||
|
||||
for (i = 0; i < ((im->cache_entry.w * im->cache_entry.h) >> 1); i++, iter_src++, iter_dst++)
|
||||
{
|
||||
*iter_dst =
|
||||
/* we keep A and G */
|
||||
(*iter_src & 0xff00ff00ff00ff00) |
|
||||
/* we shift R */
|
||||
((*iter_src & 0x000000ff000000ff) << 16) |
|
||||
/* we shift B */
|
||||
((*iter_src & 0x00ff000000ff0000) >> 16);
|
||||
}
|
||||
|
||||
st = JxlEncoderAddImageFrame(frame_settings, &pixel_format,
|
||||
(void*)pixels,
|
||||
sizeof(int) * im->cache_entry.w * im->cache_entry.h);
|
||||
if (st != JXL_ENC_SUCCESS)
|
||||
goto free_pixels;
|
||||
|
||||
JxlEncoderCloseInput(encoder);
|
||||
|
||||
size = 64;
|
||||
compressed = (unsigned char *)malloc(size);
|
||||
if (!compressed)
|
||||
goto free_pixels;
|
||||
|
||||
next = compressed;
|
||||
avail = size - (next - compressed);
|
||||
process_result = JXL_ENC_NEED_MORE_OUTPUT;
|
||||
while (process_result == JXL_ENC_NEED_MORE_OUTPUT)
|
||||
{
|
||||
process_result = JxlEncoderProcessOutput(encoder, &next, &avail);
|
||||
if (process_result == JXL_ENC_NEED_MORE_OUTPUT)
|
||||
{
|
||||
size_t offset = next - compressed;
|
||||
size *= 2;
|
||||
compressed = realloc(compressed, size);
|
||||
next = compressed + offset;
|
||||
avail = size - offset;
|
||||
}
|
||||
}
|
||||
size = next - compressed;
|
||||
compressed = realloc(compressed, size);
|
||||
if (process_result != JXL_ENC_SUCCESS)
|
||||
goto free_compressed;
|
||||
|
||||
sz = fwrite(compressed, size, 1, f);
|
||||
if (sz != 1)
|
||||
goto free_compressed;
|
||||
|
||||
ret = 1;
|
||||
|
||||
free_compressed:
|
||||
free(compressed);
|
||||
free_pixels:
|
||||
free(pixels);
|
||||
destroy_encoder:
|
||||
JxlEncoderDestroy(encoder);
|
||||
destroy_runner:
|
||||
JxlResizableParallelRunnerDestroy(runner);
|
||||
close_f:
|
||||
fclose(f);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int evas_image_save_file_jxl(RGBA_Image *im, const char *file, const char *key EINA_UNUSED,
|
||||
int quality, int compress EINA_UNUSED, const char *encoding EINA_UNUSED)
|
||||
{
|
||||
return save_image_jxl(im, file, quality);
|
||||
}
|
||||
|
||||
|
||||
static Evas_Image_Save_Func evas_image_save_jxl_func =
|
||||
{
|
||||
evas_image_save_file_jxl
|
||||
};
|
||||
|
||||
static int
|
||||
module_open(Evas_Module *em)
|
||||
{
|
||||
if (!em) return 0;
|
||||
em->functions = (void *)(&evas_image_save_jxl_func);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
module_close(Evas_Module *em EINA_UNUSED)
|
||||
{
|
||||
}
|
||||
|
||||
static Evas_Module_Api evas_modapi =
|
||||
{
|
||||
EVAS_MODULE_API_VERSION,
|
||||
"jxl",
|
||||
"none",
|
||||
{
|
||||
module_open,
|
||||
module_close
|
||||
}
|
||||
};
|
||||
|
||||
EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_IMAGE_SAVER, image_saver, jxl);
|
||||
|
||||
#ifndef EVAS_STATIC_BUILD_JXL
|
||||
EVAS_EINA_MODULE_DEFINE(image_saver, jxl);
|
||||
#endif
|
Loading…
Reference in New Issue